当前位置: 首页 > news >正文

深度学习 | BN层原理浅谈

深度学习 | BN层原理浅谈

文章目录

  • 深度学习 | BN层原理浅谈
  • 一. 背景
  • 二. BN层作用
  • 三. 计算原理
  • 四. 注意事项
    • 为什么BN层一般用在线性层和卷积层的后面,而不是放在激活函数后
    • 为什么BN能抑制过拟合(有争议)


一. 背景

    神经网络在训练时,由于内存限制,各框架都会设置batch和epoch的概念来进行训练。

    每个batch内采样的训练数据的分布各不相同,那么网络就要在每次迭代都去学习以适应不同的分布。对于深度学习这种包含很多隐层的网络结构,各隐层学到的权重等参数都在不停的变化,导致隐层的输入分布老是变来变去,产生了所谓的“Internal Covariate Shift”(内部协变量偏移)现象,

    使用更好的参数初始化或者使用较低的分辨率能够一定程度上缓和这个问题,但是会大大降低网络的训练速度,为了保证隐层分布稳定及训练速度,Batch Nomalization算法随之而来;

二. BN层作用

(1)将每一隐层参数都归一化至均值0、方差为1,输出至下一隐层;

(2)加速网络收敛速度,可以使用较大的学习率来训练网络

(3)改善梯度弥散

(4)提高网络的泛化能力

(5)BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

三. 计算原理

    BN层对每一个batch内样本的features中计算其均值μ\muμ和方差σ,然后对每一个x​减去均值除以标准差,最后利用超参数γ\gammaγβ\betaβ进行仿射变换,即可得到最终的BN输出y,具体过程如下:

在这里插入图片描述

1.计算样本均值。
2.计算样本方差。
3.样本数据标准化处理。
4.进行平移和缩放处理。引入了γ\gammaγβ\betaβ两个参数。来训练γ和β两个参数。引入了这个可学习重构参数γ\gammaγβ\betaβ,让我们的网络可以学习恢复出原始网络所要学习的特征分布。

四. 注意事项

为什么BN层一般用在线性层和卷积层的后面,而不是放在激活函数后

因为激活函数一般为非线性,非线性单元的输出分布形状会在训练过程中发生变化,归一化无法消除它的方差偏移,相反的,全连接和卷积层的输出一般是一个对称的,非稀疏的一个分布,更加类似于高斯分布,对他们进行归一化会产生更加稳定的分布。例如Relu激活函数,如果输入的数据是一个高斯分布,经过Relu输出的数据小于0的被抑制,就不是高斯分布了。

为什么BN能抑制过拟合(有争议)

BN每个batch采样的数据都不一样,但是每次的batch的数据都会被局部均值和方差作用,可以认为是引入了噪声,增强了过拟合能力。

http://www.lryc.cn/news/25267.html

相关文章:

  • 每日面试题
  • 将IDEA的项目托管到gitee
  • 父类子类静态代码块、构造代码块、构造方法执行顺序
  • 【C++】开散列实现unordered_map与unordered_set的封装
  • 华为OD机试真题Python实现【删除指定目录】真题+解题思路+代码(20222023)
  • CSS选择器大全(上)
  • JavaScript 俄罗斯方块 - setTimeout和rAF
  • LeetCode:构造最大二叉树;使用中序和后序数组构造二叉树;使用前序和中序数组遍历二叉树。
  • nodejs实现jwt
  • 结构体占用内存大小如何确定?-->结构体字节对齐 | C语言
  • Vue和Uniapp:优缺点比较
  • AMBA-AXI(二)AXI的序,保序与乱序
  • APIs and Open Interface--非工单领、发料(含调拨)
  • 互联网医院系统软件开发|互联网医院管理系统开发的好处
  • 2.单例模式
  • 【保姆级】Java后端查询数据库结果导出xlsx文件+打印xlsx表格
  • Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
  • vue3生命周期
  • Python学习笔记10:开箱即用
  • 详解JAVA反射
  • 在nestjs中进行typeorm cli迁移(migration)的配置
  • 前端工程构建问题汇总
  • 某马程序员NodeJS速学笔记
  • SpringMVC DispatcherServlet源码(6) 完结 静态资源原理
  • 2023年全国最新会计专业技术资格精选真题及答案9
  • Web3中文|把Web3装进口袋,Solana手机Saga有何魔力?
  • 【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)
  • 数据结构初阶 -- 顺序表
  • uniapp:3分钟搞定在线推送uni.createPushMessage,uni.onPushMessage
  • C/C++开发,无可避免的多线程(篇一).跨平台并行编程姗姗来迟