PaPaPaPatrick / NN

0 stars 0 forks source link

Batch Norm 等Normalization方法 #18

Open PaPaPaPatrick opened 1 year ago

PaPaPaPatrick commented 1 year ago

https://www.zhihu.com/question/38102762

数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是Batch Normalization等技术非常流行的原因,它使得可以使用更大的学习率更稳定地进行梯度传播,甚至增加网络的泛化能力。

深度学习中 Batch Normalization为什么效果好? - 龙鹏-笔名言有三的回答 - 知乎 https://www.zhihu.com/question/38102762/answer/607815171 这个答案讲得比较细

综上,归一化数据的目标,是为了让数据的分布变得更加符合期望,增强数据的表达能力。在深度学习中,因为网络的层数非常多,如果数据分布在某一层开始有明显的偏移,随着网络的加深这一问题会加剧(这在BN的文章中被称之为internal covariate shift),进而导致模型优化的难度增加,甚至不能优化。所以,归一化就是要减缓这个问题。

作者:我不坏 链接:https://www.zhihu.com/question/38102762/answer/391649040 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可以看出,与不使用BN相比,每层的反向传播过程的,增加了一个基于标准差的矩阵 1σi\frac{1}{\sigma_i}\frac{1}{\sigma_i} 对权重 WiW_iW_i 进行缩放。所用,重点来了,这样的缩放能够产生什么效果?方法让我们分析一下,如果权重 WiW_iW_i 较小,那必然 WiTHl−1{Wi}^TH{l-1}{Wi}^TH{l-1} 较小,从而使得其标准差 σi\sigma_i\sigma_i 较小,相对的 1σi\frac{1}{\sigma_i}\frac{1}{\sigma_i} 较大,所以 Wi1σiW_i\frac{1}{\sigma_i}W_i\frac{1}{\sigma_i} 相对于原本的 WiW_iW_i 就放大了,避免了梯度的衰减;同样的,如果权重 WiW_iW_i 较大,可以很容易得到 Wi1σiW_i\frac{1}{\sigma_i}W_i\frac{1}{\sigma_i} 相对于原本的 WiW_iW_i 缩小了,避免了梯度的膨胀。于是,加入了BN的反向传播过程中,就不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。而这样带来的好处就是,基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。

PaPaPaPatrick commented 1 year ago

https://zhuanlan.zhihu.com/p/34879333 要缓解ICS的问题,就要明白它产生的原因。ICS产生的原因是由于参数更新带来的网络中每一层输入值分布的改变,并且随着网络层数的加深而变得更加严重,因此我们可以通过固定每一层网络输入值的分布来对减缓ICS问题。 一方面,我们提出的normalization方法要能够简化计算过程;另一方面又需要经过规范化处理后让数据尽可能保留原始的表达能力。于是就有了简化+改进版的白化——Batch Normalization。 在深度学习中,由于采用full batch的训练方式对内存要求较大,且每一轮训练时间过长;我们一般都会采用对数据做划分,用mini-batch对网络进行训练。因此,Batch Normalization也就在mini-batch的基础上进行计算。

通过上面的变换,我们解决了第一个问题,即用更加简化的方式来对数据进行规范化,使得第 层的输入每个特征的分布均值为0,方差为1。

如同上面提到的,Normalization操作我们虽然缓解了ICS问题,让每一层网络的输入数据分布都变得稳定,但却导致了数据表达能力的缺失。也就是我们通过变换操作改变了原有数据的信息表达(representation ability of the network),使得底层网络学习到的参数信息丢失。另一方面,通过让每一层的输入分布均值为0,方差为1,会使得输入在经过sigmoid或tanh激活函数时,容易陷入非线性激活函数的线性区域。

因此,BN又引入了两个可学习(learnable)的参数 与 。这两个参数的引入是为了恢复数据本身的表达能力,对规范化后的数据进行线性变换,即 。特别地,当 时,可以实现等价变换(identity transform)并且保留了原始输入特征的分布信息。

通过上面的步骤,我们就在一定程度上保证了输入数据的表达能力。

以上就是整个Batch Normalization在模型训练中的算法和思路。

PaPaPaPatrick commented 1 year ago

https://blog.csdn.net/litt1e/article/details/105817224

均值的计算,就是在一个批次内,将每个通道中的数字单独加起来,再除以 N×W×H。举个例子:该批次内有10张图片,每张图片有三个通道RBG,每张图片的高、宽是H、W,那么均值就是计算10张图片R通道的像素数值总和除以 10×W×H,再计算B通道全部像素值总和除以10×W×H,最后计算G通道的像素值总和除以10×W×H。方差的计算类似。可训练参数γ , β \gamma,\betaγ,β 的维度等于张量的通道数,在上述例子中,RBG三个通道分别需要一个γ \gammaγ 和一个 β \betaβ ,所以 γ , β \gamma,\betaγ,β 的维度等于3。 ———————————————— 版权声明:本文为CSDN博主「小小小绿叶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/litt1e/article/details/105817224

PaPaPaPatrick commented 1 year ago

https://zhuanlan.zhihu.com/p/54530247 模型优化之Layer Normalization BN并不适用于RNN等动态网络和batchsize较小的时候效果不好。Layer Normalization(LN)[1]的提出有效的解决BN的这两个问题。 BN如右侧所示,它是取不同样本的同一个通道的特征做归一化;LN则是如左侧所示,它取的是同一个样本的不同通道做归一化。LN的做法如图1左侧所示:根据样本的特征数做归一化。

PaPaPaPatrick commented 1 year ago

https://zhuanlan.zhihu.com/p/33173246 详解深度学习中的Normalization,BN/LN/WN

BN 和 LN 是用输入的特征数据的方差对输入数据进行 scale,而 WN 则是用 神经元的权重的欧氏范式对输入数据进行 scale。虽然在原始方法中分别进行的是特征数据规范化和参数的规范化,但本质上都实现了对数据的规范化,只是用于 scale 的参数来源不同。

最后总结了NORM为何有用,感觉说得还是挺好的。