切平面的概念
- 一元情况下:切线是函数曲线在某点的最佳线性近似。
- 二元情况下:切平面是曲面在某点的最佳平面近似。
- 切平面由两个方向的切线确定。
偏导数的定义
- 符号表示:
- 或 :对 求偏导, 视为常数
- 或 :对 求偏导, 视为常数
- 规则:
- 选定一个自变量,对其求导。
- 其他变量视为常数(导数为 )。
- 用普通的一元微分法则计算。
梯度(Gradient)是由所有偏导数组成的向量:
多元函数的极值点要求 所有偏导数都为 0,切平面平行于水平面。多元优化的第一步,就是 解方程组 。
从导数到梯度下降
前面我们学过如何用导数和梯度解决优化问题。
但在高维情况下,想要解析解往往会变得非常复杂,甚至难以求解。
因此需要一种迭代、通用的方法来寻找极值,这就是——梯度下降(Gradient Descent)。
从一元函数开始
我们先在一维情况下理解梯度下降的思想。
考虑函数:
它的图像平滑且有唯一的极小值。
解析解方法
根据以前的方法,最小值点满足:
计算导数:
令其为 0:
难点
方程 很难解析求解,最终解为著名的 Omega 常数:
这说明:解析法在复杂函数中可能很难直接得到结果。
简单的迭代搜索方法
如果解析求解很困难,可以尝试“傻瓜搜索”:
- 选择一个初始点(随便选一个 )。
- 向左、向右各移动一点,得到两个新点 与 。
- 计算这两个点的函数值,选择更小的那个作为新的位置。
- 重复以上步骤,直到左右两边都比当前点大 → 停止。
缺点与改进空间
这种方法能找到近似极小值,但:
- 搜索方向只考虑左右两边,不利用导数信息。
- 收敛速度可能很慢。
过渡到梯度下降
梯度下降通过:
- 利用导数(梯度)信息直接判断下降方向
- 按合适的步长更新位置
- 可以在多维情况下快速找到极小值
梯度下降(Gradient Descent)的核心思想
1. 方向判断
假设你现在在曲线上的某个点:
- 如果在最小值左侧 → 斜率为负 → 说明需要向右走。
- 如果在最小值右侧 → 斜率为正 → 说明需要向左走。
关键: 我们用斜率(导数)来直接判断移动方向。
2. 基本公式
更新规则:
解释:
- 如果 (在左边),减去负数就是加 → 往右走。
- 如果 (在右边),减去正数就是减 → 往左走。
3. 引入学习率(Learning Rate)
问题:
如果在陡峭的地方, 很大,直接用公式会一步跳太远,可能越过最小值甚至跑飞。
解决:
- 引入学习率 (0 < α < 1),控制步长:
- α 越小,步子越稳;α 太大可能震荡甚至发散。
直观类比:
- 离目标远(斜率大) → 步子自然会相对大。
- 离目标近(斜率小) → 步子会变小,避免 overshoot。
4. 梯度下降算法步骤
- 选择初始点
- 选择学习率
- 重复更新:
- 当 的变化量非常小(或迭代次数足够多)时停止。
5. 优势
- 无需直接解 的方程。
学习率(Learning Rate)的影响与局限
1. 学习率的大小
- 过大:步子太大 → 可能直接越过最小值,甚至在两侧震荡,无法收敛。
- 过小:步子太小 → 收敛速度极慢,甚至在有限迭代次数内无法接近最小值。
- 理想:步长合适 → 收敛速度快且稳定。
选择一个“刚刚好”的学习率并不容易,这是一个研究问题。
实际中常用 Adaptive Learning Rate Methods(如 Adam、RMSProp 等)根据训练情况动态调整,但没有保证找到最优值的通用方法。
2. 局部最小值问题
梯度下降会沿着当前的梯度方向前进,因此可能会陷入局部最小值:
- 如果起点在局部最小值的“吸引域”中,算法会收敛到局部最小值,而不是全局最小值。
3. 常见应对方法
- 多次随机初始化(multiple random starts):
- 用不同的起点多次运行梯度下降。
- 增加找到全局最优解或更好解的概率。
- 在深度学习中,还可以结合动量(Momentum)、**随机梯度下降(SGD with noise)**等方法帮助跳出局部最小值。