20250927 筆記,內容可能有錯,請參考來源影片。 [李宏毅機器學習2021影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J) 今天影片內容 [【機器學習2021】機器學習任務攻略](https://youtu.be/WeHM2xpYQpw?si=xGCp2G9BggworXT0) [【機器學習2021】 類神經網路訓練不起來怎麼辦 (一): 局部最小值 (local minima) 與鞍點 (saddle point)](https://youtu.be/QW6uINn7uGk?si=R-0U-NqPTgSVWAN8) [【機器學習2021】 類神經網路訓練不起來怎麼辦 (二): 批次 (batch) 與動量 (momentum) ](https://youtu.be/zzbr1h9sF54?si=f3SRgjDBS0FMAkie) [【機器學習2021】 類神經網路訓練不起來怎麼辦 (三):自動調整學習速率 (Learning Rate)](https://youtu.be/HYUXEeh3kwY?si=878xDHc5Aeo8nDgu) [【機器學習2021】 類神經網路訓練不起來怎麼辦 (四):損失函數 (Loss) 也可能有影響](https://youtu.be/O2VkP8dJ5FE?si=6-tC3jWA3tmL4sw9) [【機器學習2021】類神經網路訓練不起來怎麼辦 (五): 批次標準化 (Batch Normalization) 也可能有影響](https://youtu.be/BABPWOkSbLE?si=C-IBKbhSf9obDRJ3) ### 【機器學習2021】機器學習任務攻略 簡介大綱 I. 課程作業內容概述 A. 作業資料格式:X (輸入) 與 Y (標籤) B. 具體作業類型:語音、影像、說話者辨識與翻譯 II. 模型訓練的基本流程 A. 定義帶有參數 $W$ 的函數 $F_W(X)$ B. 定義損失函數 Loss $L(W)$ C. 尋找最小化 $L(W)$ 的參數 $W^*$ (Optimization) D. 將 $W^*$ 應用於測試資料 III. 訓練過程中的除錯策略 (提升表現的戰略) A. **訓練資料損失 (Loss) 過大** 1. **問題一:模型不匹配 (Model Bias)** a. 模型的函數集 $F$ 太小,無法包含最佳函數。 b. 解決方法:重新設計模型,增加彈性(如增加 Feature、增加模型大小、使用深度學習)。 2. **問題二:最佳化失敗 (Optimization Failure)** a. 最佳函數存在於模型集合中,但演算法無法找到(例如卡在局部最優解)。 b. 判斷方式:透過比較不同複雜度模型在訓練集上的表現(如 20 層 vs. 56 層網路)。 c. 解決方法:先嘗試較淺或較簡單的模型,避免最佳化失敗問題。 IV. 訓練資料損失小但測試資料損失大 (Overfitting) A. **過度擬合 (Overfitting) 的原因**:模型彈性(複雜度)太大,記住訓練資料的雜訊。 B. **解決方法一:增加資料** 1. 增加訓練資料數量,限制模型自由度。 2. 資料擴增 (Data Augmentation):例如圖像翻轉,但須根據任務特性合理選擇。 C. **解決方法二:限制模型彈性 (Regularization)** 1. 設定模型的參數限制(例如限制為二次曲線)。 2. 使用具備內建限制的架構 (如 CNN 相較於 Fully Connected Network)。 3. 其他方法:Early Stopping、Regularization (如 L1/L2)。 V. 模型選擇的正確方法 A. **風險**:不應依賴公開測試集 (Public Test Set) 的分數。 B. **正確方法**:使用驗證集 (Validation Set) 選擇模型。 C. **進階方法**:交叉驗證 (Cross-Validation)。 VI. 資料分佈不一致 (Data Mismatch) A. **定義**:訓練資料與測試資料的分佈不一致。 B. **特性**:增加訓練資料對此問題幫助不大。 C. **應用**:多數作業已設計避免此問題,但作業 11 專門針對此問題。 ### I. 課程作業與訓練流程 #### A. 作業格式與內容 接下來的課程將講解每個作業的攻略大戰略。 1. **資料格式**:作業通常包含一堆訓練資料(包含 $X$ 和對應的 $Y$)和測試資料(只有 $X$)。 2. **作業類型**: * **作業二**:語音訊號辨識 (類似於作業一的延伸),其中 $X$ 是小段語音訊號,$Y$ 是要判斷該訊號對應到哪一個音。 * **作業三**:影像辨識,$X$ 是一張圖片,$Y$ 是判斷圖片裡有什麼東西。 * **作業四**:說話者辨識,$X$ 是一段聲音,$Y$ 是判斷是哪一個人在說話(此系統常用於電話客服的身份驗證)。 * **作業五**:機器翻譯,$X$ 是某一語言的一句話,$Y$ 是另外一句話。 #### B. 模型訓練流程 訓練的過程與上週講述的步驟相同: 1. **定義函數**:寫出一個帶有位置參數 $W$ 的函數 $F_W(X)$,其中 $W$ 代表模型內所有參數。 2. **定義損失函數**:定義損失 $L$(Loss),用來判斷參數 $W$ 的好壞。 3. **最佳化**:找到一個 $W^*$,使得損失 $L(W)$ 最小。 4. **測試**:將 $W^*$ 拿來用在測試資料上,計算輸出的結果。 ### II. 提升模型表現的策略 當模型在測試集上的表現不佳時,首要步驟是檢查 **訓練資料 (Training Data) 上的損失**。 #### A. 訓練損失 $L_{train}$ 過大 (在訓練集上都沒學好) 這代表模型在訓練集上表現不佳,可能有兩種原因:模型不匹配或最佳化失敗。 1. **模型不匹配 (Model bias)** * **原因**:你假設的函數集(Function Set)$F$ 太過簡單或太小。即使將所有可能的參數 $W$ 代入,得到的函數集內仍不包含任何一個函數 $F'$ 可以讓損失 $L$ 最小化。 * **比喻**:如同在大海裡撈針,但針根本不在海裡。 * **解決方法**: * **重新設計模型**。 * **增加特徵 (Feature)**:例如,若原本輸入只使用前一天的資訊,現在可增加 5 或 6 天前的資訊。 * **增加模型大小**:設計一個更大的模型。 * **使用深度學習 (Deep Learning)**:增加模型的彈性。 2. **最佳化失敗 (Optimization Failure)** * **原因**:模型函數集 $F$ 中確實存在能夠達到低損失的最佳函數,但所使用的最佳化演算法(如梯度下降)無法找到該函數。演算法可能卡在局部最優解,沒辦法找到全域最優解。 * **比喻**:針確實在大海裡,但你沒有辦法將它撈出來。 * **案例分析**:ResNet 論文中的實驗顯示,56 層的網路在訓練集上的損失反而比 20 層的網路高。 * **解釋**:56 層的網路理論上應包含 20 層網路所能達到的所有函數集(因為它可以設定其中 36 層做 Identity Mapping),所以 56 層網路的函數集更大。訓練結果顯示 56 層網路的損失較高,這代表 **56 層網路的最佳化失敗**,而不是模型不匹配或過度擬合。 * **解決方法**: * **先嘗試簡單或淺層的模型**:這些模型較不容易有最佳化失敗的問題。 * 若深層模型 (如 $M_{deep}$) 訓練結果比淺層模型 (如 $M_{shallow}$) 的損失還大,則確認是**最佳化問題**,需要改進最佳化方法(下一階段課程會講述)。 #### B. 訓練損失 $L_{train}$ 小但測試損失 $L_{test}$ 大 (Overfitting) 當你透過努力讓訓練資料的 Loss 變小,但測試資料的 Loss 卻較大時,即發生過度擬合。 1. **Overfitting 的概念和原因** * **定義**:**訓練損失小但測試損失大** 才叫做 Overfitting。 * **原因**:模型的能力或彈性太大。模型可以產生非常奇怪的曲線,雖然能完美通過訓練點(甚至達到 $L_{train}=0$),但在沒有訓練資料限制的地方,其輸出行為高度自由,導致預測在新資料上失準。 * **背後原理**:彈性大的模型會學習到訓練資料中的雜訊(如同記住訓練資料的所有 $X$ 和對應的 $Y$)。 2. **解決 Overfitting 的方法** * **方法一:增加資料 (More Data)** * 增加訓練資料的數量,可以限制模型,使其雖然彈性大,但因為限制點多,產生的函數仍然接近真實趨勢。 * **資料擴增 (Data Augmentation)**:例如在影像辨識中,將圖片左右翻轉,或擷取部分圖像,使訓練資料數量倍增。 * *限制*:資料擴增必須根據問題的特性來選擇。例如,在影像中很少有人做上下顛倒,因為那是不合理的圖像。 * **方法二:限制模型彈性 (Regularization)** * **限制函數形式**:例如,直接限制模型 $M$ 只能是一條二次曲線。 * **使用更有限制的架構**:例如,卷積神經網絡 (CNN) 相較於一般全連接層 (Fully Connected Network) 是更有限制的架構,因此 CNN 在影像任務上反而表現更好。 * **其他限制參數的方法**:例如給予較少的資源(較少的參數)或使用 Early Stopping。 * **注意**:限制不能給太多。若限制過大(例如強迫模型為一條直線,而資料分佈是曲線),則可能導致 $L_{train}$ 變大,回到模型不匹配的問題。 ### III. 選擇模型的原則 模型複雜度 (彈性) 與 Loss 的關係如下: * **訓練集 Loss**:隨著模型複雜度增加,Loss 會持續下降。 * **測試集 Loss**:隨著模型複雜度增加,Loss 會先下降,但當複雜度超過某個程度後,Overfitting 出現,Loss 反而會上升。 我們期望選擇一個中庸的模型,在測試集上達到最佳結果。 #### A. 選擇模型的大忌:不要用 Public Leaderboard 直覺上,可以將多個模型的結果上傳到 Leaderboard 上,選擇分數最低的。但是,**不建議這樣做**。 * **原因**:如果模型是隨機的(例如,在訓練集沒看過的資料上隨機輸出),你總是可能找到一個模型,恰好在 Public Testing Data 上給出好的結果。這個模型實際上是 **Overfitting 到 Public Test Set**。 * 在 ML 競賽中,若選擇模型時只參考 Public Leaderboard 的分數,最終結果(在 Private Test Set 上)常常會掉名次。 #### B. 正確的模型選擇方式:Validation Set 為了解決這個問題,資料應該分成三部分: 1. **訓練集 (Training Set)**:用於訓練模型。 2. **驗證集 (Validation Set)**:用於評估不同模型的表現,並根據其分數來挑選模型。這部分資料通常佔總資料的 10% 左右。 3. **測試集 (Testing Set)**:用於最終評估,在模型選定後才使用。 #### C. 交叉驗證 (Cross-Validation) 如果你擔心驗證集分得不好,可以採用 N-fold 交叉驗證: 1. 將資料切成 $N$ 等份(例如切成三等份)。 2. 輪流選擇其中一份當作驗證集,其餘當作訓練集,重複 $N$ 次。 3. 對每個模型,計算其在這 $N$ 種情況下的平均結果。 4. 選擇平均結果最好的模型 $M_{best}$。 5. 將 $M_{best}$ 用在全部的訓練資料上,重新訓練一次,然後再用於最終測試。 ### IV. 資料分佈不一致 (Data Mismatch) #### A. 定義與影響 * **定義**:訓練資料 (Training Data) 與測試資料 (Testing Data) 的分佈 (Distribution) 不一樣。 * **案例**:觀看人數預測模型,預測 2 月 26 日的觀看人數(當天實際上是最高峰),但模型認為那天是星期五,過去星期五的觀看人數通常最低,所以預測結果慘敗。 * **解決困難**:在 Data Mismatch 的情況下,即便增加訓練資料,幫助也不大,因為增加的資料仍然來自舊的分佈。 * **課程設計**:多數作業(如 COVID-19 案例的資料劃分)都經過精心設計,不會遇到 Data Mismatch 的問題。然而,作業 11 專門就是針對這個問題設計的。 #### B. 如何判斷 Data Mismatch 要判斷是否為 Data Mismatch,需要對測試任務有所理解,並對測試資料的分佈進行分析。 ### 【機器學習2021】 類神經網路訓練不起來怎麼辦 (一): 局部最小值 (local minima) 與鞍點 (saddle point)] 大綱 ### I. 訓練優化失敗與臨界點 (Critical Points) #### A. 訓練停滯 (Optimization Failure) 的現象 1. 參數更新後損失 (Loss) 仍不下降或一開始訓練即卡住。 2. 傳統猜想:走到參數的微分 (Gradient, G) 為零的點。 #### B. 臨界點 (Critical Points) 的定義與分類 1. **臨界點**:導數或微分為零的點。 2. **臨界點類型**:局部極小值 (Local Minimum, L-min), 局部極大值 (Local Maximum, L-max), 鞍點 (Saddle Point, S-point)。 3. **鞍點**:在某些方向上損失增加,在某些方向上損失減少的點。 4. **區分重要性**:若卡在 L-min 則無路可走;若卡在 S-point 則仍有路可讓損失下降。 ### II. 判斷臨界點的數學工具:Taylor 展開與 Hessian 矩 #### A. 損失函數的局部近似 (Taylor Expansion) 1. 完整的 L function 很複雜,但在臨界點 $Z$ 附近,可以被近似寫出。 2. **近似式包含三個主要項**: * $L(Z)$:臨界點的損失值。 * 第二項:與梯度 $G$ (一次微分) 相關。 * 第三項:與 **Hessian 矩陣** $H$ (二次微分) 相關。 #### B. 臨界點的簡化與分析 1. 在臨界點上,梯度 $G$ 為零,故第二項消失。 2. 損失函數的變化主要由第三項決定:$(Z'-Z)^T H (Z'-Z)$。 3. **Hessian 矩陣 $H$**:L 的二次微分組成的矩陣。 #### C. 判斷臨界點的依據:特徵值 (Eigenvalues) 1. **檢查所有向量 $V$**: * 若 $V^T H V$ 永遠大於零:Local Minimum (最低點)。 * 若 $V^T H V$ 永遠小於零:Local Maximum (最高點)。 * 若 $V^T H V$ 有時大於零有時小於零:Saddle Point (有些地方高有些地方低)。 2. **利用特徵值判斷 (簡便方法)**: * 所有特徵值皆為正:Local Minimum。 * 所有特徵值皆為負:Local Maximum。 * 特徵值有正有負:Saddle Point。 ### III. 逃離鞍點的策略與實證經驗 #### A. 透過 Hessian 逃離鞍點 1. 若停下來是因 S-point,則可以繼續優化。 2. 在 S-point 處,梯度 $G$ 已經為零,必須看 $H$。 3. **更新方向**:沿著 $H$ 的**負特徵值**所對應的**特徵向量** ($U$) 方向更新參數。 4. 沿著負特徵值的特徵向量方向走,可以保證損失 $L$ 下降。 #### B. 高維度空間與鞍點的普遍性 1. **維度效應**:在低維度 (如二維) 看起來是 L-min 的點,在高維度空間中可能是 S-point。 2. 類比:三維空間封閉的石棺,在四維空間中可能有路徑進入。 3. **神經網路 (NN) 的高維度**:NN 參數數量達百萬千萬級,Error Surface (損失曲面) 維度非常高。 4. **經驗支持**:實際訓練經驗與實驗支持 S-point 比 L-min 更常見。 5. **Minimum Ratio 實驗**:測量特徵值中正值比例。實驗結果顯示,即使在極端情況下,仍有一半的特徵值是負的 (比例約 0.5),表示仍有路徑可以讓損失下降。 ### I. 訓練優化失敗與臨界點 (Critical Points) #### 訓練停滯現象與梯度為零的猜想 * 在訓練優化過程中,有時會發生訓練失敗,表現為參數不斷更新後損失 (Loss) 仍在下降,但達不到滿意的效果。或者,有時訓練一開始 L 就不下降或很早就停滯。 * **常見猜想**:訓練走到參數的微分 (梯度, Gradient, G) 為零的地方,導致參數無法再更新,L 無法再下降。 * **臨界點 (Critical Point)**:導數為零的點統稱為臨界點。 * **臨界點的類型**:臨界點不只是局部極小值 (Local Minimum),還包括局部極大值 (Local Maximum) 和鞍點 (Saddle Point)。 #### 鞍點 (Saddle Point) 的特性 * 鞍點 (Saddle Point) 是一種特殊的臨界點,例如圖中紅色的點。 * 在鞍點處,沿著某個方向 (例如左右) 損失 L 會下降,但沿著另一個方向 (例如前後) 損失 L 會上升。 * **區分臨界點的重要性**: * 如果卡在 **Local Minimum**,表示周圍的點損失都比它高,參數沒有路徑可以走,無法再收斂。 * 如果卡在 **Saddle Point**,鞍點旁邊仍然有路可以走,仍然有路徑可以讓損失繼續下降。因此,判斷走到的是 Local Minimum 還是 Saddle Point 非常重要。 ### II. 判斷臨界點的數學工具:Taylor 展開與 Hessian 矩陣 #### 損失函數的局部近似 * 雖然 L function 整體的形狀很複雜,但給定一個參數點 $Z$,該點附近的 L function 樣貌可以被近似寫出來。 * 這個近似式使用了 Taylor 展開。在參數 $Z$ 附近的 $L(Z')$ 可以寫為: $$L(Z') \approx L(Z) + (Z'-Z)^T G + \frac{1}{2} (Z'-Z)^T H (Z'-Z) + \dots$$ #### 梯度 $G$ 與 Hessian 矩陣 $H$ * **$G$ (梯度)**:一個向量,是 L 的一次微分。它描述了 $Z'$ 跟 $Z$ 之間的差距。 * **$H$ (Hessian 矩陣)**:一個矩陣,裡面存放了 L 的二次微分。 #### 臨界點的判斷依據 * 當我們走到了臨界點 $Z$ 時,L 的一次微分 $G$ 等於零。因此,損失函數的近似式簡化為: $$L(Z') \approx L(Z) + \frac{1}{2} (Z'-Z)^T H (Z'-Z)$$ * 我們可以根據紅框中的第三項 $\frac{1}{2} (Z'-Z)^T H (Z'-Z)$ 來判斷 $Z$ 附近的 Error Surface 樣貌。 * 我們將 $V = Z'-Z$ 視為一個移動向量。 * **Local Minimum**:若 $V^T H V$ 恆大於零 (不論 $V$ 是正或負),則 $L(Z')$ 恆大於 $L(Z)$。 * **Local Maximum**:若 $V^T H V$ 恆小於零,則 $L(Z')$ 恆小於 $L(Z)$。 * **Saddle Point**:若 $V^T H V$ 有時大於零有時小於零,則 $Z$ 附近有些地方 L 高於 $L(Z)$,有些地方 L 低於 $L(Z)$。 #### 特徵值判斷法 * 不需要將所有可能的移動向量 $V$ 帶入檢查,可以透過分析 Hessian 矩陣 $H$ 的特徵值 (Eigenvalue) 來判斷: * 如果 $H$ 所有的特徵值都為**正** (Positive Definite),則為 Local Minimum。 * 如果 $H$ 所有的特徵值都為**負** (Negative Definite),則為 Local Maximum。 * 如果 $H$ 的特徵值有**正有負**,則為 Saddle Point。 #### 範例操作 (簡單神經網路) * 以一個極簡化的神經網路為例,參數只有 $W_1$ 和 $W_2$。 * 在這個 Loss Surface 上,原點 $(W_1=0, W_2=0)$ 是一個臨界點 (梯度為零)。 * 為了確定原點是 L-min 還是 S-point,需計算 Hessian 矩陣 $H$。 * $H$ 矩陣包含了 $L$ 對 $W_1$ 和 $W_2$ 的二次微分。 * 將 $W_1=0, W_2=0$ 帶入 $H$ 矩陣,得到 $H = \begin{pmatrix} 2 & 0 \\ 0 & -2 \end{pmatrix}$。 * 計算此 $H$ 的特徵值:分別為 $\lambda = 2$ 和 $\lambda = -2$。 * 因為特徵值有正有負,所以原點被確認是 **Saddle Point**。 ### III. 逃離鞍點的策略與實證經驗 #### 逃離鞍點的策略 * 如果訓練卡住的點是 Saddle Point,則有機會逃離。 * 雖然梯度 $G$ 變為零,但可以藉由 $H$ 矩陣來決定參數更新的方向。 * **方向決定**:應沿著 $H$ 的**負特徵值** ($\lambda < 0$) 所對應的**特徵向量** ($U$) 方向進行更新。 * 沿著此特徵向量方向 ($U$) 更新參數,可以讓 $L(Z')$ 小於 $L(Z)$,即找到讓損失下降的路徑。 #### 鞍點在高維度空間的普遍性 * 在實際的優化訓練中,使用二次微分資訊 (Hessian 矩陣) 的計算量非常大,因此實務上很少直接使用此方法來逃離 Saddle Point 。 * **Local Minimum 與 Saddle Point 誰更常見?** * 有說法認為 Saddle Point 其實更常見。 * **高維度解釋**:一個在低維度 (例如二維) 看起來是 Local Minimum 的點,在更高維度的空間中可能是一個 Saddle Point。 * 神經網路的參數多達百萬甚至千萬,Error Surface 維度非常高。在這個高維度空間中,真正的 Local Minimum 數量可能很少,而 Saddle Point 很多。 #### 實驗驗證:Minimum Ratio * **Minimum Ratio (極小值比例)**:定義為正特徵值的數量佔所有特徵值數量的比例。 * 如果 Minimum Ratio $= 1$,代表所有特徵值都是正的,該點為 Local Minimum。 * 實驗結果顯示,在訓練卡住時,即使損失已經很低,Minimum Ratio 往往小於 1。 * 在極端情況下,Minimum Ratio 仍有 0.5 (即有一半的特徵值是負的)。這意味著在大多數情況下,即使訓練看似卡住,仍有一半的維度方向存在路徑,可以讓損失繼續下降,暗示該點是鞍點,而非真正的局部極小值。 ### 【機器學習2021】 類神經網路訓練不起來怎麼辦 (二): 批次 (batch) 與動量 (momentum)大綱 ### I. 批次大小 (Batch Size, B) 與訓練優化 #### A. 批次處理的定義與目的 1. 資料分批 (Batch) 與參數更新 (Update)。 2. 訓練時的資料處理方式:不拿所有資料一起計算,而是拿批次資料計算。 3. 批次隨機重排 (Shuffling)。 #### B. 大批次 vs. 小批次(B=1)特性比較 1. **大批次(Batch size = 訓練資料總數)**: * 蓄力時間長:需看完所有資料才能更新參數。 * 威力強:更新方向較準確穩定。 2. **小批次(Batch size =1)**: * 蓄力時間短:看一筆資料即可更新參數。 * 更新頻繁:一個 Epoch 更新次數多 (如 20 筆資料更新 20 次)。 * 更新不準確:梯度方向是「亂槍打鳥」。 #### C. 運算效率考量 (GPU 平行運算影響) 1. **單次更新時間**: * 由於 GPU 平行運算,B size 在 1 到 1000 之間,計算所需耗費的時間幾乎一樣。 * 當 Batch size 變得非常巨大時 (例如 1 萬或 6 萬),單次計算的耗時才會隨 Batch size 增加而增加。 2. **完成一個 Epoch 的總耗時**: * 趨勢與單次更新時間相反。 * 小 B (如 Batch size =1) 雖然單次更新快,但需要進行極多次更新 (例如 6 萬次),總耗時反而非常長。 * 大 B (如 Batch size=1000) 更新次數少 (例如 60 次),完成一個 Epoch 的時間會非常快。 #### D. 批次大小對模型表現的影響 (泛化能力) 1. **實驗結果**:在相同的模型上,小批次 (Small Batch) 往往能得到更好的準確率 (正確率更高)。 2. **機制解釋**:小批次的梯度噪音 (Noising Update)。 * 小 B 每次更新使用的 Loss function 具有差異性 (L1, L2, L3...)。 * 如果 L1 卡住 (梯度方向停滯),L2 可能因形狀不同而不卡住,能繼續更新。 3. **好極小值 (Good Minimum) 與壞極小值 (Bad Minimum)**: * **壞極小值**:位於狹谷 (Canyon) 之中。 * **好極小值**:位於寬廣的平原 (Plain) 上。 * 小 B 的噪音更新使其更容易逃離狹窄的峽谷,最終收斂到寬廣的平原(好極小值),從而獲得更好的泛化能力 (Testing Accuracy)。 * 大 B 的更新過於穩定 (順著梯度),容易被困在狹窄、尖銳的極小值中。 ### II. 動量 (Momentum) 優化技術 #### A. Momentum 的概念與物理類比 1. 目的:對抗靜止點 (Stuck point) 或找到更好的極小值。 2. 類比:將參數視為一個球,在 Loss function 的斜坡上滾下。 3. 傳統 GD (沒有動量):球滾到底 (局部極小值) 就停住。 4. 加入 Momentum:球因慣性/動量 (夠大) 不會停在第一個局部極小值,可能會繼續往上或往右走。 #### B. Momentum 的運作機制 1. **傳統 GD 步驟**:計算梯度 (Gradient, G),沿著梯度的反方向調整參數。 2. **加入 Momentum 步驟**: * 更新方向不再只依賴當前的梯度反方向。 * 更新方向是**梯度的反方向**加上**前一步移動的方向**。 * 數學上:新的移動量 ($M_t$) 考慮了當前梯度 ($G_t$) 和前一次的移動量 ($M_{t-1}$)。 * 效果:即使當前梯度為 0 (平坦區域或極小值),若前一步動量大,參數仍會繼續移動。 * 動量的移動方向實際上反映了過去所有梯度資訊的累積。 ### I. 批次大小 (Batch Size, B) 的討論與影響 #### 訓練數據的分批處理與參數更新 * 在訓練過程中,我們並不是對所有的資料 (d) 算出微分 (Gradient, G)。 * 實際做法是將所有的資料分成若干個批次 (b, batch),每次只拿大 B 的資料出來計算損失 (L) 並更新參數。 * 工業界常用的做法是進行 **Shuffling** (S 做法),即在每一個 Epoch 開始之前,會重新打亂並劃分批次 (b),確保每次 Epoch 哪些資料在同一個批次中都不同。 * **Epoch** 指的是所有訓練資料都被看過一遍。 #### 大批次 vs. 小批次(B=1)的特性比較 我們以 20 筆訓練資料為例進行比較: | 特性 | 左側 (無 B/B size=20) | 右側 (B=1) | | :--- | :--- | :--- | | **更新條件** | 必須把 20 筆資料都看完才能計算 L 並更新參數。| 只要看一筆資料 (B=1) 即可更新參數。| | **蓄力時間** | 比較長。 | 比較短。 | | **單次更新威力** | 比較強/總。 | 比較弱,更新方向容易是「亂槍打鳥」或「不准」。| | **Epoch 內更新次數**| 1 次。 | 20 次 (總資料數)。| #### 運算效率與 GPU 平行運算 * 雖然小批次 (B=1) 更新不準確,大批次更新穩定,但單從訓練效率來看,計算速度也需要納入考量。 * **實驗結果顯示**:當 B size 從 1 增加到 1000 時,單次計算 L 所需耗費的時間幾乎是一樣的。 * 這是因為 GPU 具備平行運算的能力。 * 只有當 B size 增加到非常巨大時 (例如 1 萬或 6 萬筆資料),單次計算 L 耗費的時間才會隨之增加。 * **完成一個 Epoch (看完所有資料)** 的總時間趨勢剛好相反: * 假設訓練資料有 6 萬筆。 * 若 $B=1$,需要 6 萬次更新 (update)。 * 若 $B=1000$,只需要 60 次更新。 * 由於單次更新的時間差距不大 (B=1 vs. B=1000),因此大 B size 完成一個 Epoch 的總時間,比小 B size 要快得多。 #### 批次大小對模型泛化能力的影響 雖然大 B 在運算效率上佔優勢,且更新方向較穩定,但神奇的是,**小批次的梯度 (gradient) 反而可以幫助模型泛化**。 * **實驗觀察**:在測試集上 (如手寫數字識別 MNIST),B size 越大,模型的正確率反而越差。小 B size 能夠得到更好的結果。 ##### 好極小值 (Good Minimum) 與壞極小值 (Bad Minimum) 小 B 之所以優於大 B,一個可能的解釋是它能找到「好極小值」。 * 在訓練損失 (Training Loss) 曲面上,可能存在多個局部極小值 (Local Minimum),它們的損失值 L 都很低。 * **壞極小值 (Bad Minimum)**:處在一個**狹谷 (Canyon)** 裡。 * **好極小值 (Good Minimum)**:處在一個**平原 (Plain)** 上。 * **泛化差異**:訓練資料集 (Training) 和測試資料集 (Test) 之間總有差異。 * 對於狹谷中的壞極小值,參數的微小變動 (因為資料差異) 會使測試損失 (Test Loss) 迅速變大。 * 對於平原上的好極小值,參數變動對測試損失影響不大,因此泛化能力強。 * **小 B 的優勢**:小 B 的更新帶有噪音 (Noising Update)。這個噪音使得訓練過程不會被困在狹窄的極小值峽谷中,它會「一個不小心就跳出去了」,最終收斂到更寬廣的平原區域。大 B 的更新過於穩定,會「順著梯度」找到最靠近的尖銳極小值。 --- ### II. 動量 (Momentum) 技術 #### Momentum 簡介 * Momentum 是另一種優化技術,可用於對抗訓練過程中梯度卡住 (Stuck Point) 或局部極小值的問題。 * **物理類比**:想像一個參數球從斜坡上滾下。 * **傳統梯度下降 (GD)**:球滾到局部極小值的谷底就停住了。 * **動量 (Momentum)**:如果球有足夠的動量,它可能不會停在局部極小值,而是會繼續往右走或甚至越過小的丘陵。 #### Momentum 的參數更新機制 * **傳統 GD**:只根據當前梯度的反方向去調整參數。 * **Momentum 步驟**:每次移動參數時,不只考慮當前梯度的反方向,還要加上「前一步移動的方向」。 * **更新方向** = 梯度的反方向 ($G_t$) + 前一步的動量方向 ($M_{t-1}$)。 * **運作效果**: * 在訓練開始時,第一步的動量 ($M_0$) 設為零。 * 隨後,動量會累積過去的梯度影響。 * **逃離極小值**:當參數走到一個梯度很小的位置 (例如局部極小值的底部,梯度 $G \approx 0$)。如果採用傳統 GD 就會停止。但由於 Momentum 包含了前一步的移動方向,它仍然會繼續移動,幫助參數逃離該局部極小值。 * 動量甚至可能讓參數往與當前梯度相反的方向移動(如果前一步的影響力夠大)。 ### 【機器學習2021】 類神經網路訓練不起來怎麼辦 (三):自動調整學習速率 (Learning Rate)大綱 I. 訓練過程中的常見誤解與挑戰 A. 臨界點 (Critical Point) 不一定是最大值 B. Loss 停止下降與梯度大小的關係 C. Saddle Point (鞍點) 並非主要難題 II. 真正的訓練難題:非等向性 Loss Surface A. Convex Surface (凸面) 的挑戰 B. 梯度下降的限制與 Learning Rate (學習率) 的調整困境 III. 解決方案 (I):客製化學習率 (Customized Learning Rate) A. 客製化原則 B. Adagrad (Adaptive Gradient Algorithm) 1. 公式與 $\sigma$ 的定義 2. Adagrad 的機制與優勢 C. RMSProp 1. Adagrad 的問題:需要隨時間變化的學習率 2. RMSProp 的 $\sigma$ 計算:指數加權平均 (Exponential Moving Average) 3. RMSProp 的優勢:動態調整能力 D. Adam (Adaptive Moment Estimation) IV. 解決方案 (II):學習率排程 (Learning Rate Scheduling) A. Learning Rate Decay (學習率衰減) B. Learning Rate Warm-up (學習率熱身) V. 現代優化策略總結 A. Momentum (動量) 與 $\sigma$ 的區別 B. 其他優化方向 ### I. 訓練過程中的常見誤解與挑戰 * **臨界點的定義:** 臨界點(critical point)並不一定是在訓練過程中 Loss 達到最大的點。 * **Loss 下降與梯度 (Gradient) 的關係:** * 隨著參數不斷更新,Loss會越來越小。 * 多數同學在 Loss 不再下降時,會猜測是卡住了,可能因為梯度等於零而無法再前進。 * 然而,當 Loss 不再下降時,**梯度(Gradient)的大小(norm/長度)並不一定真的變小**。在某些例子中,即使 Loss 幾乎沒有減少,梯度反而可能變大。 * **L 不在下降,不代表已經卡住**(卡到了 critical point)。有時候只是因為在一個平坦的 Loss Surface 上移動。 * **Saddle Point (鞍點) 的困難性:** * 在實際訓練中,要走到 Saddle Point 或走過它其實是很困難的。 * **真正應對的對象往往不是 Saddle Point**。 ### II. 真正的訓練難題:非等向性 Loss Surface * **問題核心:** 即使是簡單的 **Convex Surface** (凸面),也可能讓梯度下降法(Gradient Descent, GD)卡住。 * **範例分析:** 考量一個只有兩個參數的 Loss Surface,它是一個**細長的碗狀結構** (arrow service)。 * 在橫軸方向:等高線很平滑,**梯度(坡度)的變化非常小**。 * 在縱軸方向:等高線很陡峭,**梯度變化很大**。 * **梯度下降的表現:** * 如果 Learning Rate 太大,參數會在峽谷的兩側不斷震盪。 * 如果 LR 調得非常小(例如從 $10^{-2}$ 調到 $10^{-7}$),雖然不再震盪,但訓練會變得極慢,**永遠走不到最低點**。這是因為在平滑(梯度小)的地方,極小的 LR 根本無法讓參數移動。 * 即使對於這種簡單的 Convex Surface,GD 也不一定能做好。 * **結論:** 由於真實的訓練模型中,GD 是唯一能依賴的工具,因此需要更好的梯度優化方法。 ### III. 解決方案 (I):客製化學習率 (Customized Learning Rate) * **基本原則:** 每個參數應該要有特化的 Learning Rate。 * **梯度很小(平坦)的方向:** 期望使用**大的 LR**。 * **梯度很大(陡峭)的方向:** 期望使用**小的 LR**。 * **客製化 Learning Rate 的公式化:** * 參數 $\theta^i$ 在第 $t$ 次迭代 (iteration) 的更新公式從 $\theta_{t+1}^i = \theta_t^i - \eta \cdot g_t^i$ * 改為 $\theta_{t+1}^i = \theta_t^i - \frac{\eta}{\sqrt{S_t^i}} \cdot g_t^i$。 * $\sigma_t^i$ 是客製化項,它必須是參數依賴 (parameter-dependent) 且迭代依賴 (iteration-dependent) 的。 * **Adagrad (Adaptive Gradient Algorithm)** * **$\sigma_t$ 的計算:** $\sigma_t$ 是過去所有計算出來的梯度平方的平均,再開根號。 * $\sigma_t = \sqrt{\frac{G_0^2 + G_1^2 + \dots + G_{t-1}^2}{t}}$ (公式結構,取平均並開根號)。 * **作用機制:** * 若參數方向坡度小,算出的梯度 $G$ 值就小,累積的 $\sigma$ 也小。 * $\sigma$ 小會導致更新時的 LR ( $\eta / \sqrt{S_t}$ ) 變大,步伐變大。 * 若參數方向坡度大,算出的梯度 $G$ 值就大,累積的 $\sigma$ 也大。 * $\sigma$ 大會導致更新時的 LR 變小,步伐變小。 * **限制:** $\sigma$ 項將過去所有看到的梯度都納入,且權重相同。這可能導致 $\sigma$ 累積得過大,使得最終 LR 變得極小,或在某些情況下導致參數爆走(如在縱軸方向累積了太多很小的梯度,導致 $\sigma$ 變大,更新步伐突然噴出去了)。 * **RMSProp** * **動機:** 即使是同一個參數,所需的 LR 也會隨時間改變。Adagrad 的 $\sigma$ 累積權重固定,無法動態調整。 * **RMSProp 的 $\sigma$ 計算:** RMSProp 採用有權重的計算方式。它會賦予新近算出的梯度更大的權重。 * $S_t$ 是透過指數加權平均 (Exponential Moving Average) 計算出來的。 * 公式結構:$S_t = \sqrt{\alpha \cdot S_{t-1}^2 + (1-\alpha) \cdot (g_t)^2}$。 * $\alpha$ 決定了新梯度 $g_t$ 相對於過去 $S_{t-1}$ 的重要性。 * **優勢:** 可以動態調整 Learning Rate。例如,在平滑區域長時間行進後,若突然遇到陡峭區域,RMSProp 可以快速讓 $\sigma$ 變大,達到「踩剎車」的效果。 * **Adam (Adaptive Moment Estimation)** * Adam 是目前最常用的優化策略之一。 * Adam 結合了 **RMSProp** 和 **Momentum**。 ### IV. 解決方案 (II):學習率排程 (Learning Rate Scheduling) * **定義:** 學習率排程是指讓 Learning Rate 成為與時間/迭代次數相關的變數。 * **Decay (衰減):** * 最常見的策略是隨著時間進行,讓 Learning Rate 越來越小。 * **原理:** 訓練初期距離終點較遠,步伐可大;隨著靠近終點,應減小步伐,讓參數更新能夠慢慢按耐下來。 * 衰減機制可以幫助解決 Adagrad/RMSProp 導致的爆走問題。 * **Warm-up (熱身):** * Warm-up 是一種策略,讓 Learning Rate 先變大,然後再變小。 * 這種技術出現在許多知名的模型論文中,被視為一種「黑科技」。 * **可能的解釋:** 像 $\sigma$ 這樣的統計結果,在訓練初期並不精準。小的 LR 讓模型在初始位置先做一些探索,收集有關 Loss Surface 的情報,等到 $\sigma$ 數據更精準後,LR 再變大,讓訓練加速。 ### V. 現代優化策略總結 * **現代優化器的構成 (如 Adam):** 結合了 **Momentum** 和 **客製化 Learning Rate (S)**。 * **Momentum 與 $\sigma$ 的區別:** 兩者都考慮過去的梯度,但使用方式不同,因此結果不會抵銷。 * **Momentum:** 直接將過去所有梯度的方向加總起來,**考慮梯度的方向和正負號**。 * **$\sigma$(客製化 LR 的分母):** 只考慮**梯度的大小**(透過梯度的平方和)。 ### 【機器學習2021】 類神經網路訓練不起來怎麼辦 (四):損失函數 (Loss) 也可能有影響大綱 I. 分類(Classification)方法的初步討論 A. 輸出向量 $Y$ 與目標 $T$ 的逼近學習 B. 數值編號表示的局限性探討 II. 訓練優化與 Batch Normalization 的引入 A. 優化挑戰:即使是 Convex Surface 也難以訓練 B. 適應性學習率(Adaptive Learning Rate)的需求 C. 解決方向:直接修改 Loss Surface D. Batch Normalization 作為優化技術的適用性 III. 困難 Loss Surface 的成因分析 A. 範例模型:簡單的線性模型 B. 參數 $W$ 對 Loss $L$ 變化的影響 C. **輸入特徵尺度 (Scale) 差異是關鍵因素** 1. 輸入 $X$ 值很小時的影響(斜率小) 2. 輸入 $X$ 值很大時的影響(斜率大) IV. 解決方案:Normalization(標準化) A. 目標:讓不同維度 (dimension) 擁有相同的數值範圍 B. Standardization (標準化) 的步驟與公式 1. 計算每個維度的平均值 ($\mu$) 和標準差 ($\sigma$) 2. 標準化公式:$X' = (X - \mu) / \sigma$ C. 標準化的結果:新的數值分佈 ### I. 分類(Classification)方法的初步討論 * **輸出與學習目標:** 在分類任務中,網路的輸出是一個向量 $Y$。我們希望這個輸出 $Y$ 能夠與正確的答案 $T$(目標 label)越接近越好。 * **編號表示的局限:** 如果將 $T$ 標籤(例如 Test 1, Test 2, Test 3)直接用數值編號(如 1, 2, 3)表示,可能會導致模型錯誤地認為 Test 1 跟 Test 2 是比較相似的。 ### II. 訓練優化與 Batch Normalization (BN) 的引入 * **優化問題的嚴重性:** 訓練中不應該小看優化 (optimization) 的問題。有時候,**即使 Loss Surface 是 Convex(凸面),即為碗狀形狀,也不一定容易訓練**。 * **坡度/斜率 (Slope) 差異的挑戰:** * 如果 Loss Surface 上,兩個參數 $W_1$ 和 $W_2$ 對 Loss 的斜率差別非常大。 * 例如,在 $W_1$ 方向上,斜率變化很小(平坦);而在 $W_2$ 方向上,斜率變化很大(陡峭)。 * 在這種情況下,固定的 Learning Rate 難以得到好的結果。因此,我們需要 Adaptive Learning Rate(例如 Adagrad 等較進階的優化方法)。 * **Batch Normalization 的動機:** 除了調整學習率,另一種解決方案是**直接修改難做的 Loss Surface**,使其變得更容易訓練。 * **Batch Normalization 的實用性:** Batch Normalization 是一個將 Loss Surface 變好的想法之一。它在作業三中用得上,特別是做 CNN 處理時,能夠帶來很大的幫助。 ### III. 困難 Loss Surface 的成因分析 * **模型範例:** 考慮一個非常簡單的線性模型:$Y = W_1 X_1 + W_2 X_2 + B$。Loss $L$ 是計算 $Y$ 與目標 $\hat{Y}$ 之間的差距,並希望最小化 $L$。 * **輸入對斜率的影響:** 參數 $W$ 對 $L$ 的影響取決於其對應的輸入 $X$ 的大小。 * **$X$ 值很小(如 $X_1$):** 如果 $X_1$ 的值在不同的訓練樣本中都很小。當 $W_1$ 有一個小的改變時,它對 $Y$、Error $E$ 和 Loss $L$ 的影響也會很小。這會導致在 $W_1$ 方向上,Loss Surface 的**斜率很小,表面平坦**。 * **$X$ 值很大(如 $X_2$):** 如果 $X_2$ 的值都很大。當 $W_2$ 只有一個很小的變化時,因為它乘以了很大的 $X_2$ 值,導致 $Y$ 的變化很大,進而 $E$ 和 $L$ 的變化也會很大。這會導致在 $W_2$ 方向上,Loss Surface 的**斜率很大,表面陡峭**。 * **結論:** 當輸入特徵 (input feature) 中每個維度 (dimension) 的數值尺度(scale)差距很大時,就會產生這種不同方向坡度非常不同的 Error Surface。 ### IV. 解決方案:Normalization(標準化) * **目標:** 為了讓訓練變得更容易,我們需要讓特徵(feature)中**不同維度擁有相似或接近的數值範圍**。 * **Normalization 方法(Standardization):** * 這類方法統稱為 Normalization。以下描述的具體方法其實是**標準化 (Standardization)**。 * **步驟:** 1. 收集所有訓練資料的特徵向量。 2. 針對**同一個維度** (dimension),取出所有資料的數值。 3. 計算該維度的**平均值 ($\mu$)** (用 $m$ 表示)。 4. 計算該維度的**標準差 ($\sigma$)** (用 $s$ 表示)。 5. **執行標準化:** 將該維度的每個數值 $X$,減掉該維度的平均值 $\mu$,再除以該維度的標準差 $\sigma$。 $$\text{新的數值} X' = \frac{X - \mu}{\sigma} \text{}$$ * **標準化結果:** 經過這種 Normalization 處理後,該維度上的數值將會滿足**平均值為 0**,**變異數 (variance) 為 1**。 ### 【機器學習2021】類神經網路訓練不起來怎麼辦 (五): 批次標準化 (Batch Normalization) 也可能有影響大綱 I. Batch Normalization (BN) 的目標與位置 A. 克服 Loss Surface 難題與訓練加速 B. Normalization 執行的時機與範圍 C. Normalization 實作位置的建議 II. Batch Normalization 的計算過程 A. 計算目標:內部特徵 $Z$ 的標準化 B. 均值 ($M$) 與標準差 ($S$) 的計算 C. 標準化公式 $Z'$ 的應用 III. 實際應用考量:Batch 的引入 (Batch Normalization) A. 龐大資料集與 GPU 限制 B. 批次 (Batch) 計算的必要性與命名由來 C. $M$ 與 $S$ 變數之間的關聯性 IV. BN 的可學習參數 ($\gamma$ 與 $\beta$) A. $\gamma$ (G) 與 $\beta$ (b) 的引入 B. 引入 $\gamma$ 與 $\beta$ 的原因:解除限制 C. $\gamma$ 與 $\beta$ 參數在訓練上的作用 V. BN 在推論 (Inference/Testing) 階段的差異 A. 推論階段計算 $M$ 與 $S$ 的困難 B. 解決方案:使用訓練階段的移動平均 (Running Statistics) C. 實驗結果:BN 對訓練的幫助 ### I. Batch Normalization (BN) 的目標與位置 * **目標:** 透過 feature normalization (特徵標準化) 來**製造一個比較好的 Loss Surface**,讓訓練的收斂更快一點。 * **Normalization 的適用性:** Feature normalization 是有幫助的。 * **BN 的作用範圍:** 即使已經在輸入層 (input layer) 做了 normalization,但通過權重 $W$ 之後,**中間層的 $Z$ 向量**(例如 $Z_1, Z_2, Z_3$)的不同 dimension 之間,其數值分佈可能仍然有很大的差異。 * **Normalization 實作位置:** * 我們可以選擇在 Activation Function 之前或之後做 normalization。 * 在實作上,這兩種選擇的差異**並不大**。 * 如果選擇使用 Sigmoid 的 Activation Function,比較推薦在 Activation 之前對 $Z$ 做 normalization。這是因為 S 形狀的 Activation 在兩側的斜率比較大,如果將所有值都挪到 0 附近,計算出的梯度會比較好。 ### II. Batch Normalization 的計算過程 * **計算對象:** 我們將 $Z_1, Z_2, Z_3, \dots$ 視為另一種 feature。 * **平均值 ($M$) 的計算:** 對於每一個 dimension,把所有資料點的數值**平均起來**,得到 $M$。 $M$ 是一個向量 (vector)。 * **標準差 ($S$) 的計算:** * 計算標準差 (standard deviation),$S$ 也是一個向量。 * 計算方式是將 $Z_i$ 減掉 $M$ 後取平方,然後再開根號。 * **標準化 (Normalization) 公式:** * 將每一個 $Z$ 都減掉 $M$,再除以 $S$。 * 公式結構為 $\frac{Z_i - M}{S}$。由於 $Z_i$、 $M$ 和 $S$ 都是向量,此處的分母 $S$ 是向量,表示**向量中每個元素的分別相除**。 * 經過標準化後,得到新的 $Z'$ 向量。 ### III. 實際應用考量:Batch 的引入 (Batch Normalization) * **訓練中的 $M$ 與 $S$ 關聯性:** 當進行 normalization 時,不同 $Z$ 之間會彼此關聯。 * 當其中一個 $W$ 改變,接下的 $Z$ 值改變,**會導致 $M$ 和 $S$ 改變**。 * 因此,當你做 normalization 時,你需要將「收集一堆 feature,計算出 $M$ 和 $S$」這件事情,**視為整個 Network 的一部分**。 * **Batch Normalization 的誕生:** * 在處理百萬筆資料的資料集時,GPU 的記憶體無法將整個訓練集載入,無法算出全域的 $M$ 與 $S$。 * 實作時,我們只能對**一個 Batch 裡面的資料**做 normalization。 * 如果 Batch 大小是 64 筆,那麼這個巨大的 Network 就是把 64 筆 Data 丟進去,然後計算這 64 筆 Data 的 $M$ 和 $S$。 * 這就是「Batch Normalization」名稱的由來。 ### IV. BN 的可學習參數 ($\gamma$ 與 $\beta$) * **加入可學習參數:** 實際應用時,在標準化 $Z'$ 之後,還會再乘上另一個向量 $\gamma$ (G),並加上另一個向量 $\beta$ (b)。 * $Z_{\text{BN}} = G \odot Z' + B$。 * $\gamma$ 和 $\beta$ 是**可被訓練的參數**。 * **引入 $\gamma$ 與 $\beta$ 的原因:** * Normalization 會使 $Z'$ 的平均值變成 0。 * 強制平均值為 0 是一種**限制**,也許這種限制會帶來負面影響。 * 引入 $\gamma$ 和 $\beta$ 是為了讓 Network 能夠**自己調整分佈**。如果 Network 認為平均值不是 0 比較好,它會透過調整 $\gamma$ 和 $\beta$ 來實現。 * **訓練上的幫助:** * 有加入 $\gamma$ 和 $\beta$ 的 BN 對訓練是有幫助的。 * 在訓練開始時,每個分佈會比較接近(因為做了 normalization)。 * 當訓練足夠長,找到一個比較好的 W 後,網路可能會調整 $\gamma$ 和 $\beta$,使得最終的線(Loss 曲線)表現出好像**沒有做 normalization**一樣。 ### V. BN 在推論 (Inference/Testing) 階段的差異 * **推論階段的困難:** * 在推論(Testing 或線上服務)時,資料是**一筆一筆**進來的。 * 如果只有一筆資料進來,就無法計算一個 Batch 的 $M$ 和 $S$。 * **實際解法:運行統計量 (Running Statistics):** * 在訓練 (Training) 期間,每一次 Batch 算出來的 $M$ 和 $S$ 都會被拿出來做**移動平均** 。 * 這個 running mean 和 running standard deviation 是需要被調整的參數。 * 最終,在推論 (Testing) 或實際應用時,我們**不使用當前 Batch 算出的 $M$ 和 $S$**,而是直接拿**訓練時累積得到的 Running Mean (移動平均 $M$) 和 Running Standard Deviation (移動標準差 $S$)** 來進行 normalization。 [【機器學習2021】01~02 機器學習和深度學習基本概念簡介](https://hackmd.io/@JuitingChen/SyoNXkdslx) [【機器學習2021】03~08 機器學習任務攻略和最佳化技巧](https://hackmd.io/@JuitingChen/BJ6mXy_slg) [【機器學習2021】09~11 CNN 和 Self attention](https://hackmd.io/@JuitingChen/r1ahLgUngl) [【機器學習2021】12~13 Transformer](https://hackmd.io/@JuitingChen/H1tfXy_ige) [【機器學習2021】14~17 GAN](https://hackmd.io/@JuitingChen/S1adiwvhxg) [【機器學習2021】18~21 自監督式學習](https://hackmd.io/@JuitingChen/ryQG7J_sgl) [【機器學習2021】22~23 Auto-encoder](https://hackmd.io/@JuitingChen/r1sLPr92ge) [【機器學習2021】24~25 Adversarial Attack ](https://hackmd.io/@JuitingChen/HJ6jJIq3ge) [【機器學習2021】26~28 Explainable ML 和 Domain Adaptation](https://hackmd.io/@JuitingChen/SJZzQkdslg) [【機器學習2021】29-30 強化學習-1](https://hackmd.io/@JuitingChen/HJYziZR3gx) [【機器學習2021】31~33 強化學習-2](https://hackmd.io/@JuitingChen/Sy5DoWA3xl) [【機器學習2021】34~35 機器終身學習](https://hackmd.io/@JuitingChen/BytWmyuilg) [【機器學習2021】36~37 神經網路壓縮 ](https://hackmd.io/@JuitingChen/Bk7-m1_jlx) [【機器學習2021】37~40 Meta Learning](https://hackmd.io/@JuitingChen/SkkC6rT2gl)