BN、Dropout和LN相关

2022-09-22 11:57:15

1. 一句话介绍一下BN

BN是神经网络为了防止梯度消失或梯度爆炸采取的一种策略,可以加快模型收敛,一般放在激活项前。

2. BN的过程可以描述一下吗

输入一个数据集合B,对该数据集合B求其均值和方差,然后对B进行标准化操作,同时BN还有两个可学习的参数r和β,通过这两个参数对标准化后的结果进行一定程度的还原。

公式如下:
在这里插入图片描述
上图红色框里中是标准化公式,说错了哦!!!

3.(BN中)标准化的目的是什么

将数据统一到一个区间内,减少数据的发散,从而加速模型的收敛。
提高训练稳定性。

4. 归一化与标准化

常见的归一化公式为: X n o r m = X − X m i n / X m a x − X m i n X_{norm} = X-X_{min} / X_{max}-X_{min}Xnorm=XXmin/XmaxXmin
标准化公式如问题2所示。

记住上述这俩即可。

5. BN中均值、方差通过哪些维度计算得到

均值与方差的计算类似,这里以均值计算为例:
假设输入数据的维度是[batchsize channel w h]
那么这里就要考虑channel的数量,假设channel有3个,分别为1、2、3标号;batchsize为10。
那么channel 1中的10个数据全部相加然后除以batchsize * w * h
channel 2中的10个数据全部相加然后除以batchsize* w * h
channel 3中的10个数据全部相加然后除以batchsize * w * h。
所以r和β参数的维度其实和channel是一样的,此时为3。

6. 训练与推理时BN中的均值、方差分别是什么

训练时是该batchsize求得的,
推理时是全部批次求得的。


7. Transformer中的LN是什么样子的

首先也是在激活项前进行,先求出一个样本的均值和方差(比如单层隐藏层(Layer)各个神经元的均值与方差),然后执行归一化操作,但这里存在一个gain参数和bias偏置参数,也是学习得到的,用来增强模型表达能力。

公式如下:
在这里插入图片描述

8. Transformer中为什么要舍弃 BN 改用 LN 呢

原始BN是为CNN而设计的,对整个batchsize范围内的数据进行考虑,而对于RNN以及transformer等等处理文本序列信息的模型来说,BN会变得非常复杂,而LN是对单个样本就可以进行处理,更加方便简单,自然选择用LN了;

并且,如果我对两个句子(我爱吃炸鸡,今天很开心)两条数据去做BN,那么效果应该是(我和今)(爱和天)这样进行标准化,这样明显是不make sense的。

9. BN和LN的区别

BN是对batchsize范围内数据进行处理
LN是对单个样本数据进行处理。

10. BN训练时为什么不用全量训练集的均值和方差呢?

在当前batch训练时,是无法得知该batch以外的数据信息的,所以得选择该batch下的样本求得均值与方差。

11. Dropout运行细节?

对于一个普通的DNN来说,
使用Dropout之后,过程变成如下:

  1. 随机临时删除一定比例的隐藏层神经元,其他不变
  2. 前向传播,并且反向传播
  3. 没有被临时删除的神经元进行梯度更新
  4. 重复这个过程。

12. Dropout 在训练和测试时都需要嘛?

Dropout 在训练时采用是为了减少下层的神经元对部分上层神经元的依赖,并且随机失活的过程也类似将多个不同网络结构的模型集成起来,减少过拟合的风险。
而在测试时,应该用整个训练好的模型,因此不需要dropout。

13. Dropout 如何平衡训练和测试时的差异呢?

Dropout ,在训练时以一定的概率使神经元失活实际上就是让对应神经元的输出为0

假设失活概率为 p ,就是这一层中的每个神经元都有p的概率失活,如下图的三层网络结构中,
在这里插入图片描述
如果失活概率为0.5,则平均每一次训练有3个神经元失活,所以输出层每个神经元只有3个输入,而实际测试时是不会有dropout的,输出层每个神经元都有6个输入,这样在训练和测试时,输出层每个神经元的输入和期望的会有量级上的差异。

因此在训练时还要对第二层的输出数据除以(1-p)之后再传给输出层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。

14. BN和Dropout共同使用时会出现的问题

BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。

当dropout在BN之前的时候,我们知道dropout在训练的时候会有随机失活,但是在预测时没有随机失活,为了弥补这个之间的一个gap,在训练的时候会把当前随机失火的这个神经元的一个输出数据进行一定程度的放缩,具体来说是除以一减p,然后当做下一层的一个输入数据,那么因为dropout在BN之前,训练时,BN会基于这些放缩的结果进行参数的学习。而预测时,dropout不进行放缩了,必然会对数据分布等产生一定影响,而此时的BN参数是基于之前放缩结果进行学习的,所以必然对BN会产生一定的影响。(学术界称为’方差偏移’)

所以如果dropout在BN之后,那还是OK的。

15. 为什么BN、LN标准化后要进行参数还原

在这里插入图片描述


  • 作者:Xu_Wave
  • 原文链接:https://blog.csdn.net/qq_22795223/article/details/105896102
    更新时间:2022-09-22 11:57:15