![乾貨合集|帶你深入淺出理解深度學習(附資源打包下載)](http://p2.ttnews.xyz/loading.gif)
翻譯:倪驍然
校對:盧苗苗
本文約2300字,建議閱讀10分鐘。
本文提供資源幫助你在放置一個conv2d層或者在Theano裡調用T.grad的時候,瞭解到在代碼背後發生了什麼。
網絡中有著豐富的教程,供我們開始接觸深度學習。你可以選擇從著名的斯坦福CS221或者CS224課程開始:
- CS221:
- http://cs231n.stanford.edu/
- CS224:
- http://cs224d.stanford.edu/
如果你從未接觸過這方面的內容,你可以選擇快速AI課程或者深度學習AI課程:
- 快速AI課程:
- http://www.fast.ai/
- 深度學習AI課程:
- https://www.deeplearning.ai/
除了深度學習AI課程,其它所有課程都是免費的,你可以在家中舒適地學習。你需要的僅僅是一臺好的電腦(最好帶有一塊Nividia的GPU), 以及你已經準備好向深度學習邁出你的第一步。
![乾貨合集|帶你深入淺出理解深度學習(附資源打包下載)](http://p2.ttnews.xyz/loading.gif)
然而,本文不是為一個純新手準備的。當你瞭解了一些深度學習算法的原理,你可能想要知道這些算法是怎麼運作的。儘管深度學習的絕大部分工作(大概是90%的工作,除去10%的的數據)是添加像Conv2d這樣的層,調節不同優化策略(如ADAM)的超參數,或者通過在Python中添加一行代碼(得益於可用的優秀框架)使用batch norm以及其它一些技巧,很多人可能都很想知道在這之後到底發生了什麼。
本文資源已整理打包
後臺私信回覆“180801”即可獲取資源
本文列舉的這些資源,在你放置一個conv2d層或者在Theano裡調用T.grad的時候,可以幫助你瞭解到在代碼背後發生了什麼。
總論
毋庸置疑,《深度學習》(Deep Learning Book)這本書是最著名、最為人知的資源:
- Deearning Book:
- http://www.deeplearningbook.org/
其它比較好的資源還有Charniak教授的課程和論文,可以作為深度學習的技術介紹:
- Charniak教授課程:
- https://cs.brown.edu/courses/csci1460/assets/files/deep-learning.pdf
- 論文:
- https://arxiv.org/abs/1709.01412
當你想要從一個具體的角度理解深度學習的話可以參考其它一些資源比較好的資源。比如,下面這個教程是從應用數學的角度來攥寫的,或者如果你僅僅是想要開始寫代碼而不是深入研究理論的話,可以閱讀下面的文章:
- 應用數學角度的教程:
- https://arxiv.org/abs/1801.05894
- 文章鏈接:
- https://arxiv.org/abs/1703.05298
還有一個比較推薦的是這個
基於PyTorch的深度學習課程。這個課程講解很全面,可以幫助你從一個更加宏觀的角度理解:- 基於PyTorch的深度學習課程:
- https://documents.epfl.ch/users/f/fl/fleuret/www/dlc/
反向傳播的問題
很多時候,人們不確定“為什麼梯度下降和反向傳播是同一件事情?”,或者,“到底什麼是鏈式法則以及反向傳播?”要了解這些基本問題,我們可以選擇閱讀Rumelhart,Hinton和Williams之前寫的關於反向傳播的論文。這篇論文簡單易懂:
- Rumelhart,Hinton,Williams關於反向傳播的論文:
- https://web.stanford.edu/class/psych209a/ReadingsByDate/02_06/PDPVolIChapter8.pdf
除此之外,其它一些非常有用的資源包括Karpathy的關於反向傳播導數的博客,以及這段解釋導數反向傳播的視頻:
- 博客地址:
- https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b
- 視頻地址:
- https://www.youtube.com/watch?v=gl3lfL-g5mA
線性代數和其它數學內容
大家都會給某位立志於學習線性代數的人推薦Strang教授的課程,這大概是關於線性代數最好的資源了:
- 線性代數課程:
- https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/
類似的還有Boyd教授的運籌學課程:
- 運籌學課程:
- http://web.stanford.edu/~boyd/cvxbook
Calculus on Manifolds的《Calculus on Manifolds》這本書是關於向量積分的微積分內容(你可以通過Google搜索“Calculus on Manifolds”找到一份pdf)。但是,一開始學習深度學習的時候,我們不需要深入學習這些內容。另一種方法是快速複習《深度學習微積分》(Calculus for DeepLearning)這本書:
- Calculus for DeepLearning:
- https://arxiv.org/abs/1802.01528
這裡還有一些關於深度學習的凸優化內容的講座筆記:
- 凸優化講座筆記:
- http://people.eecs.berkeley.edu/~elghaoui/Teaching/EE227BT/lectures.html
此外,Sebastian Reuder的論文也是比較好的資源,同時我也喜歡用下面的筆記來理解tensors的導數:
- Sebastian Reuder論文:
- https://arxiv.org/abs/1609.04747
- tensors導數筆記:
- https://github.com/mtomassoli/tensor-differential-calculus/blob/master/tensor_diff_calc.pdf
自動求導和深度學習庫
在你做深度學習項目的時候,不必非要了解自動計算導數。大多數框架,像Torch,Theano或者Tensorflow會幫你自動運算好。通常來說,你甚至不需要知道怎樣進行導數運算。也就是說,如果你一定要弄清楚深度學習框架是怎樣工作的,你可能想在下面這篇文章中理解自動求導是如何實現的:
- 文章鏈接:
- https://arxiv.org/abs/1502.05767
其它比較好的用來理解深度學習庫功能實現的資源可以在下面的博客和視頻中找到:
- 博客鏈接:
- http://blog.christianperone.com/2018/03/pytorch-internal-architecture-tour
- 視頻鏈接:
- https://www.youtube.com/watch?v=Lo1rXJdAJ7w
卷積神經網絡
在你學習了一些如何使用基本convents的課程後,你可能需要去理解卷積是如何在圖像上工作的。“輸入應用某種類型的卷積後,輸出的維度是多少?”“stride是如何影響卷積的?”“Batch正則化是什麼?”“對於這類應用問題,我看到過的最好的資源是下面的教程和Ian Goodfellow的演講:
- 教程鏈接:
- https://arxiv.org/abs/1603.07285
- Ian Goodfellow演講視頻:
- https://www.youtube.com/watch?v=Xogn6veSyxA
如果你想得到一個好點子的話,下面鏈接中關於Convenets的評論更加全面,另外這篇關於物體檢測的總結也是比較好的資源:
- 關於Convenets的評論:
- https://arxiv.org/abs/1803.08834
- 關於物體檢測的總結:
- https://arxiv.org/abs/1803.08834
自然語言處理中的深度學習
我在前文中提出的Stanford 224課程是一個非常好的起點,可以基本讓你瞭解關於自然語言處理中深度學習的方方面面。這裡還有一個Graham Neubig(他使用dynet)發佈在YouTube上的課程:
- Graham Neubig發佈的課程:
- https://www.youtube.com/watch?v=Sss2EA4hhBQ
還有一本你可能喜歡的Yoav Goldberg編寫的NLPbook以及這本書編寫之後的NLP上新的研究進展的回顧:
- NLPbook:
- https://u.cs.biu.ac.il/~yogo/nnlp.pdf
- NLP上新進展回顧:
- https://arxiv.org/abs/1708.02709
關於是否在文字上使用ConvNets或者RNNs(LSTM/GRUs),也是一個非常普遍的問題,這裡有一個不錯的概述:
- 概述:
- https://arxiv.org/pdf/1803.01271.pdf
強化學習
Sutton和Barto所寫的《強化學習》(Reinforcement Learning)這本書是開始學習這些方法的不錯途徑。這本書是免費的,可以在下面鏈接中獲取:
- Reinforcement Learning:
- http://incompleteideas.net/book/the-book-2nd.html
這裡還有一篇關於最新的深度強化學習方法的綜述以及一個關於強化學習的非常有趣的教程:
- 深度強化學習方法綜述:
- https://arxiv.org/abs/1708.05866
- 強化學習教程:
- https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752
這裡有一篇關於MCTS (Monte CarloTree Search)的綜述(除了深度強化學習技巧外,Deepmind使用其作為AlphaGo算法的一部分),但是我喜歡用這個快速教程來學習它們:
- MCTS綜述:
- http://mcts.ai/pubs/mcts-survey-master.pdf
- 快速教程:
- http://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/?utm_source=top.caibaojian.com/19271
其它一些好的綜述/教程
在ICLR 2016上,Goodfellow給出過一篇關於GANs(生成對抗網絡)和廣義上生成模型的教程,可以在下面鏈接中找到:
- 教程鏈接:
- https://www.youtube.com/watch?v=HGYYEUSm-0Q
神經網絡可以用來做藝術遷移(例如Prisma app),可以在這裡找到一篇關於如何做這個任務的詳細的調查:
- 神經網絡應用於藝術遷移:
- https://arxiv.org/abs/1705.04058
另一篇關於Reuder寫的關於多任務學習 的研究(用同一個神經網絡結合多個任務)在這裡:
- 關於多任務學習的研究:
- https://arxiv.org/abs/1706.05098
評論
儘管深度學習在許多問題上效果很好,我們知道永遠有它還無法解決的問題。一些值得閱讀的好評論有Shalev-Shwartz等人寫的Failures of Gradient-Based Deep Learning:
- Failures of Gradient-Based Deep Learning:
- https://arxiv.org/abs/1703.07950
這個Hinton的講座列舉了ConvNets的難點和為什麼ConvNets不能解釋訓練集圖片的負面影響:
- ConvNets的難點:
- https://www.youtube.com/watch?v=rTawFwUvnLE
- ConvNets不能解釋訓練集圖片的原因:
- https://arxiv.org/pdf/1703.06857.pdf
下面是前段時間的另一個評論以及一篇關於濫用深度學習的全面報告:
- 評論鏈接:
- https://arxiv.org/abs/1801.00631
- 關於濫用深度學習的全面報告:
- https://arxiv.org/abs/1802.07228
對抗樣本
這是一個巨大領域,可以製造欺騙卷積神經網絡的人造或真實的數據。我本可將這一節放在評論裡,但我沒有這樣做,原因是:
1. 它們並不是所有應用的都需要面對的技術挑戰。
2. 我在這方面不是非常精通。能夠使人接觸這個話題並引起興趣的例子在下面這篇文章裡,他們生成“對抗物體”來欺騙神經網絡:
- 文章鏈接:
- https://arxiv.org/abs/1703.05298
為了成為一位數據科學家,你還可以在下面鏈接中閱讀關於機器學習算法的例子:
- 機器學習算法例子:
- https://blog.paralleldots.com/data-science/machine-learning/ten-machine-learning-algorithms-know-become-data-scientist/
本文資源已整理打包
公眾號後臺回覆“180801”即可獲取下載鏈接
原文標題:
Best (And Free)Resources to Understand the Nuts and Bolts of Deep Learning
原文鏈接:
https://dzone.com/articles/best-and-free-resources-to-understand-nuts-and-bol
譯者簡介
倪驍然,紐約大學計算機碩士在讀,對機器學習,計算機視覺和自然語言處理有一些淺顯的認識,對知識充滿渴求。感慨於這個時代人工智能的快速發展,希望某天能用所學方便每個人的生活。
運營人員:冉小山
閱讀更多 THU數據派 的文章