算法工程师面试之Batch Normalization和 Layer Normalization

绝地灬酷狼 2022-11-28 13:18 182阅读 0赞

0.总结

  • Batch NormalizationLayer Normalization的由来、各自优缺点
  • 二者都志在解决什么问题? => 加速模型收敛
  • 文章来源:CSDN@LawsonAbs

1.Batch Normalization

1.1 背景

在使用梯度下降的时候,我们经常会采取one-example SGD,full-batch SGD,mini-batch SGD的方法来更新参数。但是这些操作会遇到一个问题:随着网络深度的增加,梯度的变化越来越不明显【也就是梯度消失】,梯度消失会让训练一个模型变得十分困难,那么该怎么解决这个问题呢?
有研究人员发现,模型在输入数据的前几层时训练效果还是

有点儿类似于CV中的白化操作【在把数据输入到模型时,进行一系列的处理操作 => 将数据变化成一个标准正态分布】,目的是为了加速收敛。
由这个想法再扩展一点点,那就是如果不仅仅是在输入层把输入数据处理一下,甚至于在每层的数据输入时都处理一下,那么是不是会有更好的效果?基于这个思想,BN出世了。

在这里插入图片描述

1.2 特点

  • BN相当于将神经网络的每一层的输入都做了一次白化
  • BN 的归一化过程是以batch为单位的。

1.2 真正原理

BN算法提出之后,很多人自认为这个算法的有效性就如论文中所述的那样,但事实并非如此,就有学者证明BN有效的原理并不是如原论文所述的那样。这里我也不班门弄斧,有兴趣的同学可以自行查看。

1.3 细节

BatchNorm 就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。那么问题来了:

1.3.1 是不同层之间保持相同的分布?还是对于同层之间不同的batch 保持性相同的分布?

1.3.2 为什么深度神经网络随着网络深度加深,训练起来越困难?收敛越来越慢?

  • Relu激活函数
  • residual network 等等
    都是为了解决上面这个问题提出的

BN 算法是存在问题的,如果再按照变换操作,那么就会变成之前的样子。
γ \gamma γ

1.3.3 对谁做BN?

Batch Normalization is about normalizing the hidden units activation values so that the distribution of these activations remains same during training.

对每个隐层神经元的激活值做BN,它位于 x = w u + B x=wu+B x=wu+B激活值获得之后,非线性函数变换之前。
【首先得清楚深度神经网络的结构是什么样子的?然后才能在这个基础上得到一个清晰的认识】

1.3.4 BN的计算过程是什么样的?

如果激活函数处理完之后,得到的值会迅速改变,从而导致DNN 学习的效率。

Consider we have d number of hidden units in a hidden layer of any Deep neural network.

假设在DNN 的某层有d个神经元。这d个神经元分别得到的激活值拼凑成的向量则是 X = [ x 1 , x 2 , . . . , x d ] X=[x_1,x_2,…,x_d] X=[x1​,x2​,…,xd​]。现在我们使用下面的公式来正则化第k个神经元输出的激活值。
. . . … …

1.3.5 直接BN【其实就是将数据转成标准正态分布】可能会破坏已经学习到的特征。怎么解决这个问题?

1.4 存在的问题

  • BN是按照样本数计算归一化统计量的。 如果样本数少,那么就会导致波动大,效果差。
  • 硬件资源受限,在线学习等等

2. Layer Normalization

我个人是看不起Layer Normalization的,这明明就是一个水文~ 事实也证明:BN的效果要优于LN

BN:它是取不同样本的同一个通道的特征做归一化;
LN:它取的是同一个样本的不同通道(特征)做归一化。 => 根据样本的特征数做归一化。

LN是一个独立于batch size 的算法,所以无论样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。

2.1 细节

2.1.1 将LN用到CNN是具体用在哪一层之后的,或者说哪种层之后?

3.参考文章

发表评论

表情:
评论列表 (有 0 条评论,182人围观)

还没有评论,来说两句吧...

相关阅读