當前位置:
首頁 > 最新 > 在玩轉圖像分類器後,他總結了這八個深度學習最佳實踐……

在玩轉圖像分類器後,他總結了這八個深度學習最佳實踐……

將門2018招聘開始啦!

企業戰略合作、投資總監/經理、財務總監、新媒體運營、技術專家、行業專家等多個崗位期待你的加入~

也歡迎轉給身邊優秀的朋友!推薦成功、一經錄用將獲得iPhone X一台和將門的精美周邊禮物一份!

簡歷請發送至>>dream@thejiangmen.com;更多詳情>>將門招聘 2018年將門開放大量職位,期待你的加入!

來源:Medium

編譯:T.R

最近@Muhia和大家分享了他在fastai上學習深度學習後的八條實踐經驗,這些經驗對於大多是深度學習項目來說都是值得借鑒和學習的。他為自己設計了一個區分蜘蛛和蠍子的圖像分類器任務,並一步一步訓練了一個準確率很高的圖像分類器。

首先從Google圖片上找到了大約1500張相關的圖片,隨後去除了非jpg和不完整的圖片,最後得到了815張訓練數據,其中包括蜘蛛和蠍子各290張的訓練圖片以及118張(蜘蛛)和117張(蠍子)的測試圖片。通過一系列的訓練後,得到了高達95%的準確率。

相關Code請見>>https://gist.github.com/poppingtonic/8cbc1bd8be6a77c6efde53abc62dfeb8#file-conv_trainer-py

下面就來逐一來看在這一過程中的八大經驗!

1.基於VGG-16和ResNeXt50微調實現遷移學習

對於圖像分類工作,你可以通過對神經網路進行微調大幅改善分類器的性能,而這一切可以站在巨人的肩頭上更進一步。例如50層的殘差神經網路ResNeXt50就是一個不錯的選擇,它利用1000類的ImageNet挑戰賽數據集進行了預訓練並達到了非常好的效果。它可以將圖像的特徵進行高效的抽取並對各類圖像問題具有足夠的通用性。我們在自己的實際問題中所需要做的只是微調最後一層的結構,使之適用於特定的問題。我們將ResNeXt50輸出的1000維分類結果修改為2維的分類結果,來區分圖形是蜘蛛還是蠍子。下圖是一個微調神經網路的例子,這裡將最後輸出的1000維修改成了10維來進行進一步的微調,以實現特定的分類任務。

2.周期性調整學習率

在深度學習中最重要的超參數應該非學習率莫屬啦。通常嘗試學習率的方式十分複雜,要是沒有經驗而且數據集又十分龐大的話,可能會需要很長很長的時間才能找到一個合適的學習率。但在2015年,來自美國海軍研究實驗室的Leslie N. Smith找到了一個可以自動搜索最優學習率的方法《Cyclical Learning Rates for Training Neural Networks》,通過從很小的學習率開始,在運行一些批次的樣本後改變學習率並檢測損失函數的變化,直到這一改變促使損失函數下降。具體的論文和git請參照:

https://arxiv.org/pdf/1506.01186.pdf

https://github.com/bckenstler/CLR

在實踐中利用變化的學習率去訓練是一個不錯的選擇,下圖就是作者在fastai中優化學習率的實例:

同時在訓練精度隨迭代次數的曲線中可以看到利用周期學習率比原始的學習率和指數學習率訓練快了進兩倍,真是一個不錯的方法~~

3.可重啟隨機梯度下降

另一種加速隨機梯度訓練的方法通常會在訓練的過程中不斷降低學習率來實現。我們希望在改變學習率的同時損失函數也同樣能下降。當我們離最優解越近時,移動的步長就需要越小。如果步長過大就會越過最優值從而造成結果不收斂。但如果學習率和損失的關係不穩定的話,比如學習率的微小變化造成了損失函數的巨大變化,這就表明這不是一個較為穩定的區域。這時候我們就需要周期性的對學習率進行調整。例如上圖右邊的訓練過程,學習率進行了三次重置。作者給出了在fastai中學習的設置截圖,利用cycle_len和cycle_mult參數來設置學習率的變化。

4.數據增廣

數據增強對於數據量不足時尤為重要,這是一種簡易的方法來補充訓練和測試數據的不足。對於圖像來說,通過對圖像進行鏡像變化、旋轉等是生成更多數據的好方法,下圖顯示了不同角度、尺度和翻轉下的蠍子數據增強圖樣。

5.測試(推斷)時增廣

數據增強的思想同樣可以用於測試。在測試的時候,我們主要目的是對輸入圖片進行預測,但如果對輸入數據進行隨機的數據增強的話,產生的預測結果魯棒性會更強。作者在實踐中對每一幅輸入的圖片進行了4次隨機的變換,並利用這些增強數據的平均預測結果來作為這一圖片的預測結果。

6.用預訓練RNN替換詞向量

如果要建立一個高水平的情感分析框架,我們需要的不是詞向量模型,而是需要將你的訓練數據作為整體輸入到深度循環神經網路語言模型中去,並利用它來進行更加準確的分析。一定要記住在訓練出較高準確率的時候保存模型,並將這個模型用於你的語義分析任務中去。與詞向量相比,RNNs可以追蹤更長程的依賴性,會比詞向量得到更好的結果。

7.時序反向傳播(BPTT)

深度循環神經網路的隱藏狀態往往會隨著反向傳播的訓練時間變得越來越臃腫。例如當我們需要處理一個百萬級的字元時,需要建立百萬級的狀態向量以及他們的歷史信息,同時還需要對每個字元進行相同量級的計算以進行梯度挑戰。如此大的數據量會消耗巨量的內存和計算力。為了減小內存的消耗,我們應該定義一個後向傳播的最長距離。因為在訓練神經網路中每一個循環相當於一個時間步長,這一限制反向傳播層數的訓練任務被稱為通過時間進行反向傳播(Back-propagation through time BPTT,歷史包含在了隱含狀態中)。這一數值決定了內存和時間的消耗量,但是卻在處理長句或者長序列時起到了改善模型穩定性的效果。

8. 分類變數實體向量化

當使用深度學習處理結構化數據時,這種方法可以幫助分辨出含有連續數據的列,例如網上商店的價格數據,其中的列可能包含有日期和採購地點等分類數據。我們可以還將這些數據的獨熱編碼轉換為指向神經網路中全連接層的可查表。這樣就使得神經網路可以學習到先前這些數據中被忽略的信息了。它同時還能夠從中學習到周期性事件,例如每周哪一天銷量最高、基於多年的數據預測法定節假日前後的銷售數據會發生什麼樣的變化?這樣的處理流程將會有效的為價格預測和優化建立模型。這樣的方法應該成為數據分析的標準流程之一,每個公司都應該採用這些方法來發掘數據中的價值。

Guo和Berkhahn將這種方法用於 Rossmann Store Sales Kaggle挑戰賽中,雖然他們只進行了很少的特徵工程但還是取得了3rd的不錯成績。具體方法如下:

結 語

深度學習作為AI的一個部分如今已經變得越來越容易學習和理解,隨著網路知識的傳播和實踐方式的易捷,越來越多的人都開始了深度學習!隨之而來的是越來越完善的數據集和強大的GPU,一系列開源的高性能的框架和工具變得越來越容易獲取和使用,還包括成千上萬的教程、視頻和博客在指引方向。如此蓬勃發展的深度學習讓各個領域都受益匪淺,即使在我們利用深度學習創造出通用人工智慧之前,我們都可以在正確的地方、正確的方式、用深度學習創造出前所未有的文明。我們的社會也會因為這些工具創造出的生產力變得富強、文明、健康、和諧!

-The End-

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 將門創投 的精彩文章:

在實現了檢查病、開藥方後,AI還將告訴你該如何吃藥—解讀最佳藥物組合和給葯計量

TAG:將門創投 |