本实验不用神经网络,而是让梯度下降直接优化一个二维非凸函数。这样做的好处是变量只有 x1,x2,每一步都能算清楚,也能直观看见“沿负梯度方向走”究竟发生了什么。

原题截图引用了协同梯度下降作为背景,但本次要求是不实现该算法,而是自行完成普通梯度下降对 Beale 函数的优化。
Beale 函数
目标函数为:
f(x1,x2)=(1.5−x1+x1x2)2+(2.25−x1+x1x22)2+(2.625−x1+x1x23)2
它的一个全局最小点是:
(x1∗,x2∗)=(3,0.5),f(x1∗,x2∗)=0
令:
g1=1.5−x1+x1x2,g2=2.25−x1+x1x22,g3=2.625−x1+x1x23
则 f=g12+g22+g32。用链式法则可得:
∂x1∂f=2g1(x2−1)+2g2(x22−1)+2g3(x23−1)
∂x2∂f=2g1x1+4g2x1x2+6g3x1x22
梯度就是:
∇f(x1,x2)=[∂f/∂x1∂f/∂x2]
梯度下降更新
每一步沿梯度反方向移动:
x(t+1)=x(t)−η∇f(x(t))
作业采用:
| 设置 | 数值 |
|---|
| 初始点 | (1,1) |
| 学习率 η | 0.01 |
| 迭代次数 | 2000 |
先做一次手算检查。初始点的函数值为:
f(1,1)=1.52+2.252+2.6252=14.203125
此时 x2−1=x22−1=x23−1=0,所以:
∂x1∂f=0
而:
∂x2∂f=2(1.5)+4(2.25)+6(2.625)=27.75
因此第一步为:
(x1,x2):(1,1)→(1,0.7225)
这与原实验报告记录的初始梯度和第一次更新一致,也可以作为检查实现是否写错梯度的小型单元测试。
实验结果

红色轨迹从 (1,1) 出发,先快速降低 x2,再沿弯曲谷地逐步靠近 (3,0.5)。二维等高线能看清参数路径,三维曲面则说明同样的移动对应函数高度不断降低。
经过 2000 次迭代,程序得到:
(x1,x2)=(2.999153,0.499789)
f(x1,x2)=1.149280×10−7
它与理论最优点 (3,0.5) 非常接近,说明在该初始点和学习率下成功收敛。误差没有恰好变成 0,是因为固定迭代次数、有限浮点精度以及固定学习率共同决定了最后的近似精度。
报告记录的关键节点为:
| 记录点 | x1 | x2 | 函数值 | ∂f/∂x1 | ∂f/∂x2 |
|---|
| 初始 | 1.000000 | 1.000000 | 14.203120 | 0.000000 | 27.750000 |
| 第 5 次 | 1.166829 | 0.408813 | 4.655266 | -5.952700 | 6.128977 |
| 第 1999 次 | 2.999153 | 0.499789 | 1.149280×10−7 | -0.000256 | -0.000064 |

线性坐标展示前期下降很快,对数坐标则能看见后期仍持续、近似指数式地减小。Notebook 每轮先记录当前位置再更新,因此最后一行是第 2000 个记录点,对应已完成 1999 次参数更新;上文沿用作业的“2000 次迭代”总预算口径。
为什么学习率重要
η 决定每一步走多远:
- 太小:方向正确,但需要大量迭代;
- 适中:函数值稳定下降并较快到达谷底;
- 太大:可能跨过谷底来回振荡,甚至数值发散。
Beale 函数的不同方向曲率差异明显,等高线不是圆而是狭长弯曲的谷地。固定学习率必须照顾陡峭方向,于是在平缓方向可能前进得很慢。这也是 Momentum、Adam、二阶方法和学习率调度存在的原因。
Notebook 还实际比较了学习率 0.001、0.005、0.01 与 0.02:

在同一初始点和 2000 次预算内,0.001 下降最慢,0.005 和 0.01 依次更快,0.02 在这四组中达到最低函数值。这个结果只说明 0.02 在已测试范围内更快,不能推出继续增大学习率仍会更好;跨过稳定区间后仍可能振荡或发散。
实现时应检查什么
数值梯度校验
解析梯度写完后,可以用中心差分检查:
∂xi∂f≈2hf(x+hei)−f(x−hei)
若两者差异很大,先查求导或代码,不要急着调学习率。
不只看最终点
还应记录每轮函数值、梯度范数与参数轨迹。一个合理的收敛过程通常满足:
f(x(t+1))≲f(x(t))
固定学习率并不严格保证每一步都下降,但若函数值长期剧烈上升,通常意味着步长太大或梯度实现有误。
多个初始点
本实验只从 (1,1) 出发,能说明这一组配置成功,却不能证明任意初始点都能到达全局最优。非凸函数可能存在平坦区、鞍点和不同吸引域,更完整的实验应比较多个初始位置。
可改进方向
- 以 ∥∇f∥<ε 或相邻函数值变化作为提前停止条件;
- 在现有 0.001~0.02 对照之外继续搜索稳定步长边界;
- 加入 Momentum 或 Adam,观察狭长谷地中的速度;
- 比较固定学习率与学习率衰减策略;
- 重复多个初始点,区分算法能力与一次幸运初始化。
实验结论
在初始点 (1,1)、学习率 0.01 和 2000 次迭代的设置下,梯度下降把 Beale 函数从 14.203125 降到约 1.15×10−7,并到达理论最优点附近。这个小实验完整展示了机器学习训练的基本骨架:定义目标函数、计算梯度、选择步长、迭代更新,再用数值与曲线验证收敛。