Learning Model : EarlyStopping介紹[轉錄]

Ryan Lu
AI反斗城
Published in
4 min readApr 1, 2019

EarlyStopping是什麼
EarlyStopping是Callbacks的一種,callbacks用於指定在每個epoch開始和結束的時候進行哪種特定操作。Callbacks中有一些設置好的接口,可以直接使用,如’acc’,’val_acc’,’loss’和’val_loss’等等。
EarlyStopping則是用於提前停止訓練的callbacks。具體地,可以達到當訓練集上的loss不在減小(即減小的程度小於某個閾值)的時候停止繼續訓練。

為什麼要用EarlyStopping
根本原因就是因為繼續訓練會導致測試集上的準確率下降。
那繼續訓練導致測試準確率下降的原因猜測可能是1.過擬合2.學習率過大導致不收斂3.使用正則項的時候,Loss的減少可能不是因為準確率增加導致的,而是因為權重大小的降低。

當然使用EarlyStopping也可以加快學習的速度,提高調參效率。

EarlyStopping的使用與技巧
一般是在model.fit函數中調用callbacks,fit函數中有一個參數為callbacks。注意這裡需要輸入的是list類型的數據,所以通常情況只用EarlyStopping的話也要是[EarlyStopping()]

EarlyStopping的參數有

monitor: 監控的數據接口,有’acc’,’val_acc’,’loss’,’val_loss’等等。正常情況下如果有驗證集,就用’val_acc’或者’val_loss’。但是因為筆者用的是5折交叉驗證,沒有單設驗證集,所以只能用’acc’了。
min_delta:增大或減小的閾值,只有大於這個部分才算作improvement。這個值的大小取決於monitor,也反映了你的容忍程度。例如筆者的monitor是’acc’,同時其變化範圍在70%-90%之間,所以對於小於0.01%的變化不關心。加上觀察到訓練過程中存在抖動的情況(即先下降後上升),所以適當增大容忍程度,最終設為0.003%。
patience:能夠容忍多少個epoch內都沒有improvement。這個設置其實是在抖動和真正的準確率下降之間做tradeoff。如果patience設的大,那麼最終得到的準確率要略低於模型可以達到的最高準確率。如果patience設的小,那麼模型很可能在前期抖動,還在全圖搜索的階段就停止了,準確率一般很差。patience的大小和learning rate直接相關。在learning rate設定的情況下,前期先訓練幾次觀察抖動的epoch number,比其稍大些設置patience。在learning rate變化的情況下,建議要略小於最大的抖動epoch number。筆者在引入EarlyStopping之前就已經得到可以接受的結果了,EarlyStopping算是錦上添花,所以patience設的比較高,設為抖動epoch number的最大值。
mode: 就’auto’, ‘min’, ‘,max’三個可能。如果知道是要上升還是下降,建議設置一下。筆者的monitor是’acc’,所以mode=’max’。
min_delta和patience都和“避免模型停止在抖動過程中”有關係,所以調節的時候需要互相協調。通常情況下,min_delta降低,那麼patience可以適當減少;min_delta增加,那麼patience需要適當延長;反之亦然。

[參考]
keras的EarlyStopping callbacks的使用與技巧
https://blog.csdn.net/silent56_th/article/details/72845912

--

--