一站式入門深度學習調參,深度學習模型面臨的挑戰與24種優化策略詳解



1. 深度學習模型面臨的挑戰

1.1 神經網絡學習映射功能

深度學習神經網絡學習映射功能。開發模型需要歷史數據作爲訓練數據。該數據由觀察值或樣本組成,輸入元素描述了條件,輸出元素捕獲了樣本特徵。通常將輸出爲數量的問題描述爲迴歸預測建模問題;而將輸出作爲標籤的問題通常描述爲分類預測建模問題。

神經網絡模型使用這些樣本來學習如何將特定的輸入變量集映射到輸出變量。它必須以這種映射規則對訓練數據集進行表示,同時也可以對新的數據進行很好的表示。這種在特定樣本和新樣本上良好的能力稱爲模型的泛化能力。

多層感知器實際上是將輸入值映射到輸出值的數學函數。可以將輸入變量和輸出變量之間的關係描述爲一個複雜的數學函數。對於給定的模型,存在一個真實的映射函數可以將輸入變量最佳地映射到輸出變量,並學習了實現最佳函數逼近的參數值。因此,可以將神經網絡解決的更廣泛的問題描述爲函數逼近(function approximation)。它們從給定訓練數據集中,學習近似且未知的基礎映射函數。在給定的特定網絡結構的前提下,它們通過學習權重和模型參數來做到這一點。


1.2 學習網絡權重很困難

通常,很難找到神經網絡的參數。對於許多更簡單的機器學習算法,可以根據訓練數據集計算最佳模型。例如,可以使用線性代數來計算線性迴歸模型的特定係數,以最大程度地減小平方誤差的訓練數據集。同樣,當爲非線性算法(例如邏輯迴歸或支持向量機)找到最佳的模型參數集時,可以使用有收斂保證的優化算法。爲許多機器學習算法尋找參數涉及解決凸優化問題(convex optimization problem):形狀像碗一樣的誤差面,只有一個最佳解。

深度學習神經網絡不是這種情況。既不能直接計算模型的最佳權重集合,也無法獲得全局收斂性保證來找到最佳權重集合。應用於非凸損失函數的隨機梯度下降沒有收斂保證,並且對初始參數的值敏感。

在神經網絡中使用非線性激活函數意味着,爲了找到模型參數而必須解決的優化問題是非凸的(Non-Convex)。解決此優化問題頗具挑戰性,尤其是因爲誤差麪包含許多局部最優解(local optima),平坦點(flat spots)和斷點(cliffs)。必須使用迭代過程來求解模型的非凸誤差面。


1.3 求解非凸誤差面

在訓練數據集上評估具有一組特定權重的模型,並將所有訓練數據集的平均誤差視爲模型的誤差。更改模型權重會更改模型誤差,通過最小化誤差來找到最佳的權重組合。這是一個搜索或優化過程,以這種方式運行的優化算法稱爲梯度優化算法,最常用於求解誤差表面的算法稱爲隨機梯度下降法(SGD)。可以使用爲非凸優化問題設計的其他全局優化算法,例如遺傳算法(genetic algorithm),但是SGD效率更高,因爲它使用反向傳播算法來更新模型權重。反向傳播是指從微積分中計算出特定模型參數的模型誤差的導數(例如,斜率或梯度)的方法,使得模型權重沿梯度下降的方向更新。


1.4 學習算法的構成

使用反向傳播的隨機梯度下降訓練深度學習神經網絡模型涉及選擇許多組件和超參數。

1.4.1 損失函數

首先,必須爲神經網絡選擇一個誤差函數(error function),通常稱爲目標函數(objective/target function),成本函數(cost function)或損失函數(loss function)。通常,選擇一個特定的概率推理框架,稱爲最大似然(Maximum Likelihood)。在這種框架下,通常選擇的損失函數是分類問題的交叉熵(cross entropy)和迴歸問題的均方誤差(mean squared error)

損失函數用於根據訓練數據集中的樣本對一組特定的權重來評估模型的性能。


1.4.2 權重初始化

搜索或優化過程需要一個起點來開始更新模型。起點由初始模型參數或權重定義。因爲誤差表面是非凸的,所以優化算法對初始起點很敏感。這樣,儘管可以使用不同的技術來選擇這些值的比例和分佈,但是選擇小的隨機值作爲初始模型權重。這些技術稱爲權重初始化(Weight Initialization)

權重初始化是在訓練開始時,將初始小的隨機值分配給模型權重的過程。


1.4.3 批次大小

更新模型時,必須使用訓練數據集中的許多示例來計算模型誤差,通常簡稱爲損失(loss)。可以使用訓練數據集中的所有樣本,這可能適用於較小的數據集。或者使用單個樣本,該方法適用於流式傳輸(streamed)樣本或數據經常更改的問題。常用方法爲指定訓練數據集中的樣本數量,用於估計誤差梯度,實例數量的選擇稱爲批次大小(Batch Size)。

批次大小是在更新模型參數之前用於估計誤差梯度的樣本數。


1.4.4 學習率

估計出誤差梯度後,就可以計算出誤差的導數,並將其用於更新每個參數。訓練數據集中和誤差梯度的估計值中可能存在統計噪聲。同樣,模型的深度(層數)和模型參數分別更新意味着很難準確地計算出改變每個模型參數的程度,以使整個模型在誤差梯度沿下降最快的方向移動。實際上,每次迭代都會執行一小部分權重更新,控制更新模型權重量的超參數稱爲學習率(Learning Rate),進而控制模型在訓練數據集上學習的速度。

學習率是每個訓練週期內,學習算法更新每個模型參數的數量。


1.4.5 訓練週期

訓練過程必須重複很多次,直到找出一組良好或足夠好的模型參數爲止。訓練週期(epoch)表示在訓練過程終止之前,讓模型遍歷訓練數據集的次數。


2. 深度學習模型優化策略

2.1 更好的學習技術

2.1.1 批次大小(Batch Size)

使用不同的的批次大小和不同的優化方法進行試驗。
可以參考:【如何設置合適的Batch Size提高模型訓練的穩定性

2.1.2 學習率(Learning Rate)

對比分析不同學習率對建模問題的影響,以及自適應學習率方法(例如Adam)是否合適。
可以參考:【如何配置神經網絡的學習率

2.1.3 損失函數(Loss Function)

針對不同的問題選擇不同的損失函數。
可以參考:【如何爲神經網絡選擇損失函數

2.1.4 數據縮放(Data Scaling)

數據縮放包括歸一化和標準化數據。
可以參考:【如何對數據進行標準化(standardization)和歸一化(normalization)

2.1.5 批歸一化(Batch Normalization)

批歸一化層的設置。
可以參考:【如何使用Batch Normalization提高模型性能

2.1.6 梯度消失(Gradient Vanishing)

梯度消失(梯度彌散)是指訓練深度多層網絡時,靠近輸入層的各層的權重不更新;避免梯度消失可以使用ReLU激活函數解決。
可以參考:【ReLU激活函數使用指南

2.1.7 梯度爆炸(Gradient Exploding)

梯度爆炸是指較大的權重更新會導致數值上溢或下溢,從而使網絡權重爲NaN或Inf值;可以使用梯度裁剪解決。
可以參考:【如何使用梯度裁剪(Gradient Clipping)避免梯度爆炸

2.1.8 貪婪逐層預訓練(Greedy Layer-Wise Pretraining)

可以參考:【如何使用貪婪逐層預訓練分析不同層數對深度神經網絡的影響

2.1.9 遷移學習(Transfer Learning)

可以參考:【如何通過遷移學習(Transfer Learning)提高深度神經網絡的性能

2.1.10 分類權重(Class Weight)

對於不平衡分類問題,可以設置分類權重提高模型性能。
可以參考:【不平衡分類問題中分類權重計算與設置


2.2 更好的泛化技術

更好的泛化技術是指更改神經網絡模型或學習算法以減少模型過擬合,改善模型在驗證或測試數據集上的性能的技術。

2.2.1 權重正則化(Weight Regularization)

損失函數的變化與模型權重的範數大小成比例地懲罰模型,鼓勵使用較小的權重,進而降低模型的複雜度。
可以參考:【如何使用L1和L2正則化降低過擬合風險

2.2.2 權重約束(Weight Constraint)

權重的向量範數超過閾值時,更新模型以重新縮放權重。
可以參考:【如何通過權重約束減少過擬合

2.2.3 激活正則化(Activity Regularization)

損失函數的變化使模型與層激活的範數大小成比例地受到懲罰,從而鼓勵使用更小或更稀疏的內部表示形式。
可以參考:【如何通過激活正則化減少泛化誤差

2.2.4 添加噪聲輸入(Input Noise)

在輸入層或隱藏層之間添加統計變化或噪聲,以減少模型對特定輸入值的依賴,降低過擬合風險。
可以參考:【如何通過添加高斯噪聲降低過擬合風險

2.2.5 Dropout 正則化 (Dropout Regularization)

Dropout通過隨即刪除隱藏層神經元的連接,達到稀疏神經網絡的目的。
可以參考:【如何使用Dropout正則化降低過擬合風險

2.2.6 設置及時停止回調(Early Stopping)

在訓練過程中監視驗證數據集上的指標(比如驗證損失、驗證準確率),當監視的驗證集上的指標開始下降時,停止訓練,避免過擬合。
可以參考:【如何通過設置及時停止避免過擬合


2.3 更好的預測技術

更好的預測技術是對模型訓練過程的補充,以減少最終模型的預期性能差異。

最終模型的性能差異可以通過增加偏差來減小。將偏差引入最終模型的最常見方法是組合來自多個模型的預測,這稱爲集成學習。集成學習不僅可以減少最終模型的性能差異,而且還可以帶來更好的預測性能。

2.3.1 重採樣集成(Resampling Ensemble)

集成模型中的各子模型通過數據集的一個子集訓練得到。

2.3.2 模型平均集成(Model Averaging Ensemble)

改變集成子模型的最簡單方法可能是從訓練數據集上多次運行學習算法收集子模型。
可以參考:【如何通過組合多個神經網絡提高模型性能

2.3.3 水平集成(Horizontal Ensemble)

在一次訓練即將結束時,從連續的訓練週期集成各子模型。

2.3.4 Snapshot 集成(Snapshot Ensemble)

使用週期性學習率進行訓練,並在每個學習率週期的最小值處集成各個子模型。

2.3.5 加權平均集成 (Weighted Average Ensemble/Blending)

使用表示各個模型中信任度的學習係數對每個子模型對集成模型預測的貢獻進行加權。

2.3.6 堆疊泛化(Stacked Generalization/Stacking)

訓練一個新模型,以學習如何最佳地結合各個子模型的預測。

2.3.7 平均模型權重集成(Average Model Weight Ensemble)

來自多個神經網絡模型的權重被平均到用於做出預測的單個模型中。


2.4 網格搜索超參數

可以參考:【如何使用網格搜索尋找最佳超參數配置


參考:
https://machinelearningmastery.com/a-gentle-introduction-to-the-challenge-of-training-deep-learning-neural-network-models/
https://machinelearningmastery.com/framework-for-better-deep-learning/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章