這節課中介紹了訓練神經網路的第二部分,包括學習率曲線,超引數最佳化,模型整合,遷移學習
學習率曲線
在訓練神經網路時,一個常見的思路就是剛開始迭代的時候學習率較大,然後隨著迭代次數的增加,學習率逐漸下降,下面我們就來介紹幾種學習率下降的方法:
第一種方法是我們在某些特定的迭代節點,將學習率乘以某個值比如0.1,這種方法顯然又引入了更多的超引數,我們不想這樣做,所以又設計了其它的下降曲線
比如上圖的cos linear 等等 我們有時會發現保持學習率不變也是個不錯的選擇
實際上不同下降方法之間沒有明顯的對比統計,大多是根據不同領域習慣選擇不同方法,比如計算機視覺用cos,大規模自然語言處理用linear等
在訓練的時候,我們應該在發現驗證集上準確率下降的時候就停止訓練:
超引數最佳化
在訓練神經網路的時候,在不同的超引數之間選擇,我們常常會採用網格搜尋,將不同的值排列組合,然後去訓練
有時我們也會選擇隨機搜尋,在設定的範圍內隨機選取相應的超引數的值:
在實際應用中往往隨機搜尋更好,從下圖可以看出,最上面的綠色曲線表示準確率,網格搜尋只能表示曲線上固定的幾個值,而隨機搜尋引入了更多的隨機性,從而可能得到更好的結果:
在選擇超引數的過程中,我們一般有具體的流程:
第一步我們在什麼都沒有設定的情況下,可以先執行一下模型,看看損失是否正常,比如我們採用softmax函式輸出c個類的得分,它的初始損失應該是log(c)
第二步我們先在幾個比較小的樣本集資料中訓練我們的神經網路,調整網路架構,調整學習率與權重,注意不使用正則化方法,讓我們的模型在小資料集上能達到100%的準確度,透過畫迭代次數與loss的曲線觀察,如果損失一直不下降,說明我們採用的學習率太小,如果損失突然下降到0或者損失爆炸,說明我們採用的學習率太大,並且上述兩種情況都說明我們的初始化很糟糕
第三步我們根據前幾步確定的結構,在此基礎上使用權重衰減,採用不同的學習率,找到一個學習率,能在固定的迭代步驟內,使得損失下降幅度最大:
第四步我們選擇第三步中的一些學習率與權重衰減,迭代幾次,找出比較好的模型用於第五步,迭代更長時間,然後我們畫出相關的學習曲線(損失與迭代次數的統計圖,訓練集與驗證集在不同迭代次數上的統計圖)作進一步的觀察:
對於損失與迭代次數的統計圖
這種在一段迭代次數內損失不下降說明我們初始化較為糟糕
這種出現損失平原的情況說明我們可以嘗試學習率下降的方法
當學習率下降損失依然下降,說明我們採用的下降方法下降的太早了
對於訓練集與驗證集在不同迭代次數上的統計圖
一直上升說明我們還可以訓練更長時間
這種差異過大的曲線說明我們過擬合了,需要提升正則化強度或者引入更多資料
這種差異過小的曲線說明我們under fitting,需要訓練更長時間,選擇更復雜的模型
模型整合
模型整合常見的思路就是訓練不同的模型,然後取它們結果的平均值:
我們也可以採用一個模型,在不同的訓練時間輸出不同的結果,再取平均值,採用迴圈學習率很有利於這種snapshot整合的方法:
同時我們也可以將這種思想應用於引數向量:
遷移學習
遷移學習是為了解決資料量不足的問題
先在給定的資料集上使用某種卷積網路訓練影像資料,然後去除最後一層不獲取預測得分,使用這個卷積網路作為特徵向量提取器,凍結之前訓練的層,然後再使用其它方法輸出結果
比如右圖2009年專門為資料集設計的神經網路
其餘兩個是在VGG上預訓練 然後使用svm或者邏輯迴歸輸出結果 得到的效果就比專門設計的要好
如果我們有更大的資料集,我們可以對cnn網路架構進行進一步的訓練,使其能完成更多型別的工作
事實證明cnn網路結構的最佳化可以為許多下游的工作帶來提升
上圖說明了我們嘗試在不同的資料集上應用cnn進行遷移學習需要進行的操作,假如資料集與imagenet相似,並且資料量較小,我們可以使用線性分類器輸出結果,假如資料量較大,我們可以利用這些資料微調一些層,假如資料量較大並且與imagenet資料集不想死,我們需要在更多層上進行微調,如果資料量較小,我們就需要更多的嘗試
下面兩張圖展現了這種遷移學習方法的廣泛應用:
可以在物體檢測 語言建模等方面應用
但是對於遷移學習也存在一些疑問,有人指出這種方法並沒有比從頭開始設計網路的方法好很多,小哥的建議是如果有充足的資料和算力,我們可以從頭開始設計並且調整網路,大多數情況下使用預訓練的網路加上微調步驟十分高效