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