18個深度學習技巧實戰,資深研究員的血淚教訓

2021-02-23 雷課

 Nikolas Markou自 2013 年以來就一直在使用深度學習和深度置信網絡。他曾加入了一個綠地項目,負責選擇在計算機視覺平臺上使用的核心機器學習算法。這些算法要麼是不能很好地工作,要麼能夠很好地工作但不能泛化,需要很多時間或在遇到類似的數據集時,它無法收斂。Nikolas Markou迷失了。然後,他從學術界抓住了希望,學術界掀起了深度學習的熱風,宣稱它能解決所有問題。

對於深度學習,Nikolas Markou是持懷疑態度的,所以他閱讀了很多相關的論文、書籍、筆記等。令Nikolas Markou驚訝的是,這不是炒作,深度學習能工作,而且工作得很好。但是,它畢竟是一個新的概念(雖然它的基礎在70年代就已築起了),出現了很多有關如何充分利用深度學習的技巧和 tips(例如 Alex Krizhevsky 就幾乎概況了大部分的 tips,而且可以說是他預先發現了批標準化)。

下面是Nikolas Markou發現的一些有助於充分利用 DNN 的小技巧:


記得要 shuffle。不要讓你的網絡通過完全相同的 minibatch,如果框架允許,在每個 epoch 都 shuffle 一次。


擴展數據集。DNN 需要大量的數據,而且模型在小的數據集上很容易過擬合。Nikolas Markou強烈建議你要擴展原始的數據集。如果你的是一個視覺任務,可以增加噪點、增白,減少像素,旋轉或色移,模糊,等等可以擴展的一切。有一點不好的是,假如你擴展得太大,可能訓練的數據大多數是相同的。Nikolas Markou創建了一個應用隨機變換的層來解決這個問題,這樣就不會有相同的樣本。若果你用的是語音數據,可以進行移位和失真處理。


在整個數據集上訓練之前,先在非常小的子數據集上訓練進行過擬合,這樣你會知道你的網絡可以收斂。這個 tip 來自 Karpathy。


始終使用 dropout 將過擬合的機率最小化。在大小 > 256 (完全連接層或卷積層)之後就應該使用 dropout。關於這一點有一篇很好的論文:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning [Gal Yarin & Zoubin Ghahramani,2015].


避免 LRN 池化,MAX 池化會更快。


避免 Sigmoid/TanH 的門,它們代價昂貴,容易飽和,而且可能會停止反向傳播。實際上,你的網絡越深,就越應該避免使用 Sigmoid 和 TanH。可以使用更便宜而且更有效的 ReLU 和 PreLU 的門,正如在 Yoshua Bengio 等人的論文 Deep Sparse Rectifier Neural Networks 中所提到的,這兩者能夠促進稀疏性,而且它們的反向傳播更加魯棒。


在最大池化之前不要使用 ReLU 或 PreLU ,而是在保存計算之後使用它。


不要使用 ReLU ,它們太舊了。雖然他們是非常有用的非線性函數,可以解決很多問題。但是,你可以試試用它微調一個新模型,由於 ReLU 阻礙反向傳播,初始化不好,你沒法得到任何微調效果。但是你應該用 PreLU 以及一個非常小的乘數,通常是0.1。使用 PreLU 的話收斂更快,而且不會像 ReLU 那樣在初始階段被卡住。ELU 也很好,但成本高。


經常使用批標準化。參考論文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[Sergey Ioffe & Christian Szegedy,2015]。這會很有效。批標準化允許更快的收斂(非常快)以及更小的數據集。這樣你能夠節省時間和資源。雖然大多數人喜歡刪除平均值,不過Nikolas Markou不喜歡。Nikolas Markou喜歡壓縮輸入數據為[-1,+1]。這可以說是訓練和部署方面的技巧,而不是針對提升性能的技巧。


要能適用更小的模型。假如你是像Nikolas Markou這樣部署深度學習模型,你很快就會體會到把千兆字節規模的模型推給用戶或地球另一端的伺服器的痛苦。哪怕要犧牲一些準確度,也應該小型化。


假如你使用比較小的模型,可以試試 ensemble。通常 ensemble 5個網絡能夠提升準確度約3%。


儘可能使用 xavier 初始化。你可以只在大的完全連接層上使用它,然後避免在 CNN 層上使用。有關這點的解釋可以閱讀這篇文章:An Explanation of Xavier Initialization(by Andy Jones)


如果你的輸入數據有空間參數,可以試試端到端的 CNN。可以閱讀這篇論文:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size[Forrest N. Iandola et. al. 2016],它介紹了一種新的方法,而且性能非常好,你可以嘗試應用上面提到的tips。修改你的模型,只要可能就使用 1x1 的 CNN 層,它的位置對提高性能很有幫助。


假如沒有高端的 GPU,就不要嘗試訓練任何東西了。


假如你要利用模型或你自己的層來製作模板,記得把所有東西參數化,否則你得重建所有二進位文件。


最後,要明白你在做什麼。深度學習就像是機器學習裡的中子彈,它不是任何任務、任何時候都有效的。了解你正在使用的結構以及你試圖達成的目的,才不至於盲目地複製模型。

了解 DL 背後的數學,推薦閱讀 Ian Goodfellow , Yoshua Bengio 和 Aaron Courville 合著的經典教材《深度學習》,這本書真的很好,講解得很清楚。網上有免費的 pdf 版本,但買一本支持作者的貢獻也無妨。

此外,如果想了解深度學習的歷史和介紹,可以閱讀鄧力和俞棟合著的《深度學習:方法及應用》。

如果真的想從頭開始實現算法,可以閱讀 Timothy Masters 寫的 Deep Belief Nets in C++ and CUDA C, Vol. 1: Restricted Boltzmann Machines and Supervised Feedforward Networks。

相關焦點

  • 微軟亞洲研究院主任研究員鄭宇博士:如何用深度學習處理時空大數據...
    分享內容本次鄭宇博士的分享題目是「深度學習在時空數據中的應用」。分享內容為:探討時空數據(區別於文本、語音和視頻數據)的特性,以及深度學習技術在時空大數據上的使用和設計方法,分享基於深度學習的城市人流量預測的實戰案例,並介紹深度學習和深度強化學習在圍棋中的應用(圍棋也可看作一種時空數據)。
  • 百度官方:《深度學習中文教程實戰版》免費開發!
    減少代碼量,學習成本減半!使用高層API後,在同一個深度學習任務中,原始的訓練代碼需要57多行代碼才能完成,使用高層API後,僅用18行代碼即可實現相同的功能。>獨立完成模型搭建、訓練及部署,能解決面試中最常被問到的深度學習任務,理論實戰雙豐收。
  • 五天入門深度學習,這裡有一份PyTorch實戰課程
    機器之心整理參與:李亞洲、路這是一門五天入門深度學習的實戰課程想入門深度學習的小夥伴有福了!dataflowr 最近推出了一門五天初步掌握深度學習的實戰教程(實戰使用 PyTorch 框架),有知識點有實例有代碼,值得一看。
  • 老司機的血淚教訓,才是職場中秘不告人的訣竅!
    【閒聊】一是因為秘不告人,二是老司機們的血淚教訓。所以會有好多初入職場的新人想知道,有了這些訣竅,就可以在職場中避開一些不必要的麻煩。比如以下幾個:1. 公位選擇技巧---如果可能的話,一定要選擇自己可以眼觀六路的位置,省得在以後工作中開小差時被領導突然襲擊。沒得選的時候,那就把電腦屏幕設置的較暗一些,一來對眼確實有好處,二來可以緩衝別人對你的窺視。最好,多掌握一些快捷鍵,在突發情況下,都迅雷不及掩耳之勢地來回切換。另外,可以把自己感興趣,忍不住上班也要瞄兩眼的文檔,重命名成一看就是公司文檔的名字!
  • 前瞻產業研究院資深研究員:優秀的產業研究員是如何煉成的?
    作為產業研究員,自身能力圈時時刻刻都在接受挑戰。不僅要分析行業市場規模,還要預估行業需求天花板,更要熟知行業面臨市場競爭的對策。萬一「有幸」接到從未了解過的行業case,更加感到力不從心!鑑於此,前瞻經濟學人APP問答頻道邀請到前瞻產業研究院資深產業研究員朱琳慧,深度解答如何成為優秀的產業研究員,將前瞻產業研究院二十年縱橫行研江湖的秘訣通通帶給你!
  • 就在剛剛,百度重磅發布《深度學習中文教程實戰版》,對外免費開發!
    減少代碼量,學習成本減半!使用高層API後,在同一個深度學習任務中,原始的訓練代碼需要57多行代碼才能完成,使用高層API後,僅用18行代碼即可實現相同的功能。>獨立完成模型搭建、訓練及部署,能解決面試中最常被問到的深度學習任務,理論實戰雙豐收。
  • 【最實戰在線課】Kaggle冠軍親自教你深度學習
    2012年以來,深度學習橫掃 AI 圈,成為計算機視覺(CV)、語音處理、自然語言處理等領域當中的大殺器,幾乎以一己之力掀起了迄今為止最強的一次 AI 風暴。現在問題來了,我們該怎麼才能快速掌握深度學習的基本知識,並上手應用呢?
  • 基於斯坦福CS231n課程的學習經驗與實戰技巧|分享總結
    雷鋒網AI研習社按:史丹福大學的CS231n主要介紹卷積神經網絡相關的深度學習知識,課程從算法的公式到實踐進行了全面的介紹。基於該課程的三場實戰分享直播課近期在AI研習社上線。在雷鋒網的AI研習社直播課上,張智偉,李振,陳閩川三位老師分別為大家帶來了使用TensorFlow實現DQN實戰、深入講解圖像分類和網絡優化以及AI視覺晶片共三場乾貨滿滿的直播。該課程結合CS231n課程同時將課程內容與應用領域連接起來,讓大家可以真正的學會如何應用深度學習。
  • 基於TensorFlow的深度學習實戰
    深度學習實戰TensorFlow是很好的深度學習框架,希望在深度學習方向有更深入的學習和實踐的同學,七月在線特此推出《深度學習集訓營》課程,略過Python基礎,從TensorFlow搭建DNN解決問題起步,實戰BAT工業項目。
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    【導讀】麻省理工學院發布一系列深度學習視頻課和代碼實戰,今天給大家介紹的是研究科學家Lex Fridman整理的常用的深度學習七個基本框架實戰,
  • 實戰商學院8月精彩實戰學習計劃
    益策實戰商學院北京、上海、廣州、深圳、成都、廈門、青島、武漢、重慶9大學習基地
  • 你若報考這4個專業,有必要攻讀「第二學位」,學長:血淚教訓
    國家規定,兩者在畢業後的起點工資和待遇是相同的,但是研究生人才比「第二學位」人才,在某門專業上學習的更精細一些。雖然考取「第二學位」的難度不如考研大,報考人數也不如考研人數多,但是其要求還是很嚴格的。首先考生必須全日制脫產學習兩年以上,英語必須要達到四級以上標準,如各科考試成績合格,則會頒發「第二學位」證書。
  • 資源│機器學習、深度學習、算法工程師等 AI 相關崗位面試需要知識
    目錄面試資料代碼實戰 Pytorch代碼實戰 Tensorflow網課深度學習相關資料註:百度 「如何使用 google 免費 gpu」 ,每個人單卡 14G Telsa T4,需要科學上網https://github.com
  • 百度發布《深度學習中文教程》!
    減少代碼量,學習成本減半!使用高層API後,在同一個深度學習任務中,原始的訓練代碼需要57多行代碼才能完成,使用高層API後,僅用18行代碼即可實現相同的功能。同時開放了7天學習實踐活動,在7天中,你將直接跳過冗長的理論、懵bi~的調試,讓你掌握深度學習任務的通用套路,能夠獨立完成模型搭建、訓練及部署,能解決面試中最常被問到的深度學習任務,理論實戰雙豐收。
  • 忍不住推薦一個超系統的AI算法實戰課程!
    5.數學、統計能力較好,希望轉行的其它專業學生和在職人員課程分為 面授班 與 遠程班 兩種, 每周六日上課,不同班型學習周期約在4-6個月左右,涵蓋人工智慧的最重要內容機器學習、深度學習、企業級實戰項目等內容,重點講解各類算法
  • 《深度學習: 算法到實戰》, 中科院博士為你講授!
    為此,經過一年多的精心打磨準備,專知背靠中科院自動化所模式識別國家重點實驗室,隆重推出《深度學習: 算法到實戰》,一線教授博士帶你學習深度學習的基礎算法和應用實例,歡迎加入學習!我們是專知,提供專業可信的人工智慧知識分發服務,讓認知協作更快更好!
  • Python深度學習:邏輯、算法與編程實戰
    今天為您推薦一本精品圖書--Python深度學習:邏輯、算法與編程實戰(ISBN:978-7-111-65861-0)。本書可作為深度學習相關從業人員的參考指南,也可作為大中專院校人工智慧相關專業的教材,還可作為廣大人工智慧愛好者的拓展學習手冊。國家「萬人計劃」領軍人才、西安電子科技大學計算智能研究所所長公茂果,浙江宇視科技有限公司研發副總裁/研究院副院長、人工智慧專家周迪聯合推薦。
  • 深度強化學習核心技術實戰培訓班
    深度強化學習核心技術實戰培訓班人工智慧算法工程師人才培養通知
  • 資料|Keras 圖像深度學習實戰
    它是一款非常流行的深度學習計算框架,利用keras只要十幾行代碼就能寫出一個簡單的神經網絡訓練模型。Keras本身並不提供深度學習的計算引擎,實際它是利用TensorFlow或者Theano作為後端計算引擎的,但它封裝了眾多API接口,使用者只要了解其封裝層的特性就能靈活應用於各種應用場景,是作為深度學習開發者的編程利器。
  • 大學三大「謊言」揭曉,大一新生不要輕信,信了血淚教訓甚多!
    以下是小編給大家說的大學三大「謊言」,大一新生們不要輕信,信了血淚教訓甚多!1. 上大學輕輕鬆鬆,生活優哉遊哉上大學之前,很多學生都會聽到自己的高中老師或者父母說,上大學很輕鬆,沒有壓力,生活優哉遊哉,然而真是這樣嗎?其實很多學生也都真的覺得是這樣了。