Batch Normalization做了什么?
在数据在最初进来的时候,都希望是(IID)独立同分布的。
但是batch Normalization的作者觉得不够,应该在deep learning中的每层都进行一次处理,保证在每层都是同分布。
他是这么想的:假设网络有n层,网络正在训练,还没有收敛。这时候被输入,经过了第一层,但是第一层还没有学到正确的weight,所以经过weight的矩阵乘法后,第二层的数会不会很乱?会不会第二层有些节点值是个位数,有些节点值蹦到好几百?细想一下,确实挺有可能啊,内部的参数都是随机初始化的,那蹦啥结果确实不好说啊。然后恐怖的事情来了,第二层这些乱蹦的数,又输到了第三层,那第三层的输入就是乱蹦的数,输出当然好不了,以此类推。
所以主要产生了两个问题:
1.所以在前面的网络没有收敛的时候,后面的网络其实并学不到什么。(一栋大楼底部都是晃的,那上面也好不了。所以必须要等前面的层收敛后,后面层的训练才有效果。)
2.因为一般来说网络内部每层都需要加一层激活来增加非线性化嘛,那么如果值比较大,它通过激活以后在S曲线上会比较接近0或1,梯度很小,收敛会很慢。
所以batch Normalization就想在每层都加一个norm进行标准化,让每层
Batch Normalization是一种用于深度学习的技术,旨在加速训练过程,提高模型稳定性。它通过标准化每一层的输出,确保数据在每一层都有相同的分布,均值为0,方差为1。在实际操作中,Batch Norm层插入在隐藏层之间,计算输入的均值和方差,然后进行规范化,同时引入可学习的参数gamma和beta进行尺度调整和偏移,以保留网络学到的特征。此外,它还利用指数移动平均来适应训练过程中的变化,并在推理阶段使用。
最低0.47元/天 解锁文章
1015

被折叠的 条评论
为什么被折叠?



