切平面的概念

  • 一元情况下:切线是函数曲线在某点的最佳线性近似。
  • 二元情况下:切平面是曲面在某点的最佳平面近似。
  • 切平面由两个方向的切线确定。

偏导数的定义

  • 符号表示
    • :对 求偏导, 视为常数
    • :对 求偏导, 视为常数
  • 规则:
    1. 选定一个自变量,对其求导。
    2. 其他变量视为常数(导数为 )。
    3. 用普通的一元微分法则计算。

梯度(Gradient)是由所有偏导数组成的向量:

多元函数的极值点要求 所有偏导数都为 0,切平面平行于水平面。多元优化的第一步,就是 解方程组

从导数到梯度下降

前面我们学过如何用导数梯度解决优化问题。
但在高维情况下,想要解析解往往会变得非常复杂,甚至难以求解。
因此需要一种迭代通用的方法来寻找极值,这就是——梯度下降(Gradient Descent)


从一元函数开始

我们先在一维情况下理解梯度下降的思想。
考虑函数:

它的图像平滑且有唯一的极小值。


解析解方法

根据以前的方法,最小值点满足:

计算导数:

令其为 0:


难点

方程 很难解析求解,最终解为著名的 Omega 常数

这说明:解析法在复杂函数中可能很难直接得到结果


简单的迭代搜索方法

如果解析求解很困难,可以尝试“傻瓜搜索”:

  1. 选择一个初始点(随便选一个 )。
  2. 向左、向右各移动一点,得到两个新点
  3. 计算这两个点的函数值,选择更小的那个作为新的位置。
  4. 重复以上步骤,直到左右两边都比当前点大 → 停止。

缺点与改进空间

这种方法能找到近似极小值,但:

  • 搜索方向只考虑左右两边,不利用导数信息。
  • 收敛速度可能很慢。

过渡到梯度下降

梯度下降通过:

  • 利用导数(梯度)信息直接判断下降方向
  • 按合适的步长更新位置
  • 可以在多维情况下快速找到极小值

梯度下降(Gradient Descent)的核心思想

1. 方向判断

假设你现在在曲线上的某个点:

  • 如果在最小值左侧 → 斜率为负 → 说明需要向右走。
  • 如果在最小值右侧 → 斜率为正 → 说明需要向左走。

关键: 我们用斜率(导数)来直接判断移动方向。


2. 基本公式

更新规则:

解释:

  • 如果 (在左边),减去负数就是加 → 往右走。
  • 如果 (在右边),减去正数就是减 → 往左走。

3. 引入学习率(Learning Rate)

问题:
如果在陡峭的地方, 很大,直接用公式会一步跳太远,可能越过最小值甚至跑飞。

解决:

  • 引入学习率 (0 < α < 1),控制步长:
  • α 越小,步子越稳;α 太大可能震荡甚至发散。

直观类比:

  • 离目标远(斜率大) → 步子自然会相对大。
  • 离目标近(斜率小) → 步子会变小,避免 overshoot。

4. 梯度下降算法步骤

  1. 选择初始点
  2. 选择学习率
  3. 重复更新:
  4. 的变化量非常小(或迭代次数足够多)时停止。

5. 优势

  • 无需直接解 的方程。

学习率(Learning Rate)的影响与局限

1. 学习率的大小

  • 过大:步子太大 → 可能直接越过最小值,甚至在两侧震荡,无法收敛。
  • 过小:步子太小 → 收敛速度极慢,甚至在有限迭代次数内无法接近最小值。
  • 理想:步长合适 → 收敛速度快且稳定。

选择一个“刚刚好”的学习率并不容易,这是一个研究问题。
实际中常用 Adaptive Learning Rate Methods(如 Adam、RMSProp 等)根据训练情况动态调整,但没有保证找到最优值的通用方法。


2. 局部最小值问题

梯度下降会沿着当前的梯度方向前进,因此可能会陷入局部最小值

  • 如果起点在局部最小值的“吸引域”中,算法会收敛到局部最小值,而不是全局最小值。

3. 常见应对方法

  • 多次随机初始化(multiple random starts):
    • 用不同的起点多次运行梯度下降。
    • 增加找到全局最优解或更好解的概率。
  • 在深度学习中,还可以结合动量(Momentum)、**随机梯度下降(SGD with noise)**等方法帮助跳出局部最小值。