深度学习—优化算法

指数加权平均:

优势:

是用来计算数据的指数加权平均数,计算指数加权平均数只占单行数字的存储和内存,

当然并不是最好的,也不是最精准的计算平均数的方法,如果你需要计算时间窗,你可以直

接过去 10 天的总和或者过去 50 天的总和除以 10 或 50 就好了,如此往往会得到更好的估测,但缺点是如果保存最近的气温和过去 10 天的总和,必须占更多的内存,执行更加复杂,而计算指数加权平均数只占单行数字的存储和内存。他的效率和资源的占有率会大大的减小。 所以在机器学习中大部分采用指数加权平均的方法计算平均值。

白化whitening
白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。
输入数据集X,经过白化处理后,新的数据X’满足两个性质:
(1)特征之间相关性较低;
(2)所有特征具有相同的方差。
其实我们之前学的PCA算法中,可能PCA给我们的印象是一般用于降维操作。然而其实PCA如果不降维,而是仅仅使用PCA求出特征向量,然后把数据X映射到新的特征空间,这样的一个映射过程,其实就是满足了我们白化的第一个性质:除去特征之间的相关性。因此白化算法的实现过程,第一步操作就是PCA,求出新特征空间中X的新坐标,然后再对新的坐标进行方差归一化操作。
链接:https://blog.csdn.net/hjimce/article/details/50864602

归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
其实如果是仅仅使用上面的归一化公式,对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的。打个比方,比如我网络中间某一层学习到特征数据本身就分布在S型激活函数的两侧,你强制把它给我归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,这样就相当于我这一层网络所学习到的特征分布被你搞坏了。
在深度学习中,因为网络的层数非常多,如果数据分布在某一层开始有明显的偏移,随着网络的加深这一问题会加剧(这在BN的文章中被称之为internal covariate shift),进而导致模型优化的难度增加,甚至不能优化。所以,归一化就是要减缓这个问题。

BN步骤主要分为4步:
1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中εε是为了避免除数为0时所使用的微小正数。
4.尺度变换和偏移:将xixi乘以γγ调整数值大小,再加上ββ增加偏移后得到yiyi,这里的γγ是尺度因子,ββ是平移因子。这一步是BN的精髓,由于归一化后的xixi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γγ,ββ。 γγ和ββ是在训练时网络自己学习得到的。

BN到底解决了什么?

a中左图是没有经过任何处理的输入数据,曲线是sigmoid函数,如果数据在梯度很小的区域,那么学习率就会很慢甚至陷入长时间的停滞。减均值除方差后,数据就被移到中心区域如右图所示,对于大多数激活函数而言,这个区域的梯度都是最大的或者是有梯度的(比如ReLU),这可以看做是一种对抗梯度消失的有效手段。对于一层如此,如果对于每一层数据都那么做的话,数据的分布总是在随着变化敏感的区域,相当于不用考虑数据分布变化了,这样训练起来更有效率。
那么为什么要有第4步,不是仅使用减均值除方差操作就能获得目的效果吗?我们思考一个问题,减均值除方差得到的分布是正态分布,我们能否认为正态分布就是最好或最能体现我们训练样本的特征分布呢?不能,比如数据本身就很不对称,或者激活函数未必是对方差为1的数据最好的效果,比如Sigmoid激活函数,在-1~1之间的梯度变化不大,那么非线性变换的作用就不能很好的体现,换言之就是,减均值除方差操作后可能会削弱网络的性能!针对该情况,在前面三步之后加入第4步完成真正的batch normalization。

不懂之处?
参考:https://zhuanlan.zhihu.com/p/63720235

最简要理解:
因为在深度神经网络中随着训练得进行,每一个隐层的参数不断的发生变化导致每一层的激活函数的输入发生改变,这与机器学习领域的假设:训练数据和测试数据的同分布是不符合的。而激活输入值分布的偏移,导致数据网分线性函数的取值区间的上下线两端靠近,导致梯度消失的问题,这就是问什么会训练速度降低的原因。而BN算法就是讲数据强行拉到均值为0,方差为1的比较标准的正态分布。但是这样子导致的问题是:只利用到了线性区域而导致深层无意义,使得模型的表达能力下降。为了保证非线性的获得,用y = scale*x + shift,将数据移动或者伸缩。以此来实现数据的batch normalization!!!

注:如果在每一层之后都归一化成0-1的高斯分布(减均值除方差)那么数据的分布一直都是高斯分布,数据分布都是固定的了,这样即使加更多层就没有意义了,深度网络就是想学习数据的分布发现规律性,BN就是不让学习的数据分布偏离太远

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值