李沐pytorch学习-BatchNormalization

一、意义

        在使用较深的网络时,BatchNormalization(批量归一化)几乎是必需的,可以加速收敛。

         对于图1所示的全连接层神经网络,输出节点O_0的GroundTruth为R_0,损失函数为L\left(x\right),则损失对权重w_1的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_1}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial w_1}

更新权重w_0的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_0}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial H_0}\cdot\frac{\partial H_0}{\partial w_0}

图1. 网络结构

如果该网络有5个隐含层,那么更新底层权重w_0的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_0}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial H_4}\cdot\frac{\partial H_4}{\partial H_3}\cdot\frac{\partial H_3}{\partial H_2}\cdot\frac{\partial H_2}{\partial H_1}\cdot\frac{\partial H_1}{\partial H_0}\cdot\frac{\partial H_0}{\partial w_0}

        从上面的推导可知,如果网络非常深,那么更新底层权重的梯度后面会乘很多偏导数,而偏导数一般比较小,小于1,所以网络底层的梯度会非常小,从而权重更新很慢,造成底层训练速度慢。

        而底层权重一旦改变,顶层权重也需要跟着改变,因此造成收敛变慢,网络训练速度慢。

         解决这个问题的思路为在学习网络底层时避免变化网络顶层

 二、定义

        计算主要涉及如下公式:

{x_i}'=\gamma \frac{x_i-\mu}{\sigma}+\beta                         \gamma ,\beta 为可学习的参数,对应新的方差和均值。

        其中:

B=\left \{ x_0,x_1,...,x_{N-1} \right \}\\ \mu =\frac{1}{N}\sum \limits_{i=0 }^{N-1}x_i\\ \sigma^2=\frac{1}{N}\sum \limits_{i=0}^{N-1}\left ( x_i-\mu \right )^2+\epsilon\epsilon 是一个很小的数,用于防止分母为零

三、用法

可用位置:

# 全连接层和卷积层的输出上,激活函数前

# 全连接层和卷积层的输入上

对于全连接层,作用在特征维,即B=\left \{ x_1,x_2,...,x_N\right\}

对于卷积层,作用在通道维

四、总结

# 最好不要与DropOut组合使用

# 可以加速收敛,一般不会增加正确率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值