Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

神经网络每层的输入分布随着上一层参数的变化而变化,这样细致的初始化参数导致训练时间很长,这种现象为internal covariate shift,作者对训练的每个mini-batch进行Norm解决这个问题。Norm的引入可以用更高的学习率,初始参数不用精细微调,网络不再需要Dropout。

使用mini-batch计算梯度损失能够提升训练的质量,更有效,使用SGD需要细心的调整网络的参数,包括学习率及模型初始值。网络每层输入受上一层参数的影响,网络参数的微小改变将随着网络深度增加放大影响。当网络的输入改变时,既是covariate shift。

固定分布的输入对网络的影响是积极的,如sigmoid激活函数,随着网络加深,梯度变形,网络训练变慢,降低收敛进度,如果网络训练时输入的分布相同,训练就会加速。

Normalization
x为某层输入向量,X为训练数据集,Norm可以表示为变化:
x^=Norm(x,X)
由所有样本X决定,这样计算比较复杂,所以作者使用了mini-batch。

Batch-Norm
对于d维的输入 x=(x(1)...x(d)) ,归一化每一维:
这里写图片描述
为了保证这个变化是唯一性的变化,引入了尺度及平移参数:
y(k)=γ(k)x^(k)+β(k)
使用mini-batch计算的参数用于BP,batch的大小为m的B为:
B=x1...xm
归一化及线性化后的值为 y1...m :
BNγ,β:x1...my1...m
BN变化算法为:
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift_第1张图片

训练时,后向传播梯度损失:

训练BN网络的步骤为:
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift_第2张图片

BN后,某层的BP不受参数的尺度影响,从而对Jacobian和梯度传播没有影响,即,
BN(Wu)=BN((aW)u)

增加BN后与GoogleNet的对比:
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift_第3张图片

你可能感兴趣的:(Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift)