> 文章列表 > 梯度下降算法

梯度下降算法

梯度下降算法

ps.机器学习常见任务:学习算法——发现规律——改进模型——作出预测
机器学习目标:拟合出最接近训练数据分布的直线——也就是找到使得误差代价最小的参数——也就是开口向上的抛物线的最低点。寻找最低点的过程就是梯度(也就是陡峭程度最大的方向)下降要做的事情。

1.确定小目标——预测函数

2.找到差距——代价函数

梯度是代价函数的导数。对抛物线而言就是曲线斜率

样本点拟合过程映射到一个函数图像上

3.明确搜索方向——梯度计算

4.大胆的往前走吗,步子迈多大——学习率

离最低点远时斜率大,步子大,可以快速收敛;
离最低点近时斜率小,步子小,收敛的越精准。

斜率太大——在抛物线振荡。我们让斜率小一点,比如让斜率乘以一个非常小的值(0.01)——下降很顺畅。这个很小的值叫做学习率。

新W=旧W-斜率*学习率

5.不达目的不罢休——循环迭代

梯度下降法完整过程:1定义代价函数——2选择起始点——3计算梯度——4按学习率前进——5重复步骤34直到找到最低点

实际情况!!代价函数不会是一条简单的抛物线!!

代价函数是波浪线,存在多个最小点——机器学习目标:找到最低的那个(全局最优和局部最优)

代价函数是起伏不定的曲面or更复杂函数

寻找水源问题:
小心翼翼(批量梯度下降法,BGD;全部训练样本参与计算;精准但慢) 
横冲直撞(随即梯度下降法,SGD;每次只用一个样本进行计算,速度快但不精准,容易局部最优) 
小心试探(小批量梯度下降,MBGD;每次用一小批样本进行计算,结合前二)

总结:对学习率敏感

学习率太大:反复跳横
学习率太小:浪费计算资源


动态调节学习率的Adarad:常更新的学习率小一些,不长更新的学习率大一些——频繁更新的学习率可能过小以至逐渐消失。

优化动态学习率RMSProp

不需要设置学习率的AdaDelta

融合了AdaGrad和RMSProp的Adam

模拟动量Momentum:充分考虑前一阶段下降的惯性(滚下山)

FTRL