【技术综述】深度学习新手如何开始合适的“调参”任务
言有三
畢業(yè)于中國科學院,計算機視覺方向從業(yè)者,有三工作室等創(chuàng)始人
作者 | 言有三
編輯 | 言有三
深度學習工程師被稱為“煉丹工程師”,自然是因為在日常工作中需要各種各樣的調(diào)參工作。雖然因為Google的研究使得AutoML這兩年大熱,但是對于大部分人來說,還沒有機器玩得起AutoML,而且手動調(diào)參數(shù)也是一門必備的技能。
試問:連調(diào)試參數(shù)都要交給電腦了,就你那三腳貓的python語言基礎(chǔ)和弱不禁風的數(shù)學基礎(chǔ),端得起一碗高薪的飯嗎!
1
任務(wù)選擇
要學習調(diào)試參數(shù),必須有一個比較好的任務(wù),它一定是要有一定的難度,但是不能太難。它能體現(xiàn)出不同參數(shù)的差異,但又不能太敏感。
這里我給大家選了一個任務(wù),細粒度圖像分類,方法選擇雙線性網(wǎng)絡(luò),參考git鏈接
https://github.com/gy20073/compact_bilinear_pooling。
所謂細粒度圖像分類,就是要將不同子類區(qū)分,通常來說,有不同種類的貓,不同種類的花等等,這里我們選擇了一個公開數(shù)據(jù)集,選擇的數(shù)據(jù)集為Caltech-UCSD Birds-200-2011,它包括200類鳥,共11788張圖片,每一個類約60個樣本,圖片的分辨率大小不等,長度都在400分辨率左右。
將數(shù)據(jù)集均勻分為訓練集和測試集,各10597和1192張圖。
它的任務(wù)就是要區(qū)分上面的鳥,特點就是有效的信息只存在于很細小的局部區(qū)域中。關(guān)于分類任務(wù),更多的信息請關(guān)注我們上一篇文章,圖像分類絕對不是一個簡單的任務(wù),請重視。
【技術(shù)綜述】你真的了解圖像分類嗎?
話不多說,開始吧。
2
開始調(diào)參
深度學習參數(shù)真的太多了,這個參數(shù)不是說神經(jīng)元的參數(shù),而是說用于訓練網(wǎng)絡(luò)的參數(shù)。
上圖只是展示了其中一些比較重要的參數(shù),實際上隨便數(shù)數(shù)20個以上是沒有問題的。咱們時間機器有限不可能所有的都調(diào)試,今天就來調(diào)試其中的幾個最重要的,遷移學習,分辨率以及正則項。
2.1 遷移學習
如果你想快速訓練好一個任務(wù),那么請從遷移學習開始,不要從頭開始訓練,尤其是新手。
一個好的初始化太重要了,遷移學習就是給你提供了一個絕佳的初始化。
咱們這個任務(wù)是非常難的,因為類別多,數(shù)據(jù)少,而且類內(nèi)方差很大,所以我們開始進行遷移學習的時候,不妨保守一點,只學習全連接層。
注意這個任務(wù)的最后幾層如上,分別是一個雙線性網(wǎng)絡(luò)層和兩個歸一化層,一個全連接層,訓練參數(shù)如下,完整的網(wǎng)絡(luò)配置請參照git。
test_iter: 300
test_interval: 600
display: 100
max_iter: 60000
?
lr_policy: "multistep"
base_lr: 0.1
gamma: 0.25
stepvalue: 20000
stepvalue: 30000
stepvalue: 40000
stepvalue: 50000
?
momentum: 0.9
weight_decay: 0
snapshot: 10000
snapshot_prefix: "snapshot/ft_last_layer"
net: "ft_last_layer.prototxt"
iter_size: 4
經(jīng)過了60000次迭代后,查看下訓練的準確率迭代曲線和損失迭代曲線如下
可以看出,網(wǎng)絡(luò)發(fā)生了過擬合,這也是在預(yù)料之中,因為訓練集中每一類的圖像只有60張左右,而數(shù)據(jù)增強只做了隨機裁剪,而且是在全圖經(jīng)過了縮放之后的裁剪操作。
最后,我們對數(shù)據(jù)集進行了測試,準確率為74.5%。
我們再放開所有網(wǎng)絡(luò)層進行學習,具體配置如下
test_iter: 300
test_interval: 100
display: 100
max_iter: 20000
lr_policy: "fixed"
base_lr: 0.001
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "snapshot/ft_all"
net: "ft_all.prototxt"
結(jié)果如下
可以看到,損失繼續(xù)降低,同時精度也繼續(xù)提升,20000次迭代后準確率從74.5%提升到86.8%。當然,模型仍然是過擬合的,這是因為樣本數(shù)據(jù)集是在太小,只有增加數(shù)據(jù)集,實驗更多的數(shù)據(jù)增強方法才能更好的解決這個問題。
關(guān)于數(shù)據(jù)集和數(shù)據(jù)增強方法,請查看往期文章。
【數(shù)據(jù)】深度學習從“數(shù)據(jù)集”開始
[綜述類] 一文道盡深度學習中的數(shù)據(jù)增強方法(上)
【技術(shù)綜述】深度學習中的數(shù)據(jù)增強(下)
那可不可以直接對所有層進行學習呢,沒問題,可以收斂的。
但是效果就要差一些了,最終只能到0.79。
那不用雙線性模型,直接使用分類模型如何?我的實驗結(jié)果是很差,慘不忍睹,這里就不放出來了,而且非常難調(diào)參。
從這一次的調(diào)參至少可以得到一個結(jié)論,遷移學習是很重要的,妥妥的提升性能。而且其中的技巧非常多,只能多去練手了,看文章是學不到的。
2.2 輸入輸出分辨率
如果你的模型沒毛病,但是效果始終不好,不如提高分辨率,當然這意味著更大的計算量。
通常來說,更大的輸入分辨率總是可以取得更好的效果,尤其是對于檢測和分割等任務(wù)。在我們這個任務(wù)中,還可以調(diào)整雙線性網(wǎng)絡(luò)的輸出特征維度大小,這可以認為是輸出維度,也可能是一個比較關(guān)鍵的參數(shù)。
所以我們同時對輸入分辨率和雙線性網(wǎng)絡(luò)的輸出層的維度進行一系列實驗,輸入尺度分別選用448,336,224這3個,輸出維度分別選用8192,4096,2048,1024,保持其他參數(shù)不變,迭代60000次,測試結(jié)果如下:
可以看出,圖像的分辨率對模型性能的影響非常大,從448降低到224之后,準確率下降將近10%。雙線性輸出特征層的維度,從8192降低到1024后,只有微小的下降,幾乎對性能沒有影響,當然這并不意味著其他的任務(wù)也是如此,事實上對于圖像分割和目標檢測任務(wù)來說,最后一層卷積輸出的特征圖大小是最重要的參數(shù)。
2.3 正則化因子
當模型在訓練集上的表現(xiàn)明顯優(yōu)于測試集的時候,說明發(fā)生了過擬合,緩解過擬合最簡單的方法是增加數(shù)據(jù)。當增加數(shù)據(jù)的方案行不通的時候,可以通過添加L1,L2,dropout等正則化方案,這分別是隱式正則化和顯式正則化方法。
在caffe框架中,通過調(diào)整Weight_decay來實現(xiàn),默認使用的是L2正則化方法。Weight_decay是乘在正則化項的因子,這一般可以提高模型的能力,一定程度上緩解模型的過擬合,但是視不同任務(wù)而定,我們在前面訓練模型的時候沒有加正則項。
分別比較weight_decay=0,weight_decay=0.00001, weight_decay=0.001對結(jié)果的影響,其中weight_decay=0對應(yīng)的就是第一個訓練的基準模型。
沒有取得我們預(yù)期的效果,可能是wr的參數(shù)試的不夠多,可能是其他的參數(shù)需要調(diào)試。
wr=0.001的時候曲線如上,可以看到模型相比于上面的一些更好的模型,提前收斂了,但是卻收斂到了不好的效果,過擬合情況更加嚴重。
這個時候應(yīng)該怎么做呢?在數(shù)據(jù)集不能變的情況下,調(diào)節(jié)學習率?還是繼續(xù)調(diào)節(jié)正則化因子,只有實驗結(jié)果才能驗證了。
除去上面這些參數(shù),還有學習率大小與迭代方法,batch size大小,初始化方法與各種優(yōu)化方法,數(shù)據(jù)增強等各種參數(shù),其中有一些參數(shù)對結(jié)果還是很有影響的,就留著讀者自己去調(diào)試吧。
更多任務(wù)與參數(shù)調(diào)試,可以參考以前的一篇文章。
如何步入深度學習刷榜第一重境界
最后說一下我的感受,紙上得來終覺淺,絕知此事要躬行,雖然調(diào)參數(shù)有一定的指導,但是唯有多練手才能熟能生巧。
時間原因,以后我不可能每天產(chǎn)出高質(zhì)量文章,還請大家耐心等待,另外更多的經(jīng)歷在一對一指導學習“濟”劃和“稷”劃,感興趣可以了解。
有三AI“【濟】劃”,從圖像基礎(chǔ)到深度學習
有三AI“十一月【稷】劃”,從調(diào)參大法到3D重建
有三AI“十月【稷】劃”,從自動駕駛到模型優(yōu)化
不愿關(guān)注公眾號,可移步知乎。
深度學習網(wǎng)易公開課已經(jīng)上線,看有三從不一樣的視角來解讀深度學習,特價2折,僅限今天。
如果想加入我們,后臺留言吧
微信
Longlongtogo
公眾號內(nèi)容
1 圖像基礎(chǔ)|2 深度學習|3 行業(yè)信息
有三精選
【技術(shù)綜述】“看透”神經(jīng)網(wǎng)絡(luò)
【有三說圖像】圖像簡史與基礎(chǔ)
【技術(shù)綜述】閑聊圖像分割這件事兒
【技術(shù)綜述】一文道盡softmax loss及其變種
【總結(jié)】這半年,有三AI都做了什么
往期學員分享
【技術(shù)綜述】人臉表情識別研究
一課道盡人臉圖像算法,你值得擁有
如何降低遮擋對人臉識別的影響
【技術(shù)綜述】人臉顏值研究綜述
往期開源框架
【pytorch速成】Pytorch圖像分類從模型自定義到測試
【paddlepaddle速成】paddlepaddle圖像分類從模型自定義到測試
【caffe速成】caffe圖像分類從模型自定義到測試
【tensorflow速成】Tensorflow圖像分類從模型自定義到測試
往期行業(yè)分析
【行業(yè)進展】國內(nèi)自動駕駛發(fā)展的怎么樣了?
【行業(yè)進展】AI:新藥研發(fā)的新紀元
【行業(yè)進展】哪些公司在搞“新零售”
【行業(yè)趨勢】國內(nèi)這10個AI研究院,你想好去哪個了嗎?
往期模型解讀
【模型解讀】“全連接”的卷積網(wǎng)絡(luò),有什么好?
【模型解讀】“不正經(jīng)”的卷積神經(jīng)網(wǎng)絡(luò)
【模型解讀】resnet中的殘差連接,你確定真的看懂了?
【模型解讀】pooling去哪兒了?
總結(jié)
以上是生活随笔為你收集整理的【技术综述】深度学习新手如何开始合适的“调参”任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习求职必备】百度AI和它的7大AI黑
- 下一篇: 【数据】短视频识别,都有那些行业标准?