【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(批量归一化)

批量归一化(Batch Normalization)

1.引言

当神经网络比较深的时候,数据在下边损失函数在上边,在梯度自动求导,forward是数据从下一点点往上走,计算backWard是从上往下计算(这里有个问题,梯度在上边的时候会比较大,越往下边就越容易变小),因为上边的梯度比较大,那么每次上边的梯度都会不断去更新,下边的梯度比较小,所以权重的更新的就比较小,上边的会很快收敛,下边的会很慢。那么就会导致,更新下边的内容,它会尝试着去抽取底层的特征(比如局部边缘、简单的纹理信息),上层是一些高层语义的信息。下边一变,上边就要重新训练。底层的信息都变了,那么上边的哪些权重就白学了。在训练持续进行的时候,底部在持续变化的时候,顶部会不停的重新训练,重新去拟合底部变化导致的问题,这个问题会导致收敛比较的慢。
提出问题:我们能不能在学习底部层的时候避免变化顶部层?这里引入批量归一化。
简单总结
1.损失出现在后边,后边的层训练较快
2.数据在底部(①底部的层训练较慢②底部层一变化,所有都得跟着变化③最后的那些层需要学习多次④导致收敛变慢)

2.什么是批量归一化

1.固定小批量里边的均值和方差,然后学习合适的偏移和缩放(原本每一层的方差均值都不相等)
2.可学习的参数为γ核β
3.作用在:①全连接层核卷积层输出上,激活函数前②全连接层核卷积层输入上
4.对全连接层,作用在特征维;对卷积层,作用在通道为(相当于1*1卷积的特征维)
5.它通过在每个小批量里加入噪音来控制模型复杂度(所以没必要跟丢弃法混合使用)

3.总结

1.批量归一化固定小批量里边的均值和方差,然后学习合适的偏移和缩放
2.可以加速收敛速度,但是一般不改变模型精度(可以少学几轮)
批量归一化的优势:
1.不加批量归一化的网络需要慢慢的调整学习率时,网络中加入批量归一化时,可以采用初始化很大的学习率,然后学习率衰减速度也很大,因此这个算法收敛很快。(因为整体的均值和方差都放在差不多的分布里,不会因为学习率太大上边炸,也不会因为学习率太小学不动)
2.Batch Normalization可以大大提高模型训练速度,提高网络泛化性能。
3.数据批量归一化后相当于只使用了S型激活函数的线性部分,可以缓解S型激活函数反向传播中的梯度消失的问题。
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(批量归一化)_第1张图片

【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(批量归一化)_第2张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(批量归一化)_第3张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(批量归一化)_第4张图片

你可能感兴趣的:(深度学习,pytorch)