梯度下降算法
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