【深度学习】归一化方法

深度学习中的归一化方法

综述

归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2018年)。

将输入的图像shape记为[N, C, H, W],这几个方法主要的区别就是在:

  • batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;
  • instanceNorm在图像像素上,对HW做归一化,用在风格化迁移;
  • layerNorm在通道方向上,对CHW归一化,主要对RNN作用明显;
  • GroupNorm将channel分组,然后再做归一化;
  • SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。

在这里插入图片描述

Batch Normalization

首先,在进行训练之前,一般要对数据做归一化,使其分布一致,但是在深度神经网络训练过程中,通常以送入网络的每一个batch训练,这样每个batch具有不同的分布。所以batch normalization就是强行将数据拉回到均值为0,方差为1的正态分布上,这样不仅数据分布一致,而且避免发生梯度消失。
在这里插入图片描述
算法过程:

  • 沿着通道计算每个batch的均值 u u u
  • 沿着通道计算每个batch的方差 σ 2 σ^2 σ2
  • x x x做归一化, x ’ = ( x − u ) σ 2 + ε 2 x’=\frac{(x-u)}{\sqrt[2]{σ^2+ε}} x=2σ2+ε (xu)
  • 加入缩放和平移变量 γ γ γ β β β,归一化后的值, y = γ ∗ x ’ + β y=γ*x’+β y=γx+β

加入缩放平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。

import numpy as np

def Batchnorm(x, gamma, beta, bn_param):
    # x_shape:[B, C, H, W]
    results = 0
    eps = 1e-5

    x_mean = np.mean(x, axis=(0, 2, 3), keepdims=True)
    x_var = np.var(x, axis=(0, 2, 3), keepdims=True)
    x_normalized = (x - x_mean) / np.sqrt(x_var + eps)
    results = gamma * x_normalized + beta
    
    return results

Instance Normalization

BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布。但是图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化,即对像素进行归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
在这里插入图片描述

def Instancenorm(x, gamma, beta):
    # x_shape:[B, C, H, W]
    results = 0.
    eps = 1e-5

    x_mean = np.mean(x, axis=(2, 3), keepdims=True)
    x_var = np.var(x, axis=(2, 3), keepdims=True0)
    x_normalized = (x - x_mean) / np.sqrt(x_var + eps)
    results = gamma * x_normalized + beta
    
    return results
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值