IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习七 —— BN & LN & IN & GN -> 正文阅读

[人工智能]深度学习七 —— BN & LN & IN & GN

BN & LN & IN & GN

介绍

神经网络中,有各种各样的归一化算法:Batch Normalization(BN)Layer Normalization(LN)Instance Normalization(IN)Group Normalization(GN)

从公式上看,他们差不多:无非是减去均值,除以标准差,再施以线性映射

y = γ ( x ? μ ( x ) σ ( x ) ) + β y = \gamma (\frac{x - \mu(x)}{\sigma(x)} ) + \beta y=γ(σ(x)x?μ(x)?)+β

其中,

γ \gamma γ——缩放因子

β \beta β——平移因子

这些归一化的算法主要区别在于:操作的feature?map维度不同

为什么要用 γ \gamma γ β \beta β

BN层对原有数据进行标准化处理,将其变为均值为 0 0 0,方差为 1 1 1的正态分布,但是这也不可避免的改变了数据的分布,从而可能会对激活函数只使用了其线性部分,限制了模型的表达能力。引入 γ \gamma γ β \beta β可以对标准化后的数据进行重构,使其尽量还原出原有数据的分布。

区别

区别,一图可见

在这里插入图片描述

其中C轴表示通道,N轴表示Batch中的样本序号,H、W轴可以认为是图像样本中的宽和高

Batch Normalization(BN)

BN层的过程

在CNN网络中,每层网络的输出都有多个feature map(通道),每个feature map又是由多个像素点组成的;在进行BN时,算法会将一个batch中的所有样本的所有feature map按feature map的序号划分为N(N = feature map)组,然后对这N组的所有像素点进行N次标准化。

BN层的作用及分析

作用

  • 加快网络的训练和收敛速度
  • 防止梯度爆炸和梯度消失
  • 防止过拟合

分析

(1) 加快收敛速度

在深度学习网络中,如果每层的数据分布不一样的话,将会导致网络非常难收敛和训练。而如果把每层的数据都转换为均值为0,方差为1的状态下,这样每层数据的分布都是一样的,训练会更容易收敛。

(2)防止梯度爆炸和梯度消失

梯度消失:

以sigmoid函数为例,sigmoid函数使得输出在 [ 0 , 1 ] [0,1] [0,1]之间,实际上当 x x x过大,或者过小时,经过sigmoid后输出范围就会变得很小,而且反向传播时的梯度就会非常小,从而导致梯度消失的问题,同时也会导致网络学习速度过慢;同时,由于网络的前端比后端求梯度需要更多次的求导运算,最终会出现网络后端一直学习,前端几乎不学习的情况。

BN层通常被添加在全连接和激活函数之间,使得数据在进入激活函数之前集中分布在0值附近,大部分激活函数在0周围时输出都有较大变换,下图可以很好的解释这个现象。

在这里插入图片描述

梯度爆炸:

第 一 层 的 偏 移 量 的 梯 度 = 激 活 层 斜 率 ( 1 ) × 权 值 ( 1 ) × 激 活 层 斜 率 ( 2 ) × 权 值 ( 2 ) × ? 激 活 层 斜 率 ( n ? 1 ) × 权 值 ( n ? 1 ) × 激 活 层 斜 率 ( n ) 第一层的偏移量的梯度 = 激活层斜率(1) \times 权值(1) \times 激活层斜率(2) \times 权值(2) \times \cdots 激活层斜率(n-1) \times 权值(n - 1) \times 激活层斜率(n) =(1)×(1)×(2)×(2)×?(n?1)×(n?1)×(n)

假设激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会出现指数增长,即出现了梯度爆炸情况。

但是使用BN层之后,权值的更新也不会很大,可以防止梯度爆炸的发生。

(3)防止过拟合

在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络的batch都是随机的,这样就会使得整个网络不会只朝着一个方向学习,在一定程度上避免了过拟合。

BN层在训练集和测试集上有什么不同?

训练时: BN层每次都会用每个batch内数据的均值和标准差对Batch内的样本进行标准化;同时会通过滑动平均的方式不断更新训练集上全局均值和方差并保存。

测试时: 用保存好的训练集上的均值和方差,对测试集上的每个数据进行标准化

BN放在什么位置?

BN层一般放在激活函数之前或者之后,这两种效果其实影响不大。但是当激活函数使用sigmoid或者tanh时,将BN层放在激活函数之前,能够防止输入激活函数的值过大或者过小,从而防止梯度消失的现象

Layer Normalization(LN)

Layer Normalization是将一个样本中的所有数据进行标准化。通常用在RNN或者LSTM网络中。因为RNN一般用来处理序列数据,大部分序列类型的数据样本长度往往存在较大差异,如果使用BN处理就会出现某些通道没有某些样本数据的问题,即使使用特定字符填充,也会造成某些通道分布不均匀的问题。

Instance Normalization(IN)

Instance Normalization是对一个样本中的每一个通道进行单独的标准化。 一般用于风格化迁移,但如果特征图可以用到通道之间的相关性,那么就不建议使用使用Instance Normalization处理。

Group Normalization(GN)

Group Normalization是Layer Normalization和Instance Normalization标准化的折中做法,GN算法将一个样本的通道划分为多个group,然后在对每一个group进行标准化。

以CNN训练图像为例,使用多个卷积核对图像进行卷积会得到多个feature map,但这些feature map并不一定都是相互独立的,某些feature map之间可能存在某些联系,这时使用IN算法对每一个feature map做标准化无疑会丢失这些关联,而为了某些frature map之间的联系而使用LN算法对整个样本进行标准化又会占用大量内存资源,造成不必要的浪费。

GN算法首先将相互关联的feature map组合成一个group,然后在这个group上进行标准化,这样既保留了通道之间的关联,又节省了资源,同时解决了batch_size过小时,BN效果较差的问题

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:31:36  更:2022-07-05 23:33:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:38:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码