不教數學系那套。iPAS 從來不叫你手算反矩陣——它只考六件事:維度對不對得起來、NumPy 那幾個函式誰是誰、兩個向量像不像、PCA 的特徵值在幹嘛、SVD 為什麼能降維、範數在正則化與梯度裁剪裡的角色。這頁就把這六件事用三個互動實驗室講完。
這四個名詞的差別只有一個:需要幾個索引才能指到一個數字(也就是「階數 / ndim」)。
| 名稱 | 階數 | 長相 | AI 裡的例子 |
|---|---|---|---|
| 純量 Scalar | 0 | 3.14 | 學習率、loss 值 |
| 向量 Vector | 1 | [1, 2, 3] | 詞嵌入向量、一筆樣本的特徵 |
| 矩陣 Matrix | 2 | [[1,2],[3,4]] | 一批資料 (樣本數, 特徵數)、權重 W |
| 張量 Tensor | 3 以上 | shape=(32,224,224,3) | 一批彩色圖片 (批次, 高, 寬, 通道) |
這頁會用到的符號全部列在下面,一行一個。數學的困難常常不是概念難,而是沒人告訴你那個圖案怎麼念、代表什麼——看不懂符號,整條式子就等於空白。
| 符號 | 怎麼念 | 在這頁的意思 |
|---|---|---|
| Σ | sigma 西格瑪(大寫) | 把一串東西全部加起來。下面寫從哪開始、上面寫到哪結束。 |
| ‖x‖ | norm 範數(雙豎線) | 向量的「長度」。雙豎線是為了跟單豎線的絕對值區隔。 |
| × · | multiplication 乘號兩種寫法 | 都是乘。差別純粹是歷史與排版習慣。 |
| = | equals 等號 | 兩邊相等。 |
| ≠ | not equal 不等於 | 兩邊不相等。 |
| ≤ ≥ | less/greater than or equal 小於等於、大於等於 | 包含「剛好等於」的那個邊界。 |
| λ | lambda 蘭布達 | 在這四頁有三種身分:特徵值(PCA)、正則化強度(L1/L2)、卜瓦松的平均發生次數。 |
| ρ r | rho / r 相關係數 | 兩個變數的線性關係強度,範圍 −1 到 1。 |
| θ | theta 西塔(參數) | 泛指「模型的某個未知參數」。在線代頁則是兩個向量的夾角。 |
| Aᵀ | transpose 轉置 | 把矩陣的行與列對調。 |
| A⁻¹ | inverse 反矩陣 | 乘回去會變成單位矩陣的那個矩陣,相當於矩陣版的「倒數」。 |
| det |A| | determinant 行列式 | 一個能判斷矩陣「有沒有把空間壓扁」的數。det = 0 代表沒有反矩陣。 |
| ⊥ | perpendicular 垂直、正交 | 兩個向量夾角 90°,內積為 0,彼此完全無關。 |
| x₁ x₂ | subscript 下標 | 編號用。x₁, x₂, x₃ 是「第 1、2、3 個」,不是次方。 |
| A x | 大寫矩陣、小寫向量 排版慣例 | 看字體就知道是什麼:大寫=矩陣、小寫=向量或純量。 |
| √ᵢ Σᵢ | indices 求和的上下界與指標 i | Σ 底下的 i=1、頂上的 n:從第 1 個加到第 n 個。i 是「跑號」。 |
規則只有一句話:輸出 C 的第 i 列第 j 欄,等於「A 的第 i 列」和「B 的第 j 欄」對應相乘後全部加起來——也就是這兩條線的內積。
因為要對應相乘——A 那一列拿出 3 個數字,B 那一欄就得剛好也有 3 個數字才配得起來。少一個或多一個都沒辦法配對,整個運算就不成立。這就是下一個實驗室要玩的「維度相容」,本質上只是這件事的形狀版說法。
A * B 是把同位置的數字直接相乘(要求兩者形狀相同),A @ B 才是上面這套「列×欄再相加」。考程式題最愛用這個騙人。
知道怎麼算之後,考試真正問的其實只有「接不接得起來、輸出多大」:內側兩個數字要相同,外側兩個數字留下來。 \((a,b) \times (b,c) = (a,c)\)。拖動滑桿把中間兩個數字調成不一樣,看它整條斷掉。
用滑鼠拖動兩個箭頭的頂端,看四個數字怎麼變。重點在於分辨:內積是一個數字、逐元素相乘還是一個向量、餘弦只管方向、歐氏距離管絕對位置。
np.dot(a,b) 內積 = – (一個純量)a * b 逐元素 = – (還是向量!)按上面那顆「把 b 等比拉長」的按鈕:餘弦相似度完全沒變,歐氏距離卻暴增。文件向量的「長度」通常只反映文章多長、字數多少,不代表主題不同。所以 RAG 的向量檢索、詞嵌入比對,幾乎一律用餘弦相似度——它把長度除掉,只留下方向(=語意)。
v1 * v2 在 NumPy 是逐元素相乘(element-wise),[1,2,3]*[4,5,6] = [4,10,18];np.dot(v1,v2) 才是內積,1×4+2×5+3×6 = 32。114 年第 2 回中級科目三第 40 題就是整題在考這個。矩陣乘法要用 @ 或 np.matmul,不要用 *。
| 要比什麼 | 用哪個 | 典型場景 |
|---|---|---|
| 語意像不像(不管長度) | 餘弦相似度 | RAG 檢索、詞嵌入、推薦系統、文件分群 |
| 實際離多遠 | 歐氏距離 L2 | K-means 分群、KNN、異常偵測 |
| 各維度差距總和(抗離群) | 曼哈頓距離 L1 | 高維稀疏資料、對離群值較穩健 |
中級科目三會直接貼一張程式碼截圖問「下列敘述何者正確」。這五個函式分清楚就穩了:
| 寫法 | 做什麼 | 回傳 | 最常被拿來騙人的錯配 |
|---|---|---|---|
np.dot(a,b) | 向量內積 / 矩陣乘法 | 純量或矩陣 | 被說成「逐元素相乘」 |
a * b | 逐元素相乘 | 同形狀陣列 | 被說成「矩陣乘法」 |
a @ b / np.matmul | 矩陣乘法 | 矩陣 | — |
np.linalg.inv(A) | 反矩陣 | 矩陣 | 被說成「算行列式」 |
np.linalg.det(A) | 行列式 | 純量 | 被說成「算反矩陣」 |
np.linalg.eig(A) | 特徵值+特徵向量 | (值, 向量) | 被說成「算反矩陣」 |
np.linalg.norm(v) | 範數(預設 L2 長度) | 純量 | 被說成「正規化」 |
A.T | 轉置(行列互換) | 矩陣 | 被說成「反矩陣」 |
inv=inverse 反;det=determinant 行列式;eig=eigenvalue 特徵值。三個英文字頭直接對應,選項一旦張冠李戴就是錯的。PCA 的一句話定義:對資料的共變異數矩陣做特徵分解,特徵向量=主要變異的方向,特徵值=那個方向上的變異量。 拉動下面的相關係數,看兩條主軸怎麼轉、第二個特徵值怎麼被壓扁。
| 問題 | 標準答案 |
|---|---|
| PCA 在數學上做了什麼? | 對共變異數矩陣做特徵值分解,取特徵值最大的前 k 個特徵向量當新座標軸 |
| 怎麼決定保留幾維? | 看累積解釋變異比例(如累積 85%~95%),或看陡坡圖 Scree Plot 的轉折 |
| PCA 前一定要做什麼? | 標準化(\((X-\mu)/\sigma\))。不然單位大的特徵(如「年薪」)會霸佔主成分 |
範數就是「向量的長度該怎麼量」。iPAS 只考兩種:
| L1 範數 | L2 範數 | |
|---|---|---|
| 算法 | \(\sum |w_i|\) 絕對值相加 | \(\sqrt{\sum w_i^2}\) 平方和開根號 |
| 當正則化 | Lasso:把不重要的權重壓成剛好 0 → 自動特徵選擇、模型稀疏 | Ridge / 權重衰減:把權重整體縮小但不歸零 → 抑制過擬合、緩解共線性 |
| 幾何直覺 | 菱形限制區,尖角容易碰到座標軸 → 出現 0 | 圓形限制區,處處平滑 → 不會剛好是 0 |
| 兩個一起用 | Elastic Net=L1 + L2,兼顧稀疏與穩定 | |
訓練 RNN/Transformer 時梯度可能爆炸,clip_grad_norm_ 的作用是限制梯度的 L2 範數,避免更新步幅失控導致 loss 變 NaN。考題重點在插入位置:
loss.backward() → ✂️ clip_grad_norm_(params, max_norm) → optimizer.step()One-Hot 編碼:把無順序的類別(縣市、顏色)拆成多個 0/1 欄位,避免模型誤以為「台北=1、台中=2」有大小關係。代價是維度暴增且互相共線——所以線性模型常搭配 drop_first 拿掉一欄當基準,降低共線性。
Ordinal 編碼:有順序的類別(非常不滿意→非常滿意)才用,直接轉成 1~5 保留順序。
嵌入向量 Embedding:把類別/詞彙壓成稠密的低維向量(如 512 維),語意相近的向量方向也相近——這就是為什麼可以用餘弦相似度比對。
標準化 Standardization:\(z = (x-\mu)/\sigma\),轉成平均 0、標準差 1。PCA、SVM、KNN、神經網路都需要。
正規化 Normalization(Min-Max):\(x' = (x - x_{min})/(x_{max}-x_{min})\),壓到 [0,1],對離群值敏感。
19。取 A 的第 1 列 [1, 2] 與 B 的第 1 欄 [5, 7],對應相乘再相加:1×5 + 2×7 = 5 + 14 = 19。整個 AB = [[19, 22], [43, 50]]。順帶一提 BA = [[23, 34], [31, 46]],兩者不相等——矩陣乘法不可交換。
(1, 64)。內側 10 與 10 相同故可乘,外側 1 與 64 留下來。選 (10,10) 是把被吃掉的內側當輸出;選 (64,1) 是外側順序寫反。
v1 = np.array([1,2,3])、v2 = np.array([4,5,6]),v1 * v2 和 np.dot(v1,v2) 各是多少?v1 * v2 → array([4, 10, 18])(逐元素);np.dot(v1,v2) → 32(4+10+18,一個純量)。順帶:np.linalg.inv 是反矩陣、det 才是行列式、eig 是特徵值。
(A) 不正確。SVD 對任意 m×n 長方形矩陣都成立——推薦系統的使用者×商品矩陣本來就是長方形,正是 SVD 的主場。B、C、D 皆為正確敘述。
餘弦相似度。它先除掉向量長度、只比方向,不會因為文章字數多寡而失真。歐氏距離會把「長度差異」誤判成「主題差異」。
clip_grad_norm_ 應該插在哪兩行之間?作用是什麼?插在 loss.backward() 之後、optimizer.step() 之前。作用是限制梯度的 L2 範數,避免梯度爆炸造成更新步幅失控、loss 變 NaN。
共變異數矩陣的第二個特徵值 λ₂ 接近 0,表示第二個方向幾乎沒有變異、沒帶新資訊(共線性)。PCA 只留 PC1 就能保住絕大部分變異,降維幾乎無損。
100 個。權重 9×10 = 90,加上每個神經元各一個偏置 bias 共 10 → (9+1)×10 = 100。
dot=內積、*=逐元素、@=矩陣乘法、inv=反矩陣、det=行列式、eig=特徵值、.T=轉置。初級幾乎只考觀念層:向量/矩陣是什麼、One-Hot 的用途、嵌入向量與相似度、標準化 vs 正規化。中級才進到計算與程式:科目一常出 Attention 的矩陣維度題,科目二出 PCA/SVD/共線性與降維選型,科目三出 NumPy 程式碼判讀、參數量計算、梯度裁剪位置。近兩屆的固定班底:矩陣形狀相容、np.dot vs *、SVD 能否分解長方形矩陣、PCA vs t-SNE 選型、Z-score 判讀。
不會。歷屆真題只考「判斷維度相不相容」「哪個函式做哪件事」「概念敘述何者正確」。真正需要動筆的計算只有小型內積(如 1×4+2×5+3×6)和參數量 (輸入+1)×輸出。
SVD 是更一般的矩陣分解工具,任何 m×n 矩陣都能拆成 UΣVᵀ;PCA 是把 SVD(或特徵分解)用在「已中心化資料的共變異數結構」上的特殊應用。實務上 sklearn 的 PCA 內部就是呼叫 SVD。
在意「方向/語意」且向量長度會受無關因素影響(文章長短、使用者活躍度)→ 餘弦;在意「實際距離」且各維度尺度已對齊 → 歐氏。K-means 用歐氏,RAG 向量檢索用餘弦。
都是模型壓縮:張量分解=把大矩陣/張量拆成小結構;量化=降低數值精度(FP32→INT8,不需重訓);剪枝=移除不重要的權重或連線。考題最常拿 FP32→INT8 來問,答案是量化。