Deep Learning 101

https://deep-learning-101.github.io/

The top private AI Meetup in Taiwan, launched on 2016/11/11 @ 83F, Taipei 101

台灣曾經最高最早發起的深度學習社群 @ 83F, 台北101

Optimization for Training Deep Models @ Deep Learning Book Chapter 8

2017/03/10

Video: Optimization Techniques for Training Deep Models (Covers concepts like SGD, Momentum, NAG, Batch Normalization, and more, based on the book chapter.)

深度學習模型訓練中的優化

一份關於深度神經網路模型優化的整理匯總

概述 Overview

這份文件彙整了關於深度神經網路模型優化的各類資料。本章探討了深度學習中至關重要的優化問題,特別是神經網路的訓練。與傳統的純優化不同,機器學習中的優化通常是間接的,目標是提高模型在未見數據上的性能(泛化能力),而不是簡單地最小化訓練集上的損失。文件深入介紹了神經網路優化所面臨的挑戰,包括非凸性、病態條件、局部極小值和鞍點等,並回顧了基本優化算法(如 SGD、動量)以及更進階的技術(如自適應學習率方法、參數初始化策略、批標準化、坐標下降、Polyak 平均)和優化策略(如監督預訓練、設計易於優化的模型、課程學習)。

深度學習中最重要的優化問題是神經網路的訓練。它的重要性在於模型的性能高度依賴於訓練結果的品質。其挑戰性在於,神經網路模型通常擁有數百萬甚至數十億個參數,且訓練資料集極為龐大,這使得訓練過程需要龐大的計算資源和漫長的時間,即使動用大量機器和數月時間也屬常見。本章主要關注尋找神經網路上的一組參數 $\theta$,使得一個代價函數 $J(\theta)$ 顯著降低。這個代價函數通常包含兩部分:一部分是衡量模型在整個訓練集上的性能的指標(如經驗風險),另一部分是額外的正則化項(用於防止過擬合)。

機器學習優化 vs. 純優化 Differences

用於深度模型訓練的優化算法與傳統的優化算法在幾個方面有所不同。

核心區別 Core Distinctions

  1. 目的不同: 純優化旨在直接最小化目標函數 $J$。機器學習優化則關注在未知測試集上的效能度量 $P$(風險),間接優化代價函數 $J(\theta)$(經驗風險)。
  2. 目標函數結構: 機器學習的目標函數通常可分解為訓練樣本上的總和或平均,催生了小批量 (Minibatch) 方法。

經驗風險最小化 Empirical Risk Minimization (ERM)

ERM 是指最小化模型在有限訓練數據集上的平均損失。最終目標不僅是最小化訓練誤差,更重要的是希望模型在未見數據上表現良好(低真實風險),因此防止過擬合是重要考量。

代理損失與提前終止

代理損失函數 Surrogate Loss

當真正關心的損失函數(如0-1損失)難以優化時,轉而優化一個更容易處理的代理損失函數(如負對數似然)。

提前終止 Early Stopping

監控模型在驗證集上的性能,當驗證集損失上升時停止訓練,以犧牲訓練集完美擬合換取更好泛化能力。

批量與小批量算法

機器學習算法目標函數常分解為樣本求和,優化時僅用部分數據估計梯度。

  • 批量梯度下降: 使用整個訓練集計算梯度,精確但成本高。
  • 隨機梯度下降 (SGD): 每次僅用一個樣本,速度快但噪聲大。
  • 小批量 SGD: 每次用一小子集,深度學習中最常用,平衡準確性與效率。

小批量大小影響

影響梯度估計方差、計算效率、內存消耗和硬體性能偏好。

神經網路優化挑戰 Challenges

優化神經網路是極其困難的非凸優化任務。

病態 Ill-conditioning

Hessian 矩陣條件數過大,導致梯度下降在陡峭方向震盪(需小學習率),平坦方向進展緩慢,整體收斂極慢。

局部極小值 Local Minima

非凸函數可能存在多個局部極小值,算法可能陷入代價較高的局部解。但深度網路中,多數局部極小值代價接近全局最小。模型不可辨識性會導致等價局部極小值。

高原、鞍點與平坦區域 Plateaus, Saddle Points

高維非凸函數中,鞍點(梯度為零但非極值,Hessian 不定)比局部極小值更常見。鞍點附近梯度極小,算法易停滯。高原是梯度幾乎為零的廣闊平坦區。

基本優化算法 Basic Algorithms

隨機梯度下降 (SGD) Stochastic Gradient Descent

機器學習中應用最多的優化算法。關鍵參數是學習率 $\epsilon_k$。理論收斂條件:$\sum_{k=1}^\infty \epsilon_k = \infty$ 且 $\sum_{k=1}^\infty \epsilon_k^2 < \infty$。

實踐中學習率衰減:常線性衰減 $\epsilon_k = (1-\alpha)\epsilon_0 + \alpha\epsilon_\tau$ 直到第 $\tau$ 次迭代,之後保持常數。初始 $\epsilon_0$ 和最終 $\epsilon_\tau$ 很重要。

動量 (Momentum) Polyak, 1964

旨在加速學習,處理高曲率、小而一致梯度或噪聲梯度。引入速度向量 $v$ 積累過去梯度的指數加權移動平均。

更新規則: $v \leftarrow \alpha v - \epsilon \nabla_\theta J(\theta)$, $\theta \leftarrow \theta + v$。$\alpha \in [0,1)$ 控制衰減。解決 Hessian 病態和梯度方差問題。

Nesterov 動量 Nesterov, 1983; Sutskever et al., 2013

標準動量的變種,梯度在參數近似「下一步位置」 $(\theta + \alpha v)$ 處計算。提供更及時修正,減少震盪。

更新規則: $v \leftarrow \alpha v - \epsilon \nabla_\theta J(\theta + \alpha v)$, $\theta \leftarrow \theta + v$。

參數初始化策略

非常重要,影響優化和最終性能。

  • 打破對稱性:避免所有權重學習相同特徵。
  • 影響優化:好的初始化有助收斂。
  • 控制梯度流動:避免梯度消失/爆炸。

常用策略

Xavier/Glorot 初始化 (2010): 適用於 tanh/線性激活,方差 $Var(W) = 2 / (fan_{in} + fan_{out})$。

He 初始化 (2015): 專為 ReLU 設計,方差 $Var(W) = 2 / fan_{in}$。

自適應學習率算法 Adaptive LR Methods

為每個參數獨立調整學習率,根據梯度特性自動調整步長。通常比手動調參的 SGD 更易用。

AdaGrad Duchi et al., 2011

縮放每個參數反比於其所有梯度歷史平方值總和的平方根。利於稀疏特徵。缺點:學習率最終可能過小。

RMSProp Hinton, 2012

改進 AdaGrad,使用梯度平方的指數加權移動平均,避免學習率過早衰減。

Adam Kingma & Ba, 2014

結合動量(一階矩)和 RMSProp(二階矩)思想。通常是魯棒且表現良好的預設優化器

選擇算法:尚無公認最佳算法。精心調整的 SGD(帶動量)有時也能達到很好性能。實驗比較是關鍵。

二階近似方法

牛頓法 Newton's Method

使用一階和二階導數(Hessian)。$\theta^* = \theta_0 - H^{-1} \nabla_\theta J(\theta_0)$。收斂快但計算 $H^{-1}$ 成本高。

共軛梯度法

迭代方法,避免直接計算 $H^{-1}$。

BFGS / L-BFGS

擬牛頓法,近似 $H^{-1}$。L-BFGS 是內存受限版。

批標準化 (Batch Normalization) Ioffe & Szegedy, 2015

一種改善優化和泛化能力的網絡層設計。在仿射變換後、激活函數前,對每層輸入標準化(零均值,單位方差),再通過可學習參數 $\gamma, \beta$ 進行仿射變換。

計算: $\hat{H} = (H - \mu) / \sigma$; $BN(H) = \gamma\hat{H} + \beta$。$\mu, \sigma^2$ 在小批量上計算。

作用:

  • 緩解內部協變量偏移。
  • 加速收斂,允許更大學習率。
  • 輕微正則化效果。
  • 避免梯度飽和。

測試時使用整個訓練集的均值和方差(或其移動平均)。

優化策略和元算法 Strategies & Meta-algorithms

坐標下降 Coordinate Descent

一次只優化一個(或一組)參數,保持其他參數固定。適用於對單個參數優化高效或有閉式解的情況。

Polyak 平均 Polyak Averaging

對 SGD 訓練過程中的參數迭代序列進行平均,獲得可能更好的最終參數估計。減少噪聲影響,更穩定。

監督預訓練 Supervised Pretraining

先用標註數據訓練模型解決相關輔助任務,學到的參數用作最終任務的初始值。如逐層監督預訓練,ImageNet 預訓練。

設計有助於優化的模型 Designing for Optimization

改進模型架構比改進優化算法更有效。如跳躍/殘差連接 (ResNet),允許訓練非常深的網絡,緩解梯度消失。

延拓法與課程學習 Continuation & Curriculum Learning

延拓法:從易解問題開始,逐漸變形到原始難題。課程學習:模仿人類學習,先展示容易樣本/簡單任務,逐步增難。有助加速收斂、改善泛化。

常見問答匯總 FAQ

什麼是深度學習中最核心的優化問題?它為何如此具有挑戰性?

核心問題是神經網路的訓練。挑戰性在於參數多、數據集大,計算資源和時間需求龐大。

機器學習中的優化與純粹的數學優化有何主要區別?

1. 間接優化:機器學習優化經驗風險以期降低真實風險(泛化能力),純優化直接最小化目標函數。 2. 目標函數結構:機器學習目標函數可分解,支持小批量方法。

什麼是經驗風險最小化(ERM)?它在機器學習中的最終目標是什麼?

ERM 是最小化模型在訓練數據上的平均損失。最終目標是低訓練誤差的同時,也獲得低真實風險(良好泛化能力),需防止過擬合

代理損失函數和提前終止策略各自的目的是什麼?

代理損失函數: 當真實損失難以優化時,使用易處理的代理(如交叉熵代替0-1損失)。提前終止: 監控驗證集性能,防止過擬合,平衡訓練誤差與泛化能力。

神經網路非凸優化中的病態、局部極小值和鞍點分別帶來什麼挑戰?

病態: Hessian條件數大,收斂慢。局部極小值: 可能陷入次優解。鞍點: 高維中比局部極小值更普遍,梯度小易停滯,更具挑戰性。

動量和 Nesterov 動量方法的核心思想?如何改善 SGD 收斂性?

動量: 積累過去梯度的指數加權移動平均,加速一致方向,抑制震盪。Nesterov 動量: 在「預測的」未來位置計算梯度,「向前看」機制修正更及時。

為何神經網路參數初始化非常重要?不良初始化會帶來哪些問題?

重要性:1. 打破對稱性。 2. 影響優化過程。 3. 控制梯度流動。不良初始化導致優化困難、梯度消失/爆炸。

自適應學習率算法(如 AdaGrad, RMSProp, Adam)是什麼?與標準 SGD 的主要區別和優勢?

為每個參數獨立調整學習率。優勢:自動調整步長,通常更易用。AdaGrad:適於稀疏數據,學習率單調降。RMSProp:用梯度平方的指數移動平均,防學習率過早衰減。Adam:結合動量和RMSProp,魯棒性好。

時間軸與主要人物 Timeline & Key Figures

  • 1964: Polyak - 動量方法 (Momentum)
  • 1983, 2004: Nesterov - Nesterov 動量
  • 2010: Glorot & Bengio - Xavier/Glorot 初始化
  • 2011: Duchi et al. - AdaGrad
  • 2012: Hinton - RMSProp (未發表)
  • 2014: Kingma & Ba - Adam
  • 2015: Ioffe & Szegedy - 批標準化 (BN); He et al. - He 初始化
  • 2016: He et al. - 殘差網路 (ResNet)
  • 主要人物: Polyak, Nesterov, Glorot, Bengio, Duchi, Hinton, Kingma, Ba, Ioffe, Szegedy, Srivastava, He, Schaul.

研讀指南 - 測驗 Quiz

請用 2-3 句話簡短回答:

  1. 深度學習中最重要的優化問題是什麼?它為何具有挑戰性?
  2. 機器學習中的「風險」和「經驗風險」有什麼區別?
  3. 代理損失函數是什麼?為何需要它?
  4. Minibatch SGD 與其他梯度下降有何不同?為何受歡迎?
  5. 優化中的「病態」指什麼?如何影響效率?
  6. 高維空間中,為何鞍點比局部極小值更常見且難處理?
  7. 動量方法的核心思想?如何加速訓練?
  8. Nesterov 動量與標準動量的主要區別與優勢?
  9. 神經網路參數初始化為何重要?權重全零會怎樣?
  10. 批標準化是什麼?有何作用?

研讀指南 - 申論題 Essay Questions

請針對以下任五題進行詳細闡述:

  1. 詳細比較機器學習優化與純優化,解釋為何關心泛化性能及過擬合角色。
  2. 深入探討神經網路優化挑戰:病態、局部極小值、鞍點、高原的數學含義與影響。
  3. 比較批量、隨機、小批量梯度下降的優缺點,為何小批量 SGD 普遍。
  4. 詳細解釋動量和 Nesterov 動量原理,如何解決 Hessian 病態和梯度方差問題。
  5. 探討自適應學習率算法(AdaGrad, RMSProp, Adam)工作原理、優勢與局限。
  6. 解釋參數初始化重要性,介紹至少兩種方法(Xavier/Glorot, He)思想與適用場景,討論不當初始化的問題。
  7. 批標準化工作原理、計算過程及其如何改善訓練(緩解ICS、加速收斂、正則化)。
  8. 描述二階優化方法(牛頓法等)基本思想、優勢及在大型DNN中的計算挑戰。
  9. 探討「設計有助於優化的模型」,以跳躍/殘差連接為例解釋模型架構如何改善優化。