首页 > 编程知识 正文

nfv三层解耦指的哪三层,断电平层装置工作原理

时间:2023-05-05 00:26:54 阅读:21416 作者:2953

前几天读了BN的那篇经典论文《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,心里还留有很多疑惑,今天差不多明白了,就记在这里。

1 训练数据为什么要和测试数据同分布?

请看下图。 假设我们的网络在左上角的数据中进行了训练,并且已经找到了两者的分离面,w。 如果测试数据在右下角,而不在与训练数据完全相同的分布上,你认为泛化能力好吗?

2 为什么白化训练数据能够加速训练进程

如下图所示,在训练数据分布在右上的情况下,当我们初始化网络参数w和b时,可能得到的界面是左下角的线,需要不断调整才能得到经过训练并通过数据点的界面,这将减慢训练过程关联各维的数据后,得到的数据点在坐标上呈圆形分布,如下图中央的数据点所示。 此时,如果自由初始化w、b并设定为0,则得到的界面已经通过了数据,因此训练调整、训练过程会加快

3 什么是梯度爆炸

如果网络使用sigmod激活函数,则当误差向前传递时,必须通过sigmod单元,进入sigmod的梯度。 另一方面,sigmod的坡度最大为0.25,因此越向前方传递,误差越小。 这个坡度会消失,但什么是坡度爆炸呢? 注意误差通过全连接或卷积层时,还必须乘以权重w。 w较大时,如果大大超过sigmod引起的减少,则越往前走误差越大,梯度就会爆炸。

4 为什么BN层可以加速网络收敛速度

原理如上2所示,BN层的计算图如下所示。 x输入数据,将平均方差归一化到xhat。 也就是说,原理类似于2的白化加速。 从后面的xhat到y其实是普通的一次变换。 好像是全连接,但是没有交叉。 把这个一次变换和之后的网络看做一个整体,不是和2的情况一样吗? 如果没有BN层,x直接输入到后续网络中,则在训练过程中,x分布的变换必然会导致后续网络调整学习以来x的均值和方差,并映射到BN层中。 xhat是标准化数据,其代价是网络中增加了一个线性层y,但前者的性能更大,因此正在加速。

后来想想,我还是觉得有点不明白。 xhat是正规化的分布,但y不一定是这样的。 最终y输入到子网中,并不一定对原网络有效吧。 这里真正有助于加速的是从xhat到y的转换。 除了完全连接之外,这种到单个维的线性转换还减少了输入/输出之间的交叉连接,这种形式的转换可能非常有利于分布的调整。 如果在网络输入的最前端添加这样的层,不是就没有必要将输入规范化吗? 我以后有时间验证。 那从x到xhat的转换会消失吗? 不,x到xhat的转换作用是缓和梯度方差。 这可以看到以下几点

5 为什么BN层可以改善梯度弥散

可以通过将常规坡度乘以系数a,再加上b来表示以下xhat到x的坡度表达式: 这里加上b,整体上梯度上升,补偿了sigmod上的损失,改善了梯度方差的问题。

6 为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

原文是这样说明的。 非线性单元的输出分布形状在训练过程中会发生变化,规范化无法消除他的方差偏差。 相反,全连通和卷积层的输出一般是对称的,不稀疏的分布,类似于更动人的鹤分布。 将他们规范化,可以得到更稳定的分布。 实际想想也是这样。 像relu这样的激活函数,如果你输入的数据是感人的鹤分布,那么他转换的数据会是什么形式? 小于0的被抑制了。 也就是说,分布小于0的部分直接为0。 这样就不怎么动人的鹤了。

作者还在mnist上进行了实验,采用3个100个神经元全连接隐层,每个输出连接sigmoid非线性,将w初始化为小感人鹤值,最后隐层连接输出10个值的全连接,交叉熵损失。 BN层用于每个连接层的输出,最后统计了训练速度和sigmoid输入分布的变化,如下图所示。 可以看出,不使用BN时,sigmoid的输入分布被急剧调整。 正是这种急剧的调整减缓了训练速度。 最后训练结束时,方差和均值都没有很大变化,可以直接取平均值用于估计

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。