梯度下降|笔记

1.梯度下降法的原理

1.1确定一个小目标:预测函数

机器学习中一个常见的任务是通过学习算法,自动发现数据背后的规律,不断改进模型,做出预测。
梯度下降|笔记_第1张图片
上图的坐标系,横轴表示房子面积,纵轴表示房价,图中的点就是给出的数据。

任务是,设计一个算法,让机器能够拟合这些数据,算出直线的参数w
梯度下降|笔记_第2张图片
一个简单的方法是,先随机选一条过原点的直线,然后计算所有样本点和这条直线的偏离程度,再根据误差大小来调整w的值。

1.2 找到差距:代价函数

均方误差,所有点的误差相加求和再求平均值
梯度下降|笔记_第3张图片
e1 e2 …en是每个点的误差值
梯度下降|笔记_第4张图片
把每个点的误差值相加求和再求平均值,合并同类项
梯度下降|笔记_第5张图片
上面这个误差函数代表了学习需要付出的代价,也常被称为代价函数(cost function),

二次项的系数a>0,是一个开口向上的抛物线
梯度下降|笔记_第6张图片
左边的直线绕原点旋转,对应到右边图像上就是取值点(红色)在抛物线上运动,
梯度下降|笔记_第7张图片
左边找到正确的w的值的时候,对应右边图像上取值点应该到最底部,即梯度为0的点

左边是预测函数,右边是代价函数

通过定义预测函数,根据误差公式,推导代价函数,可以成功地将样本点的拟合过程映射到一个函数图像上,

1.3 明确搜索方向:梯度下降

梯度下降|笔记_第8张图片
目标是找到代价函数的最低点,

从当前点的位置,每一步都选择“最陡峭”的方向走,这就是前进的方向 沿着这个方向走,就能最快到达最低点

“陡峭程度”就是梯度,是代价函数的导数,抛物线的曲线斜率

(补充:机器学习、深度学习中很多模型是非常复杂的,不能对整个函数求导,只能在一个函数的一个点上求导)

1.4 迈多大步子:学习率

步子太小,loss值会一直在最低点处震荡,难以收敛

直接使用斜率值做步长,步子太大,取值会左右横跳,loss难以收敛

正确的做法:给斜率值乘上一个很小的数值,也就是乘上学习率α,

调整权重参数w的公式是:
梯度下降|笔记_第9张图片

1.5 不达目的不罢休:循环迭代

1-4步如下图:
梯度下降|笔记_第10张图片
第5步就是重复3、4步,直到找到最低点

整个流程就是梯度下降算法
梯度下降|笔记_第11张图片
实际情况没这么简单,

因为实际情况中,训练样本的分布千奇百怪,代价函数也可能千变万化,不太可能是一条简单的抛物线。
梯度下降|笔记_第12张图片
代价函数的图像是波浪线时,会有多个最低点,要找到全局最优

代价函数还有可能是高维的,十几维、百维,难以可视化;但都可以通过梯度下降法找到最低点。

2. 梯度下降算法的变体

2.1 批量梯度下降

每次用全部训练样本参与计算,梯度下降的非常平稳,

优点:保证算法的精准度,找到全局最优点

缺点:训练搜索过程慢,代价大

2.2 随机梯度下降

每次只用一个样本参与计算,

优点:提升了计算速度,

缺点:牺牲了一定的精准度

2.3 min-batch梯度下降

每次选用小批量样本进行计算

优点:比批量梯度下降快,比随机梯度下降准确

2.4 其它

其它改进的梯度下降算法:

AdaGrad 动态调节学习率,经常更新的参数学习率小一些,不常更新的参数学习率大

RMSProp 优化动态学习率

AdaDelta无需设置学习率

Adam 融合了AdaGrad和RMSProp

补充:

梯度下降是一种用来对模型的参数进行更新的优化算法,在机器学习和深度学习中,模型的目标是通过调整参数来最小化损失函数。梯度下降算法,通过计算损失函数对参数的梯度(即求导),来指导参数的更新方向。通过迭代地沿着梯度的反方向更新参数,梯度下降算法可以逐步地降低损失函数的值,从而使模型更准确地进行预测或分类。


道阻且长,行则将至!


你可能感兴趣的:(知识补充,笔记,梯度下降)