计算机视觉面试考点(7)Batch Normalization

计算机视觉工程师在面试过程中主要考察三个内容:图像处理、机器学习、深度学习。然而,各类资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导令人望而生畏的大部头。为了督促自己学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力做到长期更新。此专栏不求甚解,只追求应付一般面试。希望该专栏羽翼渐丰之日,可以为大家免去寻找资料的劳累。每篇介绍一个知识点,没有先后顺序。想了解什么知识点可以私信或者评论,如果重要而且恰巧我也能学会,会尽快更新。最后,每一个知识点我会参考很多资料。考虑到简洁性,就不引用了。如有冒犯之处,联系我进行删除或者补加引用。在此先提前致歉了!

Batch Normalization
神经网络中的一个层,被称为BN层

原理

训练网络的时候要对数据进行归一化
原因:使输入数据的分布是相同的
分布不相同的话,举个例子:
同样的图像内容,网络对暗一点的和亮一点的图像的理解也就不同了

以上做法只考虑了网络的输入,没有考虑网络中每一层的输入
BN层就是对每一层的分布进行调整

对每一层分布归一化的好处:

  • 加快训练速度。对于每一个神经元来说,每次的分布都类似,那么神经元不用总是大幅度调整去适应不同的输入分布。也就是加快了网络训练速度。
  • 缓解梯度消失。经过BN层的数据会大概率落在sigmoid激活函数导数较大的区域,缓解了梯度消失。
  • 缓解过拟合。因为过拟合往往都是网络为了去拟合偏差较大或者极端的数据。使用BN层后,输入的分布是相似的,所以不容易发生过拟合。
  • 增大学习率。如果每层的分布都不一致,每层需要的学习率也就不同。实际中一般设置一个统一的学习率。如果每层适用的学习率是0.1,0.01,0.001,那我们只能使用0.001去照顾所有的层。如果分布都类似,各层的学习率就不会差距那么大,学习率也就提高了。

在上述的描述中,我一直用的是“类似的分布”而不是“相同的分布”?
如果只做归一化,数据的分布是相同的,那么数据会大概率落在下图所示的sigmoid函数的不严格的线性区间中(红色虚线)。
神经网络是靠激活函数的非线性能力实现强大的表达能力。
如果激活函数类似于线性的,网络会变成线性的,那么神经网络的深度将失去意义。
原因是,线性的表达我们用一层就足够了呀。
所以我们不能让数据大概率落在红色虚线部分。
在这里插入图片描述
所以,我们对归一化的数据进行一个简单的变换。
使其分布发生微小的变化,不完全落在红色虚线中。
有人觉得,跌跌撞撞又回到了原点?
可以认为,这个变换是对归一化过于粗暴的弥补。

最后,算法流程如下图:

  1. 计算一个batch的均值
  2. 计算一个batch的方差
  3. 数据归一化
  4. 归一化数据的变换,其中两个参数是可学习的

在这里插入图片描述

细节

BN是针对每一个神经元的
我们看第t层的最左侧神经元
它接收了4个输入,x1,x2,x3,x4
BN是针对这4个数据操作的,和其余神经元接收的数据没有关系
在这里插入图片描述

测试如何使用?
测试的时候常常使用一个样本
一个样本无法计算均值、方差,就不用谈BN了
解决方法:
每个batch,记录均值和方差
所有数据训练完成后,利用记录的均值和方差计算数据总体的均值和方差
新的均值和方差在测试过程中保持不变
公式如下:
在这里插入图片描述
改变分布的变换参数是训练中学习到的,就不用再考虑了

公式的变化?
看别的博客可能会看到这个公式
在这里插入图片描述
和算法流程中的最终公式不同,其实就是把归一化的过程融合进来了
将算法中的公式3和公式4联立即可

拓展

讲BN通常结合sigmoid函数,是因为BN很适合sigmoid函数
当然也适用于别的激活函数,具体情况具体分析
比如,上述的这一点对于relu激活函数就不适用了
缓解梯度消失。经过BN层的数据会大概率落在sigmoid激活函数导数较大的区域,缓解了梯度消失。
但是分布相似的好处依然适用
看完这篇博客应该可以根据具体的激活函数具体分析了吧?


欢迎讨论 欢迎吐槽

发布了44 篇原创文章 · 获赞 162 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39417323/article/details/105565044