概述
梯度下降,Gradient Descent,找到一个函数的局部极小值
在机器学习、深度学习中,梯度下降的作用就是找到 损失函数 的最小值,使得 预测值 和 真实值 的 误差最小
代码实现
https://www.malaoshi.top/show_1EF4G05NJ24L.html
案例
损失函数
这里使用均方误差作为损失函数,该函数有唯一最小值,那么假设该损失函数图像如下:
y轴代表损失值
目的
在上图中,人眼很容易找到最小值,即当x为0时,但要让计算机找到最小值,就要计算
假设 出发点(a点) 在下图位置 ,我们要做的就是判断该点 是否 此函数的极值,如果不是就 求出极值
判断是否极值
对这一点进行求导,其 导数值 等于该点的 切线斜率,如果切线 斜率不为0,那么该点 不在极值点 上。
注意:上图的切线 斜率为 负数
移动的方向
当判断出a点不是极值后,接下来就要 移动 到下一个位置,首先要确定 往哪个方向 移动
上图中红线的 斜率 为 负数,a点的x值 与 斜率(负数)做 加法 运算时,y值反而越大
而我们的目的是找到 y的最小值,所以下一个点(b点)的x值 计算如下:
a点的x值 - 斜率
移动的步长
上面的计算,a点的x值 减去 斜率,可能达不到我们的要求,我们要控制 下降速度,就需要设置 步长
步长是需要手动设置的,也就是 超参数
步长 在机器学习、深度学习中 称为 学习率(learning rate)
所以下一个点的x值 计算如下:
a点的x值 - 步长*斜率
有经验所得,一般步长设置为 0.01
步长太小,移动的速度就太慢
步长太大,可能得不到最优解
求出极值

按照步长在负方向上移动,求导数,如果导数不为极值,那么重复执行,一直到导数为极值停止
复杂函数(多个极值点)
对于 均方误差,有唯一极值点
但在很多 复杂函数 中,可能有 多个极值点
如上图,此函数有多个极值点
如果出发点在 b点和c点之间,有可能最终找到b点或c点,这只是 局部最小值
如果出发点在 a点的两侧,才能找到真正的 全局最小值
出发点的位置也是 超参数
解决方法:
- 多次运行,随机 初始点
- 手动 设置出发点的位置
总结
梯度法思想的三要素
从案例中,我们发现,有三个要素
- 出发点(超参数)
- 下降方向
- 下降步长(学习速率,超参数)




