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