日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?

發布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,歡迎來到專欄《調參實戰》,雖然當前自動化調參研究越來越火,但那其實只是換了一些參數來調,對參數的理解和調試在機器學習相關任務中是最基本的素質,在這個專欄中我們會帶領大家一步一步理解和學習調參。

本次主要講述圖像分類項目中的優化方法的調參實踐,這次與上一期學習率調參的內容是一脈相承的

作者&編輯 | 言有三

本文資源與結果展示

本文篇幅:3100字

背景要求:會使用Python和任一深度學習開源框架

附帶資料:Caffe代碼和數據集一份

同步平臺:有三AI知識星球(一周內)

1 項目背景與準備工作

上一期我們基于圖像分類任務,對學習率的幾種常見的方式進行了調參學習,這一期我們來實驗不同的優化方法的原理差異以及它們的性能比較。

本次項目開發需要以下環境:

(1) Linux系統,推薦ubuntu16.04或者ubuntu18.04。使用windows系統也可以完成,但是使用Linux效率更高。

(2) 最好擁有一塊顯存不低于6G的GPU顯卡,如果沒有使用CPU進行訓練速度較慢。

(3)?安裝好的Caffe開源框架。

本次的數據集和基準模型與上一期內容相同,大家如果不熟悉就去查看上一期的內容,鏈接如下:

【調參實戰】如何開始你的第一個深度學習調參任務?不妨從圖像分類中的學習率入手。

2 優化方法原理與實踐

下面我們對各類優化算法的基本原理進行講解,并進行實踐。由于本文目標不是為了從零開始講清楚優化算法,所以有些細節會略過。

2.1 標準梯度下降算法

梯度下降算法,即通過梯度的反方向來進行優化,批量梯度下降(Batch gradient descent)用公式表述如下:

寫成偽代碼如下:

for i in range(nb_epochs):
? ? params_grad = evaluate_gradient(loss_function, data, params)
? ? params = params - learning_rate * params_grad

上面的梯度下降算法公式用到了數據集所有的數據,這在解決實際問題時通常是不可能,比如ImageNet1000有100G以上的圖像,內存裝不下,速度也很慢。

我們需要在線能夠實時計算,比如一次取一個樣本,于是就有了隨機梯度下降(Stochastic gradient descent),簡稱SGD,公式如下:

寫成偽代碼如下:

for i in range(nb_epochs):
? ? ?np.random.shuffle(data)
? ? ?for example in data:
? ? ? ? ? params_grad = evaluate_gradient(loss_function example , params)
? ? ? ? ? params = params - learning_rate * params_grad

SGD方法缺點很明顯,梯度震蕩,所以就有了后來大家常用的小批量梯度下降算法(Mini-batch gradient descent),公式如下:

偽代碼如下:

for i in range(nb_epochs):
? ? np.random.shuffle(data)
? ? for batch in get_batches(data, batch_size=50):
? ? ? ? params_grad = evaluate_gradient(loss_function, batch, params)
? ? ? ? params = params - learning_rate * params_grad

平時當我們說SGD算法,實際上指的就是mini-batch gradient descent算法。

SGD算法的主要問題是學習率大小和策略需要手動選擇,優化迭代比較慢,因此有很多方法對其進行改進。

2.2 動量法(momentum)

梯度下降算法是按照梯度的反方向進行參數更新,但是剛開始的時候梯度不穩定,方向改變是很正常的,梯度有時候一下正一下反,導致做了很多無用的迭代。而動量法做的很簡單,相信之前的梯度。如果梯度方向不變,就越發更新的快,反之減弱當前梯度。

公式表達如下:

與SGD的對比如下:

動量法至今仍然是我覺得最為有用的學習率改進算法。那它和SGD的對比究竟如何呢?下面我們來實驗不同的參數,需要在solver.prototxt中修改配置,完整的solver如下,需要修改的地方為標粗橙色部分,后面的實驗同理

net: "allconv6.prototxt"

test_interval:100

test_iter:15

base_lr: 0.01

lr_policy: "step"

stepsize: 10000

gamma: 0.1

momentum: 0.9 ##動量項配置

weight_decay: 0.005

display: 100

max_iter: 100000

snapshot: 10000

snapshot_prefix: "models/allconv6_"

solver_mode: GPU

下圖是實驗結果對比:

我們可以發現,m=0.9時確實取得了最好的效果,m=0時效果最差,對于大部分的任務,我們在配置這個參數時也不需要修改,就采用m=0.9。

總結

以上是生活随笔為你收集整理的【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。