深度學習已經成為解決許多具有挑戰性的現實世界問題的方法。對目標檢測,語音識別和語言翻譯來說,這是迄今為止表現最好的方法。許多人將深度神經網絡(DNNs)視為神奇的黑盒子,我們放進去一堆數據,出來的就是我們的解決方案!事實上,事情沒那么簡單。
在設計和應用DNN到一個特定的問題上可能會遇到很多挑戰。為了達到現實世界應用所需的性能標準,對數據準備,網絡設計,訓練和推斷等各個階段的正確設計和執行至關重要。在這里,我將與大家分享7個實用技巧,讓您的深度神經網絡發揮最大作用。
1 - 數據,數據,數據
這不是一個大秘密。一直工作得很好的深度學習機器需要燃料 - 大量的燃料; 燃料是數據。我們擁有的標記數據越多,模型的表現就越好。更多的數據導致更好的性能,已經由谷歌大規模的探索3億圖像的數據集印證!
在實際應用中部署Deep Learning模型時,您應該不斷地為其提供更多的數據和微調以繼續提高其性能。喂飽怪獸:如果你想提高你的模型的性能,那就獲得更多的數據!
不斷增加的數據產生更好的性能
2 - 你應該使用哪個優化器?
多年來,已經開發了許多梯度下降優化算法,各有其優缺點。一些最流行的包括:
· 隨機梯度下降(SGD)+動量方法
· Adam
· RMSprop
· Adadelta
RMSprop,Adadelta和Adam被認為是自適應優化算法,因為它們會自動更新學習速率。使用SGD時,您必須手動選擇學習率和動量參數,通常會隨著時間的推移而降低學習率。
在實踐中,自適應優化器傾向于比SGD更快地收斂,然而,他們的最終表現通常稍差。SGD通常會達到更好的最小值,從而獲得更好的最終準確性,但這可能需要比某些優化程序長得多的時間。它也更依賴于強大的初始化和學習速率衰減時間表,這在實踐中可能非常困難。
因此,如果你需要一些快速的結果,或者只是想測試一個新的技術,選擇自適應優化器。我發現Adam很容易使用,因為它對你選擇完美的學習率并不是很敏感。如果您想獲得絕對最佳的最終表現,請使用SGD + Momentum,并使用學習率,衰減和動量值來最大化表現。
兩全其美的方法有木有!
它最近的研究顯示,你可以做到兩全其美:高速訓練頂尖的性能通過切換從Adam到SGD!這個想法是,訓練的早期階段實際上是SGD對參數調整和初始化非常敏感的時候。因此,我們可以通過使用Adam來啟動我們的訓練,這將使您節省相當長的時間,而不必擔心初始化和參數調整。那么,一旦Adam運轉起來,我們可以切換到SGD +動量優化,以達到最佳性能!
Adam vs SGD表現。由于魯棒性和自適應學習速度,Adam在一開始表現更好,而SGD最終達到更好的全局最小值。
3 - 如何處理不平衡的數據
在很多情況下,您將處理不平衡的 數據,特別是在現實世界的應用程序中。舉一個簡單而實際的例子:為了安全起見,您正在訓練您的深度網絡以預測視頻流中是否有人持有致命武器。但是在你的訓練數據中,你只有50個拿著武器的人的視頻和1000個沒有武器的人的視頻!如果你只是用這些數據來訓練你的網絡,那么你的模型肯定會非常偏向于預測沒有人有武器!
有幾件事你可以做到這一點:
· 在損失函數中使用類權重:本質上,代表性不足的類在損失函數中獲得更高的權重,因此對該特定類的任何錯誤分類將導致損失函數中的非常高的誤差。
· 過度抽樣:重復一些包含代表性不足的訓練樣例,有助于平衡分配。如果可用的數據很小,這最好。
· 欠采樣:您可以簡單地跳過一些包含過度表示類的訓練示例。如果可用數據非常大,這最好。
· 數據增加為少數類:您可以綜合創建更多的代表性不足的訓練示例!例如,在前面檢測致命武器的例子中,你可以改變屬于具有致命武器的類別的視頻的一些顏色和光照。
4 - 遷移學習
正如我們在第一個提示中所看到的,深層網絡需要大量的數據。不幸的是,對于許多新的應用程序來說,這些數據可能很難并且花費很高。如果我們希望我們的模型表現良好,我們可能需要數十或數十萬個新的訓練樣例進行訓練。如果數據集不易獲取,則必須全部收集并手動標記。
這就是遷移學習的起點。通過遷移學習,我們不需要太多的數據!這個想法是從一個以前在數百萬圖像上訓練過的網絡開始的,比如在ImageNet上預訓練的ResNet。然后,我們將通過僅重新訓練最后幾個層并使其他層獨立來微調ResNet模型。那樣的話,我們正在將ResNet從數百萬圖像中學到的信息(圖像特征)進行微調,以便我們可以將它應用于不同的任務。這是可能的,因為跨域的圖像的特征信息通常非常相似,但是這些特征的分析可以根據應用而不同。
一個基本的遷移學習通道
5 - 快速簡單的數據增強,以提高性能
我們現在說過幾次:更多的數據=更好的表現。除了遷移學習之外,另一種快速而簡單的方法來提高模型的性能,即數據增強。數據增強涉及通過在使用原始類別標簽的同時通過改變數據集中的一些原始圖像來生成合成訓練示例。例如,圖像數據增強的常見方式包括:
· 水平和垂直旋轉或翻轉圖像
· 改變圖像的亮度和顏色
· 隨機模糊圖像
· 隨機從圖像裁剪補丁
基本上,你可以進行任何改變,改變圖像的外觀,但不是整體的內容,即你可以制作一個藍色的狗的照片,但你仍然應該能夠清楚地看到,照片上是一個狗。
數據裂變!
6 - 訓練模型的合奏!
在機器學習中,集合訓練多個模型,然后將它們組合在一起以獲得更高的性能。因此,這個想法是在相同的數據集上訓練同一個任務上的多個深度網絡模型。模型的結果然后可以通過投票方案來進行組合,即具有最高票數的勝出。
為了確保所有模型不同,可以使用隨機權重初始化和隨機數據增強。眾所周知,由于使用了多個模型,因此集合通常比單個模型精確得多,因此從不同角度接近任務。在現實世界的應用中,尤其是挑戰或競爭中,幾乎所有頂級模型都使用合奏。
合奏模型
7 - 加快修剪
我們知道模型精度隨深度而增加,但速度又如何呢?更多的圖層意味著更多的參數,更多的參數意味著更多的計算,更多的內存消耗和更慢的速度。理想情況下,我們希望在提高速度的同時保持高精度。我們可以通過修剪來做到這一點。
深度神經網絡修剪的步驟
這個想法是,在網絡中的許多參數中,有些是多余的,對輸出沒有太大貢獻。如果您可以根據對網絡的貢獻排列網絡中的神經元,則可以從網絡中移除低排名的神經元,從而形成更小,更快的網絡。可以根據神經元權重的L1 / L2均值,平均激活,一些驗證集上神經元不為零的次數以及其他創造性方法來進行排序。獲得更快/更小的網絡對于在移動設備上運行深度學習網絡非常重要。
修剪網絡的最基本的方法是簡單地放棄某些卷積濾波器。在近期的一篇文章中,這樣做是相當成功的。這項工作中的神經元排名相當簡單:它是每個濾波器權重的L1范數。在每個修剪迭代中,他們對所有的過濾器進行排序,在全部層中修剪m個排名最低的過濾器,重新訓練和重復!
在近期的另一篇分析剩余網絡結構的文章中提出了修剪過濾器的一個關鍵洞察。作者指出,在刪除層的時候,具有剩余快捷連接的網絡(例如ResNets)與沒有使用任何快捷連接的網絡(如VGG或AlexNet)相比,保留更加良好的精度并且穩健得多。這個有趣的發現具有重要的實際意義,因為它告訴我們在修剪網絡進行部署和應用時,網絡設計是至關重要的(使用ResNets!)。所以使用最新最好的方法總是很好的!
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100719 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113 -
遷移學習
+關注
關注
0文章
74瀏覽量
5559
原文標題:7個實用的深度學習技巧
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論