學習資料參考:從深度學習到自然語言處理
</br>
注意:本文已經更新,新版結合深度學習簡介和發展歷程,給出了更詳盡的學習資料參考。新版鏈接:深度學習簡介與學習資料參考
本文主要介紹一些與神經網絡
和自然語言處理
相關的經典教程、資料,以便初學者能有個比較清晰的學習參考。
<a name='from-ml-to-dl'></a>
從機器學習到深度學習
深度學習脫胎于神經網絡,而神經網絡又是一種機器學習的經典算法。因此,如果希望從理論上更深刻地掌握深度學習,建議了解相關的機器學習知識。
<a name='ml'></a>
機器學習
Andrew Ng.(吳恩達)的機器學習教程
機器學習入門方面,Ng的教程應該算是比較經典的資料了。網上有兩種版本的課程資料:
- Stanford CS229 Machine Learning 來自Stanford官網,其中materials部分有詳細的課件可以學習參考。
- Coursera 機器學習 Ng教程的Coursera版本,如果習慣Coursera的學習模式的話,可以采用該教程學習。此外,網易公開課也有機器學習的課程,一共20集,均有中文翻譯的字幕。
為了與后續的神經網絡、深度學習等知識進一步銜接,建議在學習機器學習時,重點關注這些知識點:
機器學習基本概念(模型 -> 訓練 -> 測試)
有監督學習與無監督學習
Linear Regression與Softmax Regression
目標函數的概念,如何訓練一個模型
梯度下降等優化算法
過擬合與欠擬合的理解
模型的約束與正則(Regularization)
<a name='dl'></a>
深度學習
盡管深度學習現在已涌現出多樣的模型,但其最基礎的模型DNN
(Deep Neural Network)則脫胎于神經網絡中的MLP
(Multi-Layer Perceptron)模型。在學習深度學習相關內容時,建議先粗略了解下神經網絡的發展歷史,所謂的三起三落
,對于每次的興起或是衰落,如果能清楚地知道其興衰原因,就能對神經網絡與深度學習有個宏觀的了解,便于迅速把握其脈絡。
首先推薦兩個深度學習入門的博客:
-
Deep learning學習筆記整理 這篇文章比較詳細地介紹了神經網絡到深度學習的背景知識,特別是從
特征學習
這個角度講到了深度學習的重要意義。文中也涉及到不少常見的深度學習模型,這部分簡要了解即可。 - 神經網絡淺講:從神經元到深度學習 這篇文章側重于從神經網絡歷史發展的角度,簡述了神經網絡與深度學習相關的內容。
下面介紹幾個比較經典的深度學習教程:
Neural Networks and Deep Learning (Michael Nielsen)
這個資料可以作為神經網絡/深度學習的極佳入門資料。因為其中有不少動畫演示,目前暫時只能在網頁端查看,作者本人也表示并沒有出pdf等版本的打算。該教程以圖像領域經典的mnist手寫數字識別任務為例,幾乎是從零開始,介紹了神經網絡與深度學習中很重要的一些基本概念。該教程的主要內容如下:
1) Using neural nets to recognize handwritten digits
2) How the backpropagation algorithm works
3) Improving the way neural networks learn
4) A visual proof that neural nets can compute any function
5) Why are deep neural networks hard to train?
6) Deep learning
個人覺得,該教程的主要亮點在于,不依賴任何第三方機器學習的庫(僅使用了numpy
),一步步搭建起深度學習網絡模型,對BP(反向傳播)算法做了比較詳細的闡釋和推導,并且利用case study描述了為什么神經網絡可以從理論上去逼近任何一個函數(但并不是數學意義上的證明)。
由于該教程立足于入門,因此僅介紹了DNN,并沒有介紹深度學習其他眾多的模型,現在經常使用的ReLU
激活函數、dropout
技術等都沒有介紹。實現上,也沒有采用向量化實現(這會嚴重影響程序執行效率)。但這并不妨礙該教程成為一個經典的入門材料。學習時,建議按照該教程思路,能夠自己將神經網絡實現一遍。
誤。。。前幾天重新看了下這個教程,發現作者已經加入了關于ReLU, dropout, Theano等不少新的內容,力薦這個教程啊!以及,眾網友們合作出了該教程的LaTeX中文版pdf,可以從這里下載。
Stanford UFLDL(Unsupervised Feature Learning and Deep Learning)教程
這個教程從名字上就強調了深度學習的重要意義——特征學習
。該教程作者也是Andrew Ng,如果從Ng的機器學習教程入手,再學習該教程會有比較好的連貫性。教程在Stanford官網有個主頁,如主頁所述,教程有新版,舊版的英文版和中文版。新版相對于舊版,在知識架構了做了比較大的改動,但具體到詳細的知識點,差別不是太大。
Deep Learning Tutorials
Deep Learning Tutorials教程是Bengio團隊LISA lab維護的一個深度學習教程。該教程最大的特色是,使用基于theano
工具,將教程中的各個模型均實現了一遍,因此很適合詳細地去了解每個模型的細節。實際上,theano
工具便是該團隊開發的。學習該教程時,建議按照如下的順序(教程主頁已經有閱讀順序的建議):
[重要] Machine Learning, Deep Learning and Theano basics
[重要] Logistic Regression -> MLP (Multi-Layer Perceptron) -> Deep CNN (Convolutional Networks)
Auto Encoders -> Stacked DAE (Denoising Autoencoders)
RBM (Restricted Boltzmann Machines) -> DBN (Deep Belief Networks)
Other Models
以上是幾個比較經典的深度學習教程。如果希望系統地按照課程學習方式來學習相關知識,可以參考Deep Learning大牛Hinton老師的Coursera課程Neural Networks for Machine Learning。值得注意的是,如果僅是服務于個人的研究工作的話,里面涉及到的模型不必面面俱到,比如Restricted Boltzmann Machines現在使用的已經不是太廣泛了。06年導致Deep Learning火起來的unsupervised layer-wise pre-training方法,也往往可以用良好的初值選取策略、ReLU和dropout等技術來替代(但并不完全等價)。
<a name='nlp'></a>
自然語言處理
應當說,Deep Learning最早是在圖像和語音領域火起來的,但近些年的研究也逐漸發現,Deep Learning在NLP (Natural Languang Processing)領域也開始取得可喜的效果。實際上,圖像、語音、文本,本來就是信息記載的不同載體,Deep Learning能綜合運用在這些領域的不同任務上,不足為怪。這里引用下Deep Learning Tutorials
中的一句話:
Deep Learning is about learning multiple levels of representation and abstraction that help to make sense of data such as images, sound, and text.
重要部分我已經加粗顯示了。
實際上,在使用神經網絡技術之前,NLP的研究經歷了從規則
到統計
的過程。這段有趣的歷史可以參考吳軍博士的《數學之美》中的前7章內容。在學習Deep Learning應用于NLP之前,建議先了解下簡單的統計語言模型的知識,包括語言模型
、n-gram
、VSM (Vector Space Model)
和One-Hot
等基本概念。關于統計語言模型,可以參考我們是這樣理解語言的-統計語言模型這篇文章。
Deep Learning for NLP課程推薦:
Stanford University CS224d: Deep Learning for Natural Language Processing
CS224d是專門介紹Deep Learning for NLP的課程,從基本的語言模型、詞的向量表示開始,介紹了深度學習的相關知識,以及在NLP中常見的模型。目前而言,在NLP中常見的模型包括CNN
、Recursive NN
和Recurrent NN
模型,尤以卷積、循環網絡居多。
<a name='we'></a>
詞嵌入(Word Embeddings)
DL應用于NLP,最激動人心的成果當屬詞嵌入(Word Embeddings)
概念的產生了。簡單來說,就是用一個低維、稠密的向量來表示一個word,這種表示是通過神經網絡語言模型
學習而來的。當得到這些詞向量之后,研究者發現它有著很好的特定,比如蘊含語義特征(man-woman $\approx$ king-queen),用這些詞向量代替原來的特征,可以在各種任務中取得state of art的效果,等等。
此外,詞向量的獲取往往依賴于語言模型
,因此便產生了神經網絡語言模型
的概念。從2001/2003年Bengio的工作開始,有不少基于神經網絡的語言模型已被提出,也產生了不少開源工具來產生詞向量,如word2vec與GloVe等。
詳細知識點不再展開,推薦相關教程、資料如下:
- Deep Learning, NLP, and Representations 來自colah's blog,簡要概述了DL應用于NLP的研究,重點介紹了Word Embeddings,網上可找到該文的中文版。
- Deep Learning in NLP (一)詞向量和語言模型 總結了詞向量和常見的幾種神經網絡語言模型
- 我們是這樣理解語言的-3神經網絡語言模型 與上一文章類似,可參考閱讀。
<a name='comp'></a>
語義組合(Semantic Composition)
在獲取詞向量之后,我們得到了word的向量式表示,因此下一個很自然的問題是,如果利用這些word是表示,獲取更高層次概念(如phrase, sentence, document)的表示,這其中涉及的概念即為語義組合(Semantic Composition)。
目前,常見的語義組合方法可以分為以下4類:
-
簡單的加權組合
如直接拼接、平均或weighted sum等 -
卷積神經網絡(CNN)
可參考Understanding Convolutional Neural Networks for NLP這篇文章學習了解 -
遞歸神經網絡(Recursive NN)
借助語法樹等樹狀結構,Richard Socher等人的研究為主 -
循環神經網絡(Recurrent NN)
借助有記憶單元的神經元結點保存歷史(或未來)的信息,常用的模型是LSTM (Long Short Term Memory)與GRU (Gated Recurrent Unit)。相比于CNN等模型,LSTM與GRU的學習可能稍微難一點,可以參考知乎-有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)網絡的教程。
上面的這些模型在CS224d課程中也均有比較詳細的介紹。
總結來說,如果希望比較詳細地了解神經網絡、深度學習的細節,還是需要不少學習的。現在很多第三方的庫(如Caffe、Theano、Keras、Lasagne、TensorFlow等)使得許多深度學習模型可以快速實現,但這些庫往往屏蔽了諸多算法的細節(如BP、Gradient Descent、AdaDelta等),如果希望進一步做一些比較深入的工作,對相關模型的深入了解還是必不可少的。