2. 深度學習模型優化策略
2.2 更好的泛化技術
2.3 更好的**技術
2.4 網格搜尋超引數
深度學習神經網路學習對映功能。開發模型需要歷史資料作為訓練資料。該資料由觀察值或樣本組成,輸入元素描述了條件,輸出元素捕獲了樣本特徵。通常將輸出為數量的問題描述為回歸**建模問題;而將輸出作為標籤的問題通常描述為分類**建模問題。
神經網路模型使用這些樣本來學習如何將特定的輸入變數集對映到輸出變數。它必須以這種對映規則對訓練資料集進行表示,同時也可以對新的資料進行很好的表示。這種在特定樣本和新樣本上良好的能力稱為模型的泛化能力。
通常,很難找到神經網路的引數。對於許多更簡單的機器學習演算法,可以根據訓練資料集計算最佳模型。例如,可以使用線性代數來計算線性回歸模型的特定係數,以最大程度地減小平方誤差的訓練資料集。同樣,當為非線性演算法(例如邏輯回歸或支援向量機)找到最佳的模型引數集時,可以使用有收斂保證的優化演算法。為許多機器學習演算法尋找引數涉及解決凸優化問題(convex optimization problem):形狀像碗一樣的誤差面,只有乙個最佳解。
深度學習神經網路不是這種情況。既不能直接計算模型的最佳權重集合,也無法獲得全域性收斂性保證來找到最佳權重集合。應用於非凸損失函式的隨機梯度下降沒有收斂保證,並且對初始引數的值敏感。
在神經網路中使用非線性啟用函式意味著,為了找到模型引數而必須解決的優化問題是非凸的(non-convex)。解決此優化問題頗具挑戰性,尤其是因為誤差面包含許多區域性最優解(local optima),平坦點(flat spots)和斷點(cliffs)。必須使用迭代過程來求解模型的非凸誤差面。
在訓練資料集上評估具有一組特定權重的模型,並將所有訓練資料集的平均誤差視為模型的誤差。更改模型權重會更改模型誤差,通過最小化誤差來找到最佳的權重組合。這是乙個搜尋或優化過程,以這種方式執行的優化演算法稱為梯度優化演算法,最常用於求解誤差表面的演算法稱為隨機梯度下降法(sgd)。可以使用為非凸優化問題設計的其他全域性優化演算法,例如遺傳演算法(genetic algorithm),但是sgd效率更高,因為它使用反向傳播演算法來更新模型權重。反向傳播是指從微積分中計算出特定模型引數的模型誤差的導數(例如,斜率或梯度)的方法,使得模型權重沿梯度下降的方向更新。
使用反向傳播的隨機梯度下降訓練深度學習神經網路模型涉及選擇許多元件和超引數。
首先,必須為神經網路選擇乙個誤差函式(error function),通常稱為目標函式(objective/target function),成本函式(cost function)或損失函式(loss function)。通常,選擇乙個特定的概率推理框架,稱為最大似然(maximum likelihood)。在這種框架下,通常選擇的損失函式是分類問題的交叉熵(cross entropy)和回歸問題的均方誤差(mean squared error)。
損失函式用於根據訓練資料集中的樣本對一組特定的權重來評估模型的效能。
搜尋或優化過程需要乙個起點來開始更新模型。起點由初始模型引數或權重定義。因為誤差表面是非凸的,所以優化演算法對初始起點很敏感。這樣,儘管可以使用不同的技術來選擇這些值的比例和分布,但是選擇小的隨機值作為初始模型權重。這些技術稱為權重初始化(weight initialization)。
權重初始化是在訓練開始時,將初始小的隨機值分配給模型權重的過程。
更新模型時,必須使用訓練資料集中的許多示例來計算模型誤差,通常簡稱為損失(loss)。可以使用訓練資料集中的所有樣本,這可能適用於較小的資料集。或者使用單個樣本,該方法適用於流式傳輸(streamed)樣本或資料經常更改的問題。常用方法為指定訓練資料集中的樣本數量,用於估計誤差梯度,例項數量的選擇稱為批次大小(batch size)。
批次大小是在更新模型引數之前用於估計誤差梯度的樣本數。
估計出誤差梯度後,就可以計算出誤差的導數,並將其用於更新每個引數。訓練資料集中和誤差梯度的估計值中可能存在統計雜訊。同樣,模型的深度(層數)和模型引數分別更新意味著很難準確地計算出改變每個模型引數的程度,以使整個模型在誤差梯度沿下降最快的方向移動。實際上,每次迭代都會執行一小部分權重更新,控制更新模型權重量的超引數稱為學習率(learning rate),進而控制模型在訓練資料集上學習的速度。
學習率是每個訓練週期內,學習演算法更新每個模型引數的數量。
訓練過程必須重複很多次,直到找出一組良好或足夠好的模型引數為止。訓練週期(epoch)表示在訓練過程終止之前,讓模型遍歷訓練資料集的次數。
使用不同的的批次大小和不同的優化方法進行試驗。
可以參考:【如何設定合適的batch size提高模型訓練的穩定性】
對比分析不同學習率對建模問題的影響,以及自適應學習率方法(例如adam)是否合適。
可以參考:【如何配置神經網路的學習率】
針對不同的問題選擇不同的損失函式。
可以參考:【如何為神經網路選擇損失函式】
資料縮放包括歸一化和標準化資料。
可以參考:【如何對資料進行標準化(standardization)和歸一化(normalization)】
批歸一化層的設定。
可以參考:【如何使用batch normalization提高模型效能】
梯度消失(梯度瀰散)是指訓練深度多層網路時,靠近輸入層的各層的權重不更新;避免梯度消失可以使用relu啟用函式解決。
可以參考:【relu啟用函式使用指南】
梯度**是指較大的權重更新會導致數值上溢或下溢,從而使網路權重為nan或inf值;可以使用梯度裁剪解決。
可以參考:【如何使用梯度裁剪(gradient clipping)避免梯度**】
可以參考:【如何使用貪婪逐層預訓練分析不同層數對深度神經網路的影響】
可以參考:【如何通過遷移學習(transfer learning)提高深度神經網路的效能】
對於不平衡分類問題,可以設定分類權重提高模型效能。
可以參考:【不平衡分類問題中分類權重計算與設定】
更好的泛化技術是指更改神經網路模型或學習演算法以減少模型過擬合,改善模型在驗證或測試資料集上的效能的技術。
損失函式的變化與模型權重的範數大小成比例地懲罰模型,鼓勵使用較小的權重,進而降低模型的複雜度。
可以參考:【如何使用l1和l2正則化降低過擬合風險】
權重的向量範數超過閾值時,更新模型以重新縮放權重。
可以參考:【如何通過權重約束減少過擬合】
損失函式的變化使模型與層啟用的範數大小成比例地受到懲罰,從而鼓勵使用更小或更稀疏的內部表示形式。
可以參考:【如何通過啟用正則化減少泛化誤差】
在輸入層或隱藏層之間新增統計變化或雜訊,以減少模型對特定輸入值的依賴,降低過擬合風險。
可以參考:【如何通過新增高斯雜訊降低過擬合風險】
dropout通過隨即刪除隱藏層神經元的連線,達到稀疏神經網路的目的。
可以參考:【如何使用dropout正則化降低過擬合風險】
在訓練過程中監視驗證資料集上的指標(比如驗證損失、驗證準確率),當監視的驗證集上的指標開始下降時,停止訓練,避免過擬合。
可以參考:【如何通過設定及時停止避免過擬合】
更好的**技術是對模型訓練過程的補充,以減少最終模型的預期效能差異。
最終模型的效能差異可以通過增加偏差來減小。將偏差引入最終模型的最常見方法是組合來自多個模型的**,這稱為整合學習。整合學習不僅可以減少最終模型的效能差異,而且還可以帶來更好的**效能。
整合模型中的各子模型通過資料集的乙個子集訓練得到。
改變整合子模型的最簡單方法可能是從訓練資料集上多次執行學習演算法收集子模型。
可以參考:【如何通過組合多個神經網路提高模型效能】
在一次訓練即將結束時,從連續的訓練週期整合各子模型。
使用週期性學習率進行訓練,並在每個學習率週期的最小值處整合各個子模型。
使用表示各個模型中信任度的學習係數對每個子模型對整合模型**的貢獻進行加權。
訓練乙個新模型,以學習如何最佳地結合各個子模型的**。
來自多個神經網路模型的權重被平均到用於做出**的單個模型中。
可以參考:【如何使用網格搜尋尋找最佳超引數配置】
參考:
深度學習調參策略(二)
超引數 hyper parameter 是困擾神經網路訓練的問題之一,因為這些引數不可通過常規方法學習獲得。神經網路經典五大超引數 學習率 leraning rate 權值初始化 weight initialization 網路層數 layers 單層神經元數 units 正則懲罰項 regular...
深度模型調參知識總結
深度模型調參知識總結 先保證資料質量再去調參 什麼是高質量的資料?高質量資料集應該包括以下特徵 怎樣獲取高質量的資料?二 調參原則 首先分析自己模型的弱點,而不是隨意地改進,我們需要根據視覺化模型誤差 表現極差的場景 以及效能引數來確定模型問題。隨意做改進反而適得其反,會成比例的增加訓練成本,而回報...
深度學習調參技巧
模型引數的一般設定 epoch迭代幾十到幾百次。mini batch size從幾十到幾百,為了更好的利用硬體加速,通常取8的倍數,例如128,256。learning rate取0.1 資料集越大,模型越複雜,應取值越小 weight decay取0.005,momentum取0.9。dropou...