【cs231n Lesson6】Batch Normalization批量归一化

个人学习笔记
date:2023.01.13

本次没有完全听cs231n,听的云里雾里,本身也不是很喜欢教学的内容形式,但是斯坦佛大佬们每一次提问都很有深度。
参考:

  1. 李沐 动手学深度学习v2 批量归一化
  2. 李宏毅 批量归一化

为什么要引入Batch Normalization

Backpropagation过程中,随着层数的深入,每一层的梯度变得越来越小,就导致上层的参数更新速度快,下层的梯度更新速度慢。但下层表现的是底层特征(如边缘、纹理等),而上层表现得则是更具体的特征,下层的更新会导致上层的更新,那么上层更新速度那么快也没什么用。
梯度的不同与每一层的标准差和均值的不同有关,均值越大或标准差越大都会导致该层的参数对损失函数的贡献变大,从而导致梯度变大,反之亦成立。(以上内容为李沐老师课的内容)

【cs231n Lesson6】Batch Normalization批量归一化_第1张图片
又例如,如果输入一个很大,一个很小,那么 w w w的梯度也将不同。上左图中, w 2 w2 w2梯度更大,在梯度下降时,沿着不同方向需要设置不同的learning rates效果才会更好。如果输入相同时,损失图呈一个正圆型,这时候梯度下降设置learning rates会更容易些,也更快收敛。

引入BN,可以使得数据都处在同一个数量级上,使得数据都处在同一分布下,而不至于让数据集中在会让梯度消失或爆炸的范围,防止了梯度消失或梯度爆炸问题。

BN如何表示

公式如下 x i + 1 = γ x i − μ B σ B + β x_{i+1}=\gamma\frac{x_i-\mu_B}{\sigma_B}+\beta xi+1=γσBxiμB+β
其中 μ B = 1 B ∑ i ∈ B x i \mu_B=\frac{1}{B}\sum_{i\in B}x_i μB=B1iBxi σ B = 1 B ∑ i ∈ B ( x i − μ B ) 2 + ϵ \sigma_B=\frac{1}{B}\sum_{i\in B}(x_i-\mu_B)^2+\epsilon σB=B1iB(xiμB)2+ϵ,分别表示偏移和缩放。
γ 和 β \gamma和\beta γβ是可学习参数,其作用在于对该分布进行微调或该分布不适合时去学习其他分布,但是它被限制在一定范围内。

BN怎么作用

  • BN作用在FC和卷积层的输出上,则作用在激活函数之前;
  • BN作用在FC和卷积层的输入上
  • 对FC,作用在其特征维上
  • 对卷积层,作用在其通道维上
    比如图像的RGB通道,每一个通道就是一个特征。每一个像素点相当于一个样本。

ps. BN不能作用到small batch上,因为BN使用合适的batch来近似表示整个训练集的mena和std

ps2. BN的反向传播过程,也需要计算 μ B 和 σ B \mu_B和\sigma_B μBσB,因为它们由参数决定,且影响下一层的参数。

BN的好处

  1. 可以设置较大的learning rates
    训练过程中,如果学习率较大,容易出现梯度爆炸现象(既损失函数一直在变化,导致训练无法收敛);如果学习率较低,容易出现梯度消失现象。归一化使得梯度变得稳定,就可以用较大学习率去训练模型。

  2. 解决了梯度消失和爆炸问题

  3. 被参数初始化的影响小

  4. 防止了过拟合

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