Momentum 與 Adam

Momentum

傳統梯度下降在狹長山谷中會劇烈震盪。Momentum 加入「慣性」:

$$v_{t+1} = \beta v_t + \nabla L(w_t)$$ $$w_{t+1} = w_t - \eta v_{t+1}$$

Adam

Adam = Momentum + RMSProp,是目前最常用的最佳化器。

Vibe Prompt

「比較 SGD、Momentum、Adam 在 f(x,y)=x²+10y² 上的收斂速度,畫出三個最佳化器的參數軌跡。」

import numpy as np

def adam(grad, w0, lr=0.1, beta1=0.9, beta2=0.999, eps=1e-8, steps=100):
    w = w0.copy()
    m = np.zeros_like(w)
    v = np.zeros_like(w)
    history = [w.copy()]
    for t in range(1, steps+1):
        g = grad(w)
        m = beta1 * m + (1-beta1) * g
        v = beta2 * v + (1-beta2) * g*g
        m_hat = m / (1-beta1**t)
        v_hat = v / (1-beta2**t)
        w = w - lr * m_hat / (np.sqrt(v_hat) + eps)
        history.append(w.copy())
    return w, history

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!