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 無益)。