卷積神經網絡圖像分類技巧,論文討論

2019-05-31     AI公園
作者:Sanyam Bhutani
編譯:ronghuaiyang

導讀

這篇文章是對Bag of Tricks for Image Classification with Convolutional Neural Networks中分享的思想的概述和我自己的一點思考。

關於這個系列:

這篇文章標誌著這一系列文章的開始,這篇文章是對Bag of Tricks for Image Classification with Convolutional Neural Networks中分享的思想的概述和我自己的一點思考。

這篇paper討論了一些技巧,並獨立分析了他們對訓練幾個最近的CNN模型的綜合貢獻。

上下文

儘管深度學習網絡在圖像分類任務上的精度已經超過了人類的水平,但我們仍然注意到,圖像分類模型的精度正在不斷提高,這些突破不僅僅是因為架構或者僅僅因為神經網絡模型不斷「變深」。

許多改進都是由於一些小「技巧」,這些技巧通常沒有發布出來,或者在論文裡面沒有特別突出的顯示出來。

作者的目標是分享這些技巧以及基於每個「技巧」的大量實驗。

這些技巧有兩個目的:

  • 提高準確度:對神經網絡模型的微調可以提高精確度。
  • 加快訓練,例如:利用新的RTX卡上的張量核使用FP16計算。

技巧

作者們討論了一些技巧,我們來過一遍:

  • 線性縮放學習率:在訓練神經網絡時,我們在內存允許的情況下分批地將圖像輸入GPU。這些在SGD中是隨機的,並且有一定的方差。當我們增加批的大小時,我們的批對圖像的批方差減小,這允許設置更積極的學習率。
  • 學習率採用公式:0.1 x (Batch_size)/256
  • 學習速度熱身:當我們訓練一個神經網絡時,我們要設置學習率,這決定了模型學習的「速度」,或者我們說是我們對於來自它的預測的懲罰的積極程度。當我們開始訓練我們的神經網絡,我們可以期望權重有更多的隨機性。如果我們設定一個積極的學習率,可能會導致網絡兩級分化
  • 為了解決這個問題,使用了學習率預熱,它允許在開始時將學習率設置為較低的值,然後將學習率設置為較高的值。
  • 步驟如下:初始學習率設置為~0,然後根據公式對「初始批次」進行遞增:
  • 當前epoch*(學習率)/(Num_of_Initial_Epochs)
  • 初始epoch數量:是一個超參數,我們選擇保留這個數,直到模型「預熱」為止。
  • 學習率:我們為NN設置的最終學習率。
  • 學習率的設置採用公式:0.1 x (Batch_size)/256
  • Zero Y:ResNet由多個殘塊組成。為了簡單起見,可以將它們表示為x+ block(x)
  • 這些層之後通常是一個batch normalization層,這些層將進一步按比例轉換為Y*(x)+bias。(當我們訓練網絡時,Y和bias是「學習得到的」)
  • 這篇文章建議對ResNet塊末尾的層進行初始化,將Y初始化為0。這減少了初始可學習參數的數量。
  • 不對bias做衰減:
  • 正則化通常應用於所有可學習的參數,然而,這往往導致過擬合。
  • 作者建議僅對卷積和全連接的層進行正則化,而不對bias和batch normalization參數進行正則化。
  • 混合精度訓練:混合精度訓練允許我們使用最新GPU中速度更快的張量核,從而允許我們利用快速FP16運算和FP32訓練來計算權重或梯度,從而允許「不安全」的運算能夠全精度的完成。
  • 模型調整:
  • 本文比較了對ResNet體系結構所做的一些調整。
  • 這些包括調整卷積層內部的步驟,靈感來自於最近的架構。我將跳過這一部分的細節,因為這需要稍微詳細的步長和卷積知識。
  • 一般來說,爭論的焦點是對現有體系結構的調整也提高了準確性。
  • cosine學習速率:
  • 當我們訓練我們的模型時,我們可以預期它會隨著時間的推移而變得更好(假設一切都運行得很好),隨著我們的損失值減少,我們正在接近一個「極小值」。在這一點上,我們想要降低我們的學習速度。
  • 固定步長學習率以「固定步長」衰減,本文建議使用餘弦調度學習率,代替固定步長衰減:
  • 學習率(Cosine_Decayed) =初始設置學習率* 0.5 * (1 + cos(Current_Batch * (Pi))/ total_num_batch))
  • 標籤平滑:
  • 這意味著調整預測的最終層和機率分布,使網絡能夠更好地泛化。我跳過了如何實現這一點的細節。
  • 知識蒸餾:
  • 這種方法將知識從另一個預先訓練過的「教師」模型「蒸餾」到我們當前的學生網絡中。
  • 這是通過增加蒸餾損失來實現的,蒸餾損失會懲罰我們的學生網絡,其依據是與「教師模型」相比,學生網絡的預測偏離了多少。

結論

本文在ImageNet中顯示了最大的前景,使用ResNet 50模型得到了最大的改進。

最後,對遷移學習在兩個任務上的應用進行了比較:

  • Pascal VOC數據集物體檢測
  • 語義分割

總結&自己的想法

這是第一篇擁抱小技巧的論文之一,這些技巧通常不在聚光燈下,或者在論文中不那麼重要。

本文深入研究了所有這些觀點,並進行了廣泛的比較。

作為一個小練習,我認為這應該是一個很好的實驗,在個人目標任務上嘗試這些技巧,並記錄下改進。

我也很想在以後的文章中讀到更多關於這種技巧的內容,或者有專門介紹這種方法的詳細部分。

英文原文:https://hackernoon.com/bag-of-tricks-for-image-classification-with-convolutional-neural-networks-paper-discussion-693c9e17d1cc

更多文章,請關注微信公眾號:AI公園

文章來源: https://twgreatdaily.com/x2s5omwBvvf6VcSZTKms.html