JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

幾何觀點:正交投影

一個超定系統沒有精確解,所以我們退而求其次,找最接近的那個。這篇要揭開那個選擇背後的畫面:最佳擬合,就是把你的資料筆直地投影到模型所能觸及的子空間上、落下的那道影子;而「最佳」的意思是:剩下的那道誤差恰好以直角指出去。

上一篇留下的那個問題

在上一篇,你認識了超定系統 A x = b:一個又高又瘦的矩陣 A,列(量測值)比行(未知數)多,而右端項 b 幾乎永遠不會剛好落在 A x 所能觸及之處。沒有任何 x 能讓 A x 等於 b,於是我們重新定義了目標——找出讓殘差(residual)r = b - A x 在長度上盡可能小的那個 x,也就是把 ||A x - b||_2 最小化。這就是最小平方問題。我們點出了目標,甚至算了一個小例子。但我們還沒做的,是解釋為什麼那個最小化解會有它那麼乾淨的形式。這篇補上那個缺席的理由,而那個理由是純粹的幾何。

看穿它的訣竅,是別再盯著方程式,而開始看活在一個空間裡的向量。向量 b 是 R^m 裡的單一一個點(m 是量測的個數)。當 x 跑遍所有可能的係數向量時,A x 這個量描出的並不是整個 R^m,而只是它的一塊平坦切片:每個可觸及的 A x,都是 A 各行的某種組合。那塊切片——所有「能用 A 的各行加權求和而造出來」的向量所成的集合——就是 A 的行空間(column space),記作 col(A)。最小平方問題問的是:在這塊平坦切片裡所有的點之中,哪一個離 b 最近?

最近的點,是垂足

這裡有一個你早已在日常生活裡信得過的畫面。把一支手電筒直直地舉在桌面正上方,再把一顆小球拿在空中某處。桌面上離球最近的點,就是它正下方的那一處——光垂直照下(而非斜照)時球落下的影子。桌面上其他每一個點都更遠。從球連到那個最近點的那條線恰好是鉛直的:它與桌面以直角相交。那個直角並非巧合;它正是讓這個點成為最近點的原因。把那條線哪怕傾斜一點點,你都能藉著滑向垂足而把它縮短。

現在把這個玩具一字一句地翻譯回最小平方。桌面是行空間 col(A)。球是你的資料向量 b,懸在上方(它不落在那塊切片裡——這正是系統超定的原因)。切片上最近的那個點,是某個 A x*,即最佳擬合。而從 b 落到 A x* 的那條線,就是殘差 r = b - A x*。整個最小平方的內容,就濃縮成這一句話:最佳擬合是 col(A) 中位於 b 正下方的那個點,而連接它們的殘差垂直於 col(A)。 這就是把 b 正交投影到行空間,也是整個本級的幾何核心。

垂直於切片,意味著垂直於每一行

這個幾何陳述令人滿意,但我們想把它變成能拿來計算的東西。關鍵的一步,是把「殘差垂直於 col(A)」講得具體。行空間由 A 的各行張成,把它們叫做 a_1、a_2、……、a_n。一個向量垂直於整塊切片,恰恰發生在它垂直於每一個張成行的時候——只要它向哪怕一行傾斜,它就不是正對著切片。兩個向量 u 與 v 的垂直,用它們的內積來度量:u 與 v 正交,恰恰當 u . v = 0。於是「殘差垂直於切片」就拆解成 n 條各自獨立的內積方程,每行一條。

Orthogonality conditions, one per column of A:

   a_1 . r = 0          (residual square-on to column 1)
   a_2 . r = 0          (residual square-on to column 2)
      ...                 with   r = b - A x*
   a_n . r = 0          (residual square-on to column n)

Stack all n of these:   A^T r = 0
                        A^T (b - A x*) = 0
   rearrange       ->   A^T A x* = A^T b      (the normal equations)
要求殘差正交於 A 的每一行,再把這些條件疊起來,就塌縮成一個方形的 n×n 系統 A^T A x = A^T b。

看看剛剛發生了什麼。A^T 的每一列正是 A 的某一行,所以矩陣乘積 A^T r,恰好就是把那些內積 a_1 . r、a_2 . r、……、a_n . r 疊起來的那一行。把這整個向量設為零,就是一口氣寫下全部 n 條正交條件的緊湊寫法:A^T r = 0,也就是 A^T (b - A x*) = 0。把 b 那一項移到另一邊,你就抵達 A^T A x* = A^T b——一個 n 個未知數、n 條方程的方形系統。這就是著名的正規方程(normal equations),而這裡的「normal」一詞,不過是「垂直」的古老幾何用語。它們不是某條任意湊出來的代數配方;它們就是垂直性,用矩陣速記寫成。

投影矩陣,以及對殘差的一個保證

一旦有了 x*,最佳擬合本身——切片裡那個影子點——就是 p = A x*。若 A 的各行線性獨立,則 A^T A 可逆,代入 x* = (A^T A)^{-1} A^T b 得到 p = A (A^T A)^{-1} A^T b。那個把 b 變成它的影子的矩陣,P = A (A^T A)^{-1} A^T,稱為投影矩陣。它有兩個恰好對應幾何的性質,值得一看,因為它們正是你拿來檢驗「某東西真的是投影」的方法。第一,P 是冪等的:P P = P。對一個本已在桌面上的點做投影,什麼也不會發生——它的影子就是它自己。第二,把 P 連用兩次或只用一次,落點相同,因為一旦你已平貼在切片上,再筆直地落下一次,哪兒也不去。

殘差 r = b - p = (I - P) b 帶著一個在實務上真正有用的保證:它正交於行空間裡的每一個向量,這特別意味著它正交於擬合 p 本身。這給出一條畢氏恆等式,||b||_2^2 = ||p||_2^2 + ||r||_2^2——資料向量是斜邊,擬合與殘差是兩條互相垂直的直角邊。它也給了你一個對「任何你算出來的最小平方解」便宜又誠實的健全性檢查:算出 A^T r,確認它本質上為零(到捨入誤差為止)。這就是殘差檢查,當你懷疑求解器出了毛病時,這是第一個該伸手去拿的東西。

關於那條公式 P = A (A^T A)^{-1} A^T,有一個誠實的提醒。它是正確的畫面,卻是個糟糕的計算配方,理由跟「我們永不真的去求逆來解 A x = b」一樣。顯式地造出 A^T A、再把它求逆,會丟掉準確度:正如本級稍後一篇將會說明的,A^T A 把 A 的條件數給平方了,於是一個原本只是棘手的擬合,會變得真正脆弱。把 P 讀成一個解釋幾何的定義,而非給電腦的指令。真正穩定地落到投影上的方法,會用一個 QR 分解或 SVD,而它們就要來了。

正規正交的捷徑,與一個算過的影子

QR 之所以是對的下一個工具,整個理由藏在一個值得現在就看的特例裡。假設 A 的各行原本就正規正交(orthonormal)——彼此垂直、且每一個長度都是一。那麼 A^T A 就只是單位矩陣 I,那個麻煩的 (A^T A)^{-1} 消失了,投影塌縮成 p = A A^T b。更妙的是,每一行上的係數,就只是 b 與那行的內積:你獨立地查出 b 沿著每個方向各有多少分量,彼此互不串擾。投影到單一單位向量 q 上,就是你在最初線性代數那級裡熟悉的 (q . b) q。正規正交的各行,把整個最小平方問題化成 n 個那樣的、互相獨立的單方向投影。

那正是 QR 將為我們買下的回報:格拉姆–施密特正交化(以及它更穩定的表親)用一組正規正交向量把同一個行空間重新搭建出來,於是那個困難的、傾斜的幾何就變成 n 道容易的、互相獨立的影子。但這裡也得舉起誠實的旗子:天真的格拉姆–施密特本身在數值上很嬌氣——當各行近乎平行時,它會因捨入而嚴重失去正交性——這正是為什麼正式的程式碼改用 Householder 反射或修正版本。想法是乾淨的;謹慎的實作則是第四篇的主題。

用最簡單的、肉眼可驗的影子把它變具體。取 A,它的兩行是 (1,0,0) 與 (0,1,0)——本就正規正交——所以 col(A) 是坐落在 R^3 之中的那塊平坦 xy 平面,再取資料 b = (1, 2, 4)。每個係數就只是一個內積:x* = (a_1 . b, a_2 . b) = (1, 2)。擬合是 p = A x* = (1, 2, 0)——恰好就是 b 被敲掉它的 z 分量。殘差是 r = b - p = (0, 0, 4),筆直地指出平面之外。驗證一下幾何:A^T r = (0, 0),所以殘差確實正交於兩行,畢氏定理也成立——||b||_2^2 = 21 等於 ||p||_2^2 + ||r||_2^2 = 5 + 16。投影到一個坐標平面,就只是「忘掉那個垂直的坐標」,而每一個更難的最小平方擬合,都是同一個動作換上一組傾斜的基底而已。

為什麼這幅畫面值得一路帶下去

退一步,注意幾何替我們買到了多少。我們從來不必用蠻力代數去擺弄 ||A x - b||_2;單單一幅畫面——向你所能觸及的切片放下一條垂線——就告訴了我們:最小化解存在、在各行獨立時唯一、而且它滿足一個乾淨的方形系統。同一個投影想法在下游處處重現:它是正規方程之所以有那個形式的原因(下一篇),是 QR 與 SVD 之所以能不求任何逆就穩定算出同一道影子的原因(再下一篇),最終也是正則化之所以管用的原因——它輕輕地傾斜你所投影到的那塊切片。把手電筒與桌面的影像帶在身上;它幾乎解釋了後面的一切。

最後一句讓你保持誠實的提醒,呼應整個學科的精神。幾何是精確的數學,但你一在真實機器上計算投影,每個數字就都是近似——浮點數算術並非精確的實數算術,A^T r 算出來會是一個微小的非零向量,而非剛好為零,而它有多微小,取決於條件性、也取決於你選了哪個演算法。一條畫在理想化 R^m 裡的垂線,與一條在雙精度裡算出的垂線,是近親而非同卵雙胞胎。正因為你懂得那乾淨的幾何,你才認得出「算出來的答案何時已經偏離了它」——而那份認得,正是本級的全部要點。