TensorFlow学习笔记5.1——神经网络参数更新方法

当通过反向传播来计算解析梯度时,梯度就能够被用来进行参数更新了。一般来说,进行参数更新的方法有许多种,最简单的是沿着负梯度方向逐渐改变参数的的普通方法。又或可以引入动量(Momentum)这一概念…
常见的更新方法有:SGD(随机梯度下降)Momentum(动量)updateAdagradRMSpropAdam

一、SGD(随机梯度下降)
沿着参数的梯度负方向更新参数,即
在这里插入图片描述
这里x表示weights或bias一类的参数,dx指计算的梯度。

二、Momentum update
该方法可以看作是从物理角度上对于最优化问题得到的启发。质点所受的力就是损失函数的负梯度(F=-dx×U,U是高度势能,类比为损失loss的大小),因为F=ma,故得出负梯度与质点的加速度是成正比的。
所以从物理的角度来看:梯度只是影响了速度,而速度再来影响位置。
在这里插入图片描述
这里引入了一个初始化为0的变量v和一个超参数mu。mu看作是动量(一般值设为0.9),其意义相当于摩擦系数,抑制了速度,降低了系统的动能,让速度在迭代过程中逐渐衰减。

三、Nestrevo Momentum update
Nestrevo动量在理论上对于凸函数能够更好地收敛,实际效果比Momentum稍好。
其核心思路是:动量更新中,mu×v会稍微改变参数向量,使得更新方向不同于普通SGD更新,而Nestrevo动量将未来的近似位置x+mu×v看做是“向前看”。也就是说,既然知道动量更新会影响参数向量的位置,干脆不要在原点计算梯度,使用Nestrevo动量,直接在“向前看”的地方计算梯度。
TensorFlow学习笔记5.1——神经网络参数更新方法_第1张图片
TensorFlow学习笔记5.1——神经网络参数更新方法_第2张图片
直接使用x_ahead位置的梯度,而不是x位置的梯度。

以下三种是逐渐适应学习率的方法
四、Adagrad
TensorFlow学习笔记5.1——神经网络参数更新方法_第3张图片
cache的尺寸与梯度矩阵的尺寸相同,跟踪了每个参数的梯度的平方和,对于大的梯度,会使它的有效学习率减小,对于小的梯度,会使它的有效学习率增大,eps是平滑因子,用于放置出现0的情况。
Adagrad的缺点是深度学习中单调的学习率被证明通常过于激进,会导致学习过早停止。

五、RMSprop
一个有效但目前还未公开发布的自适应学习率方法,改进了Adagrad方法,减少它的激进性,具体来说就是适用了一个梯度平方的滑动均匀。
TensorFlow学习笔记5.1——神经网络参数更新方法_第4张图片
deacy_rate是一个超参数,改变了Adagrad中的cache变量。因此RMSprop仍然是基于梯度的大小对每个权重的学习率进行修改,与Adagrad不同的是,其更新不会让学习率单调变小。

六、Adam
看起来像RMSprop的动量版本,用平滑板的梯度m而不是原始的梯度向量dx。(默认设置eps=1e-8,beta1=0.9,beta2=0.999)
TensorFlow学习笔记5.1——神经网络参数更新方法_第5张图片
使用默认设置的Adam效果比RMSprop要好一些,但是也可以尝试SGD+Nestrevo Momentum方法。完整的Adam方法还包括一个bias矫正机制。

七、莫烦PYTHON的奇妙比喻

在学习莫烦PYTHON的“TensorFlow搭建自己的神经网络”教程中,发现up主能够用巧妙的比喻让人轻松地理解这几种更新方式的不同:

1、SGD(随机梯度下降)
SGD相当于将数据拆分成小批,再分批不断放入神经网络中计算。每次使用批量数据虽然不能反映整体数据的情况,不过却在很大程度上加速了神经网络的训练过程,而且也不会丢失太多准确率。
TensorFlow学习笔记5.1——神经网络参数更新方法_第6张图片
2、Momentum update
传统的神经网络更新方法是让权重加上学习率乘校正值(负梯度),这种方法可能会让学习过程曲折无比,就像喝醉的人回家时摇摇晃晃走了很多弯路。
TensorFlow学习笔记5.1——神经网络参数更新方法_第7张图片
所以,如果将醉汉从原地上放在一个斜坡上,由于惯性,他向一直向下走,其路径也就不会那么曲折,这就是动量更新。
TensorFlow学习笔记5.1——神经网络参数更新方法_第8张图片
3、Adagrad
假设给醉汉一双不好走路的鞋子,使得他摇晃着走路时会发现脚疼(相当于对走曲折路径进行一个惩罚penalize),鞋子变成了走弯路的阻力,逼着醉汉直着走。
这就是Momentum更新,在学习率上调整,使得每个参数的更新都有其与众不同的学习效率。
TensorFlow学习笔记5.1——神经网络参数更新方法_第9张图片
4.RMSprop
将下坡和不好走路的鞋子结合起来,有了Momentum的惯性原则加上Adagrad对错误方向的阻力,就能得出RMSprop更新方法。注意这里RMSprop还缺少了动量更新中的部分项,这一部分在Adam方法中补充了。
TensorFlow学习笔记5.1——神经网络参数更新方法_第10张图片
5.Adam
在更新参数时将Momentum的下坡属性和Adagrad中的阻力属性结合起来,在更新时同时考虑这两项,使得能够又快又好地达到目标并收敛。
TensorFlow学习笔记5.1——神经网络参数更新方法_第11张图片

你可能感兴趣的:(TensorFlow,神经网络,深度学习)