第08堂課:類神經網路訓練不起來怎麼辦 (四):損失函數 (Loss) 也可能有影響

課程簡介:分類問題 (Classification)

本堂課將以簡短的方式快速介紹分類問題的處理方法。若想深入了解,可參考過去的完整課程錄影。

從迴歸看分類問題 (Classification as Regression)

  • 迴歸定義:輸入向量,輸出一個數值 ,目標是讓 接近真實標籤
  • 分類的類比
    • 可以嘗試將分類問題視為迴歸:輸入一個東西,輸出一個數值
    • 將類別數值化:例如 Class1 編號為 1,Class2 編號為 2,Class3 編號為 3。
    • 目標:讓 接近類別的編號。
  • 問題點
    • 這種數值化方式隱含了類別之間的相似性。例如,,會預設 Class1 與 Class2 較接近,Class1 與 Class3 較遠。
    • 若類別間無實際數值關係(如水果種類),此方法不適用。

類別表示法:One-hot Vector

為了避免預設類別關係的問題,常見的做法是使用 One-hot Vector 來表示類別。

  • 原理:每個類別都用一個向量表示,其中只有一個元素為 1,其餘為 0。
  • 範例:若有三個類別
    • Class1:
    • Class2:
    • Class3:
  • 優勢
    • 消除了類別間相似性的預設。
    • 任何兩個 One-hot Vector 之間的距離都是相同的,不會暗示某些類別更相似。

神經網路輸出層 (Network Output for Classification)

當目標 是 One-hot Vector (一個多維向量) 時,神經網路的輸出也應該是一個多維向量。

  • 設計
    • 如果 是一個 維向量 ( 個類別),則網路的輸出 也應為 個數值 ()。
    • 實現方式:將原本輸出單一數值的網路結構重複 次,每次使用不同的權重與偏置,即可產生 個輸出值。

Soft-max 函式

在分類問題中,神經網路的原始輸出 通常會再通過一個 Soft-max 函式,得到 ,然後再計算 之間的距離。

為何需要 Soft-max?

  • 簡化解釋 (One-hot Vector) 的值只有 0 和 1。為了讓網路輸出 能與 更好地比較相似度,我們需要將 的值也歸一化到 0 到 1 之間。Soft-max 函式就扮演了這個角色。
  • 深層解釋 (課程中簡略):Soft-max 具有豐富的歷史淵源,通常從生成模型、Logistic Regression 等角度深入解釋其背後的假設。若要了解,可參考相關課程錄影。

Soft-max 運作原理

Soft-max 函式將輸入的 (Logits) 轉換為

  1. 取指數 (Exponential):對每個輸入 取指數運算:
    • 無論 是正數還是負數, 都會是正數。
  2. 歸一化 (Normalization):將每個 除以所有 的總和。

圖示化說明:

Soft-max 的特性

  • 輸出範圍:所有 都介於 0 到 1 之間。
  • 總和為 1:所有 的總和為 1 (類似機率分佈)。
  • 拉大數值差距:Soft-max 會讓輸入中較大的值變得更大 (接近 1),較小的值變得更小 (接近 0),從而放大不同類別之間的區別。
    • 範例:輸入 經過 Soft-max 後變成 ,可以看到 被壓到趨近於 0。

Logit

Soft-max 函式的輸入 通常被稱為 Logit

Soft-max 與 Sigmoid 的關係 (for 2 Classes)

當只有兩個類別時,Soft-max 函式與 Sigmoid 函式是等價的。可以自行推導驗證。

分類常用的損失函數 (Loss Functions for Classification)

在得到 (Soft-max 輸出) 和 (One-hot label) 後,我們需要計算兩者之間的「距離」,這個距離就是損失 (Loss)。

平均平方誤差 (Mean Squared Error, MSE)

Batch Normalization 3D Surface Smoothing
  • 公式
  • 問題:雖然 MSE 也可以用來衡量兩個向量的距離,但在分類問題中,特別是當模型的預測離正確答案很遠時,MSE 的梯度可能會非常小,導致模型訓練緩慢或停滯。

交叉熵 (Cross-entropy, CE)

Cross-entropy 是分類問題中最常用的損失函數。

  • 公式
    • :通常 Cross-entropy 的標準公式為 。教授的講法是當 相同時,該值越小越好,這與帶負號的公式在最小化目標上是一致的。
  • 與最大似然 (Maximize Likelihood) 的關係:最小化 Cross-entropy 與最大化似然函數是等價的。
  • 優勢:最佳化角度考量
    • 相較於 MSE,Cross-entropy 在模型預測與真實標籤差異較大時,仍能提供足夠大的梯度。
    • 這使得梯度下降演算法能夠更有效地調整參數,加速訓練過程,避免卡在梯度平坦區。
    • 錯誤曲面範例:當 Loss 很大(例如初始訓練階段)時,MSE 的錯誤曲面可能非常平坦,導致梯度趨近於 0,使訓練難以啟動。而 Cross-entropy 在相同情況下仍具有明顯斜率,有助於模型學習。

Soft-max 與 Cross-entropy 的整合

  • PyTorch 設計:在 PyTorch 中,nn.CrossEntropyLoss 函式內部已經包含了 Soft-max 運算。
  • 使用注意事項:如果你在神經網路的輸出層已經手動加入了 Soft-max 函式,然後再使用 PyTorch 的 nn.CrossEntropyLoss,會導致 Soft-max 被套用兩次,這通常不是我們想要的行為。

知識圖譜 (Knowledge Graph)

graph TD
    subgraph 機器學習分類核心
        分類問題['分類問題 (Classification Problem)']
        迴歸類比法['迴歸類比法']
        數值化表示問題['數值化表示問題']
        類別表示方式['類別表示方式']
        OneHotVector["One-hot Vector"]
        多輸出神經網路['多輸出神經網路']
        Softmax函數['Soft-max 函數']
    end

    subgraph Softmax詳解
        Logits輸入['y₁ y₂ y₃ (Logits)'] --> Softmax計算原理['Soft-max 計算原理']
        Softmax計算原理 --> 取指數運算['取指數 (exp)']
        取指數運算 --> 歸一化處理['歸一化 (Normalization)']
        歸一化處理 --> 機率分佈輸出['y₁' y₂' y₃' (機率分佈)']
        Softmax特性['Soft-max 函式特性']
        值介於零壹['值介於 0-1']
        總和為壹['總和為 1']
        拉大數值差距['拉大數值差距']
        兩類等價Sigmoid["兩類等價於 Sigmoid"]
    end

    subgraph 分類損失函數
        損失函數選擇['損失函數選擇']
        MSE損失['平均平方誤差 (MSE)']
        交叉熵損失['交叉熵 (Cross-entropy)']
        優化挑戰['優化挑戰']
        梯度平坦區['MSE 梯度平坦區']
        優化優勢['交叉熵優化優勢']
    end

    subgraph 實作與理論
        最大似然關係['與最大似然 (Maximize Likelihood) 關係']
        PyTorch整合設計['PyTorch 整合設計']
        CrossEntropyLoss內建['CrossEntropyLoss 內建 Soft-max']
        重複Softmax風險['重複 Soft-max 風險']
    end

    分類問題 -- Node1["需要"] --> 類別表示方式
    分類問題 -- Node2["可嘗試"] --> 迴歸類比法
    迴歸類比法 -- Node3["引發"] --> 數值化表示問題
    數值化表示問題 -- Node4["解決方案"] --> OneHotVector
    OneHotVector -- Node5["定義目標"] --> 多輸出神經網路
    多輸出神經網路 -- Node6["輸出"] --> Logits輸入
    Logits輸入 -- Node7["經處理"] --> Softmax函數
    Softmax函數 -- Node8["細節"] --> Softmax詳解
    Softmax詳解 --> Softmax特性
    機率分佈輸出 -- Node9["作為輸入"] --> 損失函數選擇
    OneHotVector -- Node10["作為目標"] --> 損失函數選擇
    損失函數選擇 -- Node11["包含"] --> MSE損失
    損失函數選擇 -- Node11["包含"] --> 交叉熵損失
    MSE損失 -- Node12["造成"] --> 優化挑戰
    優化挑戰 -- Node13["表現為"] --> 梯度平坦區
    交叉熵損失 -- Node14["擁有"] --> 優化優勢
    交叉熵損失 -- Node15["理論基礎"] --> 最大似然關係
    交叉熵損失 -- Node16["實作於"] --> PyTorch整合設計
    PyTorch整合設計 -- Node17["提供"] --> CrossEntropyLoss內建
    CrossEntropyLoss內建 -- Node18["使用不當導致"] --> 重複Softmax風險


隨堂測驗

測驗一

在機器學習分類問題中,使用 One-hot Vector 表示類別的主要目的是什麼?

點擊展開解答 C) 為了避免隱含地假設不同類別之間存在鄰近性或序數關係。One-hot Vector 使所有類別之間的距離相等,不會預設任何類別比其他類別「更像」或「更遠」。

測驗二

關於 Soft-max 函式,下列哪一個敘述是 不正確 的?

點擊展開解答 D) 對於一個兩類分類問題,使用 Soft-max 和使用 Sigmoid 函式是等價的,它們之間沒有根本上的不同。

測驗三

從最佳化 (Optimization) 的角度來看,為何在分類問題中,交叉熵 (Cross-entropy) 通常比平均平方誤差 (Mean Squared Error, MSE) 更受推薦?

點擊展開解答 C) 交叉熵在模型預測離真實標籤較遠時,仍能產生足夠大的梯度,這有助於梯度下降演算法更有效地調整模型參數,避免卡在梯度平坦區。