書名: 機器學習系統:設計和實現作者名: 麥絡 董豪編著本章字數: 766字更新時間: 2024-12-27 20:30:18
2.2.4 損失函數和優化器
有了神經網絡組件構建的模型還需要定義損失函數計算訓練過程中輸出和真實值的誤差。均方誤差(Mean Squared Error,MSE)是線性回歸中常用的,是計算估算值與真實值差值的平方和的平均數。平均絕對誤差(Mean Absolute Error,MAE)是計算估算值與真實值差值的絕對值求和再求平均。交叉熵(Cross Entropy,CE)是分類問題中常用的,衡量已知數據分布情況下,計算輸出分布和已知分布的差值。
有了損失函數,就可以通過損失值利用優化器對參數進行訓練更新。對于優化的目標函數f(x);先求解其梯度?f(x),然后將訓練參數W沿著梯度的負方向更新,更新公式為Wt=Wt?1?α?(Wt?1),其中α是學習率,W是訓練參數,?(Wt?1)是方向。神經網絡的優化器有兩類:一類是學習率不受梯度影響的隨機梯度下降(Stochastic Gradient Descent,SGD)及SGD的一些改進方法,如帶有Momentum的SGD;另一類是自適應學習率,如AdaGrad、RMSProp、Adam等。
SGD的更新是對每個樣本進行梯度下降,因此計算速度很快,但是單樣本更新頻繁,會造成震蕩;為了解決震蕩問題,提出了帶有Momentum的SGD,該方法的參數更新不僅僅由梯度決定,也和累計的梯度下降方向有關,使得增加更新梯度下降方向不變的維度,減少更新梯度下降方向改變的維度,從而速度更快,震蕩也減少了。
自適應學習率AdaGrad是通過以往的梯度自適應更新學習率,不同的參數Wi具有不同的學習率。AdaGrad對頻繁變化的參數以更小的學習率更新,而稀疏的參數以更大的學習率更新。因此對稀疏數據的表現比較好。Adadelta是對AdaGrad的改進,解決了AdaGrad優化過程中學習率α單調減少問題;Adadelta不對過去的梯度平方進行累加,用指數平均的方法計算二階動量,避免了二階動量持續累積,導致訓練提前結束。Adam可以理解為Adadelta和Momentum的結合,對一階二階動量均采用指數平均的方法計算。
MindSpore提供了豐富的API讓用戶導入損失函數和優化器。代碼2.5計算了輸入和真實值之間的softmax交叉熵損失,導入Momentum優化器。
代碼2.5 定義損失函數和優化器

- Unreal Engine Physics Essentials
- SOA實踐
- C# Programming Cookbook
- NativeScript for Angular Mobile Development
- Microsoft Dynamics GP 2013 Reporting, Second Edition
- Mastering KnockoutJS
- Creating Stunning Dashboards with QlikView
- Android Wear Projects
- Learning PHP 7
- 小型編譯器設計實踐
- Learning Docker Networking
- R的極客理想:量化投資篇
- 交互設計師成長手冊:從零開始學交互
- Microsoft XNA 4.0 Game Development Cookbook
- C++ Data Structures and Algorithm Design Principles