回首向来萧瑟处,归去,也无风雨也无晴|

【研究生学习】深度学习中常用的Normalization方法与其Pytorch的调用

本篇博客记录一下在深度学习中常用的Batch Normalization和Layer Normalization方法的基本原理,参考的资料的链接如下:
详解深度学习中的Normalization,BN/LN/WN
NLP中 batch normalization与 layer normalization
【深度学习】batch normalization和layer normalization区别
模型优化之Layer Normalization
  独立同分布的数据可以简化常规机器学习模型的训练,提升机器学习模型的预测能力,因此把数据喂给机器学习模型之前,白化是一个重要的数据预处理步骤,其一般包含两个目的,一个是去除特征的相关性,另一个是使得所有特征具有相同的均值和方差

而在深度学习中,神经网络涉及到很多层的叠加,而每一层的参数更新会导致上一层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新,这一现象被称为Internal Covariate Shift。而Normalization方法就是从数据的分布上进行处理,使得每层的输入数据分布范围可控

Batch Normalization

Batch Normalization是对一批样本的同一维度特征做归一化
令batch_size为m,则在一个mini batch中的值为B=x1...m,γ和β是待学习的参数,则整个Batch Normalization的过程计算如下:
输出为:

{yi=BNγ,β(xi)}

mini-batch mean:μB=1mi=1mxi

mini-batch variance:σB2=1mi=1m(xiμB)2

normalize:xi^=xiμBσB2+ϵ

scale and shift:yi=γxi^+β

可见共有两个步骤:

  • 标准化
  • 尺度变换和偏移:获得新的分布yi,均值为β,方差为,这些都是需要学习的参数

Layer Normalization

Layer Normalization是对单个样本的所有维度特征做归一化

Batch Normalization和Layer Normalization的比较

关于Batch Normalization和Layer Normalization的比较(以下简称为BN和LN),下面这张图片是比较经典的:
Batch Normalization和Layer Normalization的比较
其中N是batch size,C是通道数,H,W是特征的空间维度
在NLP中,N可以代表有N句话,C代表一句话的长度,H,W可以代表词向量的维度,假如词向量的维度为100(即立方体的高),batch size为64(即立方体中的N),则BN和LN分别计算如下:

  • BN:固定每句话的第一个位置,则这个切片是(64,100)维度的矩阵
  • LN:固定一句话,则切片是(一个句子的长度,100)维度的矩阵
    BN取出一条(1,64)的向量并进行缩放,LN则取出一条(1,100)的向量进行缩放

BN和LN都可以较好地抑制梯度消失和梯度爆炸的情况,但是BN不适合RNN、Transformer等序列网络

Pytorch调用几种Normalization方法

这里的Pytorch
torch.nn.BatchNorm2d
torch.nn.LayerNorm
torch.nn.InstanceNorm2d

本文作者:Destiny_zxx

本文链接:https://www.cnblogs.com/yuhengz/p/17420888.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Destiny_zxx  阅读(66)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起