几种优化方法总结---Momentum,AdaGrad,RMSProp,Adam

SGD

SGD的全称是stochastic gradient descent,随机梯度下降,是相对batch gradient descent提出来的。

batch gradient descent:将所有训练样本全部投入计算dw,db。好处:这种计算方式求出来的dw和db是最真实的。坏处:如果训练样本特别大,比如100,000个样本,这样会导致很长时间才能计算出一次倒数然后进行一次梯度下降,导致训练特别缓慢。另外计算机的内存也无法存储这么大的矩阵进行计算。

stochastic gradient descent:用每一个训练样本计算dw和db。好处:一个样本计算导数非常快,可以很快的进行一次梯度下降。坏处:一个样本计算的导数与真实导数相差非常大,可能会导致在最小值附近徘徊而无法接近最小值,另外由于只用一个样本计算导数,导致遍历所有样本需要进行一个很大的循环,从整体上而言失去了矩阵计算带来的运算加速。

所以可以使用一种折中的方法,mini-batch gradient descent,现在提到SGD一般指的是这种方法。mini batch一般选择16,32,64等,根据计算机内存决定。这样计算一次导数比较快,所以可以比较快的进行一次梯度下降,而且也有矩阵计算带来的运算加速。

SGD公式表示

\Theta_t = \Theta_t - \eta *d\Theta_{t-1}

\Theta表示所有的参数,t代表第t次梯度下降。

tensorflow接口调用

tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

SGD优化效率不高

以下图为例,如果使用SGD优化方式,初始点在红色点出,优化过程会出现图中的zigzag的线路,以非常迂回的方式到达最优点。

为何会出现上图这样的曲线?

对上图而言,假设横轴是w1,纵轴是w2,那么这个图形如果从立体上来想象,应该是横轴的梯度比较平滑开口很大,纵轴的梯度比较陡峭开口很小。那么dw2比较大,dw1会比较小。所以在梯度更新的时候纵轴方向梯度更新会很大,横轴方向梯度变化会比较小,这样很可能w2因为步子大跳到了另一个方向,而w1因为步子小而正常的向前迈进了一小步。所以就会形成上图中的折线。

 

SGD+Momentum

Momentum是动量,通过指数加权平均来累积之前的动量,从而给下降的过程来带一点冲力。

公式表达

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值