CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別?

CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別?以及他們的主要用途是什麼?只知道CNN是局部感受和參數共享,比較適合用於圖像這方面。剛入門的小白真心求助


首先,我感覺不必像 @李Shawn 同學一樣認為DNN、CNN、RNN完全不能相提並論。從廣義上來說,NN(或是更美的DNN)確實可以認為包含了CNN、RNN這些具體的變種形式。在實際應用中,所謂的深度神經網路DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。但是就題主的意思來看,這裡的DNN應該特指全連接的神經元結構,並不包含卷積單元或是時間上的關聯。因此,題主一定要將DNN、CNN、RNN等進行對比,也未嘗不可。

其實,如果我們順著神經網路技術發展的脈絡,就很容易弄清這幾種網路結構發明的初衷,和他們之間本質的區別,希望對題主有所幫助。

=========================== 分 割 線 就 是 我
================================


神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。(扯一個不相關的:由於計算技術的落後,當時感知器傳輸函數是用線拉動變阻器改變電阻的方法機械實現的,腦補一下科學家們扯著密密麻麻的導線的樣子…)

但是,Rosenblatt的單層感知機有一個嚴重得不能再嚴重的問題,即它對稍複雜一些的函數都無能為力(比如最為典型的「異或」操作)。連異或都不能擬合,你還能指望這貨有什麼實際用途么o(╯□╰)o

隨著數學的發展,這個缺點直到上世紀八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)發明的多層感知機(multilayer
perceptron)克服。多層感知機,顧名思義,就是有多個隱含層的感知機(廢話……)。好好,我們看一下多層感知機的結構:

圖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 residual 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.
Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006,
313(5786):504-507.

[3]
He K, Zhang X, Ren S, Sun J. Deep
Residual Learning for Image Recognition. arXiv:1512.03385, 2015.

[4]
Srivastava R K, Greff K,
Schmidhuber J. Highway networks. arXiv:1505.00387, 2015.

【「科研君」公眾號初衷始終是希望聚集各專業一線科研人員和工作者,在進行科學研究的同時也作為知識的傳播者,利用自己的專業知識解釋和普及生活中的 一些現象和原理,展現科學有趣生動的一面。該公眾號由清華大學一群在校博士生髮起,目前參與的作者人數有10人,但我們感覺這遠遠不能覆蓋所以想科普的領域,並且由於空閑時間有限,導致我們只能每周發布一篇文章。我們期待更多的戰友加入,認識更多志同道合的人,每個人都是科研君,每個人都是知識的傳播者。我們期待大家的參與,想加入我們,進QQ群吧~:108141238】

【非常高興看到大家喜歡並贊同我們的回答。應許多知友的建議,最近我們開通了同名公眾號:PhDer,也會定期更新我們的文章,如果您不想錯過我們的每篇回答,歡迎掃碼關注~ 】


http://weixin.qq.com/r/5zsuNoHEZdwarcVV9271 (二維碼自動識別)


個人覺得CNN、RNN和DNN不能放在一起比較。
DNN是一個大類,CNN是一個典型的空間上深度的神經網路,RNN是在時間上深度的神經網路。
推薦你從UFLDL開始看,這是斯坦福深度學習的課程,了解一些神經網路的基礎,會對你的學習有很大幫助。
=============================分割線======================================
前面一位同學回答得非常詳細完整,我再回來談一談怎麼學習這些模型,我來分享一下我的學習歷程。我也是在學習中,以後會慢慢繼續補充。
1、http://ufldl.stanford.edu/wiki/index.php/UFLDL教程
這是我最開始接觸神經網路時看的資料,把這個仔細研究完會對神經網路的模型以及如何訓練(反向傳播演算法)有一個基本的認識,算是一個基本功。

2、Deep Learning Tutorials
這是一個開源的深度學習工具包,裡面有很多深度學習模型的python代碼還有一些對模型以及代碼細節的解釋。我覺得學習深度學習光了解模型是不難的,難點在於把模型落地寫成代碼,因為裡面會有很多細節只有動手寫了代碼才會了解。但Theano也有缺點,就是極其難以調試,以至於我後來就算自己動手寫幾百行的代碼也不願意再用它的工具包。所以我覺得Theano的正確用法還是在於看裡面解釋的文字,不要害怕英文,這是必經之路。PS:推薦使用python語言,目前來看比較主流。(更新:自己寫坑實在太多了,CUDA也不知道怎麼用,還是乖乖用theano吧...)

3、Stanford University CS231n: Convolutional Neural Networks for Visual Recognition
斯坦福的一門課:卷積神經網路,李飛飛教授主講。這門課會系統的講一下卷積神經網路的模型,然後還有一些課後習題,題目很有代表性,也是用python寫的,是在一份代碼中填寫一部分缺失的代碼。如果把這個完整學完,相信使用卷積神經網路就不是一個大問題了。

4、斯坦福大學公開課 :機器學習課程
這可能是機器學習領域最經典最知名的公開課了,由大牛Andrew Ng主講,這個就不僅僅是深度學習了,它是帶你領略機器學習領域中最重要的概念,然後建立起一個框架,使你對機器學習這個學科有一個較為完整的認識。這個我覺得所有學習機器學習的人都應該看一下,我甚至在某公司的招聘要求上看到過:認真看過並深入研究過Andrew Ng的機器學習課程,由此可見其重要性。


2017年7月3日 更新

不同網路的區別:人們在網路中實現加入的先驗知識的不同。

整體解釋:公開課 | 深層神經網路設計理念 附帶 ppt下載(無視頻版)

神經網路入門深層學習為何要「Deep」(上)

前饋神經網路引入的先驗知識:並行、迭代;

  • 詳細解釋:深層學習為何要「Deep」(下) 較難懂,建議先看完公開課再看該篇文章。

循環神經網路引入的先驗知識:時間共享

  • 詳細解釋:循環神經網路--介紹

循環神經網路引入的先驗知識:空間共享

  • 詳細解釋:卷積神經網路--介紹

深層學習的「深」字是由於將分類/回歸特徵提取兩者結合在一起來訓練了。

Recurrent layer和convolutional layer都可以看成是特徵提取層。

  1. 語音識別用Recurrent layer去學習「如何」去聽,再用學好的聽取方式去處理聲音再送入分類器中。人腦舉例子,我們大腦已有從中文學來的對語音的「特徵提取層」和「分類層」。學習外語的時候,只是新訓練了一個「分類層」,繼續用中文的語音的「特徵提取層」,這是外語聽力的不好的原因之一。
  2. 畫面識別convolutional layer學習「如何」去觀察,再用學好的觀察方式去處理畫面再送入分類器中。人腦舉例子,我們在觀察圖片的時候並不是一眼把所有畫面都送入大腦進行識別的,而是跟convolutional layer的處理方式一樣,逐一掃描局部後再合併。不同的掃描方式,所觀察出的內容也不同。

具體可以看下面的部分

簡單理解神經網路應該分為兩部分:

  • 網路結構:神經網路是怎麼計算預測的,以及神經網路為什麼好用。
  • 網路訓練:神經網路是怎麼訓練的,以及如何克服在訓練時所遇到的如過擬合,梯度消失等問題。

進一步理解圍繞「深層」二字來神經網路的的話應該在網路結構細分兩類
網路結構:

  • 特徵結構:之所以要深層是因為一部分的層在完成「學習如何提取特徵」的任務。比如畫面處理的convolutional layers ,時間序列處理的Recurrent layers。甚至feedforward layers也能完成此任務。
  • 分類/遞歸結構:如果僅需完成分類器的任務的話,一個hidden feedforward足以。其他的機器學習演算法如SVM,GP甚至做的要比神經網路要好。

舉例說明:比如圖片識別。一個圖片究竟是什麼不僅取決於圖片本身,還取決於識別者「如何觀察」。

如果這是一個訓練樣本。

  • 當你給的標籤是少女的時候,convolutional layers會以此學習「如何觀察」成少女
  • 當你給的標籤是老婦的時候,convolutional layers會以此學習「如何觀察」成老婦
  • 之所以深層,是因為一定數量的層數在學習「如何觀察」。再學習完如何觀察後再傳遞給「分類層」中去。而分類層並不需要「深」。
  • 網路結構中最重要的是特徵結構層,畫面處理的convolutional layers ,時間序列處理的Recurrent layers最好理解為特徵結構層

一、深度學習:

深度學習是機器學習的一個分支。可以理解為具有多層結構的模型。


二、基本模型:

給大家總結一下深度學習裡面的基本模型。我將這些模型大致分為了這幾類:多層感知機模型;深度神經網路模型和遞歸神經網路模型。

2.1 多層感知機模型(也就是你這裡說的深度神經網路):

2.1.1 Stacked Auto-Encoder堆疊自編碼器

堆疊自編碼器是一種最基礎的深度學習模型,該模型的子網路結構自編碼器通過假設輸出與輸入是相同的來訓練調整網路參數,得到每一層中的權重。通過堆疊多層自編碼網路可以得到輸入信號的幾種不同表徵(每一層代表一種表徵),這些表徵就是特徵。自動編碼器就是一種儘可能復現輸入信號的神經網路。為了實現這種復現,自編碼器就必須捕捉可以代表輸入數據的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。

2.1.1.1 網路結構

堆疊自編碼器的網路結構本質上就是一種普通的多層神經網路結構。

圖1 自編碼器網路結構

2.1.1.2 訓練過程

堆疊自編碼器與普通神經網路不同之處在於其訓練過程,該網路結構訓練主要分兩步:非監督預訓練和有監督微調訓練。

(1)非監督預訓練

自編碼器通過自學習得到原始數據的壓縮和分散式表徵,一般用於高層特徵提取與數據非線性降維。結構上類似於一個典型的三層BP神經網路,由一個輸入層,一個中間隱含層和一個輸出層構成。但是,輸出層與輸入層的神經元個數相等,且訓練樣本集合的標籤值為輸入值,即無標籤值。輸入層到隱含層之間的映射稱為編碼(Encoder),隱含層到輸出層之間的映射稱為解碼(Decoder)。非監督預訓練自編碼器的中間層為特徵層,在訓練好第一層特徵層後,第二層和第一層的訓練方式相同。我們將第一層輸出的特徵層當成第二層的輸入層,同樣最小化重構誤差,就會得到第二層的參數,並且得到第二層輸入的特徵層,也就是原輸入信息的第二個表徵。以此類推可以訓練其他特徵層。

(3)有監督微調訓練

經過上面的訓練方法,可以得到一個多層的堆疊自編碼器,每一層都會得到原始輸入的不同的表達。到這裡,這個堆疊自編碼器還不能用來分類數據,因為它還沒有學習如何去連結一個輸入和一個類。它只是學習獲得了一個可以良好代表輸入的特徵,這個特徵可以最大程度上代表原輸入信號。那麼,為了實現分類,我們就可以在AutoEncoder的最頂的編碼層添加一個分類器(例如邏輯斯蒂回歸、SVM等),然後通過標準的多層神經網路的監督訓練方法(梯度下降法)微調訓練。

2.1.1.3 典型改進

(1)Sparse AutoEncoder稀疏自編碼器

在AutoEncoder的基礎上加上L1的稀疏限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源)來減小過擬合的影響,我們就可以得到稀疏自編碼器。

(2)Denoising AutoEncoders降噪自編碼器

降噪自動編碼器是在自動編碼器的基礎上,訓練數據加入雜訊,所以自動編碼器必須學習去去除這種雜訊而獲得真正的沒有被雜訊污染過的輸入。因此,這就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。

2.1.1.4 模型優缺點

(1)優點:

(1)、可以利用足夠多的無標籤數據進行模型預訓練;

(2)、具有較強的數據表徵能力。

(2)缺點:

(1)、因為是全連接網路,需要訓練的參數較多,容易出現過擬合;深度模型容易出現梯度消散問題。

(2)、要求輸入數據具有平移不變性。

2.1.2、Deep belief network 深度信念網路

2006年,Geoffrey Hinton提出深度信念網路(DBN)及其高效的學習演算法,即Pre-training+Fine tuning,並發表於《Science》上,成為其後深度學習演算法的主要框架。DBN是一種生成模型,通過訓練其神經元間的權重,我們可以讓整個神經網路按照最大概率來生成訓練數據。所以,我們不僅可以使用DBN識別特徵、分類數據,還可以用它來生成數據。

2.1.2.1 網路結構

深度信念網路(DBN)由若干層受限玻爾茲曼機(RBM)堆疊而成,上一層RBM的隱層作為下一層RBM的可見層。下面先介紹RBM,再介紹DBN。

(1) RBM

圖2 RBM網路結構

一個普通的RBM網路結構如上圖所示,是一個雙層模型,由m個可見層單元及n個隱層單元組成,其中,層內神經元無連接,層間神經元全連接,也就是說:在給定可見層狀態時,隱層的激活狀態條件獨立,反之,當給定隱層狀態時,可見層的激活狀態條件獨立。這保證了層內神經元之間的條件獨立性,降低概率分布計算及訓練的複雜度。RBM可以被視為一個無向圖模型,可見層神經元與隱層神經元之間的連接權重是雙向的,即可見層到隱層的連接權重為W,則隱層到可見層的連接權重為W』。除以上提及的參數外,RBM的參數還包括可見層偏置b及隱層偏置c。

RBM可見層和隱層單元所定義的分布可根據實際需要更換,包括:Binary單元、Gaussian單元、Rectified Linear單元等,這些不同單元的主要區別在於其激活函數不同。

(2) DBN

圖3 DBN模型結構

DBN模型由若干層RBM堆疊而成,如果在訓練集中有標籤數據,那麼最後一層RBM的可見層中既包含前一層RBM的隱層單元,也包含標籤層單元。假設頂層RBM的可見層有500個神經元,訓練數據的分類一共分成了10類,那麼頂層RBM的可見層有510個顯性神經元,對每一訓練數據,相應的標籤神經元被打開設為1,而其他的則被關閉設為0。

2.1.2.2 訓練過程

DBN的訓練包括Pre-training和Fine tuning兩步,其中Pre-training過程相當於逐層訓練每一個RBM,經過Pre-training的DBN已經可用於模擬訓練數據,而為了進一步提高網路的判別性能, Fine tuning過程利用標籤數據通過BP演算法對網路參數進行微調。

(1) Pre-training

如前面所說,DBN的Pre-training過程相當於逐層訓練每一個RBM,因此進行Pre-training時直接使用RBM的訓練演算法。

(2) Fine tuning

建立一個與DBN相同層數的神經網路,將Pre-training過程獲得的網路參數賦給此神經網路,作為其參數的初始值,然後在最後一層後添加標籤層,結合訓練數據標籤,利用BP演算法微調整個網路參數,完成Fine tuning過程。

2.1.2.3 改進模型

DBN的變體比較多,它的改進主要集中於其組成「零件」RBM的改進,下面列舉兩種主要的變體。(這邊的改進模型暫時沒有深入研究,所以大概參考網上的內容)

(1) 卷積DBN(CDBN)

DBN並沒有考慮到圖像的二維結構信息,因為輸入是簡單的將一個圖像矩陣轉換為一維向量。而CDBN利用鄰域像素的空域關係,通過一個稱為卷積RBM(CRBM)的模型達到生成模型的變換不變性,而且可以容易得變換到高維圖像。

(2) 條件RBM(Conditional RBM)

DBN並沒有明確地處理對觀察變數的時間聯繫的學習上,Conditional RBM通過考慮前一時刻的可見層單元變數作為附加的條件輸入,以模擬序列數據,這種變體在語音信號處理領域應用較多。

2.1.2.4 典型優缺點

對DBN優缺點的總結主要集中在生成模型與判別模型的優缺點總結上。

(1)優點:

(1)、生成模型學習聯合概率密度分布,所以就可以從統計的角度表示數據的分布情況,能夠反映同類數據本身的相似度;

(2)、生成模型可以還原出條件概率分布,此時相當於判別模型,而判別模型無法得到聯合分布,所以不能當成生成模型使用。

(2)缺點:

(1)、 生成模型不關心不同類別之間的最優分類面到底在哪兒,所以用於分類問題時,分類精度可能沒有判別模型高;

(2)、由於生成模型學習的是數據的聯合分布,因此在某種程度上學習問題的複雜性更高。

(3)、要求輸入數據具有平移不變性。

2.2、Convolution Neural Networks卷積神經網路

卷積神經網路是人工神經網路的一種,已成為當前語音分析和圖像識別領域的研究熱點。它的權值共享網路結構使之更類似於生物神經網路,降低了網路模型的複雜度,減少了權值的數量。該優點在網路的輸入是多維圖像時表現的更為明顯,使圖像可以直接作為網路的輸入,避免了傳統識別演算法中複雜的特徵提取和數據重建過程。卷積網路是為識別二維形狀而特殊設計的一個多層感知器,這種網路結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。

2.2.1 網路結構

卷積神經網路是一個多層的神經網路,其基本運算單元包括:卷積運算、池化運算、全連接運算和識別運算。

圖4 卷積神經網路結構

l 卷積運算:前一層的特徵圖與一個可學習的卷積核進行卷積運算,卷積的結果經過激活函數後的輸出形成這一層的神經元,從而構成該層特徵圖,也稱特徵提取層,每個神經元的輸入與前一層的局部感受野相連接,並提取該局部的特徵,一旦該局部特徵被提取,它與其它特徵之間的位置關係就被確定。

l 池化運算:它把輸入信號分割成不重疊的區域,對於每個區域通過池化(下採樣)運算來降低網路的空間解析度,比如最大值池化是選擇區域內的最大值,均值池化是計算區域內的平均值。通過該運算來消除信號的偏移和扭曲。

l 全連接運算:輸入信號經過多次卷積核池化運算後,輸出為多組信號,經過全連接運算,將多組信號依次組合為一組信號。

l 識別運算:上述運算過程為特徵學習運算,需在上述運算基礎上根據業務需求(分類或回歸問題)增加一層網路用於分類或回歸計算。

2.2.2 訓練過程

卷積網路在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關係,而不需要任何輸入和輸出之間的精確的數學表達式,只要用已知的模式對卷積網路加以訓練,網路就具有輸入輸出對之間的映射能力。卷積網路執行的是有監督訓練,所以其樣本集是由形如:(輸入信號,標籤值)的向量對構成的。

2.2.3 典型改進

卷積神經網路因為其在各個領域中取得了好的效果,是近幾年來研究和應用最為廣泛的深度神經網路。比較有名的卷積神經網路模型主要包括1986年Lenet,2012年的Alexnet,2014年的GoogleNet,2014年的VGG,2015年的Deep Residual Learning。這些卷積神經網路的改進版本或者模型的深度,或者模型的組織結構有一定的差異,但是組成模型的機構構建是相同的,基本都包含了卷積運算、池化運算、全連接運算和識別運算。

2.2.4 模型優缺點

(1)優點:

(1)、權重共享策略減少了需要訓練的參數,相同的權重可以讓濾波器不受信號位置的影響來檢測信號的特性,使得訓練出來的模型的泛化能力更強;

(2)、池化運算可以降低網路的空間解析度,從而消除信號的微小偏移和扭曲,從而對輸入數據的平移不變性要求不高。

(2)缺點:

(1)、深度模型容易出現梯度消散問題。

2.3、Recurrent neural network 遞歸神經網路

在深度學習領域,傳統的多層感知機為基礎的上述各網路結構具有出色的表現,取得了許多成功,它曾在許多不同的任務上——包括手寫數字識別和目標分類上創造了記錄。但是,他們也存在一定的問題,上述模型都無法分析輸入信息之間的整體邏輯序列。這些信息序列富含有大量的內容,信息彼此間有著複雜的時間關聯性,並且信息長度各種各樣。這是以上模型所無法解決的,遞歸神經網路正是為了解決這種序列問題應運而生,其關鍵之處在於當前網路的隱藏狀態會保留先前的輸入信息,用來作當前網路的輸出。

許多任務需要處理序列數據,比如Image captioning, speech synthesis, and music generation 均需要模型生成序列數據,其他領域比如 time series prediction, video analysis, and musical information retrieval 等要求模型的輸入為序列數據,其他任務比如機器翻譯,人機對話,controlling a robot 的模型要求輸入輸出均為序列數據。

2.3.1 網路結構

圖4.1左側是遞歸神經網路的原始結構,如果先拋棄中間那個令人生畏的閉環,那其實就是簡單「輸入層=&>隱藏層=&>輸出層」的三層結構,但是圖中多了一個非常陌生的閉環,也就是說輸入到隱藏層之後,隱藏層還會輸入給自己,使得該網路可以擁有記憶能力。我們說遞歸神經網路擁有記憶能力,而這種能力就是通過W將以往的輸入狀態進行總結,而作為下次輸入的輔助。可以這樣理解隱藏狀態:

h=f(現有的輸入+過去記憶總結)

圖5 遞歸神經網路結構圖

2.3.2 訓練過程

遞歸神經網路中由於輸入時疊加了之前的信號,所以反向傳導時不同於傳統的神經網路,因為對於時刻t的輸入層,其殘差不僅來自於輸出,還來自於之後的隱層。通過反向傳遞演算法,利用輸出層的誤差,求解各個權重的梯度,然後利用梯度下降法更新各個權重。

2.3.3 典型改進

遞歸神經網路模型可以用來處理序列數據,遞歸神經網路包含了大量參數,且難於訓練(時間維度的梯度消散或梯度爆炸),所以出現一系列對RNN優化,比如網路結構、求解演算法與並行化。今年來bidirectional RNN (BRNN)與 LSTM在image captioning, language translation, and handwriting recognition這幾個方向上有了突破性進展 。

2.3.4 模型優缺點

(1)優點:

(1)、模型是時間維度上的深度模型,可以對序列內容建模;

(2)缺點:

(1)、需要訓練的參數較多,容易出現梯度消散或梯度爆炸問題;

(2)、不具有特徵學習能力。


作者:許鐵-巡洋艦科技
鏈接:知乎專欄
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

首先, 要看RNN和對於圖像等靜態類變數處理立下神功的卷積網路CNN的結構區別來看, 「循環」兩個字,已經點出了RNN的核心特徵, 即系統的輸出會保留在網路里, 和系統下一刻的輸入一起共同決定下一刻的輸出。這就把動力學的本質體現了出來, 循環正對應動力學系統的反饋概念,可以刻畫複雜的歷史依賴。另一個角度看也符合著名的圖靈機原理。 即此刻的狀態包含上一刻的歷史,又是下一刻變化的依據。 這其實包含了可編程神經網路的核心概念,即, 當你有一個未知的過程,但你可以測量到輸入和輸出, 你假設當這個過程通過RNN的時候,它是可以自己學會這樣的輸入輸出規律的, 而且因此具有預測能力。 在這點上說, RNN是圖靈完備的。

圖: 圖1即CNN的架構, 圖2到5是RNN的幾種基本玩法。圖2是把單一輸入轉化為序列輸出,例如把圖像轉化成一行文字。 圖三是把序列輸入轉化為單個輸出, 比如情感測試,測量一段話正面或負面的情緒。 圖四是把序列轉化為序列, 最典型的是機器翻譯,
注意輸入和輸出的「時差」。 圖5是無時差的序列到序列轉化, 比如給一個錄像中的每一幀貼標籤。 圖片來源 The unreasonable
effective RNN。

我們用一段小巧的python代碼讓你重新理解下上述的原理:

classRNN:


# ...

def step(self, x):

# update the hidden state

self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x))

# compute the output vector

y = np.dot(self.W_hy, self.h)

return y


這裡的h就是hidden variable 隱變數,即整個網路每個神經元的狀態,x是輸入, y是輸出, 注意著三者都是高維向量。隱變數h,就是通常說的神經網路本體,也正是循環得以實現的基礎, 因為它如同一個可以儲存無窮歷史信息(理論上)的水庫,一方面會通過輸入矩陣W_xh吸收輸入序列x的當下值,一方面通過網路連接W_hh進行內部神經元間的相互作用(網路效應,信息傳遞),因為其網路的狀態和輸入的整個過去歷史有關, 最終的輸出又是兩部分加在一起共同通過非線性函數tanh。 整個過程就是一個循環神經網路「循環」的過程。 W_hh理論上可以可以刻畫輸入的整個歷史對於最終輸出的任何反饋形式,從而刻畫序列內部,或序列之間的時間關聯, 這是RNN強大的關鍵。

那麼CNN似乎也有類似的功能? 那麼CNN是不是也可以當做RNN來用呢? 答案是否定的,RNN的重要特性是可以處理不定長的輸入,得到一定的輸出。當你的輸入可長可短, 比如訓練翻譯模型的時候, 你的句子長度都不固定,你是無法像一個訓練固定像素的圖像那樣用CNN搞定的。而利用RNN的循環特性可以輕鬆搞定。

圖, CNN(左)和RNN(右)的結構區別, 注意右圖中輸出和隱變數網路間的雙向箭頭不一定存在,往往只有隱變數到輸出的箭頭。


在序列信號的應用上,CNN是只響應預先設定的信號長度(輸入向量的長度),RNN的響應長度是學習出來的。

CNN對特徵的響應是線性的,RNN在這個遞進方向上是非線性響應的。這也帶來了很大的差別。


CNN 專門解決圖像問題的,可用把它看作特徵提取層,放在輸入層上,最後用MLP 做分類。


RNN 專門解決時間序列問題的,用來提取時間序列信息,放在特徵提取層(如CNN)之後。


DNN 說白了就是 多層網路,只是用了很多技巧,讓它能夠 deep 。

工具及教程:
http://tensorlayer.readthedocs.io

https://www.tensorflow.org/versions/r0.9/tutorials/index.html

不用謝


蟹妖,可參閱我關於深度學習入門的回答。
深度學習入門必看的書和論文?有哪些必備的技能需學習? - 魏秀參的回答


DNN以神經網路為載體,重在深度,可以說是一個統稱。
RNN,回歸型網路,用於序列數據,並且有了一定的記憶效應,輔之以lstm。
CNN應該側重空間映射,圖像數據尤為貼合此場景。


之前寫過一篇關於 RNN 的文章:循環神經網路-Recurrent Neural Networks

循環神經網路(Recurrent Neural Networks)是目前非常流行的神經網路模型,在自然語言處理的很多任務中已經展示出卓越的效果。但是在介紹 RNN 的諸多文章中,通常都是介紹 RNN 的使用方法和實戰效果,很少有文章會介紹關於該神經網路的訓練過程。


循環神經網路是一個在時間上傳遞的神經網路,網路的深度就是時間的長度。該神經網路是專門用來處理時間序列問題的,能夠提取時間序列的信息。如果是前向神經網路,每一層的神經元信號只能夠向下一層傳播,樣本的處理在時刻上是獨立的。對於循環神經網路而言,神經元在這個時刻的輸出可以直接影響下一個時間點的輸入,因此該神經網路能夠處理時間序列方面的問題。


本文將會從數學的角度展開關於循環神經網路的使用方法和訓練過程,在本文中,會假定讀者已經掌握數學分析中的導數偏導數鏈式法則梯度下降法等基礎內容。本文將會使用傳統的後向傳播演算法(Back Propagation)來訓練 RNN 模型。


我個人的看法是,DNN是深度學習思想的一個統稱,狹義上它是一種逐層貪婪無監督的學習方法,注意它只是一種思想,需要依賴具體的模型去實現,即深度學習 = 逐層貪婪無監督方法 + 特定深度學習模型。而具體的深度學習模型有CNN、RNN、SDA、RBM、RBM等。逐層貪婪無監督的深度學習思想是2006年提出來的,能有效解決深層網路結構訓練的梯度彌散等問題。而CNN等網路模型其實很早就提出來了,之前用BP之類的老方法效果一直不太好,等到深度學習思想提出來後,這些老模型就都煥發了新生,帶來了今天深度學習的火熱。回歸到問題上來,就是CNN、RNN、DNN不是一個層次上的東西,分別是具體的模型和通用的思想。這是我的個人理解,還在學習中,如有錯誤歡迎指出。


中文不好解釋,用英文試試,不當之處請諒解。

Artificial neural networks use networks of activation units (hidden units) to map inputs to outputs. The concept of deep learning applied to this model allows the model to have multiple layers of hidden units where we feed output from the previous layers. However, dense connections between the layers is not efficient, so people developed models that perform better for specific tasks.

The whole "convolution" in convolutional neural networks is essentially based on the fact that we"re lazy and want to exploit spatial relationships in images. This is a huge deal because we can then group small patches of pixels and effectively "downsample" the image while training multiple instances of small detectors with those patches. Then a CNN just moves those filters around the entire image in a convolution. The outputs are then collected in a pooling layer. The pooling layer is again a down-sampling of the previous feature map. If we have activity on an output for filter a, we don"t necessarily care if the activity is for (x, y) or (x+1, y), (x, y+1) or (x+1, y+1), so long as we have activity. So we often just take the highest value of activity on a small grid in the feature map called max pooling.

If you think about it from an abstract perspective, the convolution part of a CNN is effectively doing a reasonable way of dimensionality reduction. After a while you can flatten the image and process it through layers in a dense network. Remember to use dropout layers! (because our guys wrote that paper :P)

I won"t talk about RNN for now because I don"t have enough experience working with them and according to my colleague nobody really knows what"s going on inside an LSTM...but they"re insanely popular for data with time dependencies.


Let"s talk RNN. Recurrent networks are basically neural networks that evolve through time. Rather than exploiting spatial locality, they exploit sequential, or temporal locality. Each iteration in an RNN takes an input and it"s previous hidden state, and produces some new hidden state. The weights are shared in each level, but we can unroll an RNN through time and get your everyday neural net. Theoretically RNN has the capacity to store information from as long ago as possible, but historically people always had problems with the gradients vanishing as we go back further in time, meaning that the model can"t be differentiated numerically and thus cannot be trained with backprop. This was later solved in the proposal of the LSTM architecture and subsequent work, and now we train RNNs with BPTT (backpropagation through time). Here"s a link that explains LSTMs really well: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

Since then RNN has been applied in many areas of AI, and many are now designing RNN with the ability to extract specific information (read: features) from its training examples with attention-based models.


CNN就是全連接權值太多,取的一個折衷策略,只取部分連接邊掃描一遍整個輸入,最後再匯總(求max等等操作)。
RNN就是在隱層加入了自連邊和互連邊(即隱層可以相互連接),可以按時序展開為一系列FNN。常見訓練演算法為bptt和lstm。
DNN個人理解就是隱層有很多層,bp反傳時可能梯度會銳減或劇增,導致誤差傳不回來,可以通過重新設計網路結構(類似lstm)的辦法來解決。


想學專業知識就要少上知戶 多看書

Stanford University CS231n: Convolutional Neural Networks for Visual Recognition


DNN區別於淺層神經網路,是所有深度學習中的網路模型統稱,包括CNN、RNN等,以後還會有新的網路模型提出。題主說的CNN應該是三大特點:local receptive fields、shared weights 和pooling。他們的用途都是拿數據來訓練學習特徵(太籠統了,嘿嘿),省去手工提取特徵的過程,類似是一個通用的學習框架。 @helloworld00回答中提到的課程不錯,針對卷積神經網路和視覺識別的,題主可以深入學習一下。UFLDL也很適合初學者。另外如果真想研究深度學習,還是要看論文的--&>Reading List ? Deep Learning


都看不懂,我還是看KNN吧=.=(逃)


DNN 一般說來是泛稱吧,

CNN 卷積擅長從局部特徵逼近整體特徵,

RNN 是 Recurrent 感覺譯作循環神經網路怪怪的,計算機術語里循環一般是同一層次的,Recurrent 其實是時間遞歸,這個擅長對付時間序列。


推薦一款最易用中文excel神經網路軟體包,有BP、RBF、PNN、GRNN、Elman、SOM、LVQ七種神經網路功能。一鍵操作,易用易懂。PLS+Excel+Word,易用、易懂的偏最小二乘多元回歸軟體。


這篇博客寫的還行, 可以看看
Pycon 2016 tensorflow 研討會總結 -- tensorflow 手把手入門, 用"人話"解釋CNN #第三講 CNN


看到ANN,DNN,CNN,RNN這幾個神經網路的概念,覺得好簡單,用個例子,用R語言、或者python演算法去解決,就歇菜了。


推薦閱讀:

ICLR 2018 有什麼值得關注的亮點?
如何看待谷歌公開 tensorflow 專用處理器 TPU?
學好深度學習,python得達到什麼程度?
人工智慧的冬天是否將要到來?
深度學習目前主要有哪些研究方向?

TAG:人工智慧 | 語音識別 | 圖像識別 | 神經網路 | 深度學習(Deep Learning) |