首页 > 编程知识 正文

bn是谁,bn层训练和测试的区别

时间:2023-05-03 16:37:57 阅读:21414 作者:2857

(一) BN层

PBD视频讲座

电池正常化(bn )层的作用

(1)加快收敛;(2)抑制拟合,可以不使用Dropout和;(3)网络对初始化权重不敏感;(4)允许较大的学习率

链接: https://www.zhi Hu.com/question/38102762/answer/85238569

来源:知乎1. Whatis BN?

俊逸的鸭子,batch normalization,算了,是“批量规范化”吧。 谷歌在ICML中描述了,针对每个SGD,通过mini-batch标准化对应的活动,使得结果(输出信号的各维)的平均值为0,分散值为1。 最后一个“scale and shift”操作被添加到“有意”中,以用于训练(capacity说明:实际上,BN可以被视为对原始模型所做的“新操作”,该新操作很可能会改变某一层的原始输入当然可能不会改变。 不改变的时候是“恢复原来的输入”。 以此方式,如果能够保持改变和原始输入,则模型的容纳能力将得到提高。 )

关于DNN中的归一化,白化(whitening )是众所周知的,但是在模型训练中仅进行白化操作需要太多的计算成本和计算时间。 因此,在本论文中,提出1 )将输入信号的各维度直接正规化(normalizeeachscalarfeatureindependently )这两种简化方式。 2 )每个mini-batch计算的mini-batch mean和variance,而不是整个训练集的mean和variance。 这就是Algorithm 1。

关于DNN中的归一化,白化(whitening )是众所周知的,但是在模型训练中仅进行白化操作需要太多的计算成本和计算时间。 因此,在本论文中,提出1 )将输入信号的各维度直接正规化(normalizeeachscalarfeatureindependently )这两种简化方式。 2 )每个mini-batch计算的mini-batch mean和variance,而不是整个训练集的mean和variance。 这就是Algorithm 1。

33558 www.Sina.com/tobatchnormalize?

如何学习BN参数在此不再赘述,经典的chain rule:http://www.Sina.com/tous EBN?

BN可以应用于网络上的任何活动集。 在CNN中,还特别指出了BN在非线性映射之前的作用,即归一化。 另外,对于CNN的“权重共享”策略,BN也有相应的做法(详见文中第3.2节)。

2. HowBN?

那么,现在正是重头戏。 为什么要用BN? BN work的原因是什么?

毕竟,BN的提出还是为了克服深度神经网络训练难的弊端。 其实BN背后的insight很简单,但在文章中被谷歌复杂化了。

让我们先来谈谈“国际共享偏移”。 文章的title除了BN这样的关键字外,还包括“ICS”。 众所周知,统计机器学习中的一个典型假设是“源空间(source domain )与目标空间(data space )的数据分布(distribution )一致”。 如果不匹配,将出现新的机器学习问题,如传输学习/域自适应。 covariate shift是分布不一致假设下的一个分支问题,这意味着源空间和目标空间条件概率一致,但其边缘概率不同。 也就是说,一切都是.但是,仔细想想,确实对于神经网络各层的输出,由于它们经过了层内操作作用,所以其分布与各层对应的输入信号分布明显不同。 此外,虽然差异随着网络深度的增加而增大,但它们可以“指示”的样本标记(label )不变,这符合covariate shift的定义。 层间信号的分析,也就是“internal”的由来。

那么,你为什么之前说谷歌复杂化了? 其实,如果严格按照解决covariate shift的路线走,可能会进入“importance weight”(ref )等机器学习方法。 然而,Google仅通过“mini-batch使特定层/所有层的输入规范化,从而可以固定每个层的输入信号的平均和方差”就可以解决问题。 如果covariate shift能用这样简单的方法解决,前人的研究也是徒劳的。 另外,请考虑平均方差一致的分布是相同的分布。 当然不是。 很明显,ICS是这个问题的“包装纸”啊。 只是高等级演示。

那个BN到底是什么原理呢? 毕竟关于3. Where梯度方差,我知道一个简单的板栗。 在BN中,通过使活动规范均匀

值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法(见4.2.1节)。

5. When to use BN?
OK,说完BN的优势,自然可以知道什么时候用BN比较好。例如,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。


二:LN层

LN提出:BN针对一个minibatch的输入样本,计算均值和方差,基于计算的均值和方差来对某一层神经网络的输入X中每一个case进行归一化操作。但BN有两个明显不足:1、高度依赖于mini-batch的大小,实际使用中会对mini-Batch大小进行约束,不适合类似在线学习(mini-batch为1)情况;2、不适用于RNN网络中normalize操作:BN实际使用时需要计算并且保存某一层神经网络mini-batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,sequence的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其的sequence长很多,这样training时,计算很麻烦。但LN可以有效解决上面这两个问题。

LN怎么做:

LN是基于BN转化而来的,所以还是先从BN谈起。

对于一个多层前向神经网络中的某一层Hi,计算方式如公式(1)所示:


  针对深度学习,存在“covariate shift”(具体定义见BN介绍文章)现象,因此需要通过normalize操作,使Hi层的输入拥有固定的均值和方差,以此削弱协方差偏移现象对深度网络的训练时的影响,加快网络收敛。normalize的对Hi层输入进行变换,如公式(2)所示:


直接使用公式(2)进行normalize不现实,因为需要针对整个trainingset来进行计算,因此,BN通过mini-batch的输入样本近似的计算normalize中的均值和方差,因此成为batch-Normalization。

与BN不同,LN是针对深度网络的某一层的所有神经元的输入按公式(3)进行normalize操作:


由此可见BN与LN的不同之处在于:LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;而BN中则针对不同神经元输入计算均值和方差,同一个minibatch中的输入拥有相同的均值和方差。因此,LN不依赖于mini-batch的大小和输入sequence的深度,因此可以用于bath-size为1和RNN中对边长的输入sequence的normalize操作。

RNN中的LN操作与公式(3)稍有不同,计算公式如(4)所示:


在传统RNN中,recurrent unit经过累加求和后的输入(summed input)的量级会随着训练进行发生波动,导致梯度爆炸或梯度消失发生。加入LN之后,Normalization term会对summed input的进行尺度变换,使RNN在training和inference时更加稳定。

实践证明,LN用于RNN进行Normalization时,取得了比BN更好的效果。但用于CNN时,效果并不如BN明显。


3:WN层

对深度学习网络权值W进行normalization的操作公式如下:

通过一个标量g和一个向量V对权重向量W进行尺度变换。标量g的值一般为||W||,即权重W的大小。 更新公式如下: 如此便解耦了权重向量的范数和方向,加速了收敛,保证了gradient的稳定,不会爆炸或者消失;同时解决了BN的数据依赖性,计算开销也降低了许多;相比于BN,该方法没能将每一层特征尺度固定住,因此作者设计了一种初始化方法,在初始化时利用了mini-batch的信息,保证了features在初始化时为0均值,1方差。可以通过向量V的大小||V||的变化对权重W进行norm约束,使得网络参数训练相对Learning rate更加鲁棒,即可以选择一个更大的学习速率来加速网络训练。




版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。