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.)
一份關於深度神經網路模型優化的整理匯總
這份文件彙整了關於深度神經網路模型優化的各類資料。本章探討了深度學習中至關重要的優化問題,特別是神經網路的訓練。與傳統的純優化不同,機器學習中的優化通常是間接的,目標是提高模型在未見數據上的性能(泛化能力),而不是簡單地最小化訓練集上的損失。文件深入介紹了神經網路優化所面臨的挑戰,包括非凸性、病態條件、局部極小值和鞍點等,並回顧了基本優化算法(如 SGD、動量)以及更進階的技術(如自適應學習率方法、參數初始化策略、批標準化、坐標下降、Polyak 平均)和優化策略(如監督預訓練、設計易於優化的模型、課程學習)。
深度學習中最重要的優化問題是神經網路的訓練。它的重要性在於模型的性能高度依賴於訓練結果的品質。其挑戰性在於,神經網路模型通常擁有數百萬甚至數十億個參數,且訓練資料集極為龐大,這使得訓練過程需要龐大的計算資源和漫長的時間,即使動用大量機器和數月時間也屬常見。本章主要關注尋找神經網路上的一組參數 $\theta$,使得一個代價函數 $J(\theta)$ 顯著降低。這個代價函數通常包含兩部分:一部分是衡量模型在整個訓練集上的性能的指標(如經驗風險),另一部分是額外的正則化項(用於防止過擬合)。
用於深度模型訓練的優化算法與傳統的優化算法在幾個方面有所不同。
ERM 是指最小化模型在有限訓練數據集上的平均損失。最終目標不僅是最小化訓練誤差,更重要的是希望模型在未見數據上表現良好(低真實風險),因此防止過擬合是重要考量。
當真正關心的損失函數(如0-1損失)難以優化時,轉而優化一個更容易處理的代理損失函數(如負對數似然)。
監控模型在驗證集上的性能,當驗證集損失上升時停止訓練,以犧牲訓練集完美擬合換取更好泛化能力。
機器學習算法目標函數常分解為樣本求和,優化時僅用部分數據估計梯度。
影響梯度估計方差、計算效率、內存消耗和硬體性能偏好。
優化神經網路是極其困難的非凸優化任務。
Hessian 矩陣條件數過大,導致梯度下降在陡峭方向震盪(需小學習率),平坦方向進展緩慢,整體收斂極慢。
非凸函數可能存在多個局部極小值,算法可能陷入代價較高的局部解。但深度網路中,多數局部極小值代價接近全局最小。模型不可辨識性會導致等價局部極小值。
高維非凸函數中,鞍點(梯度為零但非極值,Hessian 不定)比局部極小值更常見。鞍點附近梯度極小,算法易停滯。高原是梯度幾乎為零的廣闊平坦區。
機器學習中應用最多的優化算法。關鍵參數是學習率 $\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$ 很重要。
旨在加速學習,處理高曲率、小而一致梯度或噪聲梯度。引入速度向量 $v$ 積累過去梯度的指數加權移動平均。
更新規則: $v \leftarrow \alpha v - \epsilon \nabla_\theta J(\theta)$, $\theta \leftarrow \theta + v$。$\alpha \in [0,1)$ 控制衰減。解決 Hessian 病態和梯度方差問題。
標準動量的變種,梯度在參數近似「下一步位置」 $(\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}$。
為每個參數獨立調整學習率,根據梯度特性自動調整步長。通常比手動調參的 SGD 更易用。
縮放每個參數反比於其所有梯度歷史平方值總和的平方根。利於稀疏特徵。缺點:學習率最終可能過小。
改進 AdaGrad,使用梯度平方的指數加權移動平均,避免學習率過早衰減。
結合動量(一階矩)和 RMSProp(二階矩)思想。通常是魯棒且表現良好的預設優化器。
選擇算法:尚無公認最佳算法。精心調整的 SGD(帶動量)有時也能達到很好性能。實驗比較是關鍵。
使用一階和二階導數(Hessian)。$\theta^* = \theta_0 - H^{-1} \nabla_\theta J(\theta_0)$。收斂快但計算 $H^{-1}$ 成本高。
迭代方法,避免直接計算 $H^{-1}$。
擬牛頓法,近似 $H^{-1}$。L-BFGS 是內存受限版。
一種改善優化和泛化能力的網絡層設計。在仿射變換後、激活函數前,對每層輸入標準化(零均值,單位方差),再通過可學習參數 $\gamma, \beta$ 進行仿射變換。
計算: $\hat{H} = (H - \mu) / \sigma$; $BN(H) = \gamma\hat{H} + \beta$。$\mu, \sigma^2$ 在小批量上計算。
測試時使用整個訓練集的均值和方差(或其移動平均)。
一次只優化一個(或一組)參數,保持其他參數固定。適用於對單個參數優化高效或有閉式解的情況。
對 SGD 訓練過程中的參數迭代序列進行平均,獲得可能更好的最終參數估計。減少噪聲影響,更穩定。
先用標註數據訓練模型解決相關輔助任務,學到的參數用作最終任務的初始值。如逐層監督預訓練,ImageNet 預訓練。
改進模型架構比改進優化算法更有效。如跳躍/殘差連接 (ResNet),允許訓練非常深的網絡,緩解梯度消失。
延拓法:從易解問題開始,逐漸變形到原始難題。課程學習:模仿人類學習,先展示容易樣本/簡單任務,逐步增難。有助加速收斂、改善泛化。
什麼是深度學習中最核心的優化問題?它為何如此具有挑戰性?
核心問題是神經網路的訓練。挑戰性在於參數多、數據集大,計算資源和時間需求龐大。
機器學習中的優化與純粹的數學優化有何主要區別?
1. 間接優化:機器學習優化經驗風險以期降低真實風險(泛化能力),純優化直接最小化目標函數。 2. 目標函數結構:機器學習目標函數可分解,支持小批量方法。
什麼是經驗風險最小化(ERM)?它在機器學習中的最終目標是什麼?
ERM 是最小化模型在訓練數據上的平均損失。最終目標是低訓練誤差的同時,也獲得低真實風險(良好泛化能力),需防止過擬合。
代理損失函數和提前終止策略各自的目的是什麼?
代理損失函數: 當真實損失難以優化時,使用易處理的代理(如交叉熵代替0-1損失)。提前終止: 監控驗證集性能,防止過擬合,平衡訓練誤差與泛化能力。
神經網路非凸優化中的病態、局部極小值和鞍點分別帶來什麼挑戰?
病態: Hessian條件數大,收斂慢。局部極小值: 可能陷入次優解。鞍點: 高維中比局部極小值更普遍,梯度小易停滯,更具挑戰性。
動量和 Nesterov 動量方法的核心思想?如何改善 SGD 收斂性?
動量: 積累過去梯度的指數加權移動平均,加速一致方向,抑制震盪。Nesterov 動量: 在「預測的」未來位置計算梯度,「向前看」機制修正更及時。
為何神經網路參數初始化非常重要?不良初始化會帶來哪些問題?
重要性:1. 打破對稱性。 2. 影響優化過程。 3. 控制梯度流動。不良初始化導致優化困難、梯度消失/爆炸。
自適應學習率算法(如 AdaGrad, RMSProp, Adam)是什麼?與標準 SGD 的主要區別和優勢?
為每個參數獨立調整學習率。優勢:自動調整步長,通常更易用。AdaGrad:適於稀疏數據,學習率單調降。RMSProp:用梯度平方的指數移動平均,防學習率過早衰減。Adam:結合動量和RMSProp,魯棒性好。
請用 2-3 句話簡短回答:
請針對以下任五題進行詳細闡述: