當前位置:
首頁 > 最新 > 你可能不知道的7個深度學習實用技巧

你可能不知道的7個深度學習實用技巧

【導讀】前幾天,深度學習工程師George Seif發表了一篇博文,總結了7個深度學習的技巧,主要從提高深度學習模型的準確性和速度兩個角度來分析這些小技巧。在使用深度學習的時候,我們不能僅僅把它看成一個黑盒子,因為網路設計、訓練過程、數據處理等很多步驟都需要精心的設計。作者分別介紹了7個非常實用小技巧:數據量、優化器選擇、處理不平衡數據、遷移學習、數據增強、多個模型集成、加快剪枝。相信掌握了這7個技巧,能讓你在實際工作中事半功倍!

7 Practical Deep Learning Tips

7個實用的深度學習技巧

深度學習已經成為解決許多具有挑戰性問題的方法。 在目標檢測,語音識別和語言翻譯方面,深度學習是迄今為止表現最好的方法。 許多人將深度神經網路(DNNs)視為神奇的黑盒子,我們輸入一些數據,出來的就是我們的解決方案! 事實上,事情要複雜得多。

在設計和應用中,把DNN用到一個特定的問題上可能會遇到很多挑戰。 為了達到實際應用所需的性能標準,數據處理、網路設計、訓練和推斷等各個階段的正確設計和執行至關重要。 在這裡,我將與大家分享7個實用技巧,讓你的深度神經網路發揮最大作用。

1-數據,數據,數據

這不是什麼大秘密,深度學習機需要大量的「燃料」, 那「燃料」就是數據。擁有的標籤數據越多,模型的表現就越好。 更多數據產生能更好性能的想法,已經由谷歌的大規模數據集(有3億圖像)證明!為了感受數據帶給深度學習模型的性能提升,在部署Deep Learning模型時,你應該不斷地為其提供更多的數據和微調以繼續提高其性能。 Feed the beast:如果你想提高你的模型的性能,就要提供更多的數據!

圖顯示數據量的增加會得到更好的性能

2-你應該選擇哪一個優化器

多年來,已經開發了許多梯度下降優化演算法,他們各有其優缺點。 一些最流行的方法如下:

RMSprop,Adadelta和Adam被認為是自適應優化演算法,因為它們會自動更新學習率。 使用SGD時,您必須手動選擇學習率和動量參數,通常會隨著時間的推移而降低學習率。

在實踐中,自適應優化器傾向於比SGD更快地收斂, 然而,他們的最終表現通常稍差。 SGD通常會達到更好的minimum,從而獲得更好的最終準確性。但這可能需要比某些優化程序長得多的時間。 它的性能也更依賴於強大的初始化和學習率衰減時間表,這在實踐中可能非常困難。

因此,如果你需要一個優化器來快速得到結果,或者測試一個新的技術。 我發現Adam

很實用,因為它對學習率並不是很敏感。 如果您想要獲得絕對最佳的表現,請使用SGD + Momentum,並調整學習率,衰減和動量值來使性能最優化。

兩全其美的辦法

最近已經證明,可以得到兩全其美的結果:從Adam到SGD的高性能高速訓練! 這個想法是,實際上由於在訓練的早期階段SGD對參數調整和初始化非常敏感。 因此,我們可以通過使用Adam來開始訓練,這將節省相當長的時間,而不必擔心初始化和參數調整。 那麼,一旦Adam獲得較好的參數,我們可以切換到SGD +動量優化,以達到最佳性能!

Adam vs SGD 性能

3-如何處理不平衡數據

在很多情況下,都要處理不平衡的數據,特別是實際應用程序中。 一個簡單而實際的例子如下:訓練您的深度網路以預測視頻流中是否有人持有致命武器。 但是在你的訓練數據中,你只有50個拿著武器的人的視頻和1000個沒有武器的人的視頻! 如果你只是用這些數據來訓練你的網路,那麼你的模型肯定會非常偏向於預測沒有人有武器!

你可以做用以下的方法來解決它:

4-遷移學習

正如我們所看到的,深層網路需要大量的數據。遺憾的是,對於許多新的應用程序來說,這些數據可能很難得到並且開銷很大。 如果我們希望模型表現良好,可能需要數萬或數十萬個新的訓練樣例來進行訓練。 如果數據集不易獲取,則必須全部手動收集並標記。

這就是遷移學習的起點。 通過遷移學習,我們不需要太多的數據! 這個想法是從一個在數百萬圖像上訓練過的網路開始的,比如在ImageNet上預訓練的ResNet。 然後,我們將「重新調整ResNet模型,只重新訓練最後幾層。

我們將ResNet從數百萬圖像中學到的信息(圖像特徵)進行微調,以便將其應用於不同的任務。 因為跨域的圖像的特徵信息經常是非常相似的所以這個方法是可行的,但是這些特徵的分析根據應用而不同。

一個基本的遷移學習示例

5 – 用數據增強提高性能

前面已經說過:更多的數據=更好的表現。 除了遷移學習之外,另一種快速而簡單提高模型的性能的方法是數據增強。 數據增強是使用原始類別標籤的同時,改變數據集的原始圖像以合成一些新的訓練示例。例如,用於圖像數據增強的常見方式包括:

基本上,你可以進行任何改變,改變圖像的外觀但不改變整體內容,例如你可以使用藍色狗的照片,但你仍然應該能夠清楚地看到,這是一個狗的照片。

數據增強

6-通過集成提升模型!

在機器學習中,集成訓練多個模型,然後將它們組合在一起以獲得更高的性能。 這個想法是在相同的數據集上對同一任務訓練多個深度網路模型。 然後,模型的結果可以通過投票進行組合,即具有最高票數的類勝出。

為了確保所有模型不同,可以使用隨機權重初始化和隨機數據增強。眾所周知,由於使用了多個模型,因此集成通常比單個模型更精確,從而從不同角度完成任務。在實際應用中,尤其是競賽中,幾乎所有頂級模型都使用集合方式。

集成模型

7-加快剪枝

我們知道模型精度隨深度而增加,但速度又如何呢? 更多的層意味著更多的參數,更多的參數意味著更多的計算,更多的內存消耗和更慢的速度。理想情況下,我們希望在提高速度的同時保持高精度。我們可以通過剪枝來做到這一點。

深度神經網路剪枝策略

這個想法是,網路中的許多參數是多餘的,對輸出沒有太大貢獻。 如果可以根據貢獻值對網路中的神經元進行排名,那麼就可以從網路中移除低排名的神經元,從而形成更小更快的網路。 可以根據神經元權重的L1 / L2均值(平均激活)、一些驗證集上神經元不為零的次數以及其他方法來進行排序。 獲得更快/更小的網路對於在移動設備上運行深度學習網路非常重要。

修剪網路的最基本的方法是簡單地放棄某些卷積濾波器。 最近文章表明,這樣做是相當成功的。 這項工作中的神經元排名相當簡單:每個濾波器的權重按照L1規範排名。 在每個修剪迭代中,對所有的過濾器進行排序,在所有層中修剪m個排名最低的過濾器,重新訓練和重複!

最近的另一篇分析殘差網路結構的論文中提出了修剪「過濾器」的關鍵特點。 作者指出,在刪除層的時候,具有殘差快捷連接(例如ResNets)的網路比不使用任何快捷連接(例如VGG或AlexNet)的網路在保持良好的準確性方面更為穩健。這個有趣的發現具有重大的實際意義,因為它告訴我們,在修剪網路進行部署和應用時,網路設計至關重要(例如ResNets)。 所以使用最新最好的方法總是很好的!

That』s a wrap!

There you have it, your 7 practical tips for Deep Learning

參考鏈接:

https://towardsdatascience.com/7-practical-deep-learning-tips-97a9f514100e

-END-

專 · 知

人工智慧領域主題知識資料查看獲取【專知薈萃】人工智慧領域26個主題知識資料全集(入門/進階/論文/綜述/視頻/專家等)

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

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


請您繼續閱讀更多來自 專知 的精彩文章:

谷歌一個模型解決所有問題《One Model to Learn Them All》 論文深度解讀
使用SSD進行目標檢測:目標檢測第二篇

TAG:專知 |