Figure1. Deep learning導(dǎo)圖
前言
深度學(xué)習(xí)(deep learning)的概念最早可以追溯到1940-1960年間的控制論(cybernetics),之后在1980-1990年間發(fā)展為連接主義(connectionism),第三次發(fā)展浪潮便是2006年由人工神經(jīng)網(wǎng)絡(luò)(Artificial neural network)擴展開來并發(fā)展成為今天十分火熱的深度學(xué)習(xí)(Figure 2)。實際上,深度學(xué)習(xí)的興起和發(fā)展是非常自然的,人們在應(yīng)用經(jīng)典的機器學(xué)習(xí)方法時,需要對具體的問題或者數(shù)據(jù)相當(dāng)?shù)亓私獠闹腥斯さ靥崛√卣鞑拍芎芎玫慕鉀Q問題,然而人工提取特征是非常復(fù)雜耗時的。因此,能夠自動從數(shù)據(jù)中學(xué)習(xí)特征的方法就具有非常大的發(fā)展?jié)摿Γ@類方法也就是一類被稱為表征學(xué)習(xí)(Representation learning)的方法。
緊接著,研究者們發(fā)現(xiàn),深層次的表征學(xué)習(xí)模型可以從簡單的特征中抽象出更為復(fù)雜的特征并且更有利于最終的分類判別,由此便發(fā)展出了深度學(xué)習(xí)框架。當(dāng)然,深度學(xué)習(xí)的發(fā)展也離不開BP等算法、計算硬件、數(shù)據(jù)規(guī)模等的發(fā)展。深度學(xué)習(xí)可以理解成是機器學(xué)習(xí)的一種框架,與經(jīng)典的淺層學(xué)習(xí)(Shallow learning)如SVM,LR等相對應(yīng),可以認為是機器學(xué)習(xí)發(fā)展的第二大階段。目前,深度學(xué)習(xí)在人工智能領(lǐng)域發(fā)揮著非常重要的作用,甚至可以說人工智能的發(fā)展正是得益于深度學(xué)習(xí)的發(fā)展,由于它們之間有著密不可分的關(guān)系,非專業(yè)人士常常會將深度學(xué)習(xí)、人工智能、表示學(xué)習(xí)、機器學(xué)習(xí)等概念混為一談。
另外,最近幾年,由于人工智能、互聯(lián)網(wǎng)等火速發(fā)展,它們背后的技術(shù)也備受學(xué)術(shù)界和業(yè)界人員的推崇,其中深度學(xué)習(xí)由于其強大的威力以及較低的門檻而受到最多的關(guān)注。本文致力于從模型、技術(shù)、優(yōu)化方法、常用框架平臺、應(yīng)用、實例等多個方面來向讀者介紹深度學(xué)習(xí),闡述深度學(xué)習(xí)到底有哪些威力,并且文末會給讀者推薦一些深度學(xué)習(xí)的學(xué)習(xí)資源。
Figure 2. Neural network發(fā)展歷程
深度學(xué)習(xí)是什么?
如前言所述,深度學(xué)習(xí)是機器學(xué)習(xí)的一種框架,是人工智能的基礎(chǔ)技術(shù)之一,其與人工智能、表示學(xué)習(xí)以及機器學(xué)習(xí)的關(guān)系由Figure 3可見,即機器學(xué)習(xí)是實現(xiàn)人工智能的一種方法,而表示學(xué)習(xí)又是一種機器學(xué)習(xí)的框架,深度學(xué)習(xí)包含在表示學(xué)習(xí)中。
Figure 3. Deep learning定位(圖片來源:Ian Goodfellow et al. Deep learning.)
深度學(xué)習(xí)模型可以自動從輸入數(shù)據(jù)中學(xué)習(xí)特征并用于訓(xùn)練,模型的淺層結(jié)構(gòu)提取簡單的特征,深層結(jié)構(gòu)則基于淺層結(jié)構(gòu)獲取的特征提取更為抽象的特征,這是深度學(xué)習(xí)區(qū)別于傳統(tǒng)機器學(xué)習(xí)以及普通表征學(xué)習(xí)模型的學(xué)習(xí)方式。Figure 4展示了不同機器學(xué)習(xí)方法的學(xué)習(xí)方式。
Figure 4. Deep learning特征學(xué)習(xí)過程(圖片來源:Ian Goodfellow et al. Deep learning.)
那么,深度學(xué)習(xí)的深度到底體現(xiàn)在什么方面呢?對于這個問題,目前主要有兩種觀點:第一種觀點認為,深度學(xué)習(xí)的深度是由于計算圖的長度決定的,也就是模型將輸入映射到輸出的過程中,計算的路徑長度。對于該觀點,如何定義計算單元至關(guān)重要,而目前又沒有統(tǒng)一的關(guān)于計算單元的定義;第二種觀點則認為深度學(xué)習(xí)的深度是由描述輸入到輸出之間概念關(guān)系圖的深度決定的,也就是所定義模型的結(jié)構(gòu)深度,然而這種結(jié)構(gòu)上的深度往往與計算的深度不一致。以上兩種觀點提供了兩種理解深度學(xué)習(xí)的角度,我們既可以將其理解為模型結(jié)構(gòu)的深度也可以理解為計算的深度,筆者認為這對于理解深度學(xué)習(xí)的本質(zhì)并無影響。
常見模型
前面多次提到深度學(xué)習(xí)是一種機器學(xué)習(xí)框架,那么該框架下的具體的模型有哪些呢?下面為大家介紹幾種常見的深度學(xué)習(xí)模型。
MLP:
MLP (Multilayer perceptron)是一個典型的深度學(xué)習(xí)模型,也叫前向深度網(wǎng)絡(luò)(Feedforward deep network),主要由多層神經(jīng)元構(gòu)成的神經(jīng)網(wǎng)絡(luò)組成(Figure 5),包括輸入層、中間層和輸出層,層與層之間是全連接的,除了輸入層,其他層每個神經(jīng)元包含一個激活函數(shù),因此,MLP可以看成是一個將輸入映射到輸出的函數(shù),這個函數(shù)包括多層乘積運算和激活運算。MLP通過前向傳播計算最終的損失函數(shù)值,再通過反向傳播算法(BP)計算梯度,利用梯度下降來對模型參數(shù)進行優(yōu)化。MLP的出現(xiàn)解決了感知器無法學(xué)習(xí)XOR函數(shù)的問題,使得人們對神經(jīng)網(wǎng)絡(luò)重拾信心。
DBN與DBM:
DBN(Deep belief network)也是一種比較經(jīng)典的較早提出的深度學(xué)習(xí)模型。DBN是基于RBM(Restricted Boltzmann Machine)模型建立的,更具體地,DBN模型可以看成是由多個RBM結(jié)構(gòu)和一個BP層組成的,其訓(xùn)練過程也是從前到后逐步訓(xùn)練每一個RBM結(jié)構(gòu),使得每一個RBM的隱層達到最優(yōu),從而最優(yōu)化整體網(wǎng)絡(luò)。值得注意的是,在DBN的結(jié)構(gòu)中,只有最后兩層之間是無向連接的,其余層之間均具有方向性,這是DBN區(qū)別與后面DBM的一個重要特征。
DBM(Deep Boltzmann machine)模型也是一種基于RBM的深度模型,其與RBM的區(qū)別就在于它有多個隱層(RBM只有一個隱層)。DBM的訓(xùn)練方式也是將整個網(wǎng)絡(luò)結(jié)構(gòu)看成多個RBM,然后從前到后逐個訓(xùn)練每個RBM,從而優(yōu)化整體模型。在DBM模型中,所有相鄰層之間的連接是無向的。DBN與DBM模型中層間節(jié)點之間均無連接,且節(jié)點之間相互獨立。
Figure 6. DBN與DBM模型示意圖(Hinton et al. 2006)
CNN:
CNN(convolutional neural network)是一種前向人工神經(jīng)網(wǎng)絡(luò)模型,由Yann LeCun等人在1998年正式提出,其典型的網(wǎng)絡(luò)結(jié)構(gòu)包括卷積層、池化層和全連接層。下圖(Figure 7)所示就是一種典型的CNN結(jié)構(gòu)(LeNet-5),給定一張圖片(一個訓(xùn)練樣本)作為輸入,通過多個卷積算子分別依次掃描輸入圖片,掃描結(jié)果經(jīng)過激活函數(shù)激活得到特征圖,然后再利用池化算子對特征圖進行下采樣,輸出結(jié)果作為下一層的輸入,經(jīng)過所有的卷積和池化層之后,再利用全連接的神經(jīng)網(wǎng)絡(luò)進行進一步的運算,最終結(jié)果經(jīng)輸出層輸出。
CNN模型強調(diào)的是中間的卷積過程,該過程通過權(quán)值共享大幅度降低了模型的參數(shù)數(shù)量,使得模型在不失威力條件下可以更為高效地得到訓(xùn)練。CNN模型是非常靈活的,其結(jié)構(gòu)可以在合理的條件下任意設(shè)計,比如可以在多個卷積層之后加上池化層,正是由于這種靈活性,CNN被廣泛地應(yīng)用在各種任務(wù)中并且效果非常顯著,比如后面將要介紹的AlexNet、GoogLeNet、VGGNet以及ResNet等。
當(dāng)然,這種靈活性使得CNN的結(jié)構(gòu)本身也成為了一種超參,這就難以保證針對特定任務(wù)所采用的模型是否是最優(yōu)模型。在現(xiàn)實的應(yīng)用中,CNN更多的用于處理一些網(wǎng)格數(shù)據(jù),例如圖片,對于這類數(shù)據(jù)CNN的卷積過程能發(fā)揮的作用相對更大。當(dāng)然,CNN是可以完成多種類型的任務(wù)的,包括圖片識別、自然語言處理、視頻分析、藥物挖掘以及游戲等。
Figure 7. CNN典型結(jié)構(gòu)及運算過程(Yann LeCun et al. 1998)
RNN:
RNN(Recurrent neural network)是一類用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)模型。典型的RNN模型通常是由三類神經(jīng)元組成,分別是輸入、隱藏和輸出,其中輸入單元只與隱藏單元相連,隱藏單元則與輸出、上一個隱藏單元以及下一個隱藏單元相連,輸出單元只接受隱藏單元的輸入。在RNN訓(xùn)練過程中,一般需要學(xué)習(xí)優(yōu)化三種類參數(shù),即輸入映射到隱層的權(quán)重、隱層單元之間轉(zhuǎn)換權(quán)重以及隱層映射到輸出的權(quán)重。
如圖(Figure 8)是典型的RNN結(jié)構(gòu)以及計算過程。在RNN的計算過程中,序列數(shù)據(jù)前面部分的信息通過隱藏單元傳遞到后面的部分,因此在后面部分的計算過程中,前面部分的信息也考慮進來,這就模擬了序列不同部分之間的依賴關(guān)系。顯然,RNN模型更適用于序列性的數(shù)據(jù),尤其是上下文相關(guān)的序列,這使得RNN在情感分析、圖像標注、機器翻譯等方面應(yīng)用十分廣泛。值得注意的是在不同的任務(wù)中,RNN的結(jié)構(gòu)有所差異,比如在圖像標注的場景中RNN是一對多的結(jié)構(gòu),而在情感分析的場景中則是多對一的結(jié)構(gòu)(Figure 9)。
Figure 8. RNN結(jié)構(gòu)及計算過程(Ian Goodfellow \emph{et al.} \emph{Deep learning}.)
Figure 9. RNN在不同應(yīng)用場景下的結(jié)構(gòu)。從左至右依次對應(yīng)圖像分類、圖像標注、情緒分析、機器翻譯和視頻分類。
LSTM:
LSTM(Long short-term memory)模型本質(zhì)上也是一種RNN模型,它與RNN的區(qū)別在于它引入了元胞狀態(tài)(Cell state)的概念,并且可以通過門(gate)來向元胞狀態(tài)加入或者刪除信息,另外,LSTM還可以通過門構(gòu)成封閉的回路(Figure 10),這使得LSTM得以克服RNN無法有效記憶長程信息的弱點。如圖(Figure 10)是一種常見的LSTM單元,其中包含輸入、輸入門、遺忘門、狀態(tài)、輸出門、輸出等組成單元。
在LSTM模型中所謂的門其實就是一個函數(shù)運算,例如輸入門可以是所有輸入經(jīng)過權(quán)重乘積運算之后的sigmoid函數(shù)運算。對于一個序列型數(shù)據(jù)樣本,當(dāng)前輸入節(jié)點會綜合上一個節(jié)點的隱層輸出信息,分別通過多個不同門運算之后輸出作為當(dāng)前節(jié)點的隱層輸出信息,并且同時與上一個節(jié)點的元胞狀態(tài)信息進行綜合輸出作為當(dāng)前節(jié)點的元胞狀態(tài)信息輸出(Figure 11)。LSTM既然是一種特殊的RNN 模型,那么很多可以應(yīng)用RNN的場景LSTM也適用,例如情感分析、圖像標注等等。當(dāng)然,LSTM也具有非常多的變種,它們在不同的任務(wù)中表現(xiàn)不同,這也需要應(yīng)用的時候有一些了解。
Figure 10. LSTM結(jié)構(gòu)示意圖(Ian Goodfellow et al. Deep learning.)
Figure 11. LSTM數(shù)據(jù)流示意圖(圖片來自網(wǎng)絡(luò))
Deep autoencoder:
Autoencoder是一種神經(jīng)網(wǎng)絡(luò),其輸入層與輸出層表示相同的含義并且具有相同數(shù)量的神經(jīng)元。Autoencoder的學(xué)習(xí)過程就是將輸入編碼然后再解碼重構(gòu)輸入作為輸出的過程,將輸入編碼生成的中間表示的作用類似于對輸入進行降維,因此autoencoder常常用于特征提取、去噪等。
普通的autoencoder一般是指中間只有一層隱層的網(wǎng)絡(luò)模型,而deep autoencoder則是中間有多層隱層的網(wǎng)絡(luò)模型。Deep autoencoder的訓(xùn)練與DBM訓(xùn)練類似,每兩層之間利用RBM進行預(yù)訓(xùn)練,最終通過BP來調(diào)整參數(shù)。同樣地,deep autoencoder也有非常多的變種(例如sparse autoencoder,denoise autoencoder等),分別對應(yīng)于不同的任務(wù)。
Figure 12. Deep autoencoder結(jié)構(gòu)示意圖
深度網(wǎng)絡(luò)的優(yōu)化方法
前面例舉了一些深度學(xué)習(xí)比較常見的一些模型,那么這些模型都是如何進行優(yōu)化的呢?本節(jié)將介紹一些比較常用的深度網(wǎng)絡(luò)優(yōu)化的方法。
SGD:
SGD(Stochastic Gradient Descent)即隨機梯度下降算法,是機器學(xué)習(xí)中最常用的優(yōu)化方法之一。SGD的工作原理就是梯度下降,也就是以一定的步長(learning rate)沿著參數(shù)梯度的方向調(diào)整參數(shù),只不過在SGD中是對隨機抽取的一個樣本通過梯度下降更新一次參數(shù)。在實際應(yīng)用SGD的時候有多個參數(shù)可以調(diào)節(jié),主要包括學(xué)習(xí)率、權(quán)值衰減(weight decay)系數(shù)、動量以及學(xué)習(xí)率衰減系數(shù),通過調(diào)整這幾個參數(shù),可以使得模型以較快的速率收斂且不易過擬合。SGD參數(shù)更新過程如下:
其中,θ表示參數(shù),η表示學(xué)習(xí)率,J(θ)則表示優(yōu)化目標函數(shù),J(θ)對θ的梯度是在隨機抽取的樣本
上計算得到的。SGD的優(yōu)點是一般會有比較好的優(yōu)化效果,但是SGD的參數(shù)(學(xué)習(xí)率)難以調(diào)節(jié),收斂速度慢,而且易于收斂到局部最優(yōu),有可能會困在鞍點。
Adagrad:
Adagrad的優(yōu)化過程也是基于梯度的,該優(yōu)化方法可以對每一個參數(shù)逐一自適應(yīng)不同的學(xué)習(xí)速率,對于比較稀疏的特征以較大的學(xué)習(xí)率更新,對于非稀疏的特征則用較小的學(xué)習(xí)率更新。這種自適應(yīng)的過程是通過利用累積梯度來歸一化當(dāng)前學(xué)習(xí)率的方式實現(xiàn)的,其優(yōu)化參數(shù)的過程如下:
其中,
表示前t次迭代過程中參數(shù)θ梯度的平方和,ε則是一個很小的值,防止出現(xiàn)分母為0的錯誤。Adagrad的優(yōu)點就是適合處理梯度稀疏的情況,缺點是仍然需要認為設(shè)定一個全局的學(xué)習(xí)率η,需要計算參數(shù)梯度序列的平方和,增加了計算量,并且學(xué)習(xí)率衰減過快。
Adadelta:
Adadelta是Adagrad方法的擴展。前面提到在Adagrad中由于累積梯度增長過快會導(dǎo)致學(xué)習(xí)率衰減過快,Adadelta的出現(xiàn)就是為了解決這一問題的。具體的實現(xiàn)方式是在之前的參數(shù)序列開一個窗口,只累加窗口中參數(shù)梯度,并且以平方的均值代替Adagrad中的平方和。其參數(shù)更新過程如下:
其中
表示對窗口內(nèi)梯度g平方求均值。Adadelta具有自適應(yīng)學(xué)習(xí)率的優(yōu)點,優(yōu)化速度較快,但在訓(xùn)練后期會出現(xiàn)較明顯的抖動。
RMSprop:
RMSprop優(yōu)化方法實質(zhì)上可以看成是Adadelta的一個特例,將Adadelta中的
部分替換成g的均方根(RMS)即變?yōu)镽MSprop,參數(shù)更新:
其中,
表示對g的均方根。RMSprop的效果介于Adagrad和Adadelta之間,比較適用于非平穩(wěn)目標,但是RMSprop仍然依賴于全局的學(xué)習(xí)率參數(shù)。
Adam:
Adam(Adaptive Moment Estimation)同樣也是一種參數(shù)學(xué)習(xí)率自適應(yīng)的方法,它主要是依據(jù)梯度的一階矩和二階矩來調(diào)整每個參數(shù)整學(xué)習(xí)率。具體的參數(shù)更新方法如下:
其中,分別近似梯度的一階矩和二階矩,而和則分別是的校正,使得
對矩的估計近似無偏。實質(zhì)上,Adam是一種加了動量的RMSprop,因此它適用于處理特征稀疏和非平穩(wěn)目標的數(shù)據(jù)。
Adamax:
Adamax是Adam的一種變體,它在學(xué)習(xí)率的限制上做了一些改動,即利用累積梯度和前一次梯度中的最大值來對學(xué)習(xí)率進行歸一化。這樣的限制在計算上相對簡單。
Nadam:
Nadam也是Adam的一種變體,它的變動在于它帶有Nesterov動量項。一般來說,Nadam的效果會比RMSprop和Adam要好,但是在計算上比較復(fù)雜。
深度網(wǎng)絡(luò)中常用的技術(shù)
在實際的應(yīng)用中,深度學(xué)習(xí)模型在數(shù)據(jù)量不是足夠大的條件下是非常容易過擬合的,因此需要通過一些技術(shù)和技巧來控制訓(xùn)練過程,減弱甚至防止嚴重的過擬合現(xiàn)象。那么,有哪些類似的常用的技術(shù)呢?接下來我們就介紹一些比較有用的進一步優(yōu)化模型訓(xùn)練的技術(shù)。
BP algorithm:
BP(Backpropagation)算法其實只是一種訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的方法,主要是通過鏈式求導(dǎo)法則對目標函數(shù)求關(guān)于參數(shù)的導(dǎo)數(shù),求導(dǎo)的過程從輸出層一直反向傳遞至輸出層,根據(jù)求出的導(dǎo)數(shù)利用前一節(jié)介紹的優(yōu)化算法對參數(shù)進行更新,從而優(yōu)化模型。在應(yīng)用BP算法優(yōu)化模型的過程中,常常會出現(xiàn)梯度消失、陷入局部最優(yōu)以及梯度不穩(wěn)定等問題,這些問題會導(dǎo)致模型收斂緩慢、泛化能力降低等后果。當(dāng)然,這些問題的出現(xiàn)也與模型中選擇的激活函數(shù)有一定的關(guān)系,因此合理選擇激活函數(shù)會一定程度上弱化以上問題。目前,應(yīng)用比較多的激活函數(shù)主要有sigmoid、tanh、ReLu、PReLu、RReLU、ELU、softmax等等,根據(jù)具體的問題選擇激活函數(shù)有利于BP算法的高效執(zhí)行。
Dropout:
前面提到深度學(xué)習(xí)模型是非常容易過擬合的,主要的原因在于深度學(xué)習(xí)模型是非常復(fù)雜的,具有大量的參數(shù),在樣本量不是足夠多的情況下是很難保證模型的泛化能力的。因此,一種防止過擬合的方法dropout被提出,dropout的主要思想是在訓(xùn)練的過程中隨機使一些神經(jīng)元失活來降低模型的復(fù)雜度,當(dāng)然這個過程是并不影響B(tài)P的執(zhí)行。Dropout的具體執(zhí)行過程如圖(Figure 13)所示,通過比較相同的網(wǎng)絡(luò)在使用dropout前后的分類效果,發(fā)現(xiàn)在MNIST、CIFAR-10、CIFAR-100、ImageNet、TIMIT等數(shù)據(jù)集上使用dropout的預(yù)測效果更好。
Figure 13. Dropout過程示意圖(Nitish Srivastava et al. 2014)
Batch Normalization:
深度學(xué)習(xí)網(wǎng)絡(luò)在訓(xùn)練的過程中有一個很大問題是數(shù)據(jù)流經(jīng)每層時分布會隨著參數(shù)的變化而發(fā)生變化,也就是常說的內(nèi)部協(xié)變量漂移現(xiàn)象(internal covariate shif),這種現(xiàn)象會導(dǎo)致模型的訓(xùn)練非常緩慢,并且對參數(shù)的初始化有較高的要求。Batch Normalization的出現(xiàn)則很大程度上解決了這一問題,其作用的原理是直接在每層的輸入上加上一層歸一化層,先對輸入進行歸一化再傳遞至激活函數(shù)。經(jīng)過Batch Normalization處理之后,就可以使用較大的學(xué)習(xí)率從而加快訓(xùn)練速度,并且降低初始化的要求。加入Batch Normalization來訓(xùn)練深度網(wǎng)絡(luò)的過程如圖(Figure 14)。Sergey Ioffe et al.通過實驗發(fā)現(xiàn)加入Batch Normalization的網(wǎng)絡(luò)在ImageNet數(shù)據(jù)集上表現(xiàn)更好。
Figure 14. 加入Batch Normalization的網(wǎng)絡(luò)的訓(xùn)練過程(Sergey Ioffe et al. 2015)
Early stopping:
Early stopping也是一項在實際應(yīng)用深度學(xué)習(xí)模型時防止過擬合的技術(shù),該技術(shù)主要通過控制訓(xùn)練的輪數(shù)(epoch)來防止過擬合,也就是在validation loss不再持續(xù)下降時自動停止訓(xùn)練。實際上,early stopping可以應(yīng)用在很多機器學(xué)習(xí)問題上,例如非參回歸、boosting等。另外,early stopping也可以看成是一種正則化的形式。
Regularization:
這里所說的regularization是指狹義上像L1、L2等對控制權(quán)重的正則化,不包括前面提及的Dropout和early stopping等。對網(wǎng)絡(luò)的權(quán)重參數(shù)加上L1或L2正則項也是一種比較常用的防止過擬合的手段,L1/L2正則化的方法在機器學(xué)習(xí)中應(yīng)用非常廣泛,這里也不再贅述。
深度學(xué)習(xí)常見的實現(xiàn)平臺和框架
深度學(xué)習(xí)模型由于其復(fù)雜性對機器硬件以及平臺均有一定的要求,一個好的應(yīng)用平臺可以使得模型的訓(xùn)練事半功倍。那么,針對深度學(xué)習(xí)有哪些比較流行好用的平臺和框架呢?下面就向大家介紹一些比較常用的深度學(xué)習(xí)平臺以及它們的優(yōu)缺點。
Caffe:
Caffe是由美國加州伯克利分校視覺與學(xué)習(xí)中心在2013年開發(fā)并維護的機器學(xué)習(xí)庫,它對卷積神經(jīng)網(wǎng)絡(luò)具有非常好的實現(xiàn)(http://caffe.berkeleyvision.org )。Caffe是基于C/C 開發(fā)的,所以模型計算的速度相對較快,但是Caffe不太適合文本、序列型的數(shù)據(jù)的處理,也就是在RNN的應(yīng)用方面有很大的限制,其優(yōu)缺點可以簡單的總結(jié)如下:
優(yōu)點:適合圖像處理;版本穩(wěn)定,計算速度較快
缺點:不適合RNN應(yīng)用;不可擴展;不便于在大型網(wǎng)絡(luò)中使用;C/C 編程難度較大,不夠簡潔;幾乎不再更新
Theano/Tensorflow:
Theano和Tensorflow都是比較底層的機器學(xué)習(xí)庫,并且都是一種符號計算框架,它們都適用于基于卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)以及貝葉斯網(wǎng)絡(luò)的應(yīng)用,它們都提供Python接口,Tensorflow還提供C 接口。Theano是在2008年由蒙特利爾理工學(xué)院LISA實驗室開發(fā)并維護的(http://deeplearning.net/software/theano/ ),非常適合數(shù)值計算優(yōu)化,并且支持自動計算函數(shù)梯度,但它不支持多GPU的應(yīng)用。Tensorflow是由Google Brain團隊開發(fā)的,目前已經(jīng)開源,由Google Brain團隊以及眾多使用者們共同維護(https://www.tensorflow.org )。
Tensorflow通過預(yù)先定義好的數(shù)據(jù)流圖,對張量(tensor)進行數(shù)值計算,使得神經(jīng)網(wǎng)絡(luò)模型的設(shè)計變得非常容易。與Theano相比,Tensorflow支持分布式計算和多GPU的應(yīng)用。就目前來看,Tensorflow是在深度學(xué)習(xí)模型的實現(xiàn)上應(yīng)用最為廣泛的庫。
Keras:
Keras是一個基于Theano和Tensorflow的,高度封裝的深度學(xué)習(xí)庫(https://keras.io/ )。它是由是由谷歌軟件工程師Francois Chollet開發(fā)的,在開源之后由使用者共同維護。Keras具有非常直觀的API,使用起來非常的簡潔,一般只需要幾行代碼便可以構(gòu)建出一個神經(jīng)網(wǎng)絡(luò)模型。目前,Keras已經(jīng)發(fā)布2.0版本,支持使用者從底層自定義網(wǎng)絡(luò)層,這很大程度上彌補了之前版本在靈活性上不夠的缺陷。
Torch/PyTorch:
Torch是基于Lua語言開發(fā)的一個計算框架(http://torch.ch/ ),可以非常好的支持卷積神經(jīng)網(wǎng)絡(luò)。在Torch中網(wǎng)絡(luò)的定義是以圖層的方式進行的,這導(dǎo)致它不支持新類型圖層的擴展,但是新圖層的定義相對比較容易。Torch運行在LuaJIT上,速度比較快,但是目前Lua并不是主流編程語言。另外,值得注意的是Facebook在2017年1月公布了Torch 的Python API,即PyTorch的源代碼。PyTorch支持動態(tài)計算圖,方便用戶對變長的輸入輸出進行處理,另外,基于python的庫將大幅度增加Torch的集成靈活性。
Lasagne:
Lasagne是一個基于Theano計算框架(http://lasagne.readthedocs.io/en/latest/index.html ),它的封裝程度不及Keras,但它提供小的接口,這也使得代碼與底層的Theano/Tensorflow比較為簡潔。Lasagne這種半封裝的特性,平衡了使用上的便捷性和自定義的靈活性。
DL4J:
DL4J(Deeplearning4j)是一個基于Java的深度學(xué)習(xí)庫(https://deeplearning4j.org/ )。它是由Skymind公司在2014年發(fā)布并開源的,其包含的深度學(xué)習(xí)庫是商業(yè)級應(yīng)用的開源庫,由于是基于Java的,所以可以與大數(shù)據(jù)處理平臺Hadoop、Spark等集成使用。DL4J依靠ND4J進行基礎(chǔ)的線性代數(shù)運算,計算速度較快,同時它可以自動化并行,因此十分適合快速解決實際問題。
MxNet:
MxNet是一個由多種語言開發(fā)并且提供多種語言接口的深度學(xué)習(xí)庫(http://mxnet.io/ )。MxNet支持的語言包括Python,R,C ,Julia,Matlab等,提供C , Python, Julia, Matlab, JavaScript,R等接口。MxNet是一個快速靈活的學(xué)習(xí)庫,由華盛頓大學(xué)的Pedro Domingos及其研究團隊開發(fā)和維護。目前,MxNet已被亞馬遜云服務(wù)所采用。
CNTK:
CNTK是微軟的開源深度學(xué)習(xí)框架(http://cntk.ai ),是基于C 開發(fā)的,但是提供Python接口。CNTK的特點是部署簡單,計算速度比較快,但是它不支持ARM架構(gòu)。CNTK的學(xué)習(xí)庫包括前饋DNN、卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)。
Neon:
Neon是Nervana公司開發(fā)的一個基于Python的深度學(xué)習(xí)庫(http://neon.nervanasys.com/docs/latest/ )。該學(xué)習(xí)庫支持卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、LSTM以及Autoencoder等應(yīng)用,目前也是開源狀態(tài)。有報道稱在某些測試中,Neon的表現(xiàn)要優(yōu)于Caffe、Torch和Tensorflow。
深度學(xué)習(xí)網(wǎng)絡(luò)實例
通過前面的介紹,讀者對于深度學(xué)習(xí)已經(jīng)有了比較詳細的了解,那么實際應(yīng)用中深度學(xué)習(xí)網(wǎng)絡(luò)究竟是怎么樣設(shè)計的呢?本節(jié)我們向大家介紹幾種應(yīng)用效果非常好的深度學(xué)習(xí)網(wǎng)絡(luò),從中我們可以體會到神經(jīng)網(wǎng)絡(luò)設(shè)計的一些技巧。
LeNet:
LeNet是由Yann LeCun等最早提出的一種卷積神經(jīng)網(wǎng)絡(luò),我們在介紹CNN的時候已經(jīng)提到過該網(wǎng)絡(luò)(Figure 7)。LeNet網(wǎng)絡(luò)總共有7層(不包括輸入層),分別是C1、S2、C3、S4、C5、F6以及OUTPUT層,其中C1、C3為卷積層,S2、S4為下采樣層,C5、F6為全連接層。該網(wǎng)絡(luò)的輸入時32 X 32的圖片,C1包含6個特征圖(feature maps),C3包含16個特征圖,兩個全連接層的神經(jīng)元數(shù)量分別是120和84,最終的輸出層含有10個神經(jīng)元,對應(yīng)十個類別。這個網(wǎng)絡(luò)在訓(xùn)練過程中總共需要優(yōu)化大約12000個參數(shù),在手寫數(shù)字識別(MNIST數(shù)據(jù)集)的任務(wù)上效果遠優(yōu)于傳統(tǒng)的機器學(xué)習(xí)方法。這一網(wǎng)絡(luò)的提出提供了一個卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用的范例,也就是將卷積層與采樣層(后來的池化層)交替連接,最后在展開連接全連接層。實踐證明在很多任務(wù)中這一網(wǎng)絡(luò)結(jié)構(gòu)具有較好的表現(xiàn)。
AlexNet:
AlexNet是Alex和Hinton參加ILSVRC2012比賽時所使用的卷積神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)可以說是更深層次的CNN在大數(shù)據(jù)集上應(yīng)用的開山之作,隨后諸多應(yīng)用均是在此網(wǎng)絡(luò)的基礎(chǔ)上發(fā)展而來。AlexNet由5個卷積層和3個全連接層組成,其中第1,2,5卷積層后加入了池化過程(Figure 15),各層神經(jīng)元的數(shù)目分別是253440、186624、64896、64896、43264、4096、4096和1000,總計涉及的參數(shù)達到6千萬。該網(wǎng)絡(luò)的訓(xùn)練集是來自ImageNet的140萬包含1000個類別的高分辨率圖片,其中有5萬作為驗證集,15萬作為測試集。在訓(xùn)練該網(wǎng)絡(luò)的過程中,采用ReLu作為激活函數(shù),并且對圖片數(shù)據(jù)通過水平翻轉(zhuǎn)等方法進行了擴增,為了防止過擬合,該網(wǎng)絡(luò)中還使用了dropout技術(shù),網(wǎng)絡(luò)的優(yōu)化采用了批量梯度下降并加入了動量和權(quán)值衰減。整個訓(xùn)練過程在兩個GTX 580的GPU上持續(xù)了5-6天。最終的結(jié)果是該網(wǎng)絡(luò)在ILSVRC2012比賽中取得了最好的成績,并且遠遠由于其他方法。
Figure 15. AlexNet的網(wǎng)絡(luò)結(jié)構(gòu)(Alex Krizhevsky et al. 2012)
ZF Net:
ZF Net是在ILSVRC2013比賽中由Zeiler和Fergus根據(jù)AlexNet提出的網(wǎng)絡(luò)。實際上,該網(wǎng)絡(luò)只是對AlexNet做了一些修改和調(diào)整,因此二者之間的網(wǎng)絡(luò)結(jié)構(gòu)差別不大(Figure 16)。主要的改動體現(xiàn)在ZF Net中第一個卷積層使用了較小的卷積核并且將卷積步幅減少為原來的一半,這種改動保留了前兩層中更多的圖片特征信息。ZF Net最后的表現(xiàn)勝于AlexNet,在錯誤率上下降了1.7個百分點。另外,通過ZF Net作者們提出了一種可視化卷積層特征的方法。
Figure 16. ZF Net的網(wǎng)絡(luò)結(jié)構(gòu)(Matthew D. Zeiler et al. 2013)
VGG Net:
VGG Net是ILSVRC2014比賽中表現(xiàn)非常突出的卷積神經(jīng)網(wǎng)絡(luò)模型,其特點就是小卷積核,更深的卷積層次。該網(wǎng)絡(luò)總共有19層,16個卷積層,3個卷積層,所有卷積核的大小均為3,多個卷積層疊加再插入池化層(Figure 17; E)。相比于ZF Net,該網(wǎng)絡(luò)分類錯誤率下降了9%,分類效果顯著提升。VGG Net的出現(xiàn)具有重要意義,它為人們提供了一個高效設(shè)計和利用CNN的方向,即層次更簡單更深更有利于深層次特征的挖掘。
Figure 17. VGG Net的網(wǎng)絡(luò)結(jié)構(gòu)(Karen Simonyan et al. 2014)
GooLeNet:
GooLeNet也是ILSVRC2014比賽中出現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)模型,該模型在此次比賽取得最佳成績。GooLeNet的層次比VGG Net更深,總共有22層,其中21個卷積層,1個softmax輸出層(Figure 18)。值得注意的是,該網(wǎng)絡(luò)中應(yīng)用了多個(9個)Inception(network in network)模塊,也就是該網(wǎng)絡(luò)并非是層與層之間按順序依次疊加的,而是有很多并聯(lián)的連接,并且模型的最后也沒有應(yīng)用全連接層。Inception模塊的使用使得更多的特征信息被收集,去掉了全連接層減少了大量的參數(shù),一定程度上降低了過擬合的可能。GooLeNet最終的分類結(jié)果相比于VGG Net提高了0.6%。GooLeNet的意義在于它提供了一種新的層間并聯(lián)連接方式,這對以后CNN網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計具有非常大的啟發(fā)作用。
Figure 18. GooLeNet的網(wǎng)絡(luò)拓撲結(jié)構(gòu)(Christian Szegedy et al. 2015)
ResNet:
ResNet是ILSVRC2015比賽中的冠軍模型,是由微軟亞洲研究院的研究人員提出的,該網(wǎng)絡(luò)深達152層,151個卷積層,1個softmax輸出層,每隔兩層加入殘差(Figure 19)。該網(wǎng)絡(luò)模型將分類錯誤率降低至3.6%,其意義在于提出了一種新的網(wǎng)絡(luò)結(jié)構(gòu),即殘差神經(jīng)網(wǎng)絡(luò)。殘差神經(jīng)網(wǎng)絡(luò)的提出一定程度上解決了深度網(wǎng)絡(luò)無法訓(xùn)練的問題,為將來的應(yīng)用提供非常好的改進方向。
Figure 19. ResNet的網(wǎng)絡(luò)拓撲結(jié)構(gòu)(Kaiming He et al. 2015)
深度學(xué)習(xí)的應(yīng)用
計算機視覺:
計算機視覺是深度學(xué)習(xí)應(yīng)用最為火熱的領(lǐng)域之一,前面例舉的幾個網(wǎng)絡(luò)結(jié)構(gòu)都是應(yīng)用在計算機視覺領(lǐng)域的圖片分類問題上的,解決這類問題一般都會選擇CNN模型。然而,對于計算機視覺領(lǐng)域有很多其他方面的問題,單純應(yīng)用CNN模型效果往往并不佳,例如圖像標注、圖像生成等問題,還需要進一步設(shè)計針對特定類型問題的模型。
目前,計算機視覺領(lǐng)域前沿研究最為火熱的問題主要有:
圖像分類,將不同類型的圖像分開,類似于ILSVRC比賽的任務(wù);
圖像檢測,把圖像中不同的物體用框框出來;
圖像分割,把圖像中不同的物體邊界描繪出來;
圖像標注,也就是看圖說話,把對應(yīng)的圖像用文字描述出來;
圖像生成,就是根據(jù)文字描述生成圖像;
視頻預(yù)測,推測下時間圖像中物體將會如何移動。
語音識別:
語音識別的目的就是將聲音信息轉(zhuǎn)化成文字,這一任務(wù)是人機交互的基礎(chǔ)。對于這一任務(wù),傳統(tǒng)的解決方法一般是依賴序列模型來對語音序列建模,例如隱馬爾可夫模型、高斯混合模型等,這些傳統(tǒng)的方法單詞識別的錯誤率較高。語音識別的過程一般涉及語音特征提取和聲學(xué)建模兩個方面,研究者發(fā)現(xiàn)利用CNN來提取語音特征可以大幅降低(6%-10%)單詞識別錯誤率(Ossama Abdel-Hamid et al. 2014),而利用CNN進行聲學(xué)建模同樣具有更強的適應(yīng)能力。隨后,研究者們發(fā)現(xiàn)更深的卷積神經(jīng)網(wǎng)絡(luò)具有更好的表現(xiàn),同時在解碼搜索階段將CNN、RNN以及LSTM聯(lián)合起來使用會進一步提高語音識別的準確率。目前,IBM沃森研究中心報道稱將ResNet與多個LSTM結(jié)合起來會使得語音識別的單詞錯誤率降低至5.5%。實際上,蘋果公司的Siri、微軟的Cortana以及科大訊飛的語音識別技術(shù)都采用了最新的技術(shù)。
自然語言處理:
自然語言處理涵蓋多種具體的應(yīng)用,主要包括:
詞性標注,給定句子文本,標注出句子每個詞的詞性;
句法分析,分析句子文本的語法;
文本分類,把內(nèi)容想接近或者主題相關(guān)的文本歸為相同的類別;
自動問答,人機交互的一種,人提供問題,機器反饋答案;
機器翻譯,不同語言之間相互轉(zhuǎn)譯;
自動摘要,給定一個文檔,自動生成該文章的內(nèi)容梗概,即摘要。
目前,深度學(xué)習(xí)網(wǎng)絡(luò)已經(jīng)被廣泛應(yīng)用在以上任務(wù)中,早在2014年Nal Kalchbrenner等人用一種動態(tài)卷積神經(jīng)網(wǎng)絡(luò)來對語句建模(Nal Kalchbrenner et al. 2014),Baotian Hu等人利用CNN來處理語義匹配的問題,Chenxi Zhu等人則利用雙向LSTM模型來解決文本匹配問題。值得注意的是,2014年ACL的最佳論文中,Devlin等人將神經(jīng)網(wǎng)絡(luò)模型引入機器翻譯過程,隨后便涌現(xiàn)出一大批解決機器翻譯問題的深度學(xué)習(xí)模型,這使得機器翻譯的準確率大幅提高。
推薦系統(tǒng):
推薦系統(tǒng)是一類根據(jù)用戶的歷史數(shù)據(jù)來向用戶推送用戶可能感興趣的信息。深度學(xué)習(xí)在推薦系統(tǒng)中的應(yīng)用主要包括音樂推薦、電影推薦、廣告投放以及新聞推送等。例如,Balazs Hidasi等人提出了一種基于RNN的推薦系統(tǒng),很好的解決了傳統(tǒng)推薦系統(tǒng)只能基于短期會話做推薦的問題;2014年Google利用類似MLP的網(wǎng)絡(luò)實現(xiàn)了音樂語音的排名,取得了很不錯的效果;Spotify利用一種典型的CNN模型進行音樂推薦。
深度學(xué)習(xí)延伸
深度學(xué)習(xí)的快速發(fā)展,不僅使得其在很多實際應(yīng)用中脫穎而出,而且還帶動了很多利用深度學(xué)習(xí)很容易實現(xiàn)的應(yīng)用或者機器學(xué)習(xí)模式的發(fā)展。深度學(xué)習(xí)在人工智能領(lǐng)域的影響是大家公認的,但是單純的只靠深度學(xué)習(xí)是無法讓人工智能快速發(fā)展下去的。因此,新的機器學(xué)習(xí)方式和網(wǎng)絡(luò)結(jié)構(gòu)被提出,本節(jié)著重介紹幾種最近非常流行的學(xué)習(xí)方式。
遷移學(xué)習(xí):
遷移學(xué)習(xí)(transfer learning)是指利用已經(jīng)訓(xùn)練好模型的參數(shù)來幫助訓(xùn)練需要訓(xùn)練的模型。當(dāng)深度學(xué)習(xí)網(wǎng)絡(luò)比較深的時候,訓(xùn)練模型就會相對很復(fù)雜耗時,通過遷移學(xué)習(xí)就可以利用之前別人已經(jīng)訓(xùn)練好的深度網(wǎng)絡(luò)的參數(shù)來指導(dǎo)自己模型的訓(xùn)練,這樣可以提高大網(wǎng)絡(luò)訓(xùn)練的效率。
如圖(Figure 20)所示,Task A, B, C 是三個不同的任務(wù),但是它們的數(shù)據(jù)存在一定的相關(guān)性,因此它們之間可以共用網(wǎng)絡(luò)前面的幾層,也就是說在任務(wù)A中訓(xùn)練好的前面幾層網(wǎng)絡(luò)的參數(shù)可以指導(dǎo)B和C任務(wù)的訓(xùn)練。遷移學(xué)習(xí)典型例子就是谷歌公司DeepMind做的一篇文章(Andrei A. Rusu et al. 2016),文章中訓(xùn)練網(wǎng)絡(luò)模型來玩三個游戲,Pong, Labyrinth 和Atari,然后利用其中一個游戲訓(xùn)練好的網(wǎng)絡(luò)來玩另外兩個游戲,發(fā)現(xiàn)結(jié)果表現(xiàn)很好。目前,基于深度學(xué)習(xí)的遷移學(xué)習(xí)應(yīng)用已經(jīng)非常廣泛,例如,利用基于RBM和CNN混合模型的遷移學(xué)習(xí)框架來對圖像進行分類,這種方法在Pascal VOC2007和Caltech101數(shù)據(jù)集上取得了較高的分類準確率。
Figure 20. 遷移學(xué)習(xí)示意圖(Yoshua Bengio et al. 2014)
強化學(xué)習(xí):
強化學(xué)習(xí)(reinforcement learning)是機器學(xué)習(xí)的一個重要分支,主要思想是目標隨著環(huán)境的改變而行動,保證最終最大化預(yù)期利益。一個強化學(xué)習(xí)模型一般包括環(huán)境、對象、動作和反饋幾個基本組件,強化學(xué)習(xí)模型適合用于控制物理系統(tǒng)(例如無人機)、與用戶交互(例如優(yōu)化用戶體驗)、解決邏輯問題、學(xué)習(xí)序列性算法以及玩游戲等,最典型的強化學(xué)習(xí)的例子就是DeepMind開發(fā)的AlphaGo,它通過自己與自己不斷地的對弈的方式來強化自己的落子準確性。另外,還有一種將強化學(xué)習(xí)和深度學(xué)習(xí)結(jié)合起來的學(xué)習(xí)框架DQN,在自然語言處理中已經(jīng)應(yīng)用得比較多,例如利用DQN學(xué)習(xí)對話策略、信息檢索等。
對抗生成網(wǎng)絡(luò):
對抗生成網(wǎng)絡(luò)(generative adversarial network, GAN)是2014年由Ian Goodfellow等人首次提出的機器學(xué)習(xí)模型,其主要思想就是有G和D兩個模型,G負責(zé)學(xué)習(xí)產(chǎn)生數(shù)據(jù)的分布,D負責(zé)判別數(shù)據(jù)是否來自真實的分布,G的目標就是盡量生成可以瞞過D的數(shù)據(jù),而D的目標是竭力將G生成的數(shù)據(jù)判別出來,這個對抗過程經(jīng)過不斷地迭代訓(xùn)練最終就會得到數(shù)據(jù)的生成模型G。GAN在最近兩年被研究得非?;馃?,目前已經(jīng)有各種各樣變種出現(xiàn),例如基于CNN的DCGAN、基于LSTM的GAN(Fang Zhao et al. 2016)、基于autoencoder的GAN(Alireza Makhzani et al. 2015)以及基于RNN的C-RNN-GAN(Olof Mogren et al. 2016)等等。這些不同變種的GAN模型已經(jīng)被廣泛應(yīng)用在各個領(lǐng)域,例如圖像修復(fù)、超級分辨率、去遮擋、語義分析、物體檢測以及視頻預(yù)測等。
學(xué)習(xí)資源
在文章的最后,我們列出一些深度學(xué)習(xí)相關(guān)的學(xué)習(xí)資源,希望對讀者有幫助。
github資料:
深度學(xué)習(xí)相關(guān)資源,包含論文、模型、書、課程等等https://github.com/endymecy/awesome-deeplearning-resources
跟對抗網(wǎng)絡(luò)模型相關(guān)的papers:https://github.com/zhangqianhui/AdversarialNetsPapers
Ian Goodfellow等編著的Deep learning書籍:https://github.com/HFTrader/DeepLearningBook
LISA實驗室提供的深度學(xué)習(xí)教程:
https://github.com/lisa-lab/DeepLearningTutorials
Udacity深度學(xué)習(xí)課程的代碼:
https://github.com/udacity/deep-learning
另一個深度學(xué)習(xí)資源庫:
https://github.com/chasingbob/deep-learning-resources
還有一個awesome深度學(xué)習(xí)資源庫,也非常全面:https://github.com/ChristosChristofidis/awesome-deep-learning
非常全面的公開數(shù)據(jù)集:
https://github.com/XuanHeIIIS/awesome-public-datasets
在線課程:
斯坦福李飛飛CS231n:
http://cs231n.github.io
斯坦福Richard Socher關(guān)于NLP的課程CS224d:
http://cs224d.stanford.edu/
伯克利Sergey Levine等教授的深度強化學(xué)習(xí)課程CS294:
http://rll.berkeley.edu/deeprlcourse/
牛津大學(xué)Nando de Freitas的機器學(xué)習(xí)課程:
https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/
LeCun的深度學(xué)習(xí)課程:
http://cilvr.cs.nyu.edu/doku.php?id=courses:deeplearning2014:start
Hinton的神經(jīng)網(wǎng)絡(luò)課程:
https://www.coursera.org/learn/neural-networks
神經(jīng)網(wǎng)絡(luò)的有一個教學(xué)視頻:
https://www.youtube.com/playlist?list=PL6Xpj9I5qXYEcOhn7TqghAJ6NAPrNmUBH
會議/期刊:
會議:ICLR, NIPS, ICML, CVPR, ICCV, ECCV, ACL
期刊:JMLR, MLJ, Neural Computation, JAIR, Artificial Intelligence
本文主要參考資料:
[1]. Ian Goodfellow et al. Deep learning. 2016
[2]. Yoshua Bengio et al. Representation Learning: A Review and New Perspectives. 2014
[3]. Yann LeCun et al. Gradient-based learning applied to document recognition. 1998
[4]. Alex Krizhevsky et al. ImageNet Classification with Deep Convolutional Neural Networks. 2012
[5]. Matthew D Zeiler et al. Visualizing and Understanding Convolutional Networks. 2013
[6]. Nitish Srivastava et al. Dropout: A Simple Way to Prevent Neural Networks from overfitting. 2014
[7]. Sergey Ioffe et al. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. 2015
[8]. 侯一民,周慧瓊,王政一. 深度學(xué)習(xí)在語音識別中的研究進展綜述。2016
[9]. 劉樹杰,董力,張家俊等. 深度學(xué)習(xí)在自然語言處理中的應(yīng)用。2015
[10]. Understanding LSTM Networks. colah's blog
作者:軒轅(筆名),數(shù)據(jù)派研究部志愿者,清華大學(xué)研究生,喜歡機器學(xué)習(xí)、大數(shù)據(jù)相關(guān)話題。
更多精彩干貨內(nèi)容,敬請搜索關(guān)注清華-青島數(shù)據(jù)科學(xué)研究院官方公眾平臺“數(shù)據(jù)派THU”
聯(lián)系客服