1. CNN、RNN、DNN的一般解釋
CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別?
轉自知乎 科言君 的回答
神經網路技術起源於上世紀五、六十年代,當時叫 感知機 (perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。 (扯一個不相關的:由於計算技術的落後,當時感知器傳輸函數是用線拉動變阻器改變電阻的方法機械實現的,腦補一下科學家們扯著密密麻麻的導線的樣子…)
但是,Rosenblatt的單層感知機有一個嚴重得不能再嚴重的問題,即它對稍復雜一些的函數都無能為力(比如最為典型的「異或」操作)。連異或都不能擬合,你還能指望這貨有什麼實際用途么o(╯□╰)o
隨著數學的發展,這個缺點直到上世紀八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)發明的 多層感知機 (multilayerperceptron)克服。多層感知機,顧名思義,就是有多個隱含層的感知機(廢話……)。好好,我們看一下多層感知機的結構:
圖1 上下層神經元全部相連的神經網路——多層感知機
多層感知機可以擺脫早期離散傳輸函數的束縛,使用sigmoid或tanh等連續函數模擬神經元對激勵的響應,在訓練演算法上則使用Werbos發明的反向傳播BP演算法。對,這貨就是我們現在所說的 神經網路 NN ——神經網路聽起來不知道比感知機高端到哪裡去了!這再次告訴我們起一個好聽的名字對於研(zhuang)究(bi)很重要!
多層感知機解決了之前無法模擬異或邏輯的缺陷,同時更多的層數也讓網路更能夠刻畫現實世界中的復雜情形。相信年輕如Hinton當時一定是春風得意。
多層感知機給我們帶來的啟示是, 神經網路的層數直接決定了它對現實的刻畫能力 ——利用每層更少的神經元擬合更加復雜的函數[1]。
(Bengio如是說:functions that can be compactly
represented by a depth k architecture might require an exponential number of
computational elements to be represented by a depth k − 1 architecture.)
即便大牛們早就預料到神經網路需要變得更深,但是有一個夢魘總是縈繞左右。隨著神經網路層數的加深, 優化函數越來越容易陷入局部最優解 ,並且這個「陷阱」越來越偏離真正的全局最優。利用有限數據訓練的深層網路,性能還不如較淺層網路。同時,另一個不可忽略的問題是隨著網路層數增加, 「梯度消失」現象更加嚴重 。具體來說,我們常常使用sigmoid作為神經元的輸入輸出函數。對於幅度為1的信號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25。層數一多,梯度指數衰減後低層基本上接受不到有效的訓練信號。
2006年,Hinton利用預訓練方法緩解了局部最優解問題,將隱含層推動到了7層[2],神經網路真正意義上有了「深度」,由此揭開了深度學習的熱潮。這里的「深度」並沒有固定的定義——在語音識別中4層網路就能夠被認為是「較深的」,而在圖像識別中20層以上的網路屢見不鮮。為了克服梯度消失,ReLU、maxout等傳輸函數代替了sigmoid,形成了如今DNN的基本形式。單從結構上來說, 全連接的 DNN 和圖 1 的多層感知機是沒有任何區別的 。
值得一提的是,今年出現的高速公路網路(highway network)和深度殘差學習(deep resial learning)進一步避免了梯度消失,網路層數達到了前所未有的一百多層(深度殘差學習:152層)[3,4]!具體結構題主可自行搜索了解。如果你之前在懷疑是不是有很多方法打上了「深度學習」的噱頭,這個結果真是深得讓人心服口服。
圖2 縮減版的深度殘差學習網路,僅有34 層,終極版有152 層,自行感受一下
如圖1所示,我們看到 全連接 DNN 的結構里下層神經元和所有上層神經元都能夠形成連接 ,帶來的潛在問題是 參數數量的膨脹 。假設輸入的是一幅像素為1K*1K的圖像,隱含層有1M個節點,光這一層就有10^12個權重需要訓練,這不僅容易過擬合,而且極容易陷入局部最優。另外,圖像中有固有的局部模式(比如輪廓、邊界,人的眼睛、鼻子、嘴等)可以利用,顯然應該將圖像處理中的概念和神經網路技術相結合。此時我們可以祭出題主所說的卷積神經網路CNN。對於CNN來說,並不是所有上下層神經元都能直接相連,而是 通過「卷積核」作為中介。同一個卷積核在所有圖像內是共享的,圖像通過卷積操作後仍然保留原先的位置關系。 兩層之間的卷積傳輸的示意圖如下:
圖3 卷積神經網路隱含層(摘自Theano 教程)
通過一個例子簡單說明卷積神經網路的結構。假設圖3中m-1=1是輸入層,我們需要識別一幅彩色圖像,這幅圖像具有四個通道ARGB(透明度和紅綠藍,對應了四幅相同大小的圖像),假設卷積核大小為100*100,共使用100個卷積核w1到w100(從直覺來看,每個卷積核應該學習到不同的結構特徵)。用w1在ARGB圖像上進行卷積操作,可以得到隱含層的第一幅圖像;這幅隱含層圖像左上角第一個像素是四幅輸入圖像左上角100*100區域內像素的加權求和,以此類推。同理,算上其他卷積核,隱含層對應100幅「圖像」。每幅圖像對是對原始圖像中不同特徵的響應。按照這樣的結構繼續傳遞下去。CNN中還有max-pooling等操作進一步提高魯棒性。
圖4 一個典型的卷積神經網路結構,注意到最後一層實際上是一個全連接層(摘自Theano 教程)
在這個例子里,我們注意到 輸入層到隱含層的參數瞬間降低到了 100*100*100=10^6 個 !這使得我們能夠用已有的訓練數據得到良好的模型。題主所說的適用於圖像識別,正是由於 CNN 模型限制參數了個數並挖掘了局部結構的這個特點 。順著同樣的思路,利用語音語譜結構中的局部信息,CNN照樣能應用在語音識別中。
全連接的DNN還存在著另一個問題——無法對時間序列上的變化進行建模。然而, 樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要 。對了適應這種需求,就出現了題主所說的另一種神經網路結構——循環神經網路RNN。
在普通的全連接網路或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網路(Feed-forward Neural Networks)。而在 RNN 中,神經元的輸出可以在下一個時間戳直接作用到自身 ,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!表示成圖就是這樣的:
圖5 RNN 網路結構
我們可以看到在隱含層節點之間增加了互連。為了分析方便,我們常將RNN在時間上進行展開,得到如圖6所示的結構:
圖6 RNN 在時間上進行展開
Cool, ( t+1 )時刻網路的最終結果O(t+1) 是該時刻輸入和所有歷史共同作用的結果 !這就達到了對時間序列建模的目的。
不知題主是否發現,RNN可以看成一個在時間上傳遞的神經網路,它的深度是時間的長度!正如我們上面所說, 「梯度消失」現象又要出現了,只不過這次發生在時間軸上 。對於t時刻來說,它產生的梯度在時間軸上向歷史傳播幾層之後就消失了,根本就無法影響太遙遠的過去。因此,之前說「所有歷史」共同作用只是理想的情況,在實際中,這種影響也就只能維持若干個時間戳。
為了解決時間上的梯度消失,機器學習領域發展出了 長短時記憶單元 LSTM ,通過門的開關實現時間上記憶功能,並防止梯度消失 ,一個LSTM單元長這個樣子:
圖7 LSTM 的模樣
除了題主疑惑的三種網路,和我之前提到的深度殘差學習、LSTM外,深度學習還有許多其他的結構。舉個例子,RNN既然能繼承歷史信息,是不是也能吸收點未來的信息呢?因為在序列信號分析中,如果我能預知未來,對識別一定也是有所幫助的。因此就有了 雙向 RNN 、雙向 LSTM ,同時利用歷史和未來的信息。
圖8 雙向RNN
事實上, 不論是那種網路,他們在實際應用中常常都混合著使用,比如 CNN 和RNN 在上層輸出之前往往會接上全連接層,很難說某個網路到底屬於哪個類別。 不難想像隨著深度學習熱度的延續,更靈活的組合方式、更多的網路結構將被發展出來。盡管看起來千變萬化,但研究者們的出發點肯定都是為了解決特定的問題。題主如果想進行這方面的研究,不妨仔細分析一下這些結構各自的特點以及它們達成目標的手段。入門的話可以參考:
Ng寫的Ufldl: UFLDL教程 - Ufldl
也可以看Theano內自帶的教程,例子非常具體: Deep Learning Tutorials
歡迎大家繼續推薦補充。
當然啦,如果題主只是想湊個熱鬧時髦一把,或者大概了解一下方便以後把妹使,這樣看看也就罷了吧。
參考文獻:
[1]
Bengio Y. Learning Deep
Architectures for AI[J]. Foundations & Trends® in Machine Learning, 2009,
2(1):1-127.
[2]
Hinton G E, Salakhutdinov R R.
Recing the Dimensionality of Data with Neural Networks[J]. Science, 2006,
313(5786):504-507.
[3]
He K, Zhang X, Ren S, Sun J. Deep
Resial Learning for Image Recognition. arXiv:1512.03385, 2015.
[4]
Srivastava R K, Greff K,
Schmidhuber J. Highway networks. arXiv:1505.00387, 2015.
2. 百度知道
為了訓練的需要,要不然會出差錯
1. 背景介紹
近些年來,隨著Siri的走紅,類似Siri、搜狗語音助手這樣利用語音實現控制,語義理解的系統開始大量涌現。而語音識別系統作為這類系統的入口,很大程度上決定了這類應用的質量。沒有一個好的語音識別系統做支撐,再好的助手也只能乾瞪眼。
與此同時,隨著微信的發展,越來越多的用戶反饋,在多種場合下不方便收聽語音,需要將語音轉換成文字。許多微信公眾號也表示需要將語音識別成文字,以便進一步的處理。在此形勢下,提高我司現有語音識別系統的准確率成為了迫切的任務。
之前主流的語音識別系統都是採用HMM-GMM技術。近些年來,隨著深度神經網路(Deep neural network)技術的的發展,越來越多的系統採用HMM-DNN技術。這項技術把描述特徵發射概率的模型從混合高斯模型(GMM)替換為深度神經網路(DNN),從而使系統的錯誤率下降了20%~30%。
2. 相關產品
當前市場上的採用DNN技術的主要競品有訊飛的相關產品,包括訊飛語音輸入法和訊飛口訊等產品、以及某互聯網公司的輸入法等。
科大訊飛是當前語音行業的領航者,在語音行業有十幾年的歷史,在Siri推出前就已經推出了訊飛語音輸入法等產品,在數據積累方面具有其他公司無法比擬的優勢。而行業內另一家互聯網公司則是聲稱國內最早將DNN技術應用到語音識別產品中的公司。
3. 技術介紹
3.1 深度神經網路
為了描述神經網路,我們先介紹最簡單的神經網路,該神經網路只由一個神經元構成,如圖1所示。
圖1 神經元
圖1所示的神經元接受3個輸入,x1,x2,x3,和一個偏置+1, 其輸出為
其中Wi 為xi在輸入中的權重。函數f(x)被稱作激活函數。
圖2. 神經網路
神經網路將許多個單一的神經元連接在一起,如圖2所示。神經網路最左邊的一層叫做輸入層,最右的一層叫做輸出層。中間節點組成的一層叫做隱藏層.
3.2 深度神經網路在聲學模型中的應用
深度神經網路則是層數較多的神經網路。雖然神經網路很早之前就已經提出,但因為計算量的問題,神經網路的層數一直無法提升。近年來隨著神經網路理論的進一步發展和計算能力的不斷提高,特別是GPU的出現,才使得深度神經網路得以發揮其威力。
圖3. 使用DNN作為聲學模型[1]
圖3說明了DNN是如何替代GMM應用到聲學模型中的。圖3中上半部分是HMM的結構,HMM的結構和轉移概率是HMM-GMM模型訓練的結果。圖3中間部分是描述了一個DNN,這個DNN模型來決定HMM的發射概率。通常情況下這個DNN模型的層數不會小於5層,每層大概數千個神經元組成。圖3中的下半部分是DNN模型的輸入,需要注意的是DNN模型的輸入是多幀特徵,而不是GMM模型中一幀。在識別語音的過程中,一小段語音都會被提取成上圖中所對應的Observation,並根據HMM中的狀態計算發射概率(也就是跟不同的發音比較相似度),選擇發射概率最大路徑作為最終的結果。
圖4. DNN聲學模型的訓練流程
圖4說明了DNN聲學模型的訓練流程。在訓練DNN模型之前,我們首先訓練出一個HMM-GMM模型來做強制對齊(forced alignment)。強制對齊的結果作為DNN訓練的樣本提交GPU上訓練DNN模型,這個過程包含了兩部分,首先是基於GPU的Pretrain,使神經網路有一個好的起點。然後使用BP演算法對神經網路進行Fine Tuning,得到最終的模型。
3.3 DNN訓練與識別系統的工程優化
DNN網路具有數據巨大的參數需要學習,每一層網路都有數百萬的參數,而下一層網路的輸入又是上一層網路的輸出,通常情況下訓練一個3.2節中所述的聲學模型需要近兩千個CPU內核運行近一個月。此外,由於聲學模型所用到的DNN較為特殊:每一層的一個神經元都依賴上一層的所有神經元,因此,如果把模型不同層次切分到不同的伺服器上分別進行訓練的話,會帶來巨大的網路開銷,使系統實際上不可用,因此我們在訓練DNN的過程中使用了GPU,並通過不斷的優化,使得訓練速度相比單台伺服器有近兩千倍的速度提高,從而使DNN模型的訓練成為現實。
此外,為了使DNN模型可以應用到線上的服務中,我們對DNN在CPU上的計算也做了優化,在幾乎不影響准確率的情況下,將計算速度提升了將近10倍。
4. 實驗結果
通過DNN模型的應用,我們語音識別系統的字錯誤率下降了40%左右,根據第三方的測試已經超過網路,並有望追上訊飛。