聊一聊學習率預熱linear warmup

來源鏈接:https://mp.weixin.qq.com/s?__biz=MzAxOTU5NTU4MQ==&mid=2247488715&idx=1&sn=2acedd3705b27e5b9e259485f2dd9653&chksm=9bc5fc99acb2758f82b638d03ace8993b5b7374c0162020032e61e144ed86dc5a72082078a91&scene=178&cur_album_id=1783545951672958984#rd

來源公衆號:ChallengeHub  

1什麼是warmup

warmup是針對學習率learning rate優化的一種策略,主要過程是,在預熱期間,學習率從0線性(也可非線性)增加到優化器中的初始預設lr,之後使其學習率從優化器中的初始lr線性降低到0。如下圖所示:

 

 

 2 Warmup的作用

由於剛開始訓練時,模型的權重(weights)是隨機初始化的,此時若選擇一個較大的學習率,可能帶來模型的不穩定(振盪),選擇Warmup預熱學習率的方式,可以使得開始訓練的幾個epoch或者一些step內學習率較小,在預熱的小學習率下,模型可以慢慢趨於穩定,等模型相對穩定後再選擇預先設置的學習率進行訓練,使得模型收斂速度變得更快,模型效果更佳。

3 爲什麼warmup有效

這個問題目前還沒有被充分證明,下面是來自知乎的回答解釋:

https://www.zhihu.com/question/338066667 從理論層面上可以解釋爲:

  • 有助於減緩模型在初始階段對mini-batch的提前過擬合現象,保持分佈的平穩
  • 有助於保持模型深層的穩定性

從訓練效果可以體現爲:

  • 一開始神經網絡輸出比較random,loss比較大,容易不收斂,因此用小點的學習率, 學一丟丟,慢慢漲上去。
  • 梯度偏離真正較優的方向可能性比較大,那就走短一點錯了還可以掰回來。

4 如何使用

  • 實例1:warm_up_ratio 設置預熱步數
from transformers import AdamW, get_linear_schedule_with_warmup

optimizer = AdamW(model.parameters(), lr=lr, eps=adam_epsilon)
len_dataset = 3821 # 可以根據pytorch中的len(Dataset)計算
epoch = 30
batch_size = 32
total_steps = (len_dataset // batch_size) * epoch if len_dataset % batch_size = 0 else (len_dataset // batch_size + 1) * epoch # 每一個epoch中有多少個step可以根據len(DataLoader)計算:total_steps = len(DataLoader) * epoch

warm_up_ratio = 0.1 # 定義要預熱的step
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = warm_up_ratio * total_steps, num_training_steps = total_steps)
......
optimizer.step()
scheduler.step()
optimizer.zero_grad()

  • 實例2:num_warmup_steps 設置預熱步數
# training steps 的數量: [number of batches] x [number of epochs].
total_steps = len(train_dataloader) * epochs
 
# 設計 learning rate scheduler
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = 50, 
                                            num_training_steps = total_steps)

5 經驗參數選擇
一般可取訓練steps的10%,參考BERT。這裏可以根據具體任務進行調整,主要需要通過warmup來使得學習率可以適應不同的訓練集
合,另外我們也可以通過訓練誤差觀察loss抖動的關鍵位置,找出合適的學習率

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