Batch Norm 与 Group Norm

假设没有归一化操作:神经网络的每层输入数据分布是不断变化的,参数需要重新学习来适应这种分布,降低学习速度。

对于sigmoid或tanh激活函数,输入数据过大或过小容易落入饱和区导致梯度消失。

归一化操作:h=f\left(\mathbf{g} \cdot \frac{\mathbf{x}-\mu}{\sigma}+\mathbf{b}\right)

μ是平移参数,σ是缩放参数。得到\hat{\mathbf{x}}=\frac{\mathbf{x}-\mu}{\sigma}得到的数据符合均值为 0、方差为 1 的标准分布。

b是再平移参数,g是再缩放参数。最终得到的数据符合均值为 b 、方差为 g^2 的分布。

第一次的平移缩放可以有效避免梯度消失,但此时模型的非线性学习能力较差,所以经过第二次的平移缩放将数据从线性区映射到非线性区,恢复模型的表达能力。

Batch Norm:

\mu_{i}=\frac{1}{M} \sum x_{i}, \quad \sigma_{i}=\sqrt{\frac{1}{M} \sum\left(x_{i}-\mu_{i}\right)^{2}+\epsilon}    M是mini-batch的大小 

卷积层的输入是三维的(通道数*长*宽),经过m个卷积核,每个卷积核对三维输入进行计算,输出值是二维平面,由于存在m个卷积核,所以输出仍然是三维的:m个通道,每个通道一个二维平面。训练过程中,假设每个batch包含n个训练实例,顺序通过同一个卷积核,则该通道输出n个二维激活平面,每个平面假设5*5,共25个激活值,那么BatchNorm执行的范围就是所有激活平面的所有激活值。

BatchNorm 的操作就是将x转换到固定区间满足标准分布。

mean_value = np.mean(x, axis=0)#求均值
var_value = np.var(x, axis=0)#求方差
x = (x-mean_value)/np.sqrt(var_value+eps)#浮点数,归一化
out = gamma*x + beta

优点 :防止梯度消失,加快模型收敛(导数最大区)

缺点 :Batch太小,BN效果不明显(梯度更新方向不确定)RNN等动态网络(输入序列不定长)使用BN层效果不佳。

Group Norm:

将某一卷积层的输出或者输入通道进行分组,GN在batch size较小的情况下由于BN。

神经网络中数据的维度是[N, C, H, W],即batch size   channels  height  width 

BN在batch的维度上Norm,归一化后的维度[N,H,W]

GN先将channel分成组,对每一组进行归一化。先将feature maps reshape为[N, G, C//G, H, W ] 归一化后为[C//G, H, W]

def GroupNorm(x, gamma, beta, G, eps=1e-5):
    N, C, H, W = x.shape
    x = tf.reshape(x, [N, G, C//G, H, W])
    mean, var = tf.nn.moments(x, [2,3,4], keepdims=True)
    x = (x-mean)/tf.sqrt(var+eps)
    x = tf.reshape(x, [N,C,H,W])
    return x*gamma + beta

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值