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)