深度學習七個實用技巧
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
深度學習已經(jīng)成為解決許多具有挑戰(zhàn)性的現(xiàn)實世界問題的方法。對目標檢測,語音識別和語言翻譯來說,這是迄今為止表現(xiàn)最好的方法。許多人將深度神經(jīng)網(wǎng)絡(luò)(DNNs)視為神奇的黑盒子,我們放進去一堆數(shù)據(jù),出來的就是我們的解決方案!事實上,事情沒那么簡單。
在設(shè)計和應(yīng)用DNN到一個特定的問題上可能會遇到很多挑戰(zhàn)。為了達到現(xiàn)實世界應(yīng)用所需的性能標準,對數(shù)據(jù)準備,網(wǎng)絡(luò)設(shè)計,訓練和推斷等各個階段的正確設(shè)計和執(zhí)行至關(guān)重要。在這里,我將與大家分享7個實用技巧,讓您的深度神經(jīng)網(wǎng)絡(luò)發(fā)揮最大作用。
這不是一個大秘密。一直工作得很好的深度學習機器需要燃料 - 大量的燃料; 燃料是數(shù)據(jù)。我們擁有的標記數(shù)據(jù)越多,模型的表現(xiàn)就越好。更多的數(shù)據(jù)導致更好的性能,已經(jīng)由谷歌大規(guī)模的探索3億圖像的數(shù)據(jù)集印證!
在實際應(yīng)用中部署Deep Learning模型時,您應(yīng)該不斷地為其提供更多的數(shù)據(jù)和微調(diào)以繼續(xù)提高其性能。喂飽怪獸:如果你想提高你的模型的性能,那就獲得更多的數(shù)據(jù)!

不斷增加的數(shù)據(jù)產(chǎn)生更好的性能
多年來,已經(jīng)開發(fā)了許多梯度下降優(yōu)化算法,各有其優(yōu)缺點。一些最流行的包括:
· 隨機梯度下降(SGD)+動量方法
· Adam
· RMSprop
· Adadelta
RMSprop,Adadelta和Adam被認為是自適應(yīng)優(yōu)化算法,因為它們會自動更新學習速率。使用SGD時,您必須手動選擇學習率和動量參數(shù),通常會隨著時間的推移而降低學習率。
在實踐中,自適應(yīng)優(yōu)化器傾向于比SGD更快地收斂,然而,他們的最終表現(xiàn)通常稍差。SGD通常會達到更好的最小值,從而獲得更好的最終準確性,但這可能需要比某些優(yōu)化程序長得多的時間。它也更依賴于強大的初始化和學習速率衰減時間表,這在實踐中可能非常困難。
因此,如果你需要一些快速的結(jié)果,或者只是想測試一個新的技術(shù),選擇自適應(yīng)優(yōu)化器。我發(fā)現(xiàn)Adam很容易使用,因為它對你選擇完美的學習率并不是很敏感。如果您想獲得絕對最佳的最終表現(xiàn),請使用SGD + Momentum,并使用學習率,衰減和動量值來最大化表現(xiàn)。
兩全其美的方法有木有!
它最近的研究顯示,你可以做到兩全其美:高速訓練頂尖的性能通過切換從Adam到SGD!這個想法是,訓練的早期階段實際上是SGD對參數(shù)調(diào)整和初始化非常敏感的時候。因此,我們可以通過使用Adam來啟動我們的訓練,這將使您節(jié)省相當長的時間,而不必擔心初始化和參數(shù)調(diào)整。那么,一旦Adam運轉(zhuǎn)起來,我們可以切換到SGD +動量優(yōu)化,以達到最佳性能!

Adam vs SGD表現(xiàn)。由于魯棒性和自適應(yīng)學習速度,Adam在一開始表現(xiàn)更好,而SGD最終達到更好的全局最小值。
在很多情況下,您將處理不平衡的 數(shù)據(jù),特別是在現(xiàn)實世界的應(yīng)用程序中。舉一個簡單而實際的例子:為了安全起見,您正在訓練您的深度網(wǎng)絡(luò)以預(yù)測視頻流中是否有人持有致命武器。但是在你的訓練數(shù)據(jù)中,你只有50個拿著武器的人的視頻和1000個沒有武器的人的視頻!如果你只是用這些數(shù)據(jù)來訓練你的網(wǎng)絡(luò),那么你的模型肯定會非常偏向于預(yù)測沒有人有武器!
有幾件事你可以做到這一點:
· 在損失函數(shù)中使用類權(quán)重:本質(zhì)上,代表性不足的類在損失函數(shù)中獲得更高的權(quán)重,因此對該特定類的任何錯誤分類將導致?lián)p失函數(shù)中的非常高的誤差。
· 過度抽樣:重復(fù)一些包含代表性不足的訓練樣例,有助于平衡分配。如果可用的數(shù)據(jù)很小,這最好。
· 欠采樣:您可以簡單地跳過一些包含過度表示類的訓練示例。如果可用數(shù)據(jù)非常大,這最好。
· 數(shù)據(jù)增加為少數(shù)類:您可以綜合創(chuàng)建更多的代表性不足的訓練示例!例如,在前面檢測致命武器的例子中,你可以改變屬于具有致命武器的類別的視頻的一些顏色和光照。
正如我們在第一個提示中所看到的,深層網(wǎng)絡(luò)需要大量的數(shù)據(jù)。不幸的是,對于許多新的應(yīng)用程序來說,這些數(shù)據(jù)可能很難并且花費很高。如果我們希望我們的模型表現(xiàn)良好,我們可能需要數(shù)十或數(shù)十萬個新的訓練樣例進行訓練。如果數(shù)據(jù)集不易獲取,則必須全部收集并手動標記。
這就是遷移學習的起點。通過遷移學習,我們不需要太多的數(shù)據(jù)!這個想法是從一個以前在數(shù)百萬圖像上訓練過的網(wǎng)絡(luò)開始的,比如在ImageNet上預(yù)訓練的ResNet。然后,我們將通過僅重新訓練最后幾個層并使其他層獨立來微調(diào)ResNet模型。那樣的話,我們正在將ResNet從數(shù)百萬圖像中學到的信息(圖像特征)進行微調(diào),以便我們可以將它應(yīng)用于不同的任務(wù)。這是可能的,因為跨域的圖像的特征信息通常非常相似,但是這些特征的分析可以根據(jù)應(yīng)用而不同。

一個基本的遷移學習通道
我們現(xiàn)在說過幾次:更多的數(shù)據(jù)=更好的表現(xiàn)。除了遷移學習之外,另一種快速而簡單的方法來提高模型的性能,即數(shù)據(jù)增強。數(shù)據(jù)增強涉及通過在使用原始類別標簽的同時通過改變數(shù)據(jù)集中的一些原始圖像來生成合成訓練示例。例如,圖像數(shù)據(jù)增強的常見方式包括:
· 水平和垂直旋轉(zhuǎn)或翻轉(zhuǎn)圖像
· 改變圖像的亮度和顏色
· 隨機模糊圖像
· 隨機從圖像裁剪補丁
基本上,你可以進行任何改變,改變圖像的外觀,但不是整體的內(nèi)容,即你可以制作一個藍色的狗的照片,但你仍然應(yīng)該能夠清楚地看到,照片上是一個狗。

數(shù)據(jù)裂變!
在機器學習中,集合訓練多個模型,然后將它們組合在一起以獲得更高的性能。因此,這個想法是在相同的數(shù)據(jù)集上訓練同一個任務(wù)上的多個深度網(wǎng)絡(luò)模型。模型的結(jié)果然后可以通過投票方案來進行組合,即具有最高票數(shù)的勝出。
為了確保所有模型不同,可以使用隨機權(quán)重初始化和隨機數(shù)據(jù)增強。眾所周知,由于使用了多個模型,因此集合通常比單個模型精確得多,因此從不同角度接近任務(wù)。在現(xiàn)實世界的應(yīng)用中,尤其是挑戰(zhàn)或競爭中,幾乎所有頂級模型都使用合奏。

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

深度神經(jīng)網(wǎng)絡(luò)修剪的步驟
這個想法是,在網(wǎng)絡(luò)中的許多參數(shù)中,有些是多余的,對輸出沒有太大貢獻。如果您可以根據(jù)對網(wǎng)絡(luò)的貢獻排列網(wǎng)絡(luò)中的神經(jīng)元,則可以從網(wǎng)絡(luò)中移除低排名的神經(jīng)元,從而形成更小,更快的網(wǎng)絡(luò)。可以根據(jù)神經(jīng)元權(quán)重的L1 / L2均值,平均激活,一些驗證集上神經(jīng)元不為零的次數(shù)以及其他創(chuàng)造性方法來進行排序。獲得更快/更小的網(wǎng)絡(luò)對于在移動設(shè)備上運行深度學習網(wǎng)絡(luò)非常重要。
修剪網(wǎng)絡(luò)的最基本的方法是簡單地放棄某些卷積濾波器。在近期的一篇文章中,這樣做是相當成功的。這項工作中的神經(jīng)元排名相當簡單:它是每個濾波器權(quán)重的L1范數(shù)。在每個修剪迭代中,他們對所有的過濾器進行排序,在全部層中修剪m個排名最低的過濾器,重新訓練和重復(fù)!
在近期的另一篇分析剩余網(wǎng)絡(luò)結(jié)構(gòu)的文章中提出了修剪過濾器的一個關(guān)鍵洞察。作者指出,在刪除層的時候,具有剩余快捷連接的網(wǎng)絡(luò)(例如ResNets)與沒有使用任何快捷連接的網(wǎng)絡(luò)(如VGG或AlexNet)相比,保留更加良好的精度并且穩(wěn)健得多。這個有趣的發(fā)現(xiàn)具有重要的實際意義,因為它告訴我們在修剪網(wǎng)絡(luò)進行部署和應(yīng)用時,網(wǎng)絡(luò)設(shè)計是至關(guān)重要的(使用ResNets?。K允褂米钚伦詈玫姆椒偸呛芎玫?!
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

