數學基礎

線性變換(linear transformation)

/ LIN-ee-ur trans-for-MAY-shun /

線性變換是一種「重塑空間」的手法,而且重塑得井井有條:直線仍然是直線,原點(零點)原地不動,均勻的網格線仍然均勻——它們可以被拉伸、壓扁、旋轉或斜切,卻永遠不會被彎折或撕裂。想像一張有彈性的方格紙,你可以拉它、轉它、斜著推它,卻不能把它揉皺。那種平滑而均勻的重塑,正是這裡「線性」的含義。

每一個線性變換都能用一個矩陣來刻畫,而把這個變換作用到一個向量上,無非就是用那個矩陣去乘這個向量。這正是矩陣之所以重要的深層原因:一格格數字,其實是一份「如何移動並重塑空間」的緊湊配方。兩條形式化的規則把它釘死——把輸入放大幾倍,輸出就放大同樣的倍數;和的變換等於變換的和。說白了,就是各部分相加、毫無意外。

在機器學習裡,神經網路的每一層,開頭都先做一次線性變換:把輸入乘以一個權重矩陣,來混合並重塑它們。但有一點值得記牢——無論你把多少個線性變換疊在一起,得到的也永遠只是另一個線性變換。這正是為什麼網路要在層與層之間插入一個非線性步驟(激活函數)。少了它,一個百層的網路就會塌縮成單層的本事,深度學習也就一點都不「深」了。

矩陣 [ [2, 0], [0, 1]] 把一切都橫向拉伸到兩倍寬,而高度不變——一個正方形就變成了一個扁長的矩形。矩陣 [ [0, -1], [1, 0]] 則把整個平面逆時針旋轉四分之一圈。這兩種情形下,原點都紋絲不動,網格線始終保持筆直且間距均勻:這正是它們之所以「線性」的緣由。

矩陣其實是個動詞:[ [2,0],[0,1]] 在說「橫向拉寬」,[ [0,-1],[1,0]] 在說「旋轉」。同一張網格,重塑而不彎折。

嚴格的線性變換必須讓原點固定不動;一旦再加上一個平移(偏置項),它就成了「仿射」變換,而非線性變換。深度網路之所以需要激活函數,恰恰是因為「線性疊線性」依舊只是線性——是非線性才解鎖了它們的威力。

又稱
线性变换線性變換linear maplinear mapping线性映射