# 二次损失的梯度下降与停止条件

[[MCS/day5/00 学习指南|day5 学习指南]] · [[MCS/00 MCS学习总览|十一天总览]] · [[MCS/day5/阅读核验与疑问|阅读核验与疑问]] · 上一篇：[[MCS/day5/01 导数、偏导与梯度|导数、偏导与梯度]]

> 来源：[[MCS/day5导数与梯度|day5导数与梯度]]。用途：主线。原有推导、追问与解答保留；阅读时请结合本日核验说明。

## 梯度下降与收敛性：用二次损失函数为例

### 一、例子：用二次损失函数做梯度下降

#### 1. 设定问题

假设：

- 训练数据：输入 $x = 1$，真实标签 $y = 2$
- 模型：$\hat{y} = w \cdot x = w$
- 损失函数用均方误差（只有一个样本）：

$$
L(w) = (y - \hat{y})^2 = (2 - w)^2
$$

这个函数的图像是一个开口向上的抛物线，最低点在 $w = 2$。

导数：

$$
\frac{dL}{dw} = -2(2 - w) = 2(w - 2)
$$

---

#### 2. 初始化

- 初始参数：$w_0 = 0$
- 学习率：$\eta = 0.3$
- 收敛阈值：$\varepsilon = 0.01$，$\delta = 0.01$

初始损失：

$$
L(w_0) = (2 - 0)^2 = 4
$$

---

#### 3. 第 1 次迭代

求导：

$$
\left. \frac{dL}{dw} \right|_{w=0} = 2(0 - 2) = -4
$$

更新：

$$
w_1 = w_0 - \eta \cdot \frac{dL}{dw}
= 0 - 0.3 \times (-4)
= 1.2
$$

新损失：

$$
L(w_1) = (2 - 1.2)^2 = 0.64
$$

损失从 4 降到 0.64，变化量：

$$
|L(w_1) - L(w_0)| = |0.64 - 4| = 3.36 > 0.01
$$

还没收敛，继续。

---

#### 4. 第 2 次迭代

求导：

$$
\left. \frac{dL}{dw} \right|_{w=1.2} = 2(1.2 - 2) = -1.6
$$

更新：

$$
w_2 = 1.2 - 0.3 \times (-1.6)
= 1.2 + 0.48
= 1.68
$$

新损失：

$$
L(w_2) = (2 - 1.68)^2 = 0.1024
$$

损失变化：

$$
|0.1024 - 0.64| = 0.5376 > 0.01
$$

继续。

---

#### 5. 第 3 次迭代

求导：

$$
\left. \frac{dL}{dw} \right|_{w=1.68} = 2(1.68 - 2) = -0.64
$$

更新：

$$
w_3 = 1.68 - 0.3 \times (-0.64)
= 1.68 + 0.192
= 1.872
$$

新损失：

$$
L(w_3) = (2 - 1.872)^2 = 0.016384 \approx 0.0164
$$

损失变化：

$$
|0.0164 - 0.1024| = 0.086 > 0.01
$$

继续。

---

#### 6. 第 4 次迭代

求导：

$$
\left. \frac{dL}{dw} \right|_{w=1.872} = 2(1.872 - 2) = -0.256
$$

更新：

$$
w_4 = 1.872 - 0.3 \times (-0.256)
= 1.872 + 0.0768
= 1.9488
$$

新损失：

$$
L(w_4) = (2 - 1.9488)^2 \approx 0.00262144 \approx 0.00262
$$

损失变化：

$$
|0.00262 - 0.0164| = 0.01378 > 0.01
$$

还差一点。

---

#### 7. 第 5 次迭代

求导：

$$
\left. \frac{dL}{dw} \right|_{w=1.9488} = 2(1.9488 - 2) = -0.1024
$$

更新：

$$
w_5 = 1.9488 - 0.3 \times (-0.1024)
= 1.9488 + 0.03072
= 1.97952
$$

新损失：

$$
L(w_5) = (2 - 1.97952)^2 \approx 0.00041943 \approx 0.000419
$$

损失变化：

$$
|0.000419 - 0.00262| \approx 0.0022 < 0.01
$$

满足收敛条件 1，停止。

---

#### 8. 迭代过程汇总

| 迭代 | $w_t$ | 导数 $dL/dw$ | $w_{t+1}$ | 损失 $L$ | 损失变化 |
|------|----------|----------------|-------------|------------|----------|
| 0 | 0 | -4 | 1.2 | 4 | — |
| 1 | 1.2 | -1.6 | 1.68 | 0.64 | 3.36 |
| 2 | 1.68 | -0.64 | 1.872 | 0.1024 | 0.5376 |
| 3 | 1.872 | -0.256 | 1.9488 | 0.0164 | 0.086 |
| 4 | 1.9488 | -0.1024 | 1.97952 | 0.00262 | 0.0138 |
| 5 | 1.97952 | -0.04096 | 1.991808 | 0.0000671 | 0.00035 |

最终参数 $w \approx 1.98$，非常接近真实最优值 $w = 2$。

注意：原表中第 5 行的“导数”和“$w_{t+1}$”与前面递推不完全一致，这里按正确递推修正：

第 5 次迭代时：

$$
\left. \frac{dL}{dw} \right|_{w=1.97952} = 2(1.97952 - 2) = -0.04096
$$

如果继续更新：

$$
w_6 = 1.97952 - 0.3 \times (-0.04096)
= 1.97952 + 0.012288
= 1.991808
$$

对应损失：

$$
L(w_6) = (2 - 1.991808)^2 \approx 0.0000671
$$

---

### 二、收敛判断说明

两个常见收敛条件：

#### 条件 1：损失函数变化小于阈值

$$
|L(w_{t+1}) - L(w_t)| < \varepsilon
$$

上面第 5 次迭代时：

$$
0.0022 < 0.01
$$

满足，可以停。

#### 条件 2：梯度范数接近于 0

$$
\left| \frac{dL}{dw} \right| < \delta
$$

第 5 次迭代时梯度：

$$
\left| \frac{dL}{dw} \right| = |-0.04096| \approx 0.041 > 0.01
$$

还没满足。如果只按条件 2，需要继续迭代到梯度更小。

实际中通常两个条件满足其一，或两个都满足才停。这个例子里条件 1 先满足。

---

### 三、从例子中得到的直观结论

1. 导数的符号决定方向：
   - 导数为负 -> 参数增大
   - 导数为正 -> 参数减小

2. 学习率决定步长：
   - $\eta = 0.3$ 时，每次走一大步，逐渐逼近最优。

3. 越靠近谷底，梯度越小：
   - 所以步长自动变小，最后慢慢收敛。

4. 收敛判断：
   - 可以用损失变化，也可以用梯度大小，两者不一定同时满足。

---

### 四、梯度下降能收敛的条件

#### 1. 先给结论

梯度下降能收敛到最优，通常需要满足：

- 损失函数是凸函数（或至少局部凸），且存在最小值；
- 学习率足够小，且满足一定条件；
- 梯度不会消失或爆炸；
- 函数足够光滑（可导、导数连续等）。

如果这些条件不满足，梯度下降可能不收敛，甚至发散。

---

#### 2. 为什么二次函数例子一定会收敛？

你那个例子：

$$
L(w) = (2 - w)^2
$$

它有两个关键性质：

1. 它是凸函数。
   图像是一个碗，只有一个最低点 $w = 2$。
   不管从哪出发，只要沿着梯度反方向走，最终都会滑到碗底。

2. 梯度随距离线性减小。

$$
\frac{dL}{dw} = 2(w - 2)
$$

   离最优越近，梯度越小，步长自动变小，所以不会冲过头。

3. 学习率选得合适。

$$
\eta = 0.3
$$

   对这个函数，只要 $0 < \eta < 1$（更严格地，$0 < \eta < 2 / L''$，这里 $L'' = 2$，所以 $0 < \eta < 1$），就一定收敛。

你可以把它看成一个递推：

$$
w_{t+1} - 2 = (1 - 2\eta)(w_t - 2)
$$

每迭代一次，离最优点的距离就乘以 $|1 - 2\eta|$。

- 当 $\eta = 0.3$，$|1 - 0.6| = 0.4 < 1$，距离每次缩小到 40%，所以指数收敛。
- 当 $\eta = 1$，$|1 - 2| = 1$，距离不缩小，来回震荡。
- 当 $\eta > 1$，$|1 - 2\eta| > 1$，距离越来越大，发散。

所以“慢慢收敛”是因为每步都在把误差乘以一个小于 1 的系数。

---

#### 3. 一般情况下的收敛直觉

对任意凸函数，在最优附近可以用二次函数近似：

$$
L(w) \approx L(w^*) + \frac{1}{2} L''(w^*)(w - w^*)^2
$$

梯度下降就变成：

$$
w_{t+1} - w^* \approx (1 - \eta L''(w^*))(w_t - w^*)
$$

只要：

$$
0 < \eta < \frac{2}{L''(w^*)}
$$

误差就会每步缩小，最终收敛。

这就是为什么学习率不能太大：太大会让这个乘数绝对值超过 1，误差反而放大。

---

### 五、什么时候不一定收敛？

1. 非凸函数
   比如有多个山谷。梯度下降可能掉进局部极小，不一定到全局最优。

2. 学习率太大
   如上面所示，可能震荡或发散。

3. 学习率太小
   收敛极慢，虽然理论上会收敛，但实际可能算不完。

4. 鞍点或平坦区域
   梯度接近 0，但并不是最小值，可能卡住。

5. 函数不可导或梯度不连续
   比如 V 字形 $L(w) = |w|$，在 $w = 0$ 处不可导，严格来说不能用标准梯度下降，要用次梯度方法。

6. 随机梯度下降（SGD）
   每次用一小批数据，梯度有噪声，不会精确停在最优点，而是在最优点附近震荡。这时靠减小学习率（学习率衰减）才能逼近。

---

### 六、一句话总结

梯度下降能收敛，不是因为“梯度下降”这个名字有魔力，而是因为：

在凸函数 + 合适学习率的条件下，每次更新都会把“离最优点的距离”乘以一个小于 1 的系数，所以误差指数衰减，最终逼近最优。

如果函数非凸、学习率不当、或者梯度有噪声，就不一定收敛，甚至可能发散。

---

### 七、梯度的定义

梯度就是把所有偏导数打包成一个向量：

$$
\nabla L(w_1, w_2, \dots, w_n)
= \left(
\frac{\partial L}{\partial w_1},
\frac{\partial L}{\partial w_2},
\dots,
\frac{\partial L}{\partial w_n}
\right)
$$

- 它是一个向量。
- 每个分量告诉你：只动那个参数时，损失函数变化有多快。
- 梯度向量的方向，指向函数上升最快的方向。
- 梯度向量的长度（范数），表示最陡方向上的斜率大小。
