梯度下降家族The Gradient Descent Family
蒙着眼站在山坡上,只能用脚感受脚下的坡度,怎样走到谷底?朝最陡的下坡方向迈一步,再感受,再迈一步。这就是梯度下降。它的几个"亲戚"(动量、Nesterov、RMSProp、Adam)只是在"步子怎么迈"上多动了一点脑筋,却往往决定了你是 10 步到达,还是 10000 步还在山腰打转。 Blindfolded on a hillside, able to feel only the slope under your feet, how do you reach the valley floor? Step in the steepest downhill direction, feel again, step again. That is gradient descent. Its relatives (momentum, Nesterov, RMSProp, Adam) only think a little harder about how to step, yet that often decides whether you arrive in 10 steps or are still circling the hillside after 10,000.
1为什么机器人需要它Why robots need this
训练一个视觉-语言-动作模型 (VLA) 或扩散策略 (diffusion policy),就是调整几亿个参数,让"预测动作与示范动作之间的误差"变小。让机械臂末端到达指定位置的数值逆运动学 (inverse kinematics),是调整几个关节角,让"末端与目标之间的距离"变小。轨迹优化、相机标定、点云配准也一样,都是在一个代价函数上找最低点。
这些问题规模天差地别,但最常用的求解办法都是同一个:沿着梯度往下走。6.1 节讲了怎样把问题写成"最小化 \(f(\x)\)";这一节讲怎样真的走下去,以及为什么同样是往下走,有人 10 步就到了,有人走了一万步还在山腰。
Training a vision-language-action model (VLA) or a diffusion policy means adjusting hundreds of millions of parameters so that "the error between predicted and demonstrated actions" shrinks. Numerical inverse kinematics adjusts a handful of joint angles so that "the distance between the gripper and the target" shrinks. Trajectory optimization, camera calibration and point-cloud registration are the same story: find the lowest point of a cost function.
These problems differ wildly in size, yet the workhorse solver is the same: walk downhill along the gradient. Lesson 6.1 showed how to phrase a problem as "minimize \(f(\x)\)"; this lesson is about actually walking down, and why one walker arrives in 10 steps while another is still on the hillside after ten thousand.
2直觉:蒙眼下山Intuition: walking downhill blindfolded
你看不到整座山,只能感觉脚下的坡度。3.2 节说过,梯度 \(\nabla f\) 指向上坡最陡的方向,它的长度就是坡有多陡。所以最自然的规则是:朝 \(-\nabla f\) 迈一步,步长正比于坡度。比例系数 \(\eta\) 叫学习率 (learning rate),也叫步长。
步子大小是第一个难题。步子太小,走到天黑也到不了;步子太大,一脚跨过谷底,落在对面更高的坡上,然后越跳越高。先在一维里感受一下。
You cannot see the whole mountain, only feel the slope underfoot. From Lesson 3.2, the gradient \(\nabla f\) points in the direction of steepest ascent, and its length is how steep that is. So the natural rule is: step along \(-\nabla f\), with a step proportional to the slope. The proportionality constant \(\eta\) is the learning rate (or step size).
Step size is the first hard problem. Too small and you will not arrive before nightfall; too large and you leap clean over the valley floor onto the higher slope opposite, then bounce higher and higher. Feel it in one dimension first.
- 在抛物线上找一个学习率,让小球每步都跳到对面,却仍然收敛(至少走 4 步)。它和 \(1/a\) 有什么关系?On the parabola, find a learning rate where the ball jumps to the other side every step yet still converges (take at least 4 steps). How does it relate to \(1/a\)?
- 把学习率调大,让它发散。再把曲率 \(a\) 调大一倍:临界学习率怎么变?Raise the learning rate until it diverges. Now double the curvature \(a\): what happens to the critical learning rate?
在抛物线上,一步更新是 \(x \leftarrow x - \eta a x = (1-\eta a)\,x\):每一步都把 \(x\) 乘上同一个数。这个数的绝对值小于 1 才会收敛,于是 \(0 < \eta < 2/a\)。曲率越大,能用的步长越小。记住这句话,下面所有的故事都从它开始。
到了二维,第二个难题出现了:一个方向陡、另一个方向缓的狭长山谷。陡的方向要求小步长,缓的方向却需要大步长才走得动,一个 \(\eta\) 顾不了两头。梯度下降家族的其他成员,就是为这个问题想出的不同办法:
On the parabola one update is \(x \leftarrow x - \eta a x = (1-\eta a)\,x\): every step multiplies \(x\) by the same number. It converges only if that number has magnitude below 1, so \(0 < \eta < 2/a\). The steeper the curvature, the smaller the step you can afford. Keep that sentence in mind; everything below grows out of it.
In two dimensions a second problem appears: a long narrow valley, steep in one direction and gentle in the other. The steep direction demands a small step; the gentle one needs a big step to make progress. One \(\eta\) cannot serve both. The rest of the family are different answers to exactly this problem:
| 形象比喻Picture | 它额外记住了什么What it remembers | |
|---|---|---|
| GD | 蒙眼的人,每步只看脚下A blindfolded walker who only feels the ground underfoot | 什么也不记Nothing |
| Momentum | 一个沉重的铁球,有惯性A heavy ball with inertia | 速度:过去梯度的累积A velocity: the running sum of past gradients |
| Nesterov | 会"看路"的铁球:先按惯性滑一下,再看那里的坡A ball that looks ahead: coast first, then feel the slope there | 速度,外加在"预计落点"处求梯度A velocity, plus the gradient taken at the predicted position |
| RMSProp | 每个坐标各配一个油门:常年陡的方向收着走,常年平的方向放开走A separate throttle per coordinate: ease off where it is always steep, open up where it is always flat | 每个坐标梯度平方的滑动平均A running average of each coordinate's squared gradient |
| Adam | 铁球 + 分坐标油门Heavy ball plus per-coordinate throttles | 梯度的滑动平均和梯度平方的滑动平均Running averages of the gradient and of its square |
梯度只告诉你局部哪边是下坡,不告诉你最低点在哪。所有改进都在回答同一个问题:只凭一路上摸到的坡度,怎样把步子迈得更聪明?动量用历史抵消来回摆动,自适应方法用统计给每个方向配不同的步长。
The gradient tells you only which way is downhill locally, never where the bottom is. Every improvement answers one question: using nothing but the slopes felt along the way, how can you step more cleverly? Momentum uses history to cancel back-and-forth swinging; adaptive methods use statistics to give each direction its own step size.
3动手玩:优化器赛跑Play: the optimizer race
下面是一张"地形图":底色里青色越浓的地方越低,等高线标出等高的位置。点击地图任意位置设定起点,五个优化器会同时出发。右侧可以开关每个优化器、看它的实时更新公式;下方是损失曲线(对数坐标,越往下越接近最小值)。换一种地形、拖一拖滑块,看看谁能赢。
Below is a terrain map: the stronger the cyan tint, the lower the ground, and the contour lines join points of equal height. Click anywhere on the map to set a start point and all five optimizers set off at once. On the right you can toggle each optimizer and watch its live update formula; underneath is the loss curve (log scale: lower is closer to the minimum). Switch terrains, drag the sliders, and see who wins.
- 在 Rosenbrock 香蕉形山谷里,让 Adam 到达最小值 (1, 1)。再看看 GD 在弯弯的谷底爬得有多慢。In the Rosenbrock banana valley, get Adam to the minimum at (1, 1). Then watch how slowly GD crawls along the curved valley floor.
- 让 GD 发散。在二次碗上,临界学习率是多少?(提示:最陡方向的曲率是 2。)Make GD diverge. On the quadratic bowl, what is the critical learning rate? (Hint: the steepest curvature is 2.)
- 在二次碗上把条件数 κ 调到 30 以上,让 Momentum 在 GD 还在路上时就先收敛。On the quadratic bowl, push the condition number κ above 30 and let Momentum converge while GD is still on its way.
多玩几种地形,你会发现没有哪个优化器总是赢。在"双谷"地形上,动量有时能冲过中间的小山包,掉进更深的那个谷;在"鞍点"地形上,GD 会在几乎平坦的鞍点附近犹豫很久,Adam 因为把小梯度"放大"了,往往最先逃出来。
Try several terrains and you will find that no optimizer always wins. On "two minima", momentum can sometimes roll over the hump into the deeper valley; on "saddle", GD dithers for a long time near the almost-flat saddle point, while Adam, which effectively amplifies small gradients, often escapes first.
4为什么会走"之"字:条件数Why the zig-zag: the condition number
在狭长的二次碗里,GD 为什么不直奔谷底?因为梯度垂直于等高线(3.2 节)。在一个扁椭圆上,除了两条主轴,垂直于等高线的方向几乎都指向"对面的谷壁",而不是指向中心。
两个方向的曲率之比叫条件数 \(\kappa = \lambda_{\max}/\lambda_{\min}\),也就是 3.5 节 Hessian 最大和最小特征值之比。κ 越大,碗越扁,GD 的"之"字越密,需要的步数大约随 κ 线性增长。拖动起点和 κ 看看。
Why does GD not head straight for the bottom of a long, narrow bowl? Because the gradient is perpendicular to the contour lines (Lesson 3.2). On a flat ellipse, except along the two principal axes, the perpendicular direction points mostly at the opposite valley wall, not at the center.
The ratio of the two curvatures is the condition number \(\kappa = \lambda_{\max}/\lambda_{\min}\): the ratio of the largest to smallest Hessian eigenvalue from Lesson 3.5. The larger κ, the flatter the bowl, the denser GD's zig-zag, and the number of steps grows roughly linearly in κ. Drag the start point and κ to see it.
注意右图两条线的斜率:GD 那条是 1(步数 ∝ κ),动量那条是 1/2(步数 ∝ √κ)。κ = 100 时,这就是几百步和几十步的差别。神经网络和机器人代价函数的 κ 动辄成千上万,这个差别就是"一晚上训完"和"一周训完"的差别。
Look at the slopes of the two lines on the right: GD's is 1 (steps ∝ κ), momentum's is 1/2 (steps ∝ √κ). At κ = 100 that is the difference between hundreds of steps and dozens. Neural-network and robot cost functions routinely have κ in the thousands or more, where this is the difference between training overnight and training for a week.
5第二个视角:动量是一颗有摩擦的铁球A second view: momentum is a heavy ball with friction
把 GD 想成"没有质量"的点:每一步的速度完全由当前的坡度决定,上一步怎么走的,它全忘了。动量法给这个点加上质量:速度 \(\v\) 先保留上一步的一部分(比例 \(\beta\)),再加上新的坡度。
在狭长山谷里,横穿山谷方向的梯度一正一负,累积起来互相抵消;沿着谷底方向的梯度始终同号,累积起来越滚越快。这正是 2.5 节的弹簧-阻尼系统:\(1-\beta\) 像摩擦,曲率像弹簧刚度。摩擦太小,球会在谷里来回荡(欠阻尼);摩擦太大,球爬得像 GD 一样慢(过阻尼);刚刚好的时候,最快停到底(临界阻尼)。
Think of GD as a massless point: its velocity is set entirely by the current slope, and it forgets how it moved a moment ago. Momentum gives the point mass: the velocity \(\v\) keeps a fraction \(\beta\) of the previous step, then adds the new slope.
In a narrow valley, the across-valley gradients alternate in sign and cancel when accumulated; the along-valley gradients always share a sign and accumulate, so the ball picks up speed. This is the spring–damper of Lesson 2.5: \(1-\beta\) acts as friction and curvature as spring stiffness. Too little friction and the ball sloshes back and forth (underdamped); too much and it crawls like GD (overdamped); just right and it settles fastest (critically damped).
- 调节 β(也可以动 η),让铁球在 60 步以内停到谷底(离最小值小于 0.01)。默认的 β = 0.95 和 β = 0 都做不到。Tune β (and η if you like) so the ball settles at the bottom (within 0.01 of the minimum) in under 60 steps. Neither the default β = 0.95 nor β = 0 manages it.
算法视角:动量是"把过去的梯度做指数加权平均",权重按 \(\beta^k\) 衰减,有效记忆大约 \(1/(1-\beta)\) 步。物理视角:动量是对带阻尼的牛顿方程 \(\ddot{\x} + \gamma\dot{\x} = -\nabla f(\x)\) 的离散化。前者告诉你怎么写代码,后者告诉你 β 该怎么调。
Algorithmic view: momentum is an exponentially weighted average of past gradients, with weights decaying as \(\beta^k\), so its memory is about \(1/(1-\beta)\) steps. Physical view: momentum discretizes the damped Newton equation \(\ddot{\x} + \gamma\dot{\x} = -\nabla f(\x)\). The first tells you how to write the code; the second tells you how to tune β.
6再看数学The math
提示:把鼠标悬停在公式中带底色的符号上,FIG 2 和 FIG 4 中对应的元素会被高亮(梯度方向、步长、速度、Adam 的轨迹)。Tip: hover the highlighted symbols in the formulas; the matching elements in FIG 2 and FIG 4 light up (gradient directions, steps, velocities, Adam's path).
五条更新规则The five update rules
记 \(\mathbf g_k = \nabla f(\x_k)\)。梯度下降:
Write \(\mathbf g_k = \nabla f(\x_k)\). Gradient descent:
动量(heavy ball, Polyak 1964):速度是梯度的累积,位置沿速度走。
Momentum (heavy ball, Polyak 1964): the velocity accumulates gradients and the position follows the velocity.
Nesterov:先按惯性"预支"一步,在预计落点处求梯度,再修正。冲过头时它能更早刹车。
Nesterov: borrow a step of coasting first, take the gradient at the predicted point, then correct. It brakes earlier when overshooting.
RMSProp 和 Adam:用梯度平方的滑动平均 \(\mathbf s\) 给每个坐标单独定步长(平方、开方、除法都按分量进行)。Adam 还对梯度本身做滑动平均 \(\mathbf m\),并做偏差修正:\(\mathbf m, \mathbf s\) 从 0 开始,前几步会偏小,除以 \(1-\beta^{k}\) 把它们拉回正常大小。
RMSProp and Adam: a running average \(\mathbf s\) of squared gradients gives every coordinate its own step size (squares, roots and division are element-wise). Adam also averages the gradient itself, \(\mathbf m\), and applies bias correction: because \(\mathbf m, \mathbf s\) start at 0 they are too small for the first few steps, and dividing by \(1-\beta^{k}\) restores their proper size.
Adam 的一步大致是 \(\eta \cdot \hat m/\sqrt{\hat s}\)。如果梯度方向稳定,\(\hat m/\sqrt{\hat s}\approx \pm 1\),每个坐标都走约 \(\eta\) 那么远,与坡的陡缓无关。这就是为什么 FIG 2 里 Adam 的学习率要单独设置:它的单位是"参数的单位",而不是"参数 / 梯度"。
An Adam step is roughly \(\eta \cdot \hat m/\sqrt{\hat s}\). If the gradient direction is steady, \(\hat m/\sqrt{\hat s}\approx \pm 1\) and every coordinate moves about \(\eta\), regardless of steepness. That is why Adam gets its own learning rate in FIG 2: its units are "units of the parameter", not "parameter per gradient".
二次函数上的精确分析Exact analysis on a quadratic
任何光滑函数在最小值附近都像一个二次碗 \(f(\x)=\tfrac12\x^\top H\x\)(3.5 节的泰勒展开),所以二次函数上的结论处处适用。此时 \(\nabla f = H\x\),GD 的一步是 \(\x_{k+1} = (I-\eta H)\,\x_k\)。在 \(H\) 的特征向量坐标系里,各个方向互不干扰,第 \(i\) 个分量每步乘以 \(1-\eta\lambda_i\),和 FIG 1 的一维情形一模一样:
Near a minimum every smooth function looks like a quadratic bowl \(f(\x)=\tfrac12\x^\top H\x\) (the Taylor expansion of Lesson 3.5), so results on quadratics apply everywhere. Here \(\nabla f = H\x\) and a GD step is \(\x_{k+1} = (I-\eta H)\,\x_k\). In the eigenvector coordinates of \(H\) the directions decouple, and component \(i\) is multiplied by \(1-\eta\lambda_i\) every step, exactly the 1D story of FIG 1:
最慢的方向决定总速度。让最陡和最缓两个方向的收缩率一样好,得到最优步长和收敛率:
The slowest direction sets the overall pace. Balancing the steepest and gentlest directions gives the best step size and its rate:
κ 很大时 \((\kappa-1)/(\kappa+1)\approx 1-2/\kappa\),误差缩小 \(e\) 倍需要约 \(\kappa/2\) 步。动量把每个方向变成一个二阶线性递推(特征方程 \(z^2-(1+\beta-\eta\lambda)z+\beta=0\),FIG 4 右侧实时显示),选 \(\eta = 4/(\sqrt{\lambda_{\max}}+\sqrt{\lambda_{\min}})^2\)、\(\beta = \big(\tfrac{\sqrt\kappa-1}{\sqrt\kappa+1}\big)^2\) 时,所有方向都恰好处在临界附近,收敛率变成:
For large κ, \((\kappa-1)/(\kappa+1)\approx 1-2/\kappa\): shrinking the error by a factor \(e\) takes about \(\kappa/2\) steps. Momentum turns each direction into a second-order linear recurrence (characteristic equation \(z^2-(1+\beta-\eta\lambda)z+\beta=0\), shown live beside FIG 4). With \(\eta = 4/(\sqrt{\lambda_{\max}}+\sqrt{\lambda_{\min}})^2\) and \(\beta = \big(\tfrac{\sqrt\kappa-1}{\sqrt\kappa+1}\big)^2\), every direction sits at or just inside the critical boundary and the rate becomes:
直觉上:GD 的步长被最陡方向"卡住",在最缓的方向上每步只能前进 \(\eta\lambda_{\min}\approx 2/\kappa\) 的比例;动量在缓的方向上积累速度,把这个比例放大到约 \(2/\sqrt\kappa\),同时在陡的方向上靠符号交替的梯度相互抵消,保持稳定。
Intuitively: GD's step is capped by the steepest direction, so along the gentlest direction each step covers only a fraction \(\eta\lambda_{\min}\approx 2/\kappa\) of the remaining distance. Momentum builds up speed along the gentle direction, raising that fraction to about \(2/\sqrt\kappa\), while in the steep direction the alternating-sign gradients cancel and keep it stable.
7机器人中的它:用梯度下降解逆运动学In robotics: inverse kinematics by gradient descent
一个三连杆平面机械臂,关节角 \(\mathbf q = (q_1, q_2, q_3)\),正运动学 \(\mathrm{FK}(\mathbf q)\) 给出末端位置。想让末端到达目标 \(\mathbf t\),就最小化距离的平方:
Take a three-link planar arm with joint angles \(\mathbf q = (q_1, q_2, q_3)\); forward kinematics \(\mathrm{FK}(\mathbf q)\) gives the gripper position. To bring the gripper to a target \(\mathbf t\), minimize the squared distance:
梯度来自链式法则:\(\mathbf e\) 对 \(\mathbf q\) 的导数就是机器人雅可比 \(J\)(3.3、3.4 节),于是 \(\nabla C = J^\top\mathbf e\)。它的含义很直观:每个关节"感受"到的力,等于误差向量在这个关节能推动末端的方向上的投影。拖动黄色目标,看机械臂一步步追过去。
The gradient comes from the chain rule: the derivative of \(\mathbf e\) with respect to \(\mathbf q\) is the robot Jacobian \(J\) (Lessons 3.3 and 3.4), so \(\nabla C = J^\top\mathbf e\). The meaning is intuitive: each joint "feels" the error vector projected onto the direction in which that joint can push the gripper. Drag the amber target and watch the arm chase it step by step.
- 把目标拖到离基座 0.8 以内,让机械臂把自己"折"起来够到它(误差小于 0.01)。哪个优化器最快?Drag the target within 0.8 of the base and let the arm fold itself up to reach it (error below 0.01). Which optimizer is fastest?
工业级 IK 求解器(如 KDL、TRAC-IK)很少用纯梯度下降,而是用阻尼最小二乘 / Levenberg–Marquardt(6.6 节),它利用了 \(J^\top J\) 这个曲率信息,几步就收敛。但在神经网络训练里,参数动辄上亿,算不起 Hessian,Adam / AdamW 就是默认选择:从 ACT、Diffusion Policy 到 RT-2、OpenVLA 一类的 VLA 模型,训练脚本里几乎都写着 AdamW。轨迹优化、可微仿真、NeRF / 3D Gaussian Splatting 场景重建,也大量使用 Adam。
Production IK solvers (KDL, TRAC-IK) rarely use plain gradient descent; they use damped least squares / Levenberg–Marquardt (Lesson 6.6), which exploits the curvature information in \(J^\top J\) and converges in a few steps. But in neural-network training, with parameters in the hundreds of millions, the Hessian is unaffordable and Adam / AdamW is the default: from ACT and Diffusion Policy to VLAs like RT-2 and OpenVLA, the training scripts nearly all say AdamW. Trajectory optimization, differentiable simulation and NeRF / 3D Gaussian Splatting reconstruction lean heavily on Adam too.
8常见误区Common pitfalls
最常见的原因就是学习率太大(\(\eta > 2/\lambda_{\max}\)),参数一步比一步大,最后溢出。反过来,学习率太小时损失曲线几乎是平的,看起来像"模型学不动"。调参的第一步:在对数刻度上扫学习率(如 1e-5、1e-4、1e-3……),先找到"刚好不发散"的那个量级,再往下退一档。
The most common cause is simply a learning rate that is too large (\(\eta > 2/\lambda_{\max}\)): the parameters grow every step until they overflow. Conversely, a learning rate that is too small gives an almost flat loss curve that looks like "the model can't learn". First tuning step: sweep the learning rate on a log scale (1e-5, 1e-4, 1e-3, …), find the order of magnitude that just barely does not diverge, then back off one notch.
相机标定里,焦距约 600 像素,畸变系数约 0.01;轨迹优化里,位置以米计,时间以秒计,力矩以牛·米计。单位不同,曲率就能差好几个数量级,κ 巨大,GD 会走"之"字走到天荒地老。办法是先把每个参数归一化到差不多的量级(或输入特征做标准化);这其实就是在手动做 RMSProp / Adam 自动做的事。
In camera calibration the focal length is about 600 pixels while distortion coefficients are about 0.01; in trajectory optimization positions are in meters, times in seconds and torques in newton-meters. Different units can make curvatures differ by orders of magnitude, κ becomes enormous, and GD zig-zags forever. The fix is to rescale every parameter to a similar magnitude (or standardize input features), which is doing by hand what RMSProp / Adam do automatically.
低维直觉会让你担心掉进局部最小值。但在上百万维的空间里,一个临界点要成为局部最小值,需要所有方向的曲率都向上,这很难;更常见的是鞍点和大片平坦区域:有些方向向上,有些向下,梯度很小,GD 在附近磨蹭很久(FIG 2 的"鞍点"地形)。动量和自适应方法逃离鞍点的速度通常快得多。
Low-dimensional intuition makes you fear local minima. But in a space with millions of dimensions, a critical point is a local minimum only if curvature points up in every direction, which is rare; far more common are saddle points and broad plateaus, curving up in some directions and down in others, with tiny gradients where GD dawdles for ages (the "saddle" terrain in FIG 2). Momentum and adaptive methods usually escape much faster.
\(\eta=10^{-3}, \beta_1=0.9, \beta_2=0.999\) 对很多神经网络是不错的起点,但不是普适答案。Adam 在固定学习率下常常在最小值附近来回抖动(FIG 2 的 RMSProp 也是),所以实际训练要配合学习率衰减;权重衰减要用 AdamW 的"解耦"写法;在一些凸问题或小问题上,调好的 SGD + 动量甚至 L-BFGS 反而更好。
\(\eta=10^{-3}, \beta_1=0.9, \beta_2=0.999\) is a decent starting point for many neural networks, not a universal answer. With a constant learning rate Adam often jitters around the minimum (as RMSProp does in FIG 2), so real training pairs it with learning-rate decay; weight decay should use AdamW's decoupled form; and on some convex or small problems, well-tuned SGD with momentum, or even L-BFGS, does better.
梯度写错一个符号,优化器照样会跑,只是往错误的方向跑,而且很难察觉。上线前用中心差分对比一下:
Get one sign wrong in a gradient and the optimizer still runs, just in a wrong direction, and the bug is hard to spot. Before trusting it, compare against central differences:
误差是 \(O(h^2)\)。相对误差在 1e-6 左右说明梯度没问题,在 1e-2 左右说明一定有 bug。本页 FIG 5 的 \(J^\top\mathbf e\) 就是这样验证过的。
The error is \(O(h^2)\). A relative error around 1e-6 means the gradient is fine; around 1e-2 means there is definitely a bug. The \(J^\top\mathbf e\) in FIG 5 was checked exactly this way.
9小练习Check yourself
10延伸阅读Further reading
- G. Goh, Why Momentum Really Works, Distill, 2017 — 本节 FIG 3、FIG 4 的灵感来源,对动量的特征值分析讲得极好The inspiration for FIG 3 and FIG 4; a superb eigenvalue analysis of momentum
- S. Ruder, An overview of gradient descent optimization algorithms, arXiv:1609.04747 — 各种优化器的简明综述A concise survey of the optimizer zoo
- S. Boyd & L. Vandenberghe, Convex Optimization, Ch. 9 — 无约束极小化:梯度法、最速下降、条件数与收敛分析Unconstrained minimization: gradient methods, steepest descent, conditioning and convergence
- D. P. Kingma & J. Ba, Adam: A Method for Stochastic Optimization, ICLR 2015 — Adam 原论文,包括偏差修正的推导The original Adam paper, including the bias-correction derivation