BN层和Dropout层「建议收藏」

BN层和Dropout层「建议收藏」原理batch的训练方法:按照batch来更新梯度,减少了梯度下降时的随机性;与遍历整个数据集相比,减少计算量。步骤:求batch均值、batch方差对每个元素进行归一化尺度缩放和偏移(变换回数据原始分布,减少)思想参数用法BN层放在卷积层后,用于重新调整数据分布…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

BN层

原理和公式

BN层解决内部协变量偏移ICS问题,通过减少内部协变量偏移加快神经网络训练。

z ^ l = γ ∗ z l − μ δ 2 + σ + β \hat{z}^{l} = \gamma * \frac{z^l-\mu}{\sqrt{\delta^2+\sigma}} + \beta z^l=γδ2+σ
zlμ
+
β

参数量

神经元个数 x 4 (或者 通道数 x 4)

做法

将网络层的输出分布强制转为均值为0,方差为1的分布之后,为了部分还原,又乘以伽马(γ,scale),加上贝塔(β,shift)。

  1. BN为什么要有伽马和贝塔:为了在强制转换之后做一定还原,保持模型原有的表达能力(capacity)
  2. 这样变过来又变回去是不是跟没变一样?
    不会跟没变一样, 因为,再变换引入了两个新参数 γ \gamma γ β \beta β。在旧参数中, x 的均值取决于下层神经网络的复杂关联;但在新参数中,均值仅仅由 β \beta β 来确定,去除了与下层计算的密切耦合。新参数可以通过梯度下降来学习,简化了神经网络的训练。
  3. BN如果去掉伽马和贝塔:可能会导致特征分布差异性降低,损坏特征表达,导致模型拟合能力降低,精度下降。但是模型应该也可以收敛。

用法和步骤:

  • BN层一般放在卷积层后,用于重新调整数据分布 (确保网络中的各层即使参数变化,输入/输出的分布也不会发生较大变化)
  • 求batch均值、batch方差
  • 对每个元素进行归一化
  • 尺度缩放和偏移 (变换回数据原始分布,减少),γ代表方差,β代表偏移

优点和缺点

优点

  • 在模型训练过程中,批量归一化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。
  • 减轻对初始值的依赖
  • 训练更快,可以用更大的学习率
  • 批量归一化有许多有益的副作用,主要是正则化。

缺点

  • batch太小时,计算的均值方差不稳定,例如在线的单例学习
  • 放在激活层之前或者之后

训练和测试时的区别

  1. 训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和标准差。
    默认track=True,会通过移动平均,记录训练数据的均值和标准差

  2. 测试时,模型训练完成,它的所有参数都确定了,包括均值和标准差, γ \gamma γ β \beta β 。如果训练时设置了track=True,保存了移动平均,则直接使用训练时得到的均值和标准差做测试。如果没有,则使用测试时计算的均值、标准差

Dropout

原理

在训练时以一定的概率使神经元失活,实际上就是让对应神经元的输出为0

训练和测试时的区别

  1. 训练和测试时为什么有差异?
  • 训练时神经元有开有关,测试时全开
  1. 如何处理训练和测试时候的不一致性?Dropout 如何平衡训练和测试时的差异?
  • 假设失活概率为 p ,就是这一层中的每个神经元都有p的概率失活,这样在训练和测试时,输出层每个神经元的输入和的期望会有量级上的差异。

  • 因此在训练时还要对bn的输出数据除以(1-p)之后再传给下一层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。

  • 假设BN层输入的期望为a,在不使用dropout的时候,它的期望依旧是a。如果该层进行了dropout, 相当于有p的概率被丢弃,(1-p)的概率被保留,则此层的期望为(1-p)a1+pa0=(1-p)a, 为了保证输入与输出的期望一致,需要在训练的时候,对bn层的输出做:y = y / (1-p) 的处理。

多种类型的dropout: https://mp.weixin.qq.com/s/fTkMNaABWF3h0rpuam1XGw
https://blog.csdn.net/songyunli1111/article/details/89071021
https://zhuanlan.zhihu.com/p/61725100


其他:

  • BN层的输出维度:上一层输出是NCHW,BN层的参数维度为

以下内容来自沐神第二版新书:
小结¶

  • 批量归一化在全连接层和卷积层的使用略有不同。
  • 另一方面,”减少内部协变量偏移“的原始动机似乎不是一个有效的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189530.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号