计算机视觉中各种归一化算法

归一化算法是对激活函数的输入进行归一化

将feature map shape设为[N,C,H,W],其中N表示batch size,C表示通道数,H、W分别表示特征图的高度、宽度

Batch Normalization

在batch上,对N、H、W做归一化,保留通道C的维度。对较小的batch size效果不好,BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;

如果把特征图比作一摞书,这螺书总共有N本,每本有C页,每页有H行,每行有W个字符。

BN在求均值时,相当于将这些书按页码一一对应地加起来,再除以每个页码下的字符总数:N\times H\times W,可以将BN看成求“平均书”的操作(“平均书”每页只有一个字)

为什么要进行BN呢?

激活函数会改变各层数据的分布,随着网络的加深,这种差异会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。

BN的主要思想:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,使数据保持均值为0,方差为1的正态分布,避免发生梯度消失。

把第1个样本的第1个通道,加上第2个样本第1个通道.....加上第N个样本第1个通道,求平均,得到通道1的均值(注意是除以N\times H\times W而不是单纯除以N,最后得到的是一个代表这个batch 第1个通道平均值的数字,而不是一个H×W的矩阵)。求通道1的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。

BN的使用位置:全连接层或卷积操作之后,激活函数之前

BN的算法过程:①沿着通道计算每个batch的方差;②沿着通道计算每个batch的方差;③做归一化;④加入缩放和平移变量(保证每一次数据经过归一化之后,还保留原来学习到的特征,完成归一操作,加速训练)

\mu =\frac{1}{m}\sum_{i=1}^{m}z^{(i)}\sigma ^{2}=\frac{1}{m}\sum_{i=1}^{m}(z^{(i)}-\mu)^{2}z^{(i)}_{Norm}=\frac{z^{(i)}-\mu }{\sqrt{\sigma ^{2}+\varepsilon }}z^{(i)}=\gamma z^{(i)}_{Norm}+\beta

BN的作用

缓解梯度消失,加速网络收敛速度。BN层可以让激活函数(非线性变化函数)的输入数据
落入比较敏感的区域,缓解了梯度消失问题。

简化调参的负担,网络更稳定。在调参时,学习率调得过大容易出现震荡与不收敛,BN层则抑制了参数微小变化随网络加深而被放大的问题,因此对于参数变化的适应能力更强,更容易调参。

防止过拟合。BN层将每一个batch的均值与方差引入到网络中,由于每个batch的这两个值都不相同,可看做为训练过程增加了随机噪音,可以起到一定的正则效果,防止过拟合

BN存在的问题

如果batch size太小,则计算的均值、方差不足以代表整个数据的分布

如果batch size太大,则会超过内存容量,需要跑更多的epoch,导致总训练时间变长,直接固定梯度下降的方向,导致很难更新

Layer Normalization

LN对深度网络中的某一层所有神经元的输入按以下公式进行正则化操作;

LN在通道方向上,对C、H、W做归一化,对RNN效果明显

LN求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C\times H\times W,即求整本书的“平均字”

\mu ^{l}=\frac{1}{H}\sum_{i=1}^{H}a^{l}_{i}

\sigma ^{l}=\sqrt{ \frac{1}{H}\sum_{i=1}^{H}(a^{l}_{i}-\mu ^{l})^{2}}

LN中同层神经元的输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差。

对于特征图,LN对每个样本的C、H、W维度上的数据求均值和标准差,保留N维度。

LN的优势点

不需要批训练,在单个数据内部就能完成归一化。

Instance Normalization

在图像像素上,对H、W做归一化,可以加速模型收敛,并且保持每个图像实例之间的独立

求均值时,相当于把一页书中的所有字加起来,再除以该页的总字数:H\times W

feature map的各个通道的均值和方差会影响到最终生成图像的风格,所以不能对整个batch做归一化。

IN对每个样本的H、W维度的数据求均值和标准差,保留N、C维度;只在通道内部求均值和标准差:y_{tijk}=\frac{x_{tijk}-\mu_{ti}}{\sqrt{\sigma ^{2}_{ti}+\varepsilon }}\mu _{ti}=\frac{1}{HW}\sum^{W}_{l=1}\sum^{H}_{m=1}x_{tilm}\sigma ^{2}_{ti}=\frac{1}{HW}\sum^{W}_{l=1}\sum^{H}_{m=1}(x_{tilm}-\mu_{ti})^{2}

Group Normalization

将channel 分组,然后再做归一化;把一本C页的书平均分成G份,每份成为有C/G页的小册子

GN是为了解决BN对较小的mini-batch size效果差的问题。GN适用于占用显存比较大的任务,例如图像分割。对这类任务,可能batch size 只能是个位数,再大显存就不够用了。而当batch size是个位数时,BN的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN也是独立于batch 的,它是 LN和IN的折中。

相关推荐

  1. 嵌入式算法开发系列之算法

    2024-04-10 09:46:04       14 阅读
  2. 在神经网络训练的作用

    2024-04-10 09:46:04       7 阅读
  3. 计算机视觉各个方向概述

    2024-04-10 09:46:04       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 09:46:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 09:46:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 09:46:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 09:46:04       18 阅读

热门阅读

  1. hcs部署场景

    2024-04-10 09:46:04       12 阅读
  2. UVA10935 Throwing cards away I 卡片游戏 解题报告

    2024-04-10 09:46:04       9 阅读
  3. 【蓝桥杯每日一题】4.9网络分析(代码详解版)

    2024-04-10 09:46:04       13 阅读
  4. vue 和 react 的区别

    2024-04-10 09:46:04       10 阅读
  5. 19、Lua 调试(Debug)

    2024-04-10 09:46:04       12 阅读
  6. 【御控物联】 1、物联网介绍

    2024-04-10 09:46:04       10 阅读
  7. Jeecg的Dict注解的用法

    2024-04-10 09:46:04       11 阅读
  8. SSH和交换机端口安全概述

    2024-04-10 09:46:04       10 阅读