七步理解深度學習

七步理解深度學習html

By Matthew Mayo     翻譯by LonelySoulpython


網上有不少的深度學習的免費學習資源,可是可能會對從哪裏開始有些困惑。七步內從對深度神經網絡的模糊理解到知識淵博的從業者(knowledgeable practitioner)!git

深度學習是機器學習的一個分支,擁有不少的類似性,可是卻也不一樣,深度神經網絡結構在天然語言處理、計算機視覺、生物信息學和其餘領域解決了各類各樣的問題。深度學習經歷了一場巨大的最近研究的重現,而且在不少領域中已經展示出最早進的成果。github

本質上,深度學習是超過一層隱藏神經元的神經網絡的執行。可是,這是對深度學習的一個簡單的見解,而且不是一個沒有爭議的觀點。這些深層構架也很是不一樣,對不一樣任務或目標優化會有不一樣的執行。在這樣一個恆定速率進行着的大量研究在以史上未有的速度展示新的和創新的深度學習模型。算法


最近的一個白熱化的研究課題,深度學習彷佛影響着機器學習的全部領域,相關的還有數據科學。粗略看看相關arXiv目錄下最近的論文,很容易看出大量正在被髮表的論文都是深度學習相關的。鑑於已經產生的使人驚歎的成果,不少研究者,從業者和外行都在想深度學習是不是真正的人工智能的邊界。api

這系列的閱讀材料和教程旨在給深度神經網絡的新人提供一條路徑去理解這個巨大而複雜的課題。儘管我不假設對神經網絡和深度學習真正的理解,可是我假設你對通常的機器學習理論和實踐具備某種程度的熟悉度。爲了克服在通常機器學習理論和實踐的不足,你能夠看看最近KDnuggets發佈的7 Steps to Mastering Machine Learning With Python。因爲咱們也看用Python寫的例子的執行,對語言有些熟悉會頗有用。介紹和綜述的資源在previodsly mentioned post也是提供的。網絡


這篇博客將以緊密結合的順序使用網絡上免費提供的材料在理論層面上得到對深度神經網絡的一些理解,而後繼續轉向一些實際的執行。一樣的,借鑑過來的引用材料只屬於建立者,跟資源會一塊兒被標註。若是你看到有人由於他們的工做沒有被正確引用,請告知我,我會很快修改的。app


一個徹底誠實的免責申明:深度學習是一個複雜而在廣度和深度(pun unintended?)變化很快的領域,所以這篇博客不保證包括全部成爲深度學習專家的手冊;這樣的一個轉化將會須要更多的時間,不少附加材料和不少實際創建和測試的模型。可是,我相信的是,使用這裏的資源能夠幫你在這樣一個路徑下開始。框架


第一步:介紹深度學習

若是你正在讀這個而且對這個課題感興趣,你可能已經對深度神經網絡已經熟悉,甚至在一個很基礎的層次。神經網絡有一個故事性的歷史,可是咱們將不會深刻。可是,咱們須要若是在開始就有一個廣泛高層次的理解。機器學習

首先,看看DeepLearning .tv精彩的介紹視頻。在 寫完這個的時候已經有14個視頻了;若是你喜歡看完他們,可是必定要看前五個,包含了神經網絡的基礎和一些更常見的結構。

而後,仔細閱讀Geoff Hinton,Yoshua Bengioh和Yann LeCun的NIPS 2015 Deep Learning Tutorial,一個稍微更低層次的介紹。

完成咱們的第一步,讀the first chapter of Neural Networks and Deep Learning,這個由Michael Nielden寫的精妙的,不斷更新的在線書,這會更近一步可是依然很粗淺。


第二步:學習技術

深度神經網絡依賴代數和微積分的數學基礎。然而這篇博客不會產生任何理論上的數學,在繼續以前有一些理解將會頗有幫助。

第一,看Andrew Ng的linear algebra review videos。可是不是絕對的必要,想要對線性代數了解更深的話,從Ng的斯坦福課程看看Zico Kolter 和Chuong Do寫的Linear Algebra Review and Reference.

而後看看Professor LeonardIntroduction to the Derivative of a Function. 視頻是很簡潔的,例子是很清晰的,而且提供了從數學的視角來看在反向傳播的過程當中到底發生了什麼。一下子會更多。

接下來迅速瀏覽下維基Sigmoid function的詞條,一個在神經網絡中常常經過單個神經元應用的邊界差分函數。

最後,從數學上休息下閱讀谷歌研究科學家 Quoc LeDeep Learning Tutorial.




第三步:反向傳播和梯度降低

神經網絡包括現代深度構架重要的一部分是反向傳播算法的錯誤,使用離輸入更近的神經元經過網絡更新權重。很是坦率的說,這就是神經網絡繼承他們」力量「(缺少更好的術語)的地方。反向傳播和一個隨後分佈式的最小化權重的優化方法,爲了最小化損失函數。在深度學習中一個常見的優化方法是梯度降低。

首先,看看這些斯圖加特大學Marc Toussaint 寫的關於梯度降低的介紹筆記

而後,看看Matt Mazur寫的this step by step example of backpropagation in action.

繼續,閱讀Jeremy Kun關於 coding backpropagation in Python的信息博客。仔細看看完整代碼也是建議的,嘗試本身寫一遍代碼。

最後,讀Quoc Le寫的Deep Learning Tutorial的第二部分,爲了獲取一些更具體更常見的深度結構和他們用途的介紹。


第四步:實踐

具體的神經網絡結構的下一步介紹將會使用在如今研究中最流行的python深度學習庫包括實際執行。在一些狀況下,一些不一樣的庫的優化是爲了某個特定的神經網絡結構,而且已經在某些特定的領域立足,咱們將會使用三個不一樣的深度學習庫。這不是多餘的,在特定領域的實踐中與最新的庫保持一致時學習時很重要的一步。接下來的訓練也將會讓你本身評價不一樣的庫,而且造成一個在哪些問題上用哪一個的直覺。

如今歡迎你選擇一個庫或者聯合庫進行安裝,是否繼續那些教程取決於你的選擇。若是你但願嘗試一個庫而且使用它來執行接下來步驟的教程,我會推薦TensorFlow,緣由以下,我會提到最相關的(至少是在個人眼中):它執行自動分化(autodifferentiation),意味着你不須要擔憂從頭執行反向傳播,更可能使代碼更容易理解(尤爲是對一個初學者來講)。

我寫關於TensorFlow的文章是在剛出來的時候TensorFlow Disappoints – Google Deep Learning Falls Shallow,這個標題暗示着比在實際中更失望;我最初關注的是它缺乏GPU集叢的網絡訓練(極可能很快會有它本身的方式).不管如何,若是你沒有看列在下面的白皮書可是想看更多關於TensotFlow的材料,我建議讀我原始的文章,而後跟着Zachary Lipton's 寫的很好的部分,TensorFlow is Terrific – A Sober Take on Deep Learning Acceleration.


TensorFlow

Google的TensorFlow是基於數據流圖展示的一個通用的機器i學習庫。

Theano
Theano是被蒙特利爾大學的 LISA group積極開發的。
Caffe
Caffe是由加州大學伯克利分校的 BVLC開發的。Theano和Tensorflow能夠認爲是通用的深度學習庫,Caffe是由一個計算機視覺的組開發的,主要考慮的解決那樣的問題;可是,它也是一個通用的庫爲了爲不一樣領域創建不一樣的深度學習框架。
記住這些並不只僅是如今流行的庫。事實上,還有不少不少能夠選擇,這些選擇是基於教程的流行性,文檔和整體上研究上的接受程度。

其餘的深度學習庫選擇包括:
  • Keras---一個用於Theano和TensorFlow高層、極簡Python神經網絡庫
  • Lasagne---Theano頂上的輕量級python庫
  • Torch---Lua機器學習算法庫
  • DeepLearning4j---Jaav和Scala開源、分佈式深度學習庫
  • Chainer---一個靈活的、直觀的python神經網絡庫
  • Mocha---Juliade的一個深度學習框架
安裝好這些庫,如今咱們能夠繼續實踐。

第五步:卷積神經網絡和計算機視覺

計算機視覺解決處理和理解圖片和它的符號信息。大部分領域最近的突破都是來自於深度神經網絡的使用。特別的, 卷積神經網絡在最近扮演一個很重要的角色。


首先,讀Yoshua Bengio的 deep learning with computer vision,爲了對這個課題有一個理解。
而後。若是你安裝好了TensorFlow,閱讀並執行這個 教程,這個是用卷積i神經網絡分類 CIFAR-10圖片。若是你安裝了Caffe,對於上一個教程的替代,執行 Caffe中的卷積神經網絡分類 MNIST數據集圖片。
這裏是一個粗略等同於Caffe 的練習 Theano tutorial.
而後,讀 Krizhevsky, Sutskever和Hinton的seminal convolutional neural network paper增長額外的視野。

第六步:遞歸網和語言處理

天然語言處理(NLP)是收益與深度學習的另外一個領域。關心理解天然語言,NLP經過運用遞歸神經網絡(RNN)有不少最新的成功。
Andrej Karpathy有一篇很讚的博客,題目是The Unreasonable Effectiveness of Recurrent Neural Networks,列出了RNN在訓練字符級語言模型的有效性的大綱。它提到的代碼是經過Torch用Lua寫的,因此你能夠跳過;這個在純理論層次上依舊頗有用。
這個教程爲語言處理在TensorFlow上執行RNN.
你也能夠用Theano而且用這個教程嘗試,用文字嵌套執行了一個RNN.
最後,你能夠讀Yoon Kim的 Convolutional Neural Networks for Sentence Classification,這是CNN在語言處理上的又一個應用。 Denny Britz 有一篇博客,題目是Implementing A CNN For Text Clasification in TensorFlow,使用的是電影的評論數據。

第七步:更深刻的課題

上面的步驟在深度學習已經從理論上進步到實踐。經過在前兩步執行卷積神經網絡和遞歸神經網絡,但願的是對它們力量和功能性的預先感知。與CNN和RNN同樣廣泛的有不少其餘隨着基礎研究出現的已經存在的深度結構。
有不少超過前面理論步驟展示的其餘的考慮,一樣的,下面是這些另外結構和考慮的快速的調研。
爲了更深的理解適合時間序列預測的特定類型的RNN,長短項記憶網絡,讀Christopher Olah寫的這篇文章
Denny Britz寫的這篇文章是用LSTM和GRUs的 很好的一個關於RNN的教程。看這篇論文更深地討論GRUs和LSTMs.
很顯然這沒有包含全部的深度學習構架。限制波爾茲曼機是一個腦中很明顯須要排除的,正如antoencoders,和一系列產生的相關的模型包括Generative Adversarial Networks. 可是,必須在某處畫一條線,否則這篇將會一直下去。
對那些感興趣其餘深度學習構架的,我建議看看Yshua Bengio的ftml.
對於咱們的最終目標和有一些不一樣的東西,看看Google DeepMindShakir Mohamed A Statistical Analysis of Deep Learning。這個比咱們日常看到的材料更理論一些,可是值得用另外一種方法看咱們熟悉的事物。Shakir對6個月的課程寫了一系列文章,展示測試wide-held beliefs,加強數據的鏈接,而且深度學習中要隱藏的東西。有一個全部發布的PDF集合.

但願足夠的信息已經展示,可以給讀者一個對深度神經網絡介紹性的綜述,而且提供一些想對這個課題繼續研究的熱情。

Bio: Matthew Mayo is a computer science graduate student currently working on his thesis parallelizing machine learning algorithms. He is also a student of data mining, a data enthusiast, and an aspiring machine learning scientist.

相關的:

相關文章
相關標籤/搜索