---
# System prepended metadata

title: 【生成式人工智慧與機器學習導論2025】06 一堂課搞懂訓練類神經網路的各種訣竅
tags: [生成式AI]

---

20251119筆記 內容可能有錯誤，請參考原始影片

[李宏毅【生成式人工智慧與機器學習導論2025】](https://www.youtube.com/playlist?list=PLJV_el3uVTsMMGi5kbnKP5DrDHZpTX0jT)

[【生成式人工智慧與機器學習導論2025】第 6 講：一堂課搞懂訓練類神經網路的各種訣竅](https://www.youtube.com/watch?v=mPWvAN4hzzY&list=PLJV_el3uVTsMMGi5kbnKP5DrDHZpTX0jT&index=7)

### 【生成式人工智慧與機器學習導論2025】第 6 講：一堂課搞懂訓練類神經網路的各種訣竅大綱

**I. 機器學習與深度學習概述**
*   **基礎**：機器學習的三步驟（Loss 定義、函式範圍選擇、最佳函式尋找）及驗證 (Validation)。
*   **核心思維**：評估新方法時，需判斷它改變了哪一步驟，並帶來了優化（降低訓練 Loss）或泛化（降低訓練與驗證 Loss 差距，避免過度擬合）的好處。

**II. 優化技巧**

1.  **梯度下降法（Gradient Descent）**：沿著 Loss 曲線下降最陡峭方向更新參數。
    *   **挑戰**：Learning Rate 難調（太大學習暴走，太小收斂緩慢），且不同參數需要不同的 Learning Rate。
2.  **優化器（Optimizer）**：根據過去所有梯度（Gradient）來決定更新方向。
    *   **AdaGrad**：根據過去梯度平方的累加來調整 Learning Rate，梯度大的方向給予較小的 Learning Rate。
    *   **RMSProp**：AdaGrad 的進階版，賦予較近期的梯度平方更大的權重，使 Learning Rate 更新更即時。
    *   **Momentum (動量)**：將過去的梯度累加起來作為動量 $N$，按動量方向而非當前梯度方向更新參數，可幫助突破梯度為零的平坦處（如局部最小值）。
    *   **Adam**：結合 Momentum ($N$) 和 RMSProp ($S$) 兩種機制。
3.  **學習率排程**：讓 Learning Rate 隨時間改變（常規是先增加 $\text{warm up}$，後減少 $\text{decay}$）。
4.  **優化器總結**：Optimizer 主要強化 $\textbf{Optimization}$ (降低訓練 Loss)，對 $\textbf{Generalization}$ 通常無直接幫助。

**III. 函式範圍選擇技巧**
1.  **過度擬合 (Overfitting) 的徵兆**：訓練 Loss 低，但驗證 Loss 無法跟著下降。
2.  **卷積神經網路 (Convolutional Neural Network, CNN)**：
    *   **機制**：透過 **Receptive Field** (限制神經元觀察範圍) 和 **Parameter Sharing** (不同區域神經元共享參數) 限制了函式範圍。
    *   **效果**：CNN 畫定了一個較小的範圍，但仍包含好的函式，主要帶來 $\textbf{Generalization}$ 好處（不易過度擬合）。
3.  **網路結構與優化 (Optimization-focused Architecture)**：
    *   **Skip Connection (殘差連接)**：在層間加入高速公路，幫助緩解 **Gradient Vanishing/Explode** 問題，讓底層參數對輸出有足夠影響。
    *   **效果**：Skip Connection 主要帶來 $\textbf{Optimization}$ 好處。
4.  **正規化 (Normalization)**：限制每層輸出的數值範圍。
    *   **效果**：主要改善 $\textbf{Optimization}$（更容易調整 Learning Rate），對 $\textbf{Generalization}$ 也有幫助。

**IV.Loss Function 定義與資料 (Loss & Data)**
1.  **初始化 (Initialization)**：參數的起始值對訓練結果有顯著影響。
    *   **Pretraining (預訓練)**：訓練一個相關任務作為目標任務的初始化。
    *   **效果**：Pretraining 是強大的大絕招，同時有助於 $\textbf{Optimization}$ 和 $\textbf{Generalization}$。
2.  **分類 Loss**：
    *   **準確度 (Accuracy)**：不可微分，無法直接作為 Loss。
    *   **交叉熵 (Cross Entropy)**：可微分，是最常用於分類的 Loss 函式。
    *   **效果**：使用 Cross Entropy 帶來 $\textbf{Optimization}$ 的好處，但可能製造訓練與驗證的 $\text{gap}$。
3.  **資料增強 (Data Augmentation)**：
    *   **目的**：當無法收集額外資料時，透過翻轉、模糊、變聲等方式創造新資料。
    *   **Mixup**：將兩筆資料的輸入和 Label (正確答案) 以特定比例混合。
    *   **效果**：Data Augmentation 帶來 $\textbf{Generalization}$ 好處，但會使 $\textbf{Optimization}$ 更困難。
4.  **半監督學習 (Semi-supervised Learning)**：利用無標註資料來影響 Loss。
    *   **方法**：基於世界是非黑即白或物以類聚的假設，透過 Entropy 或計算相近點的距離等方式加入額外限制。
    *   **效果**：帶來 $\textbf{Generalization}$ 好處，但會使 $\textbf{Optimization}$ 更困難。
5.  **Regularization**：
    *   **L2 Regularization**：懲罰參數 $W$ 的平方和 $R$，偏好參數值接近零（即偏好較平滑的函式）。
    *   **Weight Decay (權重衰減)**：在操作上等價於 L2 Regularization，在參數更新前將參數乘以接近 1 的數值（使其縮小）。
    *   **效果**：帶來 $\textbf{Generalization}$ 好處。

---

### I. 機器學習與深度學習概述

機器學習（Machine Learning）的核心流程包含三個步驟：
1.  定義 Loss Function ($L$)。
2.  畫定函式的選擇範圍（決定 Model/Network Architecture）。
3.  尋找 Loss 最低的函式（Optimization）。

完成這三步驟後，必須進行 **Validation（驗證）**。如果驗證結果不佳，則需回到步驟中檢查問題。

**核心分析框架**
當面對一個新的訓練技巧時，必須問自己兩個問題：
1.  這個方法改變了機器學習的三個步驟中的哪一個？（改變 Loss、改變範圍，還是改變 Optimization 方式？）。
2.  這個方法帶來了什麼好處？。
    *   **優化 (Optimization)**：能否找到**更低**的 $\textbf{Training Loss}$。
    *   **泛化 (Generalization)**：能否讓 $\textbf{Training Loss}$ 與 $\textbf{Validation Loss}$ 更接近，**避免 Overfitting**。

**案例分析 Overfitting vs. Optimization Problem**
*   **Optimization 問題**：如果一個複雜的深度網路（Deep Network）其 $\textbf{Training Loss}$ 反而比簡單的線性模型（Linear Model）還要高。這表示在 Optimization 步驟中出了問題，模型未能找到函式集合中 Loss 較低的解。此時應選擇強化 Optimization 的技巧。
*   **Overfitting (過度擬合) 問題**：如果 $\textbf{Training Loss}$ 已經降得夠低，但 $\textbf{Validation Loss}$ 卻無法跟著下降。這表示函式範圍太大，模型記住了訓練雜訊。此時應選擇強化 Generalization 的方法。

### II. 優化技巧 (Optimization Techniques)

Optimization 的目標是找到一組參數，使總體 Loss $L$ 達到最小。最簡單的方法是 **Vanilla Gradient Descent**。

#### 1. 梯度下降法與 Learning Rate 挑戰
在最原始的梯度下降法中，參數 $\theta$ 的更新公式是：$\theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t)$，其中 $\eta$ 是 **Learning Rate**。

*   **Learning Rate 困境**：Learning Rate 難以設定。設太大，參數可能飛走而永遠無法收斂；設太小，則收斂速度極慢。
*   **地勢差異**：在 Loss Surface 上，不同參數或不同方向的「地勢變化」可能非常不同，某些方向梯度（Gradient）很大，需設較小的 Learning Rate；某些方向梯度很小，需設較大的 Learning Rate。最簡單的 Gradient Descent 將相同的 $\eta$ 套用到所有參數上，顯然不理想。

#### 2. 優化器 (Optimizer)
Optimizer 的核心思想是**綜合過去的梯度資訊**，而不只根據當前算出的梯度來決定更新方向。

*   **AdaGrad (Adaptive Gradient)**
    *   **原理**：給予不同參數不同的 Learning Rate。它透過累加過去所有梯度（$G_0$ 到 $G_{t-1}$）的平方來估計該方向的梯度大小。
    *   **機制**：使用一個累加項 $S$ (過去所有梯度的平方和再開根號) 來除 Learning Rate。**$S$ 越大（代表該方向梯度常很大），整體 Learning Rate 就越小**。
    *   **特點**：在實際操作中， $S$ 會不斷累加變大，這讓整體的 Learning Rate 隨著時間逐漸縮小，有助於收斂。
    *   **實例**：在簡單的線性模型訓練中，AdaGrad 允許使用較大的 Learning Rate（如 $\eta=1$），在相同步數內比普通 GD 走得更遠。
*   **RMSProp**
    *   **問題**：AdaGrad 將很久以前和最近的梯度賦予相同權重，導致 Learning Rate 的調整反應遲鈍。
    *   **機制**：RMSProp 採用指數移動平均 (Exponential Moving Average) 的概念，將前一步驟的 $S_{t-1}$ 乘以 $\alpha$（權重因子，控制歷史資訊重要性），加上當前梯度平方乘以 $1-\alpha$ 來得到新的 $S_t$。
    *   **效果**：RMSProp 讓較近期的梯度平方對 $S$ 影響更大，使得 Learning Rate 能更即時地更新。在複雜的 Loss Surface（如 Rosenbrock 函數，香蕉函數）上，RMSProp 能比 AdaGrad 更快接近最低點。
*   **Momentum (動量)**
    *   **問題**：Gradient Descent 可能停在梯度為零的地方，如 $\textbf{Local Minima}$（局部最小值）或 $\textbf{Saddle Point}$（鞍點），這並不一定是全局最佳解。
    *   **原理**：將物理世界的「動量」（Momentum）概念引入參數更新。
    *   **機制**：Momentum ($N$) 累加了過去所有梯度（$G_0$ 到 $G_{t}$）的方向和大小，參數是沿著動量 $N$ 的方向更新，而不是當前的梯度方向。
    *   **效果**：即使當前梯度為零，模型仍能依靠累積的動量繼續移動，有機會**翻過小山丘**突破局部最小值，走向全局最低點。
    *   **實作**：實際應用中，通常會加入類似 RMSProp 的權重衰減（例如將前一步驟的 $N$ 乘上 $\beta$）。
*   **Adam (Adaptive Moment Estimation)**
    *   **機制**：Adam 是結合 Momentum ($N$) 和 RMSProp ($S$) 兩者的機制。它既利用 $S$ 來調整每個參數的 Learning Rate，又利用 $N$ 來控制參數更新的方向，使其能兼顧 AdaGrad 的快速收斂和 Momentum 的突破局部極值能力。
    *   **地位**：Adam 是現今訓練深度學習模型時**預設 (Default)** 使用的 Optimizer。

#### 3. 學習率排程
Learning Rate $\eta$ 原本是個固定值。透過排程 (Scheduling)，可以讓 $\eta$ 隨時間 $T$ 改變。

*   **先增後減**：在大模型訓練中，常見的做法是 Learning Rate $\eta$ 先**增加 (Warm Up)** 一段時間，再**逐漸減少 (Decay)**。
    *   **Warm Up**：在訓練初期，提高 Learning Rate，使參數可以在 Loss Surface 上探索更多地形，有助於收斂到更好的結果。
    *   **Decay**：讓 Learning Rate 逐漸減小，使參數的更新幅度變小，最終能穩定收斂在峽谷中的某個地方，避免持續震盪。

**Optimization 技巧總結**
所有的 Optimizer（如 Adam、RMSProp、Momentum）和 Learning Rate Scheduling，主要都是為了改進**第三步驟 (Optimization)**。它們可以幫助找到**更低的 Training Loss**。但是，**它們通常對 Generalization 沒有幫助**，反而可能因為找到過低的 Training Loss 而增加 Overfitting 的風險。

### III. 函式範圍選擇技巧

函式範圍的選擇應當「剛剛好，不大不小」。範圍太小，可能無法包含好的函式；範圍太大，則容易 Overfitting。

#### 1. 卷積神經網路 (CNN)
CNN 的設計就是利用人類對影像處理的 **Domain Knowledge** 來畫定一個更小的、更合適的函式範圍。

*   **圖像輸入的挑戰**：一張 $1000 \times 1000$ 的彩色圖片，若使用傳統的 **Fully Connected (全連接)** 網路，第一層的神經元數量就可能達到 30 億個參數，極為龐大。
*   **Receptive Field**：CNN 的第一個發明，它假設基礎的模式（Basic Pattern，如鳥嘴）只需觀察圖片的**小範圍**即可偵測。因此，每個神經元只被限定觀察 Receptive Field 內的輸入，大幅減少了參數需求。這相當於將 Fully Connected Layer 中 Receptive Field 範圍外的權重參數**強制設為零**，從而縮小了函式選擇範圍。
*   **Parameter Sharing**：CNN 的第二個特點，它假設同一個模式（如鳥嘴）可能出現在圖片的不同位置。因此，不同 Receptive Field 區域中負責偵測相同模式的神經元，可以**共用同一組參數**。這進一步縮小了函式選擇的範圍。
*   **效果**：CNN 相較於 Fully Connected Layer 是一種簡化，它限制了函式搜尋的範圍。由於範圍變小，因此 CNN 最大的好處是**強化 Generalization**，使其不易 Overfitting。

#### 2. 網路結構與優化
有些網路結構的設計是為了改善 Optimization 步驟。

*   **Gradient Vanishing (梯度消失)**：在非常深的網路中，底層參數的微小變化，經過多層傳遞後，對最終 Loss 的影響可能極小，導致算出的梯度很小。
*   **Skip Connection (殘差連接, Residual Connection)**
    *   **機制**：在網路層之間加入一條**高速公路**，讓輸入 $A$ 直接跳過該層運算，輸出變成 $(\text{Layer}(A) + A)$。
    *   **效果**：即使底層參數有微小變動，該變動也會直接透過 Skip Connection 傳遞到高層，確保底層參數對最終輸出有足夠影響，**緩解 Gradient Vanishing 問題**，使訓練更容易。
    *   **好處**：改變了函式範圍，但主要帶來 $\textbf{Optimization}$ 的好處。

#### 3. Normalization
Normalization 是一種訓練中對神經網路輸出的處理方法。

*   **機制**：在每一層 Layer 之後加入 Normalization 操作，**強制讓該層的輸出限制在某一個範圍內**（例如輸出平均值為 0，標準差為 1）。
*   **好處**：限制了每層輸出的數值範圍後，**不同參數的數值範圍趨於一致**，使 Learning Rate 更容易調整，因此主要帶來 $\textbf{Optimization}$ 的好處。同時，由於這是一種額外限制，也對 $\textbf{Generalization}$ 有微小的幫助。
*   **類型**：知名的 Normalization 方法包括 **Batch Normalization** 和 **Layer Normalization**。

### IV. Loss Function 定義與資料

#### 1. Initialization (參數初始化)
Optimization 步驟通常從**隨機的參數初始值**開始。不同的初始位置可能導致模型停在不同的局部最小值，影響最終的結果。

*   **Kaiming Initialization**：一種神奇的初始化方法，將隨機產生的參數乘上一個與輸入維度有關的 $\text{scale}$。實測證明，好的初始化（即使搭配最強的 Optimizer Adam）仍能大幅改善訓練結果。
*   **Pretraining (預訓練)**：這是一種特殊的初始化方法。
    *   **機制**：先訓練模型執行一個**相關但更容易收集資料的任務**（稱為 Pretext Task），然後將訓練好的參數作為目標任務的起始點。例如，訓練模型預測圖片被旋轉了多少度，再用這個模型作為影像分類的起始點。
    *   **好處**：Pretraining 是個「大絕招」，同時對 $\textbf{Optimization}$ 和 $\textbf{Generalization}$ 都帶來幫助。

#### 2. Loss 函式定義 (分類問題)
生成式 AI 本質上是一連串的**分類問題**（預測下一個 Token 屬於哪個詞彙類別）。

*   **Accuracy (正確率)**：雖然是最終測試時使用的 Evaluation Matrix，但它**不可微分**（當參數微小變化時，Accuracy 幾乎沒有變化），因此不能直接作為 Loss 函式。
*   **Cross Entropy (交叉熵)**：分類問題最常用的 Loss 函式。
    *   **機制**：模型輸出先經過 Softmax 轉換成機率分佈，然後計算該分佈與正確答案（Ground Truth）機率分佈之間的 Cross Entropy。Cross Entropy 越小，兩個分佈越接近。
    *   **優勢**：Cross Entropy 是**可微分**的，參數的微小變化會導致 Loss 發生變化，因此可以進行梯度下降。
    *   **好處**：定義 Cross Entropy 帶來 $\textbf{Optimization}$ 的好處（因為可以計算梯度）。但它與最終的 $\text{Accuracy}$ 存在 $\text{gap}$，可能影響 Generalization。

#### 3. 資料增強 (Data Augmentation)
當無法收集更多資料時，可以透過 Data Augmentation 自行創造新的訓練資料。

*   **機制**：對圖片進行翻轉、模糊處理，或對語音進行變音、變速處理，同時保持 Label 不變。
    *   **限制**：Argumentation 必須合理。例如，若任務是判斷鳥頭方向，則不能進行翻轉。
*   **Mixup**：將兩筆資料（如貓和狗的圖片 $X_1, X_2$）按比例混合成新的輸入 $X_{new}$，其 Label $Y_{new}$ 也按相同比例混合（例如 50% 貓，50% 狗）。
*   **好處**：Data Augmentation 帶來 $\textbf{Generalization}$ 的好處（避免 Overfitting）。但資料變多、變複雜，會讓 $\textbf{Optimization}$ 變得更困難。

#### 4. 半監督學習 (Semi-supervised Learning)
利用大量**無標註資料 (Unlabeled Data)** 來改善 Loss 的定義。

*   **機制**：在 Loss 函式中加入一個與無標註資料相關的項。這通常基於某些假設：
    *   **假設一（非黑即白）**：世界是極端的，模型輸出的機率分佈應當越**尖銳（Entropy 越小）**越好。這能幫助模型在分類邊界畫出更清晰的分界線。
    *   **假設二（物以類聚）**：長得相近的資料點（無論有無 Label）應當屬於同一類別。Loss 項會懲罰那些相近但模型輸出差異大的資料對。
*   **好處**：利用額外資訊，使函式選擇範圍變小，從而帶來 $\textbf{Generalization}$ 的好處。但 Loss 函式變得更複雜，會使 $\textbf{Optimization}$ 更困難。

#### 5. Regularization
Regularization 是定義 Loss 函式中與資料**無關**的額外項，用以反映人類對參數的偏好。

*   **人類偏好**：在同樣能穿過所有訓練資料的函式中，人類偏好**較平滑、震盪不劇烈**的函式。
*   **L2 Regularization**：一種常見的簡化定義。
    *   **機制**：在 Loss 函式中加入一個項 $R$，它計算**所有參數平方和**。目標是讓 $R$ 越小越好，即希望參數值越接近零越好。
    *   **好處**：L2 Regularization 帶來 $\textbf{Generalization}$ 的好處。

*   **Weight Decay (權重衰減)**
    *   **機制**：在 Optimization 過程中，**每次更新參數前，先將原始參數乘以一個略小於 1 的數值**（如 $0.999$），使其縮小，再進行梯度更新。
    *   **等價性**：**Weight Decay 在操作上等價於 L2 Regularization**。
*   **AdamW**：將 Weight Decay 的概念加入到 Adam Optimizer 中。這是一個強大的泛化技巧。

**技巧總結**
在選擇訓練技巧時，必須明確目的：
*   **訓練 Loss 壓不下去**：代表 **Optimization** 不足，應更換 Optimizer (如 Adam) 或使用 Skip Connection。
*   **Training Loss 低但 Validation Loss 高**：代表 **Generalization** 不足 (Overfitting)，應增加資料、Data Augmentation 或使用 L2 Regularization、Dropout 等技巧。
*   **Dropout**：在訓練時隨機丟棄一些神經元，增加訓練難度。它能帶來 $\textbf{Generalization}$ 的好處，但會提高 $\textbf{Training Loss}$（對 Optimization 無益）。

