大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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−μ+β
参数量
做法
将网络层的输出分布强制转为均值为0,方差为1的分布之后,为了部分还原,又乘以伽马(γ,scale),加上贝塔(β,shift)。
- BN为什么要有伽马和贝塔:为了在强制转换之后做一定还原,保持模型原有的表达能力(capacity)
- 这样变过来又变回去是不是跟没变一样?
不会跟没变一样, 因为,再变换引入了两个新参数 γ \gamma γ 和 β \beta β。在旧参数中, x 的均值取决于下层神经网络的复杂关联;但在新参数中,均值仅仅由 β \beta β 来确定,去除了与下层计算的密切耦合。新参数可以通过梯度下降来学习,简化了神经网络的训练。 - BN如果去掉伽马和贝塔:可能会导致特征分布差异性降低,损坏特征表达,导致模型拟合能力降低,精度下降。但是模型应该也可以收敛。
用法和步骤:
- BN层一般放在卷积层后,用于重新调整数据分布 (确保网络中的各层即使参数变化,输入/输出的分布也不会发生较大变化)
- 求batch均值、batch方差
- 对每个元素进行归一化
- 尺度缩放和偏移 (变换回数据原始分布,减少),γ代表方差,β代表偏移
优点和缺点
优点
- 在模型训练过程中,批量归一化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。
- 减轻对初始值的依赖
- 训练更快,可以用更大的学习率
- 批量归一化有许多有益的副作用,主要是正则化。
缺点
- batch太小时,计算的均值方差不稳定,例如在线的单例学习
- 放在激活层之前或者之后
训练和测试时的区别
-
训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和标准差。
默认track=True,会通过移动平均,记录训练数据的均值和标准差 -
测试时,模型训练完成,它的所有参数都确定了,包括均值和标准差, γ \gamma γ和 β \beta β 。如果训练时设置了track=True,保存了移动平均,则直接使用训练时得到的均值和标准差做测试。如果没有,则使用测试时计算的均值、标准差
Dropout
原理
在训练时以一定的概率使神经元失活,实际上就是让对应神经元的输出为0
训练和测试时的区别
- 训练和测试时为什么有差异?
- 训练时神经元有开有关,测试时全开
- 如何处理训练和测试时候的不一致性?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账号...