2學習率調整 深度學習實驗總結 tricks

2021-10-14 21:56:09 字數 3467 閱讀 9383

深度模型是黑盒,而且本次並沒有嘗試超深和超寬的網路,所以結論只能提供乙個先驗,並不是標準答案!同時不同的任務也可能導致不同,比如分割,所以必須具體問題具體分析!
只收藏不點贊,知乎以後就不會給你推送類似的文章了,***(瘋狂暗示點讚
前陣子參加了幾個cv的比賽,發現了這樣的問題:雖然了解的理論知識不算特別少,跑了的實驗和*******也還可以,但是實際搞起來總會出現一些奇怪的問題,然後解決起來也是有點難受,於是就打算盡可能地把遇到的情況模擬復現出現,嘗試解決並解釋(但是解釋原因只能自圓其說,畢竟黑盒實驗),以免之後遇到類似的情況沒有解決的思路。

這個**周,乖乖地在研究所做了幾天實驗,主要圍繞著這下幾個關鍵字:

學習率;動量;學習率調整策略;l2正則;優化器
(所有的結論都有實驗支撐,但是有一部分實驗資料給我搞沒了....555)

在這些實驗以及一些資料(主要是吳恩達的《machine learning yearning》),總結了以下幾條基本準則:

模型效能的影響因素:

2. 模型過擬合的影響因素:

稍微解釋一下:模型的表達能力對模型是否過擬合的確有起到一定的影響,但是選擇合適的正則化強度可以有效的減緩這個影響!所以我沒有吧模型的表達能力列入為過擬合的影響因素。而且吳恩達的書中(《machine learning yearning》)也表達了類似的想法(很開心,和大佬有一樣的想法)。

resnet-18

cifar-10

學習率動量

學習率和動量我會放在一起說,因為我發現這兩個東西就是天生的couple。了解深度學習的小夥伴應該知道,學習率過大和過小都會存在問題:

學習率過大會導致模型無法進入區域性最優甚至導致模型**(不能收斂)

學習率過小會導致模型訓練慢,進而浪費時間

那有沒有辦法讓模型訓練得又快又能收斂呢?有!

我經過四個實驗得出以下結論:

使用較大的學習率+大的動量可以加快模型的訓練且快速收斂

實驗設計如下(我忘記儲存實驗圖了,對不起!):

實驗一:

小學習率+小動量

結果:模型訓練速度慢,雖然收斂但是收斂速度很慢,驗證集上效能很穩定

實驗二:

小學習率+大動量

結果:模型訓練速度慢,雖然收斂但是收斂速度很慢,驗證集上效能很穩定

實驗三:

大學習率+小動量

結果:模型訓練速度快,雖然很難收斂而且驗證集上效能波動很大,說明了模型很不穩定

實驗四:

大學習率+大動量

結果:模型訓練速度快,同時收斂得也很快,而且驗證集上效能很穩定

我覺得這個原因,可以從兩個角度來解釋,乙個是向量加法的特殊性;另乙個是從整合模型的角度來解釋。第乙個角度我這裡就不說了,因為我不想畫圖。。,我從第二個角度來說:

大的學習率意味著不穩定,但是因為這個學習率也是可以讓模型往正確的優化方向上走,所以你可以理解大的學習率為乙個弱的機器學習模型;當你採用大的動量的時候,意味著本次學習率對最終模型優化起的作用要小,也就是說採用大動量 -> 單次損失函式的佔比低,那就相當於我這個模型的優化是由本次+過去很多次學習率(弱機器學習模型)計算出來的綜合結果,那是不是就是乙個整合模型呢~so,效果就比較好了。

隨便提一嘴,當模型很不穩定的時候,如果某個瞬間出現較好的結果,比如準確率98%,那也不能說明這個模型在這個瞬間是好模型,因為這個時候你的模型很有可能是對驗證集過擬合了!不信你可以劃分出乙個測試集試試【我之前參加腦pet識別比賽的時候就在地方摔過】。

2.學習率調整策略

以前我是幾乎不用學習率調整策略的,因為我覺得很扯,效果不大,但是前陣子和一小哥打華錄杯的時候看他用了余弦退火有不錯的效果,就決定也試試,結論是:真香!

對不起的是,這裡我也忘記儲存實驗圖了,對不起!

我嘗試了3種學習率調整策略,分別為:1.reducelronplateau;2. 余弦退火;3. steplr

結論:

3. l2正則

正則主要分兩種,一種是l1,一種是l2,因為pytorch自帶l2,所以我就只用了l2(嘻嘻),直接上結論:

4. 優化器

優化器部分我就存圖了!

其實這裡不單單測試了優化器,應該是優化器+學習率策略+momentum

其實我想做的事情就是找到乙個最優解可以作為我的先驗知識(害,人話就是:就是我想知道哪種搭配比較好,以後就先試試這種搭配)

我做了幾組實驗:

結論(圖3):

第二組:

先解釋一下reducelronplateau的兩種模式:min和max

當模型為min的時候,如果指標a在一段時間內沒有減小的話,則學習率衰減。

當模型為max的時候,如果指標a在一段時間內沒有增大的話,則學習率衰減。

reducelronplateau我選擇mode為min模式的時候,指標的是acc,很有意思的是,其收斂速度非常快(比mode為max更快),我猜測原因應該是:

當acc有所上公升的時候,說明這個優化方向是正確的,這個時候優化的速度應該放緩!但是在這個實驗中,其最優解比mode為max模式差(min模式下的最優解為0.916,max為0.935)。 原因應該有兩個:

1. 是因為lr的衰減速度過快,以至於後面學習率過低,訓練不動;(後來我做了實驗證明了就是這個原因!)

2. 因為一遇到可優化的地方就減少學習率,所以極有可能使得模型過早進入區域性最優點(但是我後來覺得這個原因站不住腳哈哈哈,因為就算使用其他優化器,同樣會存在陷入區域性最優的問題,所以這個點不重要,但是為了保留從實驗到筆記的思考過程,我還是不把這點刪掉了。)

對於原因1,我之後做了實驗進行驗證,實驗思路就是減小學習率衰減週期和衰減係數的值/設定最小學習率,保證後期學習率不會過小,最終的解決了最優解的問題。

結論(圖4):

第三組:

結論:

順便提一下:我也有嘗試模擬退火+adam,但是因為退火的幅度過大,所以效果更不好(我的鍋)。下次再試試正常幅度的退火。

心得:

深度學習 學習率

學習率 learning rate 控制模型的學習進度 學習率 大 學習率 小 學習速度快慢 使用時間點 剛開始訓練時 一定輪數過後 1.易損失值 2.易振盪。1.易過擬合 2.收斂速度慢。在訓練過程中,一般根據訓練輪數設定動態變化的學習率。note 如果是 遷移學習 由於模型已在原始資料上收斂,此...

2學習率調整 Day203 學習率的設定

目前深度學習使用的都是非常簡單的一階收斂演算法,梯度下降法,不管有多少自適應的優化演算法,本質上都是對梯度下降法的各種變形,所以,初始學習率對深層網路的收斂起著決定性的作用,下面就是梯度下降法的公式 就是學習率,如果學習率太小,會導致網路loss下降非常慢,如果學習率太大,那麼引數更新的幅度就非常大...

深度學習 超引數調整總結

1 學習率 學習率 learning rate或作lr 是指在優化演算法中更新網路權重的幅度大小。學習率可以是恆定的 逐漸降低的,基於動量的或者是自適應的。不同的優化演算法決定不同的學習率。當學習率過大則可能導致模型不收斂,損失loss不斷上下 學習率過小則導致模型收斂速度偏慢,需要更長的時間訓練。...