CS236 補充課 A · 數學工具箱
CS236 補充課 A · 前置數學

數學工具箱:只學過微積分也能讀懂的前置數學

後面幾堂補充課和第 7–18 講的推導,反覆用到同一小組數學:Taylor 展開、梯度、矩陣、Jacobian、散度、Hessian、√n、摺積,以及高斯分佈的運算。這一頁假設你只學過單變數微積分,從頭把它們講清楚。每個工具都會寫出為什麼需要它、一個可以手算的例子,以及完整的推導。

先修:單變數微積分(導數、積分、連鎖律) 預計閱讀 2–3 小時,可以分次讀

讀完這頁你應該能夠

  1. 用 Taylor 展開把函數在一點附近近似成直線或拋物線,並說明 \(O(h^2)\) 是什麼意思。
  2. 算出偏導和梯度,說明 score \(\nabla_{\mathbf x}\log p(\mathbf x)\) 為什麼指向高機率區,以及為什麼不需要歸一化常數。
  3. 把矩陣看成平面的變換;手算 2×2 矩陣的行列式、trace、特徵值與特徵向量,並說出三者的關係。
  4. 寫出 Jacobian,說明它為什麼是非線性函數的局部線性近似,以及 \(|\det J|\) 的意義。
  5. 用兩種方法推導「散度 = Jacobian 的 trace = 面積的相對變化率」,並區分向量場的散度和 KL divergence。
  6. 說出 Jacobian 和 Hessian 的行列式、trace 各自的意義。
  7. 說明獨立隨機變數相加時為什麼是變異數相加,所以 \(n\) 步隨機漫步的寬度是 \(\sqrt n\)。
  8. 解釋摺積是什麼,為什麼「隨機變數相加」對應「密度摺積」。
  9. 用配方推導高斯密度相乘的結果,並用同一個工具算出去雜訊的最佳猜測,說明它為什麼會往平均收縮。

00怎麼讀這一頁

補充課共七堂,順序是 A(本頁)→ B 微分方程 → C 連續方程 → D Markov 鏈與 MCMC → E 布朗運動與 SDE → F Fokker–Planck 與 Langevin → G 連續時間 Markov 鏈。

這一頁的目標是讓你每一步都跟得上,不是追求數學上的嚴謹。所以函數一律假設夠平滑,極限也不特別討論。讀的時候可以這樣做:

  • 綠色線標示的「手算」區塊,拿紙筆算一次。公式是從這些例子長出來的。
  • 每個 demo 前面都寫了要看什麼。先猜結果,再動手拖。
  • 每節最後有一句話摘要,和一題附答案的小練習。答得出來再往下讀。
  • 「背景補充」框是選讀,跳過也不影響後面。

後面幾節有依賴關係:第 3 節(矩陣)→ 第 4 節(特徵值)→ 第 5 節(Jacobian)→ 第 6 節(散度)→ 第 7 節(Hessian)。如果只是回來查某個工具,可以直接跳到那一節。

01導數與 Taylor 展開:把曲線在一點附近看成直線

為什麼需要它

幾乎所有推導都有同一個動作:函數太複雜,但我們只走一小步,所以把它在附近換成一條直線或拋物線。Euler 法、Itô 公式、Tweedie 公式都是這樣來的。

一階:切線

導數 \(f'(x_0)\) 是函數在 \(x_0\) 的斜率。斜率的意思是「往右走 1,函數大約變多少」,所以往右走一小步 \(h\),函數大約改變 \(f'(x_0)\,h\):

$$f(x_0 + h)\approx f(x_0) + f'(x_0)\,h$$

右邊就是切線。這不是新的公式,只是把導數的定義 \(f'(x_0)\approx\frac{f(x_0+h)-f(x_0)}{h}\) 移項。

hf′(x₀)·h誤差x₀x₀+h切線f(x)
切線只用了「起點的值」和「起點的斜率」。橙色線段是真實函數和切線的差距,也就是誤差。
手算

\(f(x) = x^2\),\(x_0 = 3\),所以 \(f(3) = 9\)、\(f'(3) = 6\)。

  • \(h = 0.1\):切線給 \(9 + 6\times0.1 = 9.6\),真值 \(3.1^2 = 9.61\),誤差 \(0.01\)。
  • \(h = 0.05\):切線給 \(9.3\),真值 \(9.3025\),誤差 \(0.0025\)。

\(h\) 減半,誤差變成 \(1/4\)。這裡的誤差剛好是 \(h^2\),因為 \((3+h)^2 = 9 + 6h + h^2\)。

大 O 記號

像上面這樣「誤差大約和 \(h^2\) 成正比」的情況,寫成 \(O(h^2)\),讀作「\(h^2\) 量級的東西」。我們不在乎前面的係數,只在乎 \(h\) 縮小時它掉得多快:

誤差\(h\) 減半時,誤差變成\(h = 0.01\) 時大約
\(O(h)\)\(1/2\)\(0.01\)
\(O(h^2)\)\(1/4\)\(0.0001\)
\(O(h^3)\)\(1/8\)\(0.000001\)

\(h\) 是小於 1 的小量,所以指數越大,東西越小。

二階:加上「斜率本身也在變」

切線假設斜率不變,但斜率其實在變,變化率是 \(f''\)。加一個 \(h^2\) 的項來修正,得到拋物線:

$$\begin{aligned}f(x_0 + h) ={}& f(x_0) + f'(x_0)\,h\\&+ \tfrac12 f''(x_0)\,h^2 + O(h^3)\end{aligned}$$

係數為什麼是 \(\tfrac12\)?設 \(g(h) = f(x_0) + f'(x_0)h + ch^2\),要讓 \(g\) 在 \(h = 0\) 的二階導數和 \(f\) 一樣。微分兩次得 \(g''(h) = 2c\),所以 \(2c = f''(x_0)\),也就是 \(c = \tfrac12f''(x_0)\)。繼續做下去,第 \(k\) 項就是 \(\frac{1}{k!}f^{(k)}(x_0)h^k\)。

手算

\(f(x) = e^x\),\(x_0 = 0\)。\(e^x\) 微分後還是自己,所以 \(f(0) = f'(0) = f''(0) = 1\),得到 \(e^h\approx1 + h + \tfrac12h^2\)。

\(h\)\(e^h\)一階的誤差二階的誤差
0.21.221400.021400.00140
0.11.105170.005170.00017

\(h\) 減半時,一階的誤差變成約 \(0.24\) 倍(接近 \(1/4\)),二階的誤差變成約 \(0.12\) 倍(接近 \(1/8\))。

Demo A1 · 切線(一階)與拋物線(二階)近似

怎麼看:把 \(h\) 拉大再拉小,看兩條近似線何時離開曲線。再看讀數裡「\(h\) 減半時誤差變成原來的幾倍」,\(h\) 越小,它們越接近理論的 \(1/4\) 和 \(1/8\)。
f(x)一階(切線)二階(拋物線)

選「log p(x)」時,雙峰密度的 log 在兩峰之間彎曲得很厲害,切線只在很近的地方才準。後面的 Langevin 取樣就是沿著這條曲線的斜率走小步,所以步長不能太大。

一句話帶走:函數在一點附近可以用「值+斜率×步長+½曲率×步長²」近似;留幾階,誤差就小到下一階的量級。
小練習:\(\sqrt{x}\) 在 \(x_0 = 4\) 的一階近似,估計 \(\sqrt{4.1}\)。
\(f'(x) = \frac{1}{2\sqrt x}\),\(f'(4) = 0.25\)。所以 \(\sqrt{4.1}\approx2 + 0.25\times0.1 = 2.025\),真值約 \(2.02485\)。
在 CS236 哪裡用到:補充課 B 的 Euler 法(只留一階);補充課 E 的 Itô 公式(二階項不能丟);第 16 講「DDPM 的一步 ≈ 反向 SDE 的一步」忽略的 \(O(\beta_t^2)\)。

02多變數:偏導、梯度,以及 score

為什麼需要它

資料(例如一張圖)有很多個座標,所以要處理多變數函數。CS236 後半最重要的物件 score,就是一個梯度。

偏導:只動一個變數

兩個變數的函數 \(f(x, y)\) 可以想成地形圖,\(f\) 是高度。偏導 \(\partial f/\partial x\) 是「固定 \(y\)、只往 \(x\) 方向走」的斜率。算法就是把 \(y\) 當成常數,照平常微分。

手算

\(f(x, y) = x^2 + 3xy\)。把 \(y\) 當常數,\(\partial f/\partial x = 2x + 3y\);把 \(x\) 當常數,\(\partial f/\partial y = 3x\)。在 \((1, 2)\) 得到 \(8\) 和 \(3\)。

驗算:\(f(1, 2) = 7\)。\(x\) 多走 0.01:\(f(1.01, 2) = 7.0801\),增加約 \(8\times0.01\)。\(y\) 多走 0.01:\(f(1, 2.01) = 7.03\),增加 \(3\times0.01\)。

梯度:把偏導排成向量

$$\nabla f(x,y) = \Big(\frac{\partial f}{\partial x},\ \frac{\partial f}{\partial y}\Big)$$

同時往兩個方向走一小步 \(\mathbf h = (h_1, h_2)\) 時,兩邊的改變量加起來:

$$\begin{aligned}f(\mathbf x + \mathbf h)&\approx f(\mathbf x) + \frac{\partial f}{\partial x}h_1 + \frac{\partial f}{\partial y}h_2\\&= f(\mathbf x) + \nabla f(\mathbf x)\cdot\mathbf h\end{aligned}$$

這就是多變數的一階 Taylor 展開,\(\cdot\) 是內積(對應座標相乘再相加)。上面的例子中,\(\mathbf h = (0.01, 0.01)\) 給出 \(7 + 0.08 + 0.03 = 7.11\),真值是 \(7.1104\)。

為什麼梯度指向上升最快的方向

內積也可以寫成 \(\nabla f\cdot\mathbf h = \Vert\nabla f\Vert\,\Vert\mathbf h\Vert\cos\theta\),\(\theta\) 是兩個向量的夾角。步長 \(\Vert\mathbf h\Vert\) 固定時,要讓 \(f\) 增加最多,就要讓 \(\cos\theta\) 最大,也就是 \(\theta = 0\):順著梯度走。這時每走一單位,\(f\) 增加 \(\Vert\nabla f\Vert\),所以梯度的長度就是最陡方向的斜率。\(\theta = 90°\) 時增加量是 0,所以等高線和梯度垂直。

score:log 密度的梯度

機率密度 \(p(\mathbf x)\) 也是一片地形:高機率的地方是山峰。它的 score 定義為

$$\mathbf s(\mathbf x) = \nabla_{\mathbf x}\log p(\mathbf x)$$

它是一個向量場:空間裡每一點都有一支箭頭。下標 \(\mathbf x\) 提醒我們是對資料微分,不是對模型參數微分。

為什麼要取 log?有兩個原因。第一,由連鎖律 \(\frac{d}{dx}\log p = \frac{p'}{p}\),所以 score 的方向和 \(\nabla p\) 相同,同樣指向高機率區;除以 \(p\) 只是調整長度。第二,也是關鍵的一點:歸一化常數會消失。很多模型只能寫出 \(p(\mathbf x) = \tilde p(\mathbf x)/Z\),其中 \(Z\) 是算不出來的積分。取 log 後:

$$\begin{aligned}\nabla_{\mathbf x}\log\frac{\tilde p(\mathbf x)}{Z}&= \nabla_{\mathbf x}\big(\log\tilde p(\mathbf x) - \log Z\big)\\&= \nabla_{\mathbf x}\log\tilde p(\mathbf x)\end{aligned}$$

\(\log Z\) 是不隨 \(\mathbf x\) 改變的常數,微分後是 0。所以不知道 \(Z\) 也能算 score。

手算:高斯的 score

\(p(x) = \frac{1}{\sigma\sqrt{2\pi}}\exp\!\big(-\frac{(x-\mu)^2}{2\sigma^2}\big)\)。取 log,指數和常數分開:

$$\log p(x) = -\frac{(x-\mu)^2}{2\sigma^2} - \log(\sigma\sqrt{2\pi})$$

對 \(x\) 微分,第二項是常數,第一項用連鎖律:

$$s(x) = -\frac{2(x-\mu)}{2\sigma^2} = -\frac{x-\mu}{\sigma^2}$$

在 \(\mu\) 右邊是負的(往左指),在 \(\mu\) 左邊是正的(往右指),永遠指向平均,離得越遠越大。\(\mathcal N(0,1)\) 在 \(x = 2\) 的 score 是 \(-2\),在 \(x = -1\) 是 \(+1\)。

+3+2+1−1−2−30p(x) = N(0, 1)score
標準常態的 score \(s(x) = -x\)。箭頭一律指向峰,離峰越遠越長;在峰頂是 0。

Demo A2 · 三個高斯混合的 score 場(點一下畫布)

怎麼看:灰色箭頭是每一點的 score。點畫布上任一點,橙色路徑會一直沿著 score 走。試試點在兩個峰的中間,看它會去哪一個峰。
密度(越深越高)score 方向從你點的位置沿 score 爬升
  • 兩峰之間有一條「分水嶺」,箭頭在那裡分道揚鑣。橙色路徑會爬到最近的峰,不一定是最高的峰,而且爬上去就不會離開。第 12–13 講的 Langevin 取樣多加一點雜訊,就是為了解決這個問題(補充課 F)。
  • 離所有峰很遠的地方 score 很大,和上面手算的 \(-(x-\mu)/\sigma^2\) 一致(畫面上的箭頭長度有壓縮過,看讀數才準)。
一句話帶走:梯度指向上升最快的方向;score 是 log 密度的梯度,它指向高機率區,而且算的時候不需要歸一化常數。
小練習:\(p(x)\propto e^{-x^4}\)。\(x = 1\) 的 score 是多少?需要知道歸一化常數嗎?
\(\log p = -x^4 - \log Z\),所以 \(s(x) = -4x^3\),\(s(1) = -4\)。不需要知道 \(Z\)。
在 CS236 哪裡用到:第 12 講的 score function 與 score matching;第 13–14 講的 score-based model;第 16 講的 \(\boldsymbol\epsilon_\theta = -\sqrt{1-\bar\alpha_t}\,\mathbf s_\theta\)。

03向量與矩陣:矩陣是一個把平面變形的動作

為什麼需要它

後面的 Jacobian、特徵值、線性 ODE、Markov 鏈全都建立在矩陣上。如果只把矩陣當成一張數字表,這些東西會很難懂。所以要換一個看法:矩陣是一個動作,它把每個向量送到另一個向量。

矩陣乘向量

2×2 矩陣有兩列兩行。「列」(row)是橫的,「行」(column)是直的。矩陣乘向量的算法是:

$$\begin{aligned}A\mathbf x &= \begin{bmatrix}a&b\\c&d\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}ax + by\\cx + dy\end{bmatrix}\\[4pt]&= x\begin{bmatrix}a\\c\end{bmatrix} + y\begin{bmatrix}b\\d\end{bmatrix}\end{aligned}$$

最右邊的寫法最重要:結果是 \(A\) 的兩行的組合,係數就是 \(x\) 和 \(y\)。特別地,\(\mathbf e_1 = (1,0)\) 被送到第一行,\(\mathbf e_2 = (0,1)\) 被送到第二行。所以只要看矩陣的兩行,就知道兩個基本方向被送到哪裡;其他向量都是它們的組合,也跟著決定了。

手算

\(A = \begin{bmatrix}2&1\\0&1\end{bmatrix}\),\(\mathbf x = (1, 1)\)。逐列算:\(2\cdot1 + 1\cdot1 = 3\),\(0\cdot1 + 1\cdot1 = 1\),得到 \((3, 1)\)。

用行的組合算:\(1\cdot(2, 0) + 1\cdot(1, 1) = (3, 1)\)。答案相同。

e₁ = (1, 0)e₂ = (0, 1)面積 1Ae₁ = (2, 0)Ae₂ = (1, 1)面積 2A
\(A = \begin{bmatrix}2&1\\0&1\end{bmatrix}\)。藍色箭頭 \(\mathbf e_1\) 被送到第一行 \((2,0)\),橙色箭頭 \(\mathbf e_2\) 被送到第二行 \((1,1)\)。整個單位正方形被送成平行四邊形,方格線的直線仍然是直線。

這種「直線還是直線、原點不動」的變換叫線性變換,它把整個平面均勻地變形。常見的幾種:

矩陣動作
\(\begin{bmatrix}1&0\\0&1\end{bmatrix} = I\)什麼都不做(單位矩陣)
\(\begin{bmatrix}2&0\\0&0.5\end{bmatrix}\)\(x\) 方向拉長 2 倍,\(y\) 方向壓成一半
\(\begin{bmatrix}0&-1\\1&0\end{bmatrix}\)逆時針轉 90°
\(\begin{bmatrix}1&1\\0&1\end{bmatrix}\)剪切:像把一疊紙推斜,底不動

矩陣相乘就是連續做兩個動作:\(AB\mathbf x\) 是先做 \(B\),再做 \(A\)。所以反覆乘 \(A^k\) 是把同一個動作做 \(k\) 次。

一句話帶走:矩陣的兩行告訴你 \(\mathbf e_1, \mathbf e_2\) 被送到哪裡,它們決定了整個平面的變形方式。
小練習:\(A = \begin{bmatrix}0&-1\\1&0\end{bmatrix}\),\(A(2, 1)\) 是什麼?畫出來確認它是轉了 90°。
\(2\cdot(0, 1) + 1\cdot(-1, 0) = (-1, 2)\)。\((2,1)\) 和 \((-1,2)\) 的內積是 \(-2 + 2 = 0\),互相垂直,長度也相同。

04行列式、特徵值、trace:從矩陣讀出三個數字

行列式:面積變成幾倍

線性變換把單位正方形(面積 1)送成平行四邊形。因為變形是均勻的,所有形狀的面積都乘上同一個倍數。這個倍數就是行列式:

$$\det A = ad - bc$$

推導:平行四邊形的兩邊是兩行 \((a,c)\) 和 \((b,d)\)。用一個大矩形把它框起來,再減掉多出來的部分:

(a, c)(b, d)abcd½ac½ac½bd½bdbcbc
大矩形邊長 \(a+b\) 和 \(c+d\)。多出來的部分是兩個 \(\tfrac12ac\) 的三角形、兩個 \(\tfrac12bd\) 的三角形、兩個 \(bc\) 的矩形。
$$\begin{aligned}&(a+b)(c+d) - ac - bd - 2bc\\={}&ac + ad + bc + bd - ac - bd - 2bc\\={}&ad - bc\end{aligned}$$

圖上的 \(a = 3, c = 1, b = 1, d = 2\):\(12 - 3 - 2 - 2 = 5\),也等於 \(ad - bc = 6 - 1\)。

  • 正負號:負的代表平面被翻面了,像照鏡子。面積倍數看絕對值 \(|\det A|\)。
  • \(\det A = 0\):平行四邊形被壓成線或點,資訊消失了,變換無法倒回去(矩陣不可逆)。Normalizing flow 的每一層都必須避開這種情況。
  • \(\det(AB) = \det A\,\det B\):先放大 2 倍再放大 3 倍,總共 6 倍。

更高維度的行列式公式比較長,但意義一樣:體積變成幾倍。

特徵向量:不會轉彎的方向

一般的向量被 \(A\) 作用後方向會改變,但有些特別的方向不會:

$$A\mathbf v = \lambda\mathbf v\qquad(\mathbf v\neq\mathbf 0)$$

\(\mathbf v\) 叫特徵向量,數字 \(\lambda\) 叫特徵值。沿著這個方向,矩陣的作用只是把長度乘上 \(\lambda\),就像一維的乘法。這正是特徵值有用的原因:複雜的二維變形,沿著特徵方向會變回簡單的一維乘法。

怎麼算特徵值

  1. 把 \(A\mathbf v = \lambda\mathbf v\) 移項,得到 \((A - \lambda I)\mathbf v = \mathbf 0\)。
  2. 也就是說,矩陣 \(A - \lambda I\) 把一個不是零的向量壓成了零。一個方向被壓扁,面積當然變成 0,所以 \(\det(A - \lambda I) = 0\)。
  3. 把行列式寫開: $$\begin{aligned}&\det\begin{bmatrix}a-\lambda&b\\c&d-\lambda\end{bmatrix}\\={}&(a-\lambda)(d-\lambda) - bc\\={}&\lambda^2 - (a+d)\lambda + (ad-bc) = 0\end{aligned}$$
  4. 這是 \(\lambda\) 的一元二次方程式,叫特徵方程。用公式解: $$\lambda = \frac{\operatorname{tr}\pm\sqrt{\operatorname{tr}^2 - 4\det}}{2}$$

    其中 \(\operatorname{tr} = a + d\)、\(\det = ad - bc\)。

  5. 每個 \(\lambda\) 代回 \((A-\lambda I)\mathbf v = \mathbf 0\),解出方向 \(\mathbf v\)。\(\mathbf v\) 的長度不重要,任何倍數都還是特徵向量。
手算

\(A = \begin{bmatrix}2&1\\1&2\end{bmatrix}\)。特徵方程是 \(\lambda^2 - 4\lambda + 3 = (\lambda-3)(\lambda-1) = 0\),所以 \(\lambda_1 = 3\)、\(\lambda_2 = 1\)。

\(\lambda_1 = 3\):\(A - 3I = \begin{bmatrix}-1&1\\1&-1\end{bmatrix}\),第一列要求 \(-v_1 + v_2 = 0\),也就是 \(v_1 = v_2\),取 \(\mathbf v_1 = (1, 1)\)。

\(\lambda_2 = 1\):\(A - I = \begin{bmatrix}1&1\\1&1\end{bmatrix}\),要求 \(v_1 + v_2 = 0\),取 \(\mathbf v_2 = (1, -1)\)。

驗算:\(A(1,1) = (3,3) = 3\cdot(1,1)\) ✓,\(A(1,-1) = (1,-1) = 1\cdot(1,-1)\) ✓。對照組 \(A(1,0) = (2,1)\) 就轉彎了。

(3,3) = A(1,1)(1,1)(1,−1) = A(1,−1)(2,1) = A(1,0)(1,0)
綠色虛線是 \(A = \begin{bmatrix}2&1\\1&2\end{bmatrix}\) 的兩個特徵方向。\((1,1)\) 變成 3 倍長,\((1,-1)\) 維持不變,兩者都沒有離開自己的直線。不在特徵方向上的 \((1,0)\) 被送到 \((2,1)\),方向改變了。

trace、行列式、特徵值三者的關係

trace 是對角線的和:\(\operatorname{tr}A = a + d\)。為什麼它值得單獨取名?因為特徵方程的兩個根是 \(\lambda_1, \lambda_2\),所以它一定能分解成:

$$\begin{aligned}&\lambda^2 - (a+d)\lambda + (ad-bc)\\={}&(\lambda-\lambda_1)(\lambda-\lambda_2)\\={}&\lambda^2 - (\lambda_1+\lambda_2)\lambda + \lambda_1\lambda_2\end{aligned}$$

比較兩邊的係數,就得到這一節最重要的結論:

三者的關係 $$\begin{aligned}\operatorname{tr}A &= \lambda_1 + \lambda_2\\\det A &= \lambda_1\,\lambda_2\end{aligned}$$

上面的例子:\(3 + 1 = 4 = 2 + 2\);\(3\times1 = 3 = 4 - 1\)。更高維度也一樣:trace 是所有特徵值的和,行列式是所有特徵值的積。

幾何上很好理解:沿著兩個特徵方向分別拉長 \(\lambda_1\) 和 \(\lambda_2\) 倍,面積當然是 \(\lambda_1\lambda_2\) 倍。trace 的幾何意義比較不明顯,要到第 6 節才會看到:它是連續流動時面積的變化率。先記住這個對照:

行列式trace
由特徵值決定積和
什麼時候用做一次完整的變換,面積變成幾倍做一個極短的流動,面積以多快的速率變化
在 CS236normalizing flow 每一層的 \(\log|\det J|\)連續時間 flow(CNF、PF-ODE)的 \(\nabla\cdot\mathbf v\)

特徵值是複數時

如果公式解的根號裡是負數,特徵值就是複數。例如 90° 旋轉 \(\begin{bmatrix}0&-1\\1&0\end{bmatrix}\):\(\lambda^2 + 1 = 0\),\(\lambda = \pm i\)。這符合直覺:旋轉會讓每個方向都轉彎,所以平面上根本沒有「不轉彎的方向」。複數特徵值代表矩陣帶有旋轉。

反覆乘同一個矩陣

因為特徵方向上的作用只是乘法,所以把起點拆成特徵方向的組合,就能直接算出 \(A^k\mathbf x\)。

手算

同樣的 \(A\),起點 \((1, 0) = \tfrac12(1,1) + \tfrac12(1,-1)\)。每乘一次 \(A\),第一部分乘 3,第二部分乘 1:

$$A^k(1, 0) = \tfrac12\cdot3^k(1, 1) + \tfrac12(1, -1)$$

\(k = 3\):\(13.5(1,1) + 0.5(1,-1) = (14, 13)\)。\(3^k\) 增長得比另一項快得多,所以方向越來越接近 \((1,1)\)。

結論:反覆乘同一個矩陣,方向會靠向絕對值最大的特徵值的特徵向量。補充課 D 用這件事解釋 Markov 鏈為什麼會收斂到穩態。

Demo A3 · 拖動矩陣的四個數字

怎麼看:藍色和橙色箭頭是矩陣的兩行,淡藍色平行四邊形的面積是 \(|\det A|\),綠色虛線是特徵方向。可以試試:
  • \(a = d = 0,\ b = -1,\ c = 1\):特徵值變成複數,綠線消失,正方形只是轉了 90°。
  • 調到 \(ad = bc\)(例如 \(a = 1, b = 1, c = 1, d = 1\)):行列式是 0,平行四邊形壓成一條線。
  • 看紫色箭頭:它是 \(\mathbf x, A\mathbf x, A^2\mathbf x, \dots\) 的方向,顏色越深越後面,會逐漸轉向某一條綠線。
A e₁(第一行)A e₂(第二行)特徵向量的方向反覆乘 A 的方向
一句話帶走:行列式是面積倍數,特徵向量是不會轉彎的方向;trace 是特徵值的和,行列式是特徵值的積。
小練習:\(A = \begin{bmatrix}3&1\\0&2\end{bmatrix}\) 的特徵值和特徵向量是什麼?用 trace 和行列式驗算。
\((3-\lambda)(2-\lambda) = 0\),\(\lambda = 3, 2\)。\(\lambda = 3\):\(\begin{bmatrix}0&1\\0&-1\end{bmatrix}\mathbf v = 0\),\(\mathbf v = (1, 0)\)。\(\lambda = 2\):\(v_1 + v_2 = 0\),\(\mathbf v = (1, -1)\)。驗算:\(3 + 2 = 5 = \operatorname{tr}A\),\(3\times2 = 6 = \det A\)。
在 CS236 哪裡用到:第 7–8 講的 Jacobian 行列式;補充課 B 的線性 ODE \(\dot{\mathbf x} = A\mathbf x\)(特徵值決定解是衰減、爆炸還是旋轉);補充課 D 的轉移矩陣與收斂速度;第 18 講與補充課 G 的速率矩陣 \(Q\)。

05Jacobian:非線性函數在一點附近就是一個矩陣

為什麼需要它

神經網路和速度場都不是線性的,直線會被彎掉。但第 1 節說過,函數在一點附近可以看成直線。多變數也一樣:把一個彎曲的變換放大到足夠小的區域,它看起來就是線性變換,也就是一個矩陣。這個矩陣就是 Jacobian。

定義

函數 \(\mathbf v(x, y) = (v_1(x,y),\ v_2(x,y))\) 有兩個輸出。對每個輸出用第 2 節的一階 Taylor 展開:

$$\begin{aligned}v_1(\mathbf x + \mathbf h)&\approx v_1(\mathbf x) + \frac{\partial v_1}{\partial x}h_1 + \frac{\partial v_1}{\partial y}h_2\\v_2(\mathbf x + \mathbf h)&\approx v_2(\mathbf x) + \frac{\partial v_2}{\partial x}h_1 + \frac{\partial v_2}{\partial y}h_2\end{aligned}$$

這正好是「矩陣乘向量」的形式,把係數排起來:

Jacobian $$J = \frac{\partial\mathbf v}{\partial\mathbf x} = \begin{bmatrix}\partial v_1/\partial x&\partial v_1/\partial y\\\partial v_2/\partial x&\partial v_2/\partial y\end{bmatrix}$$$$\mathbf v(\mathbf x + \mathbf h)\approx\mathbf v(\mathbf x) + J(\mathbf x)\,\mathbf h$$

記法:第 \(i\) 列是第 \(i\) 個輸出,第 \(j\) 行是對第 \(j\) 個輸入微分。一維時 \(J\) 就是導數 \(f'\),所以 Jacobian 是導數的多變數版本。如果 \(\mathbf v = A\mathbf x\) 本身是線性的,那麼 \(J\) 處處等於 \(A\)。

手算

\(\mathbf v(x, y) = (x^2 - y,\ xy)\)。四個偏導是 \(2x,\ -1,\ y,\ x\),所以

$$J(x, y) = \begin{bmatrix}2x&-1\\y&x\end{bmatrix}$$$$J(1, 2) = \begin{bmatrix}2&-1\\2&1\end{bmatrix}$$

驗算:\(\mathbf v(1, 2) = (-1, 2)\)。走一小步 \(\mathbf h = (0.01, 0.01)\),近似給 \(J\mathbf h = (0.01, 0.03)\)。真實的 \(\mathbf v(1.01, 2.01) = (-0.9899,\ 2.0301)\),差是 \((0.0101, 0.0301)\),很接近。

注意 \(J\) 會隨位置改變:非線性函數在不同地方,對應不同的矩陣。

Jacobian 行列式的意義

結合第 4 節:\(J\) 是這一點附近的線性變換,而線性變換會把面積乘上 \(|\det J|\)。所以

意義

\(|\det J(\mathbf x)|\) = 變換把 \(\mathbf x\) 附近一小塊面積(體積)變成幾倍。

這就是 normalizing flow 的核心。機率質量不會憑空增減,所以一小塊區域的面積變成 3 倍時,那裡的機率密度必須變成 \(1/3\):

$$p_Y(T(\mathbf x)) = \frac{p_X(\mathbf x)}{|\det J_T(\mathbf x)|}$$

最簡單的例子:\(T(x) = 2x\) 把數線拉長 2 倍,所以密度變成一半。補充課 C 第 3 節會詳細推導這個公式。

一句話帶走:Jacobian 是非線性函數的局部線性近似,它的行列式是局部的面積倍數。
小練習:\(T(x, y) = (2x,\ y + x^2)\)。寫出 Jacobian,它把每一小塊面積變成幾倍?
\(J = \begin{bmatrix}2&0\\2x&1\end{bmatrix}\),\(\det J = 2\)。雖然 \(J\) 會隨位置改變,但面積倍數處處是 2。這種三角形的 \(J\) 行列式就是對角線相乘,正是第 8 講 coupling layer 利用的技巧。

06散度:一個流動把一小塊區域撐大還是擠小

先釐清名字:這裡的「散度」(divergence)是向量場的性質,和 KL 散度(KL divergence)是兩回事,只是中文和英文都同名。
向量場的散度 \(\nabla\cdot\mathbf v\)KL 散度 \(D_{\mathrm{KL}}(p\Vert q)\)
輸入一個速度場兩個機率分佈
輸出每個位置一個數字(可正可負)整體一個數字(\(\ge0\))
意義那裡的流動是往外撐開還是往內擠兩個分佈差多遠
本節和之後的「散度」都是指左邊這一個。

為什麼需要它

把機率想成一群粒子。如果粒子跟著速度場 \(\mathbf v(\mathbf x)\) 流動,某個地方的粒子被撐開,密度就下降;被擠在一起,密度就上升。所以要知道密度怎麼變,就要知道流動在每個位置「撐開多快」。這個數字就是散度。連續方程、probability flow ODE 算 likelihood、Fokker–Planck 都建立在它上面。

定義與直覺

$$\nabla\cdot\mathbf v = \frac{\partial v_1}{\partial x} + \frac{\partial v_2}{\partial y}$$

記號 \(\nabla\cdot\mathbf v\) 可以想成「\(\nabla = (\partial_x, \partial_y)\) 和 \(\mathbf v\) 做內積」。它有三個等價的讀法,本節會一一推導:

  1. 淨流出量:單位面積、單位時間,從一小塊區域流出去的量。
  2. 面積的相對變化率:跟著流動的一小塊區域,面積每單位時間增加的比例。
  3. Jacobian 的 trace:\(\nabla\cdot\mathbf v = \operatorname{tr}J\),因為 \(J\) 的對角線正是 \(\partial v_1/\partial x\) 和 \(\partial v_2/\partial y\)。
往外(源頭)散度 = 2 > 0往內(匯流)散度 = −2 < 0旋轉散度 = 0
三個向量場。\(\mathbf v = (x, y)\) 處處往外,散度 \(1 + 1 = 2\)。\(\mathbf v = (-x, -y)\) 處處往內,散度 \(-2\)。旋轉 \(\mathbf v = (-y, x)\) 中,\(\partial v_1/\partial x = 0\)、\(\partial v_2/\partial y = 0\),散度 0:粒子一直在動,但擠不到也撐不開。

推導一:盤點一個小方塊的進出量

取一個邊長 \(\varepsilon\) 的小方塊,左下角在 \((x, y)\)。流體穿過一條邊的流量是「垂直那條邊的速度 × 邊長」,因為每單位時間會有一條寬度等於「速度」的帶子穿過去。

邊長 ε面積 ε²v₁(x)v₁(x+ε)v₂(y)v₂(y+ε)
右邊流出的速度比左邊流入的快,所以水平方向有淨流出。
  1. 水平方向的淨流出 = 右邊流出 − 左邊流入 = \(\big[v_1(x+\varepsilon, y) - v_1(x, y)\big]\,\varepsilon\)。
  2. 由一階 Taylor 展開,\(v_1(x+\varepsilon, y) - v_1(x, y)\approx\frac{\partial v_1}{\partial x}\varepsilon\),所以這一項約是 \(\frac{\partial v_1}{\partial x}\varepsilon^2\)。
  3. 垂直方向同樣得到 \(\frac{\partial v_2}{\partial y}\varepsilon^2\)。
  4. 總淨流出 = \(\big(\frac{\partial v_1}{\partial x} + \frac{\partial v_2}{\partial y}\big)\varepsilon^2\)。除以面積 \(\varepsilon^2\),就是散度。

這也解釋了為什麼只有對角線的偏導會出現:\(v_1\) 是水平速度,只有它沿著水平方向的變化才會造成左右兩邊流量不同。\(\partial v_1/\partial y\) 只代表上下層的水平速度不同(像推一疊紙),不會讓流進和流出的量不一樣。

手算

\(\mathbf v = (x, y)\),方塊以原點為中心、半邊長 \(\varepsilon\),四條邊長都是 \(2\varepsilon\)。右邊的向外速度是 \(\varepsilon\),流出量 \(\varepsilon\cdot2\varepsilon = 2\varepsilon^2\)。根據對稱性,四條邊都一樣,總流出 \(8\varepsilon^2\)。除以面積 \(4\varepsilon^2\) 得到 \(2\),和公式 \(1 + 1\) 相同。

推導二:為什麼是 trace(和行列式的關係)

換個看法:跟著流動走,看小方塊的面積怎麼變。這個推導會告訴我們,為什麼一次變換用行列式,連續流動卻變成 trace。

把 Jacobian 記成 \(J = \begin{bmatrix}a&b\\c&d\end{bmatrix}\)。方塊的角落各自以當地的速度移動,走了極短的時間 \(dt\) 之後,兩條邊的向量變成:

$$\varepsilon\begin{bmatrix}1\\0\end{bmatrix}\to\varepsilon\begin{bmatrix}1 + a\,dt\\c\,dt\end{bmatrix}$$$$\varepsilon\begin{bmatrix}0\\1\end{bmatrix}\to\varepsilon\begin{bmatrix}b\,dt\\1 + d\,dt\end{bmatrix}$$
ε·a·dt(拉長)ε·c·dt(斜掉)ε
\(a\,dt\) 把底邊往同一個方向拉長,會改變面積。\(c\,dt\) 只是把底邊的末端往垂直方向抬,邊長只有二階的變化,對面積的影響也是 \(dt^2\) 量級。

這一步的變換矩陣是 \(I + dt\,J\),新面積由它的行列式決定:

$$\begin{aligned}\frac{\text{新面積}}{\varepsilon^2} &= \det(I + dt\,J)\\&= (1 + a\,dt)(1 + d\,dt) - (b\,dt)(c\,dt)\end{aligned}$$

乘開:

$$\begin{aligned}&\det(I + dt\,J)\\={}&1 + (a + d)\,dt + (ad - bc)\,dt^2\end{aligned}$$

\(dt\) 極小,\(dt^2\) 可以忽略,於是:

行列式與 trace 的橋樑 $$\begin{aligned}&\det(I + dt\,J)\\={}&1 + dt\,\operatorname{tr}J + O(dt^2)\end{aligned}$$

這就是整件事的關鍵:非對角元素 \(b, c\) 只出現在 \(dt^2\) 那一項。所以時間很短時,面積的變化只由對角線決定。行列式的公式裡有乘積,但一個極短的流動接近單位矩陣,乘積項都是高階小量,只剩下加法。「乘法變加法」就是 trace 出現的原因。

也可以用特徵值來看:\(I + dt\,J\) 的特徵值是 \(1 + dt\,\lambda_i\),行列式是它們的積,乘開後是 \(1 + dt(\lambda_1 + \lambda_2) + \cdots\),一階項正是特徵值的和。這個寫法在任意維度都成立。

手算

\(J = \begin{bmatrix}0.5&0.3\\-0.2&0.5\end{bmatrix}\),\(dt = 0.01\)。精確值是 \(1.005^2 - (0.003)(-0.002) = 1.010031\)。只用 trace:\(1 + 0.01\times1 = 1.01\)。差別只有 \(0.00003\),是 \(dt^2\) 量級。

從「一小步」到「一段時間」

現在看一段有限的時間。設面積是 \(S(t)\),如果散度 \(c = \nabla\cdot\mathbf v\) 是常數,一小步是 \(S(t + dt) = S(t)(1 + c\,dt)\)。移項、除以 \(dt\):

$$\frac{dS}{dt} = c\,S\quad\Rightarrow\quad S(t) = S(0)\,e^{ct}$$

可以直接驗算:\(\frac{d}{dt}S(0)e^{ct} = c\,S(0)e^{ct}\),確實滿足。這種方程式怎麼解,補充課 B 會從頭講。線性流動 \(\mathbf v = A\mathbf x\) 的 Jacobian 處處是 \(A\),所以面積照 \(e^{t\operatorname{tr}A}\) 精確地變化。

一般的速度場,散度隨位置改變,例如 \(\mathbf v = (x^2,\ y)\) 的散度是 \(2x + 1\)。這時跟著粒子走,面積的 log 的變化率等於粒子當下所在位置的散度:

$$\frac{d}{dt}\log S(t) = \nabla\cdot\mathbf v(\mathbf x_t)$$

因為機率質量不變,面積變大多少,密度就變小多少,所以 \(\frac{d}{dt}\log p = -\nabla\cdot\mathbf v\)。補充課 C 會完整推導這個公式,它就是 diffusion model 能算 likelihood 的原因。

Demo A4 · 跟著流動的一小塊正方形

怎麼看:灰色箭頭是速度場,藍色是起始的正方形,橙色是流動 \(t\) 之後的形狀。先猜每一種流動的面積會不會變,再比對讀數裡「量出來的面積比」和 \(e^{t\operatorname{tr}A}\)。
速度場 v = A xt = 0 的正方形流動 t 之後
流動\(\operatorname{tr}A\)形狀面積
往外擴張1放大照 \(e^{t}\) 變大
純旋轉0轉動不變
剪切0被推斜不變(底和高都沒變)
一軸拉、一軸壓0變細長不變(拉長多少就壓扁多少)
往內螺旋\(-0.6\)邊轉邊縮照 \(e^{-0.6t}\) 變小

散度為 0 不代表沒有流動,只代表面積不變,形狀可以被扭得很厲害。

一句話帶走:散度是 Jacobian 的 trace,也是跟著流動時面積的相對變化率;極短時間內行列式的乘積項都是高階小量,只剩下對角線的和。
小練習:\(\mathbf v = (xy,\ -y^2/2)\) 的散度是多少?這個流動會改變面積嗎?
\(\partial v_1/\partial x = y\),\(\partial v_2/\partial y = -y\),散度 \(= 0\)。雖然速度場不是線性的,粒子也一直在動,但面積處處不變。
在 CS236 哪裡用到:補充課 C 的連續方程與 \(d\log p/dt = -\nabla\cdot\mathbf v\);第 14、17 講用 probability flow ODE 算 likelihood 時要積分的 trace。第 7–8 講的 \(\log|\det J|\) 在連續時間就變成這個 trace。

07Hessian,以及四個量的總表

為什麼需要它

Jacobian 描述一個向量場的一階變化。對一個純量函數(一個高度)\(f\),一階變化是梯度,二階變化就是 Hessian,它描述地形怎麼彎曲。第 12 講的 score matching 目標裡就有 Hessian 的 trace。

定義

$$H = \nabla^2f = \begin{bmatrix}\partial^2f/\partial x^2&\partial^2f/\partial x\partial y\\\partial^2f/\partial y\partial x&\partial^2f/\partial y^2\end{bmatrix}$$

平滑的函數微分順序可以交換,所以 \(H\) 是對稱矩陣,特徵值一定是實數。多變數的二階 Taylor 展開是一維版本的直接推廣:

$$f(\mathbf x + \mathbf h)\approx f(\mathbf x) + \nabla f\cdot\mathbf h + \tfrac12\,\mathbf h^\top H\,\mathbf h$$

Hessian 和 Jacobian 的關係很簡單:Hessian 就是梯度的 Jacobian。把 \(\mathbf v = \nabla f\) 這個向量場拿去算 Jacobian,得到的就是 \(H\)。

幾何意義:曲率

\(H\) 的特徵向量是地形彎得最多和最少的兩個方向,特徵值是沿著那兩個方向的彎曲程度(二階導數):正的往上彎(像碗),負的往下彎(像倒過來的碗)。在梯度為 0 的點,特徵值的正負決定了這是什麼地形:

山頂det > 0,tr < 0谷底det > 0,tr > 0鞍點det < 0
等高線。橙色是比中心高,藍色是比中心低。山頂:兩個特徵值都是負的。谷底:兩個都是正的。鞍點:一正一負,一個方向往上、另一個方向往下,像馬鞍。
手算

\(f = x^2 + xy + 2y^2\)。\(\nabla f = (2x + y,\ x + 4y)\),再微分一次得 \(H = \begin{bmatrix}2&1\\1&4\end{bmatrix}\)。\(\operatorname{tr}H = 6\),\(\det H = 7\),特徵方程 \(\lambda^2 - 6\lambda + 7 = 0\),\(\lambda = 3\pm\sqrt2\),都是正的,所以原點是谷底。

Hessian 的 trace:Laplacian,和四周平均的差

\(\operatorname{tr}H = \frac{\partial^2f}{\partial x^2} + \frac{\partial^2f}{\partial y^2}\) 有專門的名字:Laplacian,記作 \(\Delta f\)。它是「\(\nabla f\) 這個向量場的散度」。它的意義很直觀:中心比四周低多少。

四周的平均 − 中心≈ (h²/4) · tr H例:f = x² + y²,中心在原點tr H = 4,四周都是 h²,中心是 0差 = h² = (h²/4)·4 ✓
取中心和距離 \(h\) 的四個點(藍色)。

推導:把四個點都展開到二階。一維的展開是 \(f(x\pm h) = f(x)\pm f'h + \tfrac12f''h^2\),把正負兩式相加,一階項抵銷:

$$\begin{aligned}&f(x+h, y) + f(x-h, y)\\={}&2f + \frac{\partial^2f}{\partial x^2}h^2\end{aligned}$$

\(y\) 方向也一樣。四式相加再除以 4,減去中心值:

$$\underbrace{\tfrac14\big[f(x{+}h,y)+f(x{-}h,y)+f(x,y{+}h)+f(x,y{-}h)\big]}_{\text{四周平均}}$$$$\text{四周平均} - f(x,y)\approx\frac{h^2}{4}\Delta f$$
  • \(\Delta f > 0\):四周平均比中心高,中心是凹下去的。
  • \(\Delta f \lt 0\):四周平均比中心低,中心是凸起來的。
  • \(\Delta f = 0\):中心就是四周的平均,例如鞍點 \(x^2 - y^2\)。

這解釋了熱傳導和擴散的方程 \(\partial_tp = \tfrac{\sigma^2}{2}\Delta p\):溫度會往四周的平均移動,所以尖峰(\(\Delta p \lt 0\))會下降,低谷(\(\Delta p > 0\))會上升。補充課 C 和 F 會用到。

Demo A5 · Hessian 決定地形

怎麼看:地形是 \(f = \tfrac12(ax^2 + 2bxy + cy^2)\),它的 Hessian 剛好是 \(\begin{bmatrix}a&b\\b&c\end{bmatrix}\)。橙色區域比中心高、藍色區域比中心低。可以試試:
  • \(a, c\) 都是正的、\(b = 0\):谷底。把 \(a, c\) 調成不同的值,等高線變成橢圓,綠線是長短軸。
  • 把 \(b\) 慢慢調大,看什麼時候 \(\det H\) 變成負的,谷底變成鞍點。
  • 調到 \(a = -c\)、\(b = 0\):trace 是 0,讀數裡的「四周平均 − 中心」也是 0。
比中心高比中心低特徵方向(彎得最多與最少)

總表:四個量各是什麼意思

量物件意義在 CS236
\(\det J\)一個變換或向量場做完變換後,局部面積(體積)變成幾倍;負號代表翻面normalizing flow 的 \(\log|\det J|\)(第 7–8 講)
\(\operatorname{tr}J\)一個速度場散度:跟著流動時,面積的相對變化率CNF 與 probability flow ODE 的 likelihood(第 14、17 講)
\(\operatorname{tr}H\)一個純量函數Laplacian:中心和四周平均的差,地形平均的彎曲程度score matching 的 \(\operatorname{tr}(\nabla_{\mathbf x}^2\log p)\)(第 12 講);擴散方程
\(\det H\)一個純量函數主方向曲率的乘積;在二維、梯度為 0 的點可以分辨鞍點(負的就是鞍點)這門課幾乎不會直接用到

score 把這些量連在一起。score 是 \(\mathbf s = \nabla\log p\),所以它的 Jacobian 就是 \(\log p\) 的 Hessian,它的散度就是 \(\log p\) 的 Laplacian:

$$\begin{aligned}\frac{\partial\mathbf s}{\partial\mathbf x} &= \nabla^2\log p\\\nabla\cdot\mathbf s &= \operatorname{tr}(\nabla^2\log p) = \Delta\log p\end{aligned}$$

例如 \(d\) 維高斯 \(\mathcal N(\boldsymbol\mu, \sigma^2I)\):\(\mathbf s = -(\mathbf x - \boldsymbol\mu)/\sigma^2\),它的 Jacobian 是 \(-I/\sigma^2\),散度是 \(-d/\sigma^2\),處處是負的:往峰頂的向量場到處都在往內收。

為什麼算 trace 比算行列式便宜

\(d\) 維矩陣的行列式一般要 \(O(d^3)\) 次運算,所以 normalizing flow 才要特別設計三角形的 Jacobian。trace 只需要對角線,但神經網路的 \(J\) 不是現成的,一次反向傳播只能得到 \(J\) 的一列,要 \(d\) 次才能得到整條對角線。

Hutchinson 估計更省:取隨機向量 \(\boldsymbol\epsilon\)(\(\mathbb E[\boldsymbol\epsilon\boldsymbol\epsilon^\top] = I\)),則 \(\mathbb E[\boldsymbol\epsilon^\top J\boldsymbol\epsilon] = \operatorname{tr}J\)。推導:\(\boldsymbol\epsilon^\top J\boldsymbol\epsilon = \sum_{ij}\epsilon_iJ_{ij}\epsilon_j\),取期望時只有 \(i = j\) 的項留下。一次反向傳播就能算出 \(\boldsymbol\epsilon^\top J\),再和 \(\boldsymbol\epsilon\) 內積即可。第 12 講的 sliced score matching 用的就是這個想法。

一句話帶走:Jacobian 看向量場怎麼變,Hessian 看地形怎麼彎;行列式都是乘積(一次的倍數),trace 都是加總(局部的平均趨勢)。
小練習:\(f = x^2 - 3xy + y^2\),原點是山頂、谷底還是鞍點?
\(H = \begin{bmatrix}2&-3\\-3&2\end{bmatrix}\),\(\det H = 4 - 9 = -5 \lt 0\),所以是鞍點。特徵值 \(5\) 和 \(-1\),和為 \(4 = \operatorname{tr}H\),積為 \(-5\)。

08期望、變異數,以及為什麼是 √n

為什麼需要它

Diffusion model 每一步都在加雜訊。要知道加了很多步之後雜訊有多大,就要知道獨立雜訊相加的規則。答案是一個容易弄錯的事實:寬度不是相加,而是平方相加。

期望與變異數

期望 \(\mathbb E[X]\) 是平均值;變異數 \(\operatorname{Var}(X) = \mathbb E\big[(X - \mathbb E[X])^2\big]\) 是「離平均多遠」的平方的平均,它的平方根叫標準差,也就是分佈的典型寬度。為什麼要平方?不平方的話,正負會互相抵銷,平均永遠是 0。

手算:一顆骰子

\(\mathbb E[X] = (1+2+\cdots+6)/6 = 3.5\)。離平均的距離平方是 \(6.25, 2.25, 0.25, 0.25, 2.25, 6.25\),平均是 \(\operatorname{Var}(X) = 35/12\approx2.917\),標準差約 \(1.708\)。

三條規則(\(a\) 是常數):

$$\begin{aligned}\mathbb E[aX + Y] &= a\,\mathbb E[X] + \mathbb E[Y]\\\operatorname{Var}(aX) &= a^2\operatorname{Var}(X)\end{aligned}$$ $$\operatorname{Var}(X + Y) = \operatorname{Var}(X) + \operatorname{Var}(Y)$$

最後一條只在 \(X, Y\) 獨立時成立。

第二條:\(X\) 放大 \(a\) 倍,距離也放大 \(a\) 倍,距離的平方就是 \(a^2\) 倍。第三條的推導:假設平均都是 0(平移不影響變異數),

$$\begin{aligned}\operatorname{Var}(X + Y) &= \mathbb E[(X+Y)^2]\\&= \mathbb E[X^2] + 2\,\mathbb E[XY] + \mathbb E[Y^2]\end{aligned}$$

獨立時 \(\mathbb E[XY] = \mathbb E[X]\,\mathbb E[Y] = 0\),中間的交叉項消失,只剩 \(\mathbb E[X^2] + \mathbb E[Y^2]\)。直覺上,兩個獨立的雜訊有時同向、有時反向,會互相抵銷一部分,所以總寬度比「寬度直接相加」小。

手算:兩顆骰子

變異數 \(2\times2.917 = 5.833\),標準差 \(\sqrt{5.833}\approx2.415\)。不是 \(2\times1.708 = 3.416\)。

隨機漫步與 √n

每步隨機 \(\pm1\)(平均 0、變異數 1),走 \(n\) 步。\(n\) 個獨立變數相加,變異數是 \(n\),標準差是 \(\sqrt n\)。走 100 步,典型只離原點 10 步遠。

反過來,如果想在固定的時間 1 內走 \(n\) 步,終點寬度維持是 1,每步大小 \(s\) 要滿足 \(ns^2 = 1\),也就是 \(s = 1/\sqrt n\)。一步的時間是 \(\Delta t = 1/n\),所以每步的雜訊大小是 \(\sqrt{\Delta t}\),而不是 \(\Delta t\)。這就是補充課 E 裡布朗運動的 \(\sqrt{\Delta t}\) 的由來。

同樣的規則也說明 Monte Carlo 估計的誤差:\(n\) 個獨立樣本的平均,變異數是 \(n\cdot\frac{1}{n^2}\sigma^2 = \sigma^2/n\),所以誤差是 \(\sigma/\sqrt n\)。想把誤差減半,要 4 倍的樣本。

Demo A6 · 隨機漫步的寬度是 √n

怎麼看:左圖是 40 條路徑,橙色線是 \(\pm\sqrt k\) 和 \(\pm2\sqrt k\)。拉大步數,路徑散開的速度會越來越慢。右圖是 4,000 條路徑終點的直方圖。勾選「縮放」後,不論 \(n\) 多大,圖看起來都差不多。
40 條路徑±√k 與 ±2√k常態分佈 N(0, n)

直方圖和平均 0、變異數 \(n\) 的常態分佈幾乎重合。每步明明只是 \(\pm1\),加起來卻變成鐘形,這就是中央極限定理。\(n\to\infty\) 的縮放極限就是布朗運動。

一句話帶走:獨立的雜訊相加時,加的是變異數,所以寬度只按 \(\sqrt n\) 成長。
小練習:\(X\sim\mathcal N(0, 9)\)、\(Y\sim\mathcal N(0, 16)\),兩者獨立。\(X + Y\) 的標準差是多少?
變異數 \(9 + 16 = 25\),標準差 \(5\)。不是 \(3 + 4 = 7\)。
在 CS236 哪裡用到:第 4 講 Monte Carlo 估計的誤差;補充課 E 的布朗運動與 Euler–Maruyama;第 16 講 DDPM 前向過程每步的雜訊 \(\sqrt{\beta_t}\)。

09摺積(convolution):兩個隨機變數相加後的分佈

為什麼需要它

上一節只算出相加後的變異數。但 diffusion 要知道的是整個分佈:資料加上高斯雜訊之後,密度長什麼樣子?答案是資料密度和雜訊密度的摺積。

從骰子開始

兩顆骰子的總和 \(S = a + b\)。總和是 7 的機率是多少?把所有組合列出來:

112345672234567833456789445678910556789101166789101112第一顆骰子 a第二顆 b
每一格是一種組合,機率都是 \(1/36\)。總和是 7 的格子連成一條斜線,共 6 格,所以 \(P(S = 7) = 6/36\)。

把這個計算寫成公式:要讓總和等於 \(s\),第一顆選定 \(a\) 之後,第二顆就只能是 \(s - a\)。把所有可能的 \(a\) 加起來:

$$P(S = s) = \sum_a p(a)\,q(s - a)$$

這就是摺積,記作 \((p * q)(s)\)。\(q(s-a)\) 的「\(s-a\)」不是什麼神祕的技巧,只是說「兩個數的和要等於 \(s\)」。\(p(a)\,q(s-a)\) 相乘是因為兩者獨立。

手算

第一顆骰子改成只有 \(0, 1\),機率各 \(0.5\);第二顆有 \(0, 1, 2\),機率 \(0.2, 0.3, 0.5\)。

  • \(P(S = 0) = p(0)q(0) = 0.1\)
  • \(P(S = 1) = p(0)q(1) + p(1)q(0)\)\(\ = 0.15 + 0.1 = 0.25\)
  • \(P(S = 2) = p(0)q(2) + p(1)q(1)\)\(\ = 0.25 + 0.15 = 0.4\)
  • \(P(S = 3) = p(1)q(2) = 0.25\)

加起來是 \(1\),正確。

連續版本:滑動與重疊

隨機變數是連續的時候,加總換成積分,機率換成密度:

摺積 $$(p * q)(s) = \int p(a)\,q(s - a)\,da$$

\(X\sim p,\ Y\sim q\) 獨立時,這就是 \(X + Y\) 的密度。

把 \(a\) 當成橫軸來看,\(q(s - a)\) 是把 \(q\) 左右翻轉,再平移到 \(s\)。所以算摺積的畫面是:把翻轉後的 \(q\) 滑過 \(p\),每個位置 \(s\) 算兩者乘積下的面積。

s = 0.5重疊面積 0.375s = 1.2重疊面積 0.200−202結果 (p∗q)(s)
\(p, q\) 都是 \([-1, 1]\) 上的均勻分佈(高度 \(\tfrac12\))。藍色方塊不動,橙色方塊滑到 \(s\),綠色是重疊的部分。重疊部分的面積是「重疊寬度 × \(\tfrac12\times\tfrac12\)」,把它對 \(s\) 畫出來,就得到下方的三角形:兩個均勻分佈相加不再是均勻的,而是中間比較高。

檢查一下三角形:\(s = 0\) 時完全重疊,寬度 2,高度 \(2\times\tfrac14 = \tfrac12\);\(s = 2\) 時剛好不重疊,高度 0。三角形面積 \(\tfrac12\times4\times\tfrac12 = 1\),確實是機率密度。

Demo A7 · 看摺積怎麼算出來

怎麼看:拖動 \(s\),把橙色的 \(q(s-a)\) 滑過藍色的 \(p(a)\)。綠色區域是兩者相乘,它的面積就是下圖綠色曲線在 \(s\) 的高度。可以試試:
  • 「方塊+指數」:\(q\) 不對稱,可以清楚看到它被左右翻轉了。
  • 「雙峰+高斯」:這就是資料加雜訊。兩個尖峰被抹成平滑的一團,雜訊越大(調 \(\sigma\)),兩峰越糊。
p(a)q(s − a)兩者相乘;下圖是 (p∗q)(s)

幾個重要的事實

  • 寬度變大:平均相加、變異數相加(第 8 節)。摺積會把分佈抹開。
  • 高斯配高斯還是高斯:平均和變異數都相加,形狀仍是高斯。下一節會用配方證明。這是 DDPM 能一步跳到任意時刻的原因。
  • 資料加雜訊就是摺積:\(x_t = x_0 + \sigma\epsilon\) 的密度是 \(p_t = p_0 * \mathcal N(0, \sigma^2)\)。所以 \(p_t\) 永遠是平滑的,就算 \(p_0\) 是尖銳的。Diffusion 的前向過程就是不斷地把資料分佈和高斯做摺積。
一句話帶走:摺積把「總和等於 \(s\) 的所有組合」加起來,它是獨立隨機變數相加後的密度,效果是把分佈抹開。
小練習:資料只有兩個點 \(x_0 = \pm2\),機率各半,加上雜訊 \(\mathcal N(0, 1)\)。寫出 \(p_1(x)\)。
只有兩個可能的 \(a\),積分變成加總:\(p_1(x) = \tfrac12\mathcal N(x; -2, 1) + \tfrac12\mathcal N(x; 2, 1)\)。每個資料點各自變成一個高斯,整體是高斯混合。
在 CS236 哪裡用到:第 13 講 noise conditional score 的 \(q_\sigma\)(資料和高斯的摺積);第 16 講 DDPM 的邊際 \(q(\mathbf x_t)\)。

10高斯的四種運算,以及配方

為什麼需要它

CS236 後半幾乎所有的閉式公式,都來自高斯分佈的幾個性質。而這些性質都來自同一個代數技巧:配方。

高斯密度的每一部分

$$\mathcal N(x;\mu,\sigma^2) = \underbrace{\frac{1}{\sigma\sqrt{2\pi}}}_{\text{面積調成 1}}\exp\Big(\underbrace{-\frac{(x-\mu)^2}{2\sigma^2}}_{\text{決定形狀}}\Big)$$

形狀全部在 exponent 裡:它是 \(x\) 的開口向下的二次式,最高點在 \(x = \mu\),越窄(\(\sigma\) 越小)彎得越厲害。前面的常數只是為了讓面積等於 1。所以:只要 exponent 是開口向下的二次式,這個函數就是高斯,平均和變異數可以從係數讀出來。

四種運算的總覽

運算結果在哪裡用到
線性變換 \(aX + b\)\(\mathcal N(a\mu + b,\ a^2\sigma^2)\)reparameterization \(z = \mu + \sigma\epsilon\)(第 6 講)
獨立相加 \(X + Y\)\(\mathcal N(\mu_1 + \mu_2,\ \sigma_1^2 + \sigma_2^2)\)DDPM 的 \(q(\mathbf x_t\mid\mathbf x_0)\) 閉式(第 16 講)
密度相乘 \(p_1(x)\,p_2(x)\)正比於 \(\mathcal N(\mu,\sigma^2)\),\(\frac1{\sigma^2} = \frac1{\sigma_1^2} + \frac1{\sigma_2^2}\),\(\mu = \sigma^2\big(\frac{\mu_1}{\sigma_1^2} + \frac{\mu_2}{\sigma_2^2}\big)\)prior × likelihood = 後驗;DDPM 的 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\)
取條件(二維高斯)\(X_2\mid X_1 = x\ \sim\ \mathcal N(\rho x,\ 1 - \rho^2)\)Tweedie、去雜訊、VAE 的後驗(第 11 節)

「相加」和「相乘」最容易搞混。相加是兩個隨機變數加起來,對應密度的摺積,結果變寬。相乘是兩個密度函數乘起來,對應「兩個資訊來源合併」,結果變窄。

配方:同一個二次式的兩種寫法

配方不是在改變函數,只是把同一個二次式換一種寫法。國中學過的例子:

$$\begin{aligned}(x - 3)^2 - 4 &= x^2 - 6x + 9 - 4\\&= x^2 - 6x + 5\end{aligned}$$

從左到右是展開,從右到左就是配方。兩種寫法各有用處:

  • \(x^2 - 6x + 5\):好處是容易相加。兩個二次式相加,只要對應的係數相加。
  • \((x-3)^2 - 4\):好處是一眼看出最低點在 \(x = 3\)。

高斯相乘時,我們需要這兩種寫法都用:先展開成 \(x^2, x, 1\) 三項(才能相加),再配回 \((x-\mu)^2\) 的形式(才能看出新的平均和變異數)。

配方的規則:\(x^2 - 2\mu x\) 要配成 \((x-\mu)^2\),就取 \(x\) 係數的一半當 \(\mu\),補上 \(\mu^2\) 再減掉。一般公式:

配方公式 $$\begin{aligned}&-\tfrac12Ax^2 + Bx + C\\={}&-\frac{A}{2}\Big(x - \frac BA\Big)^2 + \frac{B^2}{2A} + C\end{aligned}$$

驗算(把右邊的平方展開):\(-\frac A2\big(x^2 - \frac{2B}{A}x + \frac{B^2}{A^2}\big) = -\frac A2x^2 + Bx - \frac{B^2}{2A}\),最後一項正好和 \(+\frac{B^2}{2A}\) 抵銷,剩下的就是左邊。

再和高斯的 exponent \(-\frac{(x-\mu)^2}{2\sigma^2}\) 對照,就能讀出答案:

讀答案

exponent 是 \(-\tfrac12Ax^2 + Bx + C\),就表示分佈是高斯,而且 \(\sigma^2 = \dfrac1A\),\(\mu = \dfrac BA\)。

多出來的常數 \(\frac{B^2}{2A} + C\) 呢?\(e^{\text{二次式}+\text{常數}} = e^{\text{常數}}\cdot e^{\text{二次式}}\),所以它只影響整體的高度,不影響形狀。機率密度的面積必須是 1,歸一化時這個高度會被調整,所以可以不管它。「正比於」(\(\propto\))就是在說這件事。

完整的數字例子:兩個高斯相乘

手算

\(\mathcal N(0, 1)\) 和 \(\mathcal N(2, 1)\) 相乘。指數相乘時 exponent 相加,常數先不管:

  1. 相加:\(-\frac{x^2}{2} - \frac{(x-2)^2}{2}\)
  2. 展開:\(-\frac{x^2}{2} - \frac{x^2 - 4x + 4}{2} = -x^2 + 2x - 2\)
  3. 對照 \(-\tfrac12Ax^2 + Bx + C\):\(A = 2,\ B = 2,\ C = -2\)
  4. 讀答案:\(\sigma^2 = \frac12\),\(\mu = \frac22 = 1\)
  5. 驗算:\(-(x-1)^2 - 1 = -x^2 + 2x - 2\) ✓

結果是 \(\mathcal N(1, \tfrac12)\):平均落在 0 和 2 的正中間,變異數比兩者都小。

一般的推導

現在把數字換成符號,步驟完全相同。

  1. 相加:\(-\dfrac{(x-\mu_1)^2}{2\sigma_1^2} - \dfrac{(x-\mu_2)^2}{2\sigma_2^2}\)
  2. 展開第一項:$$\begin{aligned}&-\frac{x^2 - 2\mu_1x + \mu_1^2}{2\sigma_1^2}\\={}&-\frac12\cdot\frac{1}{\sigma_1^2}x^2 + \frac{\mu_1}{\sigma_1^2}x - \frac{\mu_1^2}{2\sigma_1^2}\end{aligned}$$第二項同理。
  3. 合併同類項: $$\begin{aligned}&-\frac12\Big(\frac1{\sigma_1^2} + \frac1{\sigma_2^2}\Big)x^2\\&+ \Big(\frac{\mu_1}{\sigma_1^2} + \frac{\mu_2}{\sigma_2^2}\Big)x + \text{常數}\end{aligned}$$
  4. 對照:\(A = \frac1{\sigma_1^2} + \frac1{\sigma_2^2}\),\(B = \frac{\mu_1}{\sigma_1^2} + \frac{\mu_2}{\sigma_2^2}\)。
  5. 讀答案:\(\dfrac{1}{\sigma^2} = \dfrac1{\sigma_1^2} + \dfrac1{\sigma_2^2}\),\(\mu = \sigma^2\Big(\dfrac{\mu_1}{\sigma_1^2} + \dfrac{\mu_2}{\sigma_2^2}\Big)\)。

\(1/\sigma^2\) 叫精確度(precision),代表「這個資訊來源有多確定」。把精確度寫成 \(\tau_i = 1/\sigma_i^2\),結果就很好記:

$$\tau = \tau_1 + \tau_2,\qquad\mu = \frac{\tau_1\mu_1 + \tau_2\mu_2}{\tau_1 + \tau_2}$$

合併兩個資訊來源時,精確度相加,所以結果比任何一個都窄;新的平均是兩個平均的加權平均,越確定的權重越大。例如 \(\mathcal N(0, 1)\) 和 \(\mathcal N(2, \tfrac14)\):\(\tau_1 = 1,\ \tau_2 = 4\),所以 \(\tau = 5\)、\(\sigma^2 = 0.2\)、\(\mu = (0 + 4\times2)/5 = 1.6\),靠近比較確定的那一個。

另一個看法:兩條拋物線相加

不展開也能理解這個結果。\(\log\mathcal N\) 就是一條向下的拋物線,二階導數是 \(-1/\sigma^2\),一階導數(score)在 \(\mu\) 等於 0。密度相乘等於 log 相加,所以:

新的峰 x = 1.6log N(0, 1)log N(2, ¼)兩者相加
\(\log\mathcal N(0,1)\) 和 \(\log\mathcal N(2,\tfrac14)\)(常數略去)相加。窄的高斯彎得比較厲害,所以新的峰被拉向它。
  • 二階導數相加:\(-1/\sigma^2 = -1/\sigma_1^2 - 1/\sigma_2^2\),這就是「精確度相加」。
  • 新的峰是 score 之和為 0 的位置:\(-\tau_1(x - \mu_1) - \tau_2(x - \mu_2) = 0\),解出來就是加權平均。

Demo A8 · 相加 vs. 相乘

怎麼看:切換兩種運算,看綠色的結果在哪裡、多寬。相加時它比藍色和橙色都寬;相乘時它比兩者都窄,而且夾在中間。把其中一個 \(\sigma\) 調小,相乘的結果會被拉向它。
p₁p₂結果(公式)結果(20,000 個樣本的直方圖,只在相加時顯示)
用同一個公式證明「高斯配高斯還是高斯」

第 9 節說過,\(\mathcal N(0, s^2)\) 和 \(\mathcal N(0, t^2)\) 的摺積在 \(z\) 的值,是對 \(a\) 積分 \(\mathcal N(a; 0, s^2)\,\mathcal N(z-a; 0, t^2)\)。把被積函數的 exponent 當成 \(a\) 的二次式:

$$\begin{aligned}&-\frac{a^2}{2s^2} - \frac{(z-a)^2}{2t^2}\\={}&-\frac12\underbrace{\Big(\frac1{s^2} + \frac1{t^2}\Big)}_{A}a^2 + \underbrace{\frac{z}{t^2}}_{B}a\ \underbrace{-\frac{z^2}{2t^2}}_{C}\end{aligned}$$

用配方公式。\(a\) 的二次式部分對 \(a\) 積分後是一個和 \(z\) 無關的常數,留下的是 \(\exp\big(\frac{B^2}{2A} + C\big)\),算出來:

$$\begin{aligned}\frac{B^2}{2A} + C &= \frac{z^2}{2t^2}\cdot\frac{s^2}{s^2+t^2} - \frac{z^2}{2t^2}\\&= -\frac{z^2}{2(s^2+t^2)}\end{aligned}$$

這正是 \(\mathcal N(0, s^2 + t^2)\) 的 exponent。這裡用到 \(\frac1A = \frac{s^2t^2}{s^2+t^2}\)。平均不是 0 的情況,只要先平移即可。

一句話帶走:配方是把同一個二次式換成能看出平均的寫法;exponent 是 \(-\tfrac12Ax^2 + Bx\) 時,\(\sigma^2 = 1/A\)、\(\mu = B/A\)。
小練習:\(p(x)\propto\exp(-2x^2 + 6x)\) 是哪一個高斯?
對照 \(-\tfrac12Ax^2 + Bx\):\(A = 4,\ B = 6\)。所以 \(\sigma^2 = \frac14\),\(\mu = \frac64 = 1.5\),是 \(\mathcal N(1.5, \tfrac14)\)。

11取條件與去雜訊:為什麼最佳猜測會往平均收縮

為什麼需要它

Diffusion model 的核心任務是:看到一張帶雜訊的圖,猜原圖是什麼。這一節用最簡單的高斯例子,把這件事完全算出來。結論是:最佳猜測不是你看到的值,而是往平均收縮一些。這和統計學的「回歸平均」是同一件事。

相關的兩個變數

兩個標準常態變數 \(X_1, X_2\) 的相關係數是 \(\rho\),可以直接這樣造出來:

$$X_2 = \rho\,X_1 + \sqrt{1-\rho^2}\,\epsilon$$

其中 \(X_1, \epsilon\sim\mathcal N(0, 1)\) 互相獨立。

驗算:\(\operatorname{Var}(X_2) = \rho^2 + (1-\rho^2) = 1\),確實是標準常態。\(\mathbb E[X_1X_2] = \rho\,\mathbb E[X_1^2] + 0 = \rho\),確實是相關係數。

這個寫法讓答案一目了然。如果已經知道 \(X_1 = x\),那麼 \(\rho x\) 是定值,只有 \(\epsilon\) 還是隨機的,所以由第 8 節的規則:

取條件 $$X_2\mid X_1 = x\ \sim\ \mathcal N(\rho x,\ 1 - \rho^2)$$
  • 條件平均 \(\rho x\) 比 \(x\) 更靠近 0(\(|\rho| \lt 1\)、\(x\neq0\) 時)。父母特別高,小孩通常也高,但沒有父母那麼高,這就是「回歸平均」。
  • 條件變異數 \(1 - \rho^2\) 比 1 小,而且和 \(x\) 無關:知道 \(X_1\) 之後,不確定性變小了。
  • 例如 \(\rho = 0.8,\ x = 1.2\):條件平均 \(0.96\),條件標準差 \(\sqrt{0.36} = 0.6\)。

Demo A9 · 二維高斯切一刀

怎麼看:左圖是聯合密度,橙色直線是「已知 \(X_1 = x\)」的切面,綠色虛線是條件平均 \(\rho x\)。右圖比較切面上的分佈和不知道 \(X_1\) 時的分佈。把 \(\rho\) 拉到接近 \(\pm1\),條件分佈會變得很窄;拉到 0,兩條曲線重合,因為 \(X_1\) 完全沒有提供資訊。
聯合密度X₁ = x 的切面與條件分佈不知道 X₁ 時的 X₂(邊際)條件平均 ρx 的直線

去雜訊:訊號加雜訊

現在換成 diffusion 的情境。真實訊號 \(x\sim\mathcal N(0, s^2)\),我們看到的是 \(y = x + n\),其中雜訊 \(n\sim\mathcal N(0, \tau^2)\) 和 \(x\) 獨立。看到 \(y\) 之後,\(x\) 最可能是多少?

用貝氏定理(\(p(x\mid y)\propto p(x)\,p(y\mid x)\)):\(p(x)\) 是 \(\mathcal N(0, s^2)\);給定 \(x\),\(y\) 是 \(\mathcal N(x, \tau^2)\),把它看成 \(x\) 的函數,就是以 \(y\) 為中心的高斯。這正好是第 10 節的相乘:

  • 資訊來源一(先驗):中心 \(0\),精確度 \(1/s^2\)。
  • 資訊來源二(觀測):中心 \(y\),精確度 \(1/\tau^2\)。

精確度加權平均,分子分母同乘 \(s^2\tau^2\) 化簡:

最佳猜測 $$\begin{aligned}\mathbb E[x\mid y] &= \frac{(1/s^2)\cdot0 + (1/\tau^2)\cdot y}{1/s^2 + 1/\tau^2}\\&= \frac{s^2}{s^2 + \tau^2}\,y\\[4pt]\operatorname{Var}(x\mid y) &= \frac{s^2\tau^2}{s^2+\tau^2}\end{aligned}$$

係數 \(k = \frac{s^2}{s^2+\tau^2}\) 永遠小於 1,所以猜測一定比 \(y\) 更靠近先驗平均。為什麼?因為一個很大的 \(y\),有一部分很可能是雜訊貢獻的,不能全部算在訊號上。

看到的 y = 2最佳猜測 1先驗平均 0往平均收縮
\(s = \tau = 1\),看到 \(y = 2\)。訊號和雜訊一樣大,所以各分到一半的功勞,最佳猜測是 1。
雜訊 \(\tau\)(\(s = 1\))收縮係數 \(k\)看到 \(y = 2\),猜意思
0.10.9901.98雜訊很小,幾乎相信觀測
10.5001.00各佔一半
30.1000.20雜訊很大,幾乎只能猜平均

如果先驗平均不是 0 而是 \(m\),公式變成 \(\mathbb E[x\mid y] = m + k(y - m)\)。\(k\to0\) 時答案就是 \(m\)。這正是第 16 講課堂問答說的「雜訊很大時,最好的去雜訊就是平均影像」。

這兩件事為什麼是同一件事

「回歸平均」和「去雜訊」看起來不同,其實只差標準化。把 \(x\) 和 \(y\) 都除以自己的標準差:

$$X_2 = \frac{x}{s},\qquad X_1 = \frac{y}{\sqrt{s^2+\tau^2}}$$

兩者都變成標準常態。因為 \(\mathbb E[xy] = \mathbb E[x^2] + \mathbb E[xn] = s^2\),它們的相關係數是

$$\rho = \mathbb E[X_1X_2] = \frac{s^2}{s\sqrt{s^2+\tau^2}} = \frac{s}{\sqrt{s^2+\tau^2}}$$

套用取條件的公式再換回原單位:

$$\begin{aligned}\mathbb E[x\mid y] &= s\cdot\rho X_1\\&= s\cdot\frac{s}{\sqrt{s^2+\tau^2}}\cdot\frac{y}{\sqrt{s^2+\tau^2}}\\&= \frac{s^2}{s^2+\tau^2}\,y\end{aligned}$$

和用精確度算的結果一模一樣。所以去雜訊就是在一個相關的高斯裡取條件,而收縮就是回歸平均。雜訊越大,\(y\) 和 \(x\) 的相關係數 \(\rho\) 越小,回歸得越厲害。

手算

\(s = \tau = 1,\ y = 2\)。第一種算法:\(k = \tfrac12\),猜 \(1\)。第二種算法:\(\rho = 1/\sqrt2\approx0.707\),\(X_1 = 2/\sqrt2\approx1.414\),\(\rho X_1 = 1\),乘上 \(s = 1\),也是 \(1\)。

Demo A10 · 看到帶雜訊的 y,x 該猜多少

怎麼看:每一個點是一組 \((y, x)\),橫軸是看到的 \(y\),縱軸是真正的 \(x\)。灰色虛線是「直接相信觀測」的 \(x = y\),綠色線是最佳猜測 \(x = ky\)。橙色帶子是給定 \(y\) 時 \(x\) 的範圍。把 \(\tau\) 拉大,點雲變成扁平的,綠線也跟著躺平。讀數裡還有一個實驗值:把 \(y\) 落在附近的點挑出來,它們的 \(x\) 的平均,會很接近綠線,而不是灰線(樣本有限,所以不會完全相等)。
(y, x) 的樣本x = y最佳猜測 x = k y給定 y 時 x 的 ±2 標準差

不是高斯時:Tweedie 公式

上面的 \(s^2/(s^2+\tau^2)\) 只有在訊號是高斯時才成立,真實資料不是高斯。但有一個對任何資料分佈都成立的公式,叫 Tweedie 公式,它把去雜訊和 score 連起來:

Tweedie $$\mathbb E[x\mid y] = y + \tau^2\,\nabla_y\log p(y)$$

白話:從 \(y\) 出發,沿著帶雜訊分佈的 score(往高機率區)走一步。先檢查高斯的情況:\(y\sim\mathcal N(0, s^2+\tau^2)\),由第 2 節,score 是 \(-y/(s^2+\tau^2)\),代入得

$$y - \frac{\tau^2y}{s^2+\tau^2} = \frac{s^2}{s^2+\tau^2}\,y$$

和上面完全一致。原來收縮的方向,就是 score 的方向。

Tweedie 公式的推導(對任何先驗 \(p(x)\) 都成立)
  1. \(y\) 的密度是把所有 \(x\) 的可能性加起來:\(p(y) = \int p(x)\,\mathcal N(y; x, \tau^2)\,dx\)。
  2. 對 \(y\) 微分。高斯的導數是 \(\partial_y\mathcal N(y; x, \tau^2) = \mathcal N(y; x, \tau^2)\cdot\frac{x - y}{\tau^2}\)(第 2 節的 score),所以 $$p'(y) = \int p(x)\,\mathcal N(y; x, \tau^2)\,\frac{x-y}{\tau^2}\,dx$$
  3. 由貝氏定理,\(p(x)\,\mathcal N(y; x, \tau^2) = p(y)\,p(x\mid y)\)。代入: $$\begin{aligned}p'(y) &= p(y)\int p(x\mid y)\,\frac{x-y}{\tau^2}\,dx\\&= p(y)\,\frac{\mathbb E[x\mid y] - y}{\tau^2}\end{aligned}$$
  4. 兩邊除以 \(p(y)\),左邊是 \(p'/p = \nabla_y\log p(y)\)。移項即得 Tweedie 公式。
一句話帶走:看到帶雜訊的觀測,最佳猜測要往平均收縮,雜訊越大收得越多;這和回歸平均是同一件事,而收縮的方向就是 score。
小練習:\(s = 2,\ \tau = 1\),看到 \(y = 5\)。最佳猜測是多少?後驗的變異數呢?
\(k = \frac{4}{4+1} = 0.8\),猜 \(4\)。後驗變異數 \(\frac{4\times1}{5} = 0.8\)。
在 CS236 哪裡用到:第 13 講的 Tweedie 公式;第 16 講 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\) 的 \(\tilde{\boldsymbol\mu}_t\) 是 \(\mathbf x_0\) 和 \(\mathbf x_t\) 的加權平均,也就是本節的相乘公式;VAE 的高斯後驗(第 6 講)。

12在 CS236 哪裡用到(速查表)

工具出現的地方後續補充課
Taylor 展開、\(O(h^k)\)Euler 法、Itô 公式、Tweedie、DDPM ≈ 反向 SDEB、E、F
梯度、score第 12–16 講的 score matching、Langevin、diffusionD、F
矩陣、行列式、特徵值第 7–8 講的變數變換、Markov 鏈收斂、線性 ODE、\(e^{tQ}\)B、D、G
Jacobiannormalizing flow 的 \(\log|\det J|\)C
散度、traceCNF 與 PF-ODE 的 likelihood、HutchinsonC、F
Hessian、Laplacianscore matching 的 \(\operatorname{tr}(\nabla^2\log p)\)、擴散方程C、F
變異數相加、√nMonte Carlo 誤差、布朗運動、DDPM 每步的 \(\sqrt{\beta_t}\)E
摺積資料加雜訊後的密度 \(q_\sigma\)(第 13 講)、DDPM 的 \(q(\mathbf x_t)\)C、E
高斯運算、配方reparameterization、\(q(\mathbf x_t\mid\mathbf x_0)\)、\(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\)E、F
取條件、去雜訊、Tweedie第 13 講的 Tweedie、第 16 講的 \(\boldsymbol\epsilon\) 預測F

常見誤解

誤解:「向量場的散度和 KL 散度有關」。只是名字相同。前者是速度場在每個位置的撐開速率,後者是兩個分佈之間的距離(第 6 節開頭的表)。
誤解:「兩個獨立的 \(\mathcal N(0,1)\) 相加是 \(\mathcal N(0,2)\),所以標準差變成 2」。變異數是 2,標準差是 \(\sqrt2\approx1.41\)。相加的是變異數。
誤解:「兩個高斯密度相乘,結果比較寬」。相乘是合併資訊,精確度相加,結果更窄。變寬的是隨機變數相加(摺積)。
誤解:「兩個高斯隨機變數相乘,還是高斯」。本頁的「相乘」是兩個密度函數相乘。兩個隨機變數的乘積 \(XY\) 一般不是高斯。
誤解:「梯度上升就能找到全域最高點」。梯度只看局部,會停在最近的峰(Demo A2)。要在多個峰之間移動,需要隨機性(MCMC、Langevin)。
誤解:「散度 0 代表沒有流動」。旋轉和剪切都在流動,只是面積不變(Demo A4)。
誤解:「\(O(h^2)\) 的誤差比 \(O(h)\) 大,因為指數比較大」。\(h\) 是小量,\(h^2\) 比 \(h\) 小得多。階數越高,縮小 \(h\) 時誤差掉得越快。
誤解:「最好的去雜訊就是相信觀測值」。均方誤差最小的猜測是條件平均,它會往平均收縮(Demo A10)。但這個猜測是「平均」,所以雜訊很大時,它會是一張模糊的圖,而不是一張真實的圖。

自我測驗

1. 把 \(e^x\) 在 \(x_0 = 0\) 展開到二階。用它估計 \(e^{0.2}\),誤差大約多少?
\(e^{h}\approx 1 + h + h^2/2\),\(h = 0.2\) 時是 1.22;真值 1.2214,誤差約 0.0014,和下一項 \(h^3/6\approx0.0013\) 同一個量級。
2. 一維高斯 \(\mathcal N(\mu,\sigma^2)\) 的 score 是什麼?它指向哪裡?
\(\frac{d}{dx}\log p = -\frac{x-\mu}{\sigma^2}\)。在 \(\mu\) 右邊是負的、左邊是正的,永遠指向平均,離得越遠越大。
3. 線性流動 \(\mathbf v = A\mathbf x\),\(A = \begin{bmatrix}-1&2\\0&-1\end{bmatrix}\)。一小塊面積經過時間 1 之後變成原來的幾倍?
散度 = \(\operatorname{tr}A = -2\),面積乘上 \(e^{-2}\approx0.135\)。
4. \(A = \begin{bmatrix}2&0\\0&0.5\end{bmatrix}\) 的行列式、trace、特徵值各是多少?反覆乘 \(A\),一般的向量會轉向哪個方向?
行列式 1、trace 2.5、特徵值 2 和 0.5。會轉向特徵值 2 的方向,也就是 \(x\) 軸。
5. 這個 \(A\) 的行列式是 1,但流動 \(\mathbf v = A\mathbf x\) 的面積會變。為什麼兩者不矛盾?
行列式 1 是說「把 \(A\) 當成一次變換」時面積不變。流動的時間演化是 \(e^{tA}\),面積倍數是 \(\det e^{tA} = e^{t\operatorname{tr}A} = e^{2.5t}\)。一個是把矩陣當「變換」,另一個是把矩陣當「速度」,兩者用途不同。
6. 想在時間 1 內走 400 步隨機漫步,終點的標準差要是 1,每一步要多大?
400 步的變異數是 \(400s^2 = 1\),所以 \(s = 1/20 = 1/\sqrt{400}\)。
7. 把兩個 \([0, 1]\) 上的均勻分佈相加,\(X + Y\) 落在哪個範圍?密度最高的地方在哪裡?
落在 \([0, 2]\)。摺積是三角形,最高點在 \(s = 1\),因為中間的組合最多。
8. prior \(\mathcal N(0, 1)\),觀測到 \(y = 2\),觀測雜訊 \(\mathcal N(0, 1)\)。後驗是什麼?
兩個精確度都是 1,相加得 2,後驗變異數 1/2;平均 \(\frac12(0 + 2) = 1\)。後驗是 \(\mathcal N(1, 1/2)\):猜測從 2 往 prior 的平均 0 收了一半。

延伸閱讀

  • Lai et al. (2026) 附錄 B.1:從變數變換到連續方程,裡面用到 \(\det(I + \Delta t A) = 1 + \Delta t\operatorname{tr}A + O(\Delta t^2)\)(本頁第 6 節的根據);§3.3 的 Tweedie 公式(本頁第 11 節)。
  • Holderrieth & Erives (2026) 附錄「A Reminder on Probability Theory」:隨機向量、條件密度與條件期望。
  • 3Blue1Brown 的〈Essence of Linear Algebra〉系列:行列式、特徵向量的幾何直覺,和本頁第 3–4 節的看法相同。