iPAS AI 應用規劃師 · 中級科目三核心

⛰️ iPAS 數值最佳化速成

「訓練不收斂」在考題裡永遠只有幾種長相:loss 震盪、loss 變 NaN、層數加深反而更差、驗證損失從某個 epoch 開始反轉。每一種都對應到固定的成因與解方。這頁用三個互動實驗室,把看不見的梯度、批次與搜尋策略全部畫出來。

🔬 梯度消失/爆炸放大鏡🧮 Batch/Epoch/Iteration🔍 Grid vs Random vs 貝葉斯📌 全部對到歷屆真題

💡 先講白話:最佳化在做什麼

訓練 = 沿著梯度往 loss 低的方向走,一步一步更新權重:
\[ w \leftarrow w - \eta \cdot \nabla L(w) \] 這條式子裡只有三個東西可以調:步伐多大(學習率 η)每步用多少資料算梯度(batch size)怎麼決定方向(優化器)。iPAS 的最佳化題全部繞著這三個旋鈕,再加上一個前置條件——梯度得先傳得到
📌 這頁專攻站內還沒有專頁的部分。基本觀念已有專頁的直接連過去:梯度下降學習率與排程Adam 優化器非凸函數與局部最優損失函數

🔤 看到符號就卡住?先把這張表放旁邊

這頁會用到的符號全部列在下面,一行一個。數學的困難常常不是概念難,而是沒人告訴你那個圖案怎麼念、代表什麼——看不懂符號,整條式子就等於空白。

符號怎麼念在這頁的意思
radical sign
根號
開根號。問「什麼數自己乘自己會得到它」。
⌈ ⌉ceiling
上取整(無條件進位)
往上進到整數。⌈10000÷32⌉ = ⌈312.5⌉ = 313
‖x‖norm
範數(雙豎線)
向量的「長度」。雙豎線是為了跟單豎線的絕對值區隔。
× ·multiplication
乘號兩種寫法
都是乘。差別純粹是歷史與排版習慣。
=equals
等號
兩邊相等。
approximately equal
約等於
差不多相等(四捨五入或近似之後)。
÷division
除號
除。
partial
偏微分(圓體 d、curly d)
只對其中一個變數微分,其他當成常數。
nabla / del
梯度算子
梯度——指向「上升最快」的方向。訓練時往它的反方向走。
ηeta
伊塔(學習率)
學習率——每次更新參數要走多大步。
μmu
謬(母體平均)
整個母體的真實平均值(相對於樣本平均 x̄)。
σ σ²sigma
西格瑪(標準差、變異數)
σ=標準差(資料多分散,單位同原資料);σ²=變異數(平方單位)。
E[X]expectation
期望值
長期平均下來會是多少。
A x大寫矩陣、小寫向量
排版慣例
看字體就知道是什麼:大寫=矩陣、小寫=向量或純量
assignment
賦值箭頭
「用右邊的結果取代左邊」,不是「等於」。
🔍 想知道「為什麼是這個符號」?例如 Σ 其實是希臘文的 S,來自拉丁文 Summa(和)∫ 是一個被拉長的 S∂ 是圓體的 d——完整的 50 個符號來源、發明者與年代,都整理在 數學符號解碼器
那頁還會誠實標出哪些符號根本查不到出處(像機器學習學習率的 η,翻遍符號史文獻都沒人記載為什麼是它)——看不懂不是你的問題,是真的沒人寫下來。

🧮 實驗室 1:Batch / Epoch / Iteration 換算器 初級中級

三個名詞天天出現卻最常搞混。一句話:Epoch 是「把全部資料看過一遍」,Batch 是「一次拿幾筆去算梯度」,Iteration 是「更新權重一次」

每個 Epoch 的 Iteration: 整個訓練的權重更新次數: 最後一個 batch 的大小:
Batch size 調大Batch size 調小
梯度品質平均更多樣本 → 噪聲小、方向穩樣本少 → 噪聲大、方向抖
更新次數同樣資料下更新次數變少(走得少步)更新次數多(走得多步)
記憶體 / GPU吃更多顯存,容易 OOM省顯存
逃出局部最小較不容易(太平滑)噪聲反而有機會抖出局部最小
常見搭配batch 加大時學習率通常也要跟著調大小 batch 配小學習率較穩
🎯 三種梯度下降就是 batch size 的三個極端:B = N 是 BGD(全批次,每 epoch 只更新一次,穩但慢);B = 1 是 SGD(每筆更新一次,快但抖);中間就是實務標準的 Mini-batch。細節在 梯度下降

🔬 實驗室 2:梯度消失/爆炸放大鏡 中級最高頻

反向傳播是連乘:每往前傳一層,梯度就乘上一個倍率。倍率小於 1,乘幾十層就趨近 0(梯度消失);大於 1,就指數放大(梯度爆炸)。調下面的組合,看梯度從輸出層傳回輸入層一路變成什麼樣。

每層倍率: 最靠近輸入那層的梯度: 頭尾相差:
🎯 真題還原(中級 科目三):把 3 層 CNN 升級成 16 層做 CT 腫瘤偵測,訓練損失反而更高、收斂困難。正解是「深層網路可能出現梯度消失,淺層權重難以更新;應採用 ResNet 的殘差連接改善梯度傳遞」。
陷阱選項:「把 ReLU 改成 Sigmoid 可改善梯度傳遞」——完全反了,Sigmoid 才是梯度消失的元凶。另一題問「超過 50 層的深層 CNN 該優先考慮哪個架構」,答案同樣是 ResNet(VGG/GoogLeNet/ViT 都是干擾項)。
⚠️ 三個常見的「以為它能解決梯度消失」誤區:
池化層的主要作用是降低特徵圖維度、減少參數與計算量,不是改善梯度傳遞。
多頭注意力的主要優點是從不同表示子空間捕捉多樣化關聯,不是避免梯度消失。
梯度裁剪治的是爆炸不是消失——它把整體梯度等比例縮小,層與層之間的比例完全沒變。

Xavier vs He:為什麼初始化不能亂設

初始化做法搭配誰為什麼
全部設 0權重都是 0❌ 不能用同一層每個神經元收到完全一樣的梯度,永遠學一樣的東西(對稱性沒被打破)
Xavier / Glorot變異數 ≈ 1/ninSigmoid / Tanh讓前向與反向的訊號量級都維持住
He(Kaiming)變異數 ≈ 2/ninReLU 系列ReLU 砍掉一半的輸出,變異數少一半,所以要乘 2 補回來
自己驗一次:上面實驗室選 ReLU + Xavier,每層倍率會是 0.71(衰減);換成 ReLU + He,倍率剛好變成 1.00。那個差距就是 \(\sqrt{2}\)——He 的全部祕密。

解方對照:症狀 → 對策

梯度消失 Vanishing梯度爆炸 Exploding
症狀淺層幾乎不動、深層才學得到;加深反而更差loss 突然變 NaN 或飆高、權重爆掉
元凶Sigmoid/Tanh 飽和區導數趨近 0、層數太深權重初始化過大、RNN 長序列連乘、學習率過大
解方ReLU 系列殘差連接 ResNetBatch NormLSTM/GRU 門控He 初始化梯度裁剪 clip_grad_norm_、降低學習率、Batch Norm、較小的初始化
🎯 梯度裁剪的位置(真題):loss.backward()clip_grad_norm_(params, max_norm)optimizer.step()。先反向傳播算出梯度才裁得到,裁完再更新。作用是限制梯度的 L2 範數,避免更新步幅失控導致 loss 變 NaN。

🎚️ 學習率:一個旋鈕三種症狀 中級

學習率會看到什麼怎麼修
太大loss 震盪或發散——在最佳點兩側反覆跳越,甚至越跑越高調小、加 warmup、換 Adam
太小收斂龜速,跑完預算還沒到最佳點調大、用學習率排程
剛好loss 平順下降後趨於平坦可搭配衰減(Decay / Cosine)再壓一段
🎯 真題還原:「工程師把學習率調高後,訓練損失開始明顯震盪。學習率過大最直接導致下列哪種現象?」→ 損失函數震盪或發散(Oscillation / Divergence)
陷阱選項是梯度消失、過擬合、Dying ReLU——這三個都是別的病。學習率過大的最直接症狀就是「步伐跨過谷底」。
🎯 Fine-tuning 為什麼用 1e-4 這種小學習率?避免更新步伐過大,破壞預訓練模型原本已學好的良好特徵表示。不是為了省記憶體、不是為了加速、更不是為了讓 loss 歸零。
同一組概念下的另一題:LLM 微調發生災難性遺忘,資源有限時最有效的做法是凍結大部分預訓練參數、只微調 LoRA 等少量模組——不是「提高學習率縮短步數」。

🧰 優化器族譜:每一代加了什麼 中級

優化器加了什麼解決什麼
SGD最原始,固定學習率—(容易在峽谷震盪、卡鞍點)
+ Momentum一階動量:累積過去梯度方向,像有慣性的重球抑制震盪、衝過小坑與平坦區
AdaGrad依歷史梯度平方和自動縮小學習率稀疏特徵;但學習率會一路衰減到停住
RMSProp改用移動平均,不會一路衰減到死修好 AdaGrad 的過早停滯
AdamMomentum + RMSProp:一階動量 + 自適應學習率為每個參數各自調整步長,震盪與尺度差異都能吃
🎯 真題還原:「損失函數震盪嚴重且收斂慢,改用 Adam 後變穩定且更快。Adam 能改善的主要原因?」→ 「同時結合一階動量與自適應學習率,為每個參數調整更新步長」
另一題:「下列哪一種優化演算法內建動量機制?」官方答案是 Adam。互動比較在 Adam 優化器
⚠️ 別把「陷入局部最優」怪到梯度消失頭上。真題:「目標函數為非凸函數,參數更新時出現多個極值點,導致最佳化結果不穩定,最可能發生哪種情況?」→ 局部最優解。梯度消失是訊號傳不回去,局部最優是訊號傳得到但地形有坑,兩件事。

🔍 實驗室 3:超參數搜尋競技場 中級

同樣的預算(試驗次數),三種策略各自去找那塊看不見的「最佳區域」。看誰找得到、誰在浪費算力。

Grid Search
Random Search
貝葉斯優化
策略怎麼選下一組優點缺點
Grid Search把每個參數切成固定格點,全部組合都跑系統化、可重現、易平行維度災難:參數一多次數就爆炸;每個維度只試到 \(\sqrt[k]{N}\) 個不同值
Random Search在範圍內隨機抽同樣預算下,每個維度都試到 N 個不同值;重要參數更容易被摸到不會利用先前結果,純靠運氣
貝葉斯優化先前的結果建代理模型,挑「可能最好 or 最不確定」的點試驗次數少就能找到好解,適合每次訓練都很貴的情境本身有超參數、難平行、實作較複雜
🔑 為什麼 Random 常常贏 Grid?因為真實情況通常是「只有少數幾個超參數真的重要」。Grid 用 5×5 = 25 次,在每個維度只試到 5 個不同值;Random 用 25 次,在每個維度都試到 25 個不同值。如果只有學習率重要,Random 等於用 25 個學習率去找,Grid 只用了 5 個。互動比較在 Grid vs Random Search

🛑 早停 EarlyStopping:什麼時候該喊卡 中級

看的是驗證損失不是訓練損失。訓練損失一路下降是正常的——它會一直下降到把雜訊都背起來為止。真正的訊號是:驗證損失開始反轉往上,那一刻就是過擬合的起點。
🎯 真題還原:「前幾個 Epoch 驗證損失快速下降,但從第 15 個 Epoch 起驗證損失開始上升,而訓練損失持續下降」——這就是過擬合的教科書曲線,該做的是早停(或加正則化、資料增強)。不是調高學習率——題目後半段正好示範了調高學習率的下場:訓練損失開始震盪。
patience容忍幾個 epoch 沒進步才停。設太小會被正常波動誤觸發、太大則浪費算力
monitor監控哪個指標(通常 val_loss;不平衡資料可改 val_f1 或 val_auc)
restore_best停下來後回捲到最佳那一輪的權重,而不是留在最後一輪

🚑 訓練不收斂除錯清單(考題症狀對照) 中級

症狀最可能的成因先試什麼
loss 變 NaN 或飆高梯度爆炸、學習率過大梯度裁剪、降學習率、檢查資料有沒有極端值
loss 劇烈震盪不下降學習率過大、batch 太小降學習率、加大 batch、換 Adam
loss 幾乎不動學習率過小、梯度消失、Dying ReLU調大學習率、換 ReLU/He、加殘差或 BatchNorm
層數加深反而更差梯度消失/退化問題殘差連接 ResNet
訓練 loss 降、驗證 loss 升過擬合早停、正則化(L1/L2/Dropout)、資料增強
訓練與驗證都很差欠擬合、模型太簡單、特徵不足加大模型、多訓練、做特徵工程
特徵尺度差很多、收斂很慢沒做標準化,等高線變狹長峽谷標準化 (X−μ)/σ、Batch Norm
⚠️ Dying ReLU:ReLU 在負區間導數是 0,若某神經元的輸入長期為負,它就永久輸出 0、再也不更新。常見於學習率過大把權重推到負區。解法:Leaky ReLU / ELU / GELU、降低學習率、He 初始化。這個名詞在真題中作為干擾選項出現過,要認得。

✅ 自我檢測

Q1:資料 10,000 筆、batch size 32、訓練 10 個 epoch,權重總共更新幾次?

每個 epoch 的 iteration = ⌈10000 ÷ 32⌉ = 313 次(最後一個 batch 只有 16 筆)。總更新次數 = 313 × 10 = 3,130 次

Q2:3 層 CNN 升到 16 層後,訓練損失反而更高、收斂困難。最正確的診斷與對策?

深層網路出現梯度消失,淺層權重難以更新;採用 ResNet 的殘差連接(Skip Connection)改善梯度傳遞。陷阱選項「把 ReLU 改成 Sigmoid」是反的——Sigmoid 飽和才是梯度消失的元凶。

Q3:ReLU 為什麼要搭配 He 初始化,而不是 Xavier?

ReLU 把負半邊直接砍成 0,讓輸出的變異數少掉一半。Xavier 的變異數是 1/nin,用在 ReLU 上訊號會逐層衰減;He 用 2/nin,剛好把那一半乘 2 補回來,讓每層倍率維持在 1。

Q4:把學習率調高後訓練損失開始明顯震盪,這最直接對應哪個現象?

損失函數震盪或發散(Oscillation / Divergence):每次更新步伐過大,參數在最佳點兩側反覆跳越。不是梯度消失、不是過擬合、也不是 Dying ReLU。

Q5:Adam 為什麼比 SGD 穩、收斂快?

因為它同時結合一階動量(Momentum)與自適應學習率(RMSProp),為每個參數各自調整更新步長。動量讓方向不被單次雜訊帶偏,自適應學習率處理不同參數的梯度尺度差異。

Q6:梯度裁剪 clip_grad_norm_ 放在哪?治的是消失還是爆炸?

放在 loss.backward() 之後optimizer.step() 之前。它限制梯度的 L2 範數,治的是爆炸。對梯度消失完全無效——因為它是等比例縮放,層與層之間的比例不會改變。

Q7:驗證損失從第 15 個 epoch 開始上升,但訓練損失還在下降。該做什麼?

這是過擬合的標準曲線 → 早停(EarlyStopping),並回捲到最佳那一輪的權重;也可加正則化、Dropout、資料增強。不該調高學習率。

Q8:只有 25 次訓練預算、且懷疑只有學習率真的重要。Grid 還是 Random?

Random Search。Grid 用 5×5 的話,學習率只試到 5 個不同值;Random 25 次則在學習率上試到 25 個不同值。若每次訓練都非常貴、想用更少次數逼近最佳,再升級成貝葉斯優化(用先前結果決定下一個試驗點)。

🎯 重點整理(考前 5 分鐘掃這裡)

Iteration = ⌈N ÷ B⌉ 每 epoch;總更新次數 = Epoch × Iteration。B=N 是 BGD、B=1 是 SGD、中間是 Mini-batch。
梯度消失:Sigmoid/Tanh 飽和 + 層數深 → 連乘趨近 0,淺層學不動。解方=ReLU、殘差連接 ResNet、BatchNorm、LSTM 門控、He 初始化。
梯度爆炸:初始化過大/長序列/學習率過大 → loss 變 NaN。解方=梯度裁剪(backward 之後、step 之前,限制 L2 範數)。
初始化:全 0 不能用(對稱性沒打破);Xavier 配 Sigmoid/TanhHe 配 ReLU(差一個 \(\sqrt{2}\))。
學習率過大 → 震盪/發散(不是梯度消失、不是過擬合);Fine-tuning 用小學習率是為了不破壞預訓練特徵。
Adam = Momentum(一階動量)+ RMSProp(自適應學習率),為每個參數各自調步長。
非凸 → 局部最優解,跟梯度消失是兩回事。
早停看的是驗證損失反轉,不是訓練損失;記得 restore_best。
搜尋策略:Grid 系統但維度災難、Random 同預算下每維試更多值、貝葉斯用先前結果選下一點(訓練很貴時用)。
池化層是降維省參數、多頭注意力是多子空間捕捉關聯——都不是為了解決梯度消失。