導航:首頁 > 網路共享 > 卷積神經網路和rnn哪個難

卷積神經網路和rnn哪個難

發布時間:2023-02-05 03:29:54

A. 卷積神經網路和深度神經網路的區別是什麼

DNN是指深度神經網路,它是一個很廣的概念,某種意義上CNN、RNN、GAN等都屬於其范疇之內。DNN與CNN(卷積神經網路)的區別是DNN特指全連接的神經元結構,並不包含卷積單元或是時間上的關聯。DNN是指包含多個隱層的神經網路,根據神經元的特點,可以分為MLP、CNNs、RNNs等,從神經元的角度來講解,MLP是最樸素的DNN,CNNs是encode了空間相關性的DNN,RNNs是encode進了時間相關性的DNN。
深度神經網路(DNN)
2006年,Hinton利用預訓練方法緩解了局部最優解問題,將隱含層推動到了7層,神經網路真正意義上有了「深度」,由此揭開了深度學習的熱潮。
卷積神經網路(CNN)
我們看到全連接DNN的結構里下層神經元和所有上層神經元都能夠形成連接,帶來的潛在問題是參數數量的膨脹。對於CNN來說,並不是所有上下層神經元都能直接相連,而是通過「卷積核」作為中介。同一個卷積核在所有圖像內是共享的,圖像通過卷積操作後仍然保留原先的位置關系。

想要學習了解更多卷積神經網路和深度神經網路的信息,推薦CDA數據分析師課程。「CDA 數據分析師認證」是一套科學化,專業化,國際化的人才考核標准,涉及崗位包括大數據、數據分析、市場、產品、運營、咨詢、投資、研發等。該課程兼顧培養學員軟性數據治理思維、演算法思維、預測分析思維,全方位提升學員的數據洞察力。點擊預約免費試聽課。

B. 幾種常見的循環神經網路結構RNN、LSTM、GRU

傳統文本處理任務的方法中一般將TF-IDF向量作為特徵輸入。顯而易見,這樣的表示實際上丟失了輸入的文本序列中每個單詞的順序。在神經網路的建模過程中,一般的前饋神經網路,如卷積神經網路,通常接受一個定長的向量作為輸入。卷積神經網路對文本數據建模時,輸入變長的字元串或者單詞串,然後通過滑動窗口加池化的方式將原先的輸入轉換成一個固定長度的向量表示,這樣做可以捕捉到原文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關系還是很難被學習到。
循環神經網路卻能很好地處理文本數據變長並且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到後閱讀文章中的每一個單詞,將前面閱讀到的有用信息編碼到狀態變數中去,從而擁有了一定的記憶能力,可以更好地理解之後的文本。
其網路結構如下圖所示:

由圖可見,t是時刻,x是輸入層,s是隱藏層,o是輸出層,矩陣W就是隱藏層上一次的值作為這一次的輸入的權重。

如果反復把式 2 帶入到式 1,將得到:

其中f和g為激活函數,U為輸入層到隱含層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣。在文本分類任務中,f可以選取Tanh函數或者ReLU函數,g可以採用Softmax函數。

通過最小化損失誤差(即輸出的y與真實類別之間的距離),我們可以不斷訓練網路,使得得到的循環神經網路可以准確地預測文本所屬的類別,達到分類目的。相比於卷積神經網路等前饋神經網路,循環神經網路由於具備對序列順序信息的刻畫能力,往往能得到更准確的結果。

RNN的訓練演算法為:BPTT
BPTT的基本原理和BP演算法是一樣的,同樣是三步:
1.前向計算每個神經元的輸出值;
2.反向計算每個神經元的誤差項值,它是誤差函數E對神經元j的加權輸入的偏導數;
3.計算每個權重的梯度。
最後再用隨機梯度下降演算法更新權重。
具體參考: https://www.jianshu.com/p/39a99c88a565
最後由鏈式法則得到下面以雅可比矩陣來表達的每個權重的梯度:

由於預測的誤差是沿著神經網路的每一層反向傳播的,因此當雅克比矩陣的最大特徵值大於1時,隨著離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸;反之,若雅克比矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,產生梯度消失。對於普通的前饋網路來說,梯度消失意味著無法通過加深網路層次來改善神經網路的預測效果,因為無論如何加深網路,只有靠近輸出的若干層才真正起到學習的作用。 這使得循環神經網路模型很難學習到輸入序列中的長距離依賴關系

關於RNN梯度下降的詳細推導可以參考: https://zhuanlan.hu.com/p/44163528

梯度爆炸的問題可以通過梯度裁剪來緩解,即當梯度的範式大於某個給定值時,對梯度進行等比收縮。而梯度消失問題相對比較棘手,需要對模型本身進行改進。深度殘差網路是對前饋神經網路的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網路表示;而對於循環神經網路來說,長短時記憶模型及其變種門控循環單元等模型通過加入門控機制,很大程度上彌補了梯度消失所帶來的損失。

LSTM的網路機構圖如下所示:

與傳統的循環神經網路相比,LSTM仍然是基於xt和ht−1來計算ht,只不過對內部的結構進行了更加精心的設計,加入了輸入門it 、遺忘門ft以及輸出門ot三個門和一個內部記憶單元ct。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。

在經典的LSTM模型中,第t層的更新計算公式為

其中it是通過輸入xt和上一步的隱含層輸出ht−1進行線性變換,再經過激活函數σ得到的。輸入門it的結果是向量,其中每個元素是0到1之間的實數,用於控制各維度流過閥門的信息量;Wi 、Ui兩個矩陣和向量bi為輸入門的參數,是在訓練過程中需要學習得到的。遺忘門ft和輸出門ot的計算方式與輸入門類似,它們有各自的參數W、U和b。與傳統的循環神經網路不同的是,從上一個記憶單元的狀態ct−1到當前的狀態ct的轉移不一定完全取決於激活函數計算得到的狀態,還由輸入門和遺忘門來共同控制。

在一個訓練好的網路中,當輸入的序列中沒有重要信息時,LSTM的遺忘門的值接近於1,輸入門的值接近於0,此時過去的記憶會被保存,從而實現了長期記憶功能;當輸入的序列中出現了重要的信息時,LSTM應當把其存入記憶中,此時其輸入門的值會接近於1;當輸入的序列中出現了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近於0,這樣舊的記憶被遺忘,新的重要信息被記憶。經過這樣的設計,整個網路更容易學習到序列之間的長期依賴。

GRU是在LSTM上進行簡化而得到的,GRU的網路結構如下所示:

Zt代表更新門,更新門的作用類似於LSTM中的遺忘門和輸入門,它能決定要丟棄哪些信息和要添加哪些新信息。
Rt代表重置門,重置門用於決定丟棄先前信息的程度。

要注意的是,h只是一個變數,因此在每個時刻,包括最後的線性組合,h都是在用以前的自己和當前的備選答案更新自己。舉例來說,這一個變數好比一杯酒,每次我們要把一部分酒倒出去,並把倒出去的酒和新加入的原料混合,然後在倒回來,這里的reset控制的就是要倒出去的,並且混合好之後再倒回來的酒的比例,而update控制的則是用多大的比例混合新原料和倒出來的之前調制好的酒。同理,也可以以此理解LSTM,LSTM的遺忘門功能上和reset相似,而輸入門與update相似,不同之處在於LSTM還控制了當前狀態的exposure,也就是輸出門的功能,這是GRU所沒有的。

1.百面機器學習
2. https://zhuanlan.hu.com/p/45649187
3. https://www.jianshu.com/p/39a99c88a565

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

如下:

1、DNN:存在著一個問題——無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。對了適應這種需求,就出現了另一種神經網路結構——循環神經網路RNN。

2、CNN:每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱為前向神經網路。

3、RNN:神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!

介紹

神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。

在實際應用中,所謂的深度神經網路DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。

D. 一文看懂四種基本的神經網路架構

原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/

更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注

剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。

神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:

前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。

循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。

其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元

一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。

可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。

如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:

這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。

多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,

談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:

·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。

卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。

傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。

那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。

從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:

在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。

而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。

h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了

DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。

生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:

生成對抗網路:

下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路

判別網路

最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。

本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。

E. 深度學習能夠學會編程嗎

深度學習本身是一個非常龐大的知識體系。本文更多想從程序員的視角出發,讓大家觀察一下深度學習對程序員意味著什麼,以及我們如何利用這樣一個高速發展的學科,來幫助程序員提升軟體開發的能力。
本文根據費良宏在2016QCon全球軟體開發大會(上海)上的演講整理而成。
前言
1973年,美國上映了一部熱門的科幻電影《WestWorld》,三年之後又有一個續集叫做《FutureWorld》。這部電影在80年代初被引進到中國叫《未來世界》。那部電影對我來講簡直可以說得上是震撼。影片中出現了很多機器人,表情豐富的面部下面都是集成電路板。這讓那時候的我覺得未來世界都是那麼遙遠、那麼神秘。
時間到了2016年,很多朋友可能都在追看HBO斥巨資拍攝的同一題材的系列劇《WestWorld》。如果前兩部電影還是局限在機器人、人工智慧這樣的話題,2016年的新劇則在劇情和人工智慧的思考方面有了很大的突破。不再渲染機器人是否會威脅到人類,而是在探討「Dreamsaremainlymemories」這一類更具哲理的問題。
「記憶究竟如何影響了智能」這個話題非常值得我們去思考,也給我們一個很好的啟示——今天,人工智慧領域究竟有了怎樣的發展和進步。
今天我們探討的話題不僅僅是簡單的人工智慧。如果大家對深度學習感興趣,我相信各位一定會在搜索引擎上搜索過類似相關的關鍵字。我在Google上以deeplearning作為關鍵字得到了2,630萬個搜索的結果。這個數字比一周之前足足多出了300多萬的結果。這個數字足以看得出來深度學習相關的內容發展的速度,人們對深度學習的關注也越來越高。
從另外的一個角度,我想讓大家看看深度學習在市場上究竟有多麼熱門。從2011年到現在一共有140多家專注人工智慧、深度學習相關的創業公司被收購。僅僅在2016年這種並購就發生了40多起。
其中最瘋狂的是就是Google,已經收購了 11 家人工智慧創業公司,其中最有名的就是擊敗了李世石九段的 DeepMind。排名之後的就要數 Apple、Intel以及Twitter。以Intel 公司為例,僅在今年就已經收購了 3 家創業公司,Itseez、Nervana 和 Movidius。這一系列大手筆的並購為了布局人工智慧以及深度學習的領域。
當我們去搜索深度學習話題的時候,經常會看到這樣的一些晦澀難懂的術語:Gradient descent(梯度下降演算法)、Backpropagation(反向傳播演算法)、Convolutional Neural Network(卷積神經網路)、受限玻耳茲曼機(Restricted Boltzmann Machine)等。
如打開任何一篇技術文章,你看到的通篇都是各種數學公式。大家看到如下左邊的圖,其實並不是一篇高水準的學術論文,而僅僅是維基網路關於玻耳茲曼機的介紹。維基網路是科普層面的內容,內容復雜程度就超過了大多數數學知識的能力。
在這樣的背景之下,我今天的的話題可以歸納成三點:第一,我們為什麼要學習深度學習;第二,深度學習最核心的關鍵概念就是神經網路,那麼究竟什麼是神經網路;第三,作為程序員,當我們想要成為深度學習開發者的時候,我們需要具備怎樣的工具箱,以及從哪裡著手進行開發。
為什麼要學習深度學習
首先,我們談談為什麼要學習深度學習。在這個市場當中,最不缺乏的就是各種概念以及各種時髦新技術的詞彙。深度學習有什麼不一樣的地方?我非常喜歡AndrewNg(吳恩達)曾經用過的一個比喻。
他把深度學習比喻成一個火箭。這個火箭有一個最重要的部分,就是它的引擎,目前來看在這個領域裡面,引擎的核心就是神經網路。大家都知道,火箭除了引擎之外還需要有燃料,那麼大數據其實就構成了整個火箭另外的重要組成部分——燃料。以往我們談到大數據的時候,更多是強調存儲和管理數據的能力,但是這些方法和工具更多是對於以往歷史數據的統計、匯總。
而對於今後未知的東西,這些傳統的方法並不能夠幫助我們可以從大數據中得出預測的結論。如果考慮到神經網路和大數據結合,我們才可能看清楚大數據真正的價值和意義。AndrewNg就曾經說過「我們相信(神經網路代表的深度學習)是讓我們獲得最接近於人工智慧的捷徑」。這就是我們要學習深度學習的一個最重要的原因。
其次,隨著我們進行數據處理以及運算能力的不斷提升,深度學習所代表的人工智慧技術和傳統意義上人工智慧技術比較起來,在性能上有了突飛猛進的發展。這主要得益於在過去幾十間計算機和相關產業不斷發展帶來的成果。在人工智慧的領域,性能是我們選擇深度學習另一個重要的原因。
這是一段Nvidia在今年公布的關於深度學習在無人駕駛領域應用的視頻。我們可以看到,將深度學習應用在自動駕駛方面,僅僅經歷了3千英里的訓練,就可以達到什麼樣的程度。在今年年初進行的實驗上,這個系統還不具備真正智能能力,經常會出現各種各樣的讓人提心吊膽的狀況,甚至在某些情況下還需要人工干預。
但經過了3千英里的訓練之後,我們看到在山路、公路、泥地等各種復雜的路況下面,無人駕駛已經有了一個非常驚人的表現。請大家注意,這個深度學習的模型只經過了短短幾個月、3千英里的訓練。
如果我們不斷完善這種模型的話,這種處理能力將會變得何等的強大。這個場景裡面最重要的技術無疑就是深度學習。我們可以得出一個結論:深度學習可以為我們提供強大的能力,如果程序員擁有了這個技術的話,無異於會讓每個程序員如虎添翼。
神經網路快速入門
如果我們對於學習深度學習沒有任何疑慮的話,接下來就一定會關心我需要掌握什麼樣的知識才能讓我進入到這個領域。這裡面最重要的關鍵技術就是「神經網路」。說起「神經網路」,容易混淆是這樣兩個完全不同的概念。
一個是生物學神經網路,第二個才是我們今天要談起的人工智慧神經網路。可能在座的各位有朋友在從事人工智慧方面的工作。當你向他請教神經網路的時候,他會拋出許多陌生的概念和術語讓你聽起來雲里霧里,而你只能望而卻步了。
對於人工智慧神經網路這個概念,大多數的程序員都會覺得距離自己有很大的距離。因為很難有人願意花時間跟你分享神經網路的本質究竟是什麼。而你從書本上讀的到的理論和概念,也很讓你找到一個清晰、簡單的結論。
今天就我們來看一看,從程序員角度出發神經網路究竟是什麼。我第一次知道神經網路這個概念是通過一部電影——1991年上映的《終結者2》。男主角施瓦辛格有一句台詞:
「MyCPUisaneural-netprocessor;alearningcomputer.」(我的處理器是一個神經處理單元,它是一台可以學習的計算機)。從歷史來看人類對自身智力的探索,遠遠早於對於神經網路的研究。
1852年,義大利學者因為一個偶然的失誤,將人類的頭顱掉到硝酸鹽溶液中,從而獲得第一次通過肉眼關注神經網路的機會。這個意外加速了對人類智力奧秘的探索,開啟了人工智慧、神經元這樣概念的發展。
生物神經網路這個概念的發展,和今天我們談的神經網路有什麼關系嗎?我們今天談到的神經網路,除了在部分名詞上借鑒了生物學神經網路之外,跟生物學神經網路已經沒有任何關系,它已經完全是數學和計算機領域的概念,這也是人工智慧發展成熟的標志。這點大家要區分開,不要把生物神經網路跟我們今天談到的人工智慧有任何的混淆。
90年代中期,由Vapnik等人提出了支持向量機演算法(Support Vector Machines,支持向量機)。很快這個演算法就在很多方面體現出了對比神經網路的巨大優勢,例如:無需調參、高效率、全局最優解等。基於這些理由,SVM演算法迅速打敗了神經網路演算法成為那個時期的主流。而神經網路的研究則再次陷入了冰河期。
在被人摒棄的十年裡面,有幾個學者仍然在堅持研究。其中很重要的一個人就是加拿大多倫多大學的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發表了論文,首次提出了「深度信念網路」的概念。
與傳統的訓練方式不同,「深度信念網路」有一個「預訓練」(pre-training)的過程,這可以方便的讓神經網路中的權值找到一個接近最優解的值,之後再使用「微調」(fine-tuning)技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網路的時間。在他的論文裡面,他給多層神經網路相關的學習方法賦予了一個新名詞— 「深度學習」。
很快,深度學習在語音識別領域嶄露頭角。接著在2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千個類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。
這個結果充分證明了多層神經網路識別效果的優越性。從那時起,深度學習就開啟了新的一段黃金時期。我們看到今天深度學習和神經網路的火熱發展,就是從那個時候開始引爆的。
利用神經網路構建分類器,這個神經網路的結構是怎樣的?
其實這個結構非常簡單,我們看到這個圖就是簡單神經網路的示意圖。神經網路本質上就是一種「有向圖」。圖上的每個節點借用了生物學的術語就有了一個新的名詞 – 「神經元」。連接神經元的具有指向性的連線(有向弧)則被看作是「神經」。這這個圖上神經元並不是最重要的,最重要的是連接神經元的神經。每個神經部分有指向性,每一個神經元會指向下一層的節點。
節點是分層的,每個節點指向上一層節點。同層節點沒有連接,並且不能越過上一層節點。每個弧上有一個值,我們通常稱之為」權重「。通過權重就可以有一個公式計算出它們所指的節點的值。這個權重值是多少?我們是通過訓練得出結果。它們的初始賦值往往通過隨機數開始,然後訓練得到的最逼近真實值的結果作為模型,並可以被反復使用。這個結果就是我們說的訓練過的分類器。
節點分成輸入節點和輸出節點,中間稱為隱層。簡單來說,我們有數據輸入項,中間不同的多個層次的神經網路層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結果也被稱作輸出節點,輸出節點是有限的數量,輸入節點也是有限數量,隱層是我們可以設計的模型部分,這就是最簡單的神經網路概念。
如果簡單做一個簡單的類比,我想用四層神經網路做一個解釋。左邊是輸入節點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數據項。中間隱層就是我們設計出來的神經網路,這個網路現在有不同的層次,層次之間權重是我們不斷訓練獲得一個結果。
最後輸出的結果,保存在輸出節點裡面,每一次像一個流向一樣,神經是有一個指向的,通過不同層進行不同的計算。在隱層當中,每一個節點輸入的結果計算之後作為下一層的輸入項,最終結果會保存在輸出節點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經網路的簡單概述。
除了從左到右的形式表達的結構圖,還有一種常見的表達形式是從下到上來表示一個神經網路。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以AndrewNg和LeCun的文獻使用較多。而在Caffe框架里則使用的則是從下到上的表達。
簡單來說,神經網路並不神秘,它就是有像圖,利用圖的處理能力幫助我們對特徵的提取和學習的過程。2006年Hinton的那篇著名的論文中,將深度學習總結成三個最重要的要素:計算、數據、模型。有了這三點,就可以實現一個深度學習的系統。
程序員需要的工具箱
對於程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們看看,對於程序員來說,著手深度學習的實踐需要准備什麼樣的工具。
硬體
從硬體來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構以外,還出現了附加有乘法器的CPU,用以提升計算能力。此外在不同領域會有DSP的應用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學習應用比較熱門的領域。最後一類就是FPGA(可編程邏輯門陣列)。
這四種方法各有其優缺點,每種產品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調度,比如讀取數據,管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。
這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的演算法。GPU的管理能力更弱一些,但是運算能力更強。但由於計算單元數量多,更適合整塊數據進行流處理的演算法。
FPGA在管理與運算處理方面都很強,但是開發周期長,復雜演算法開發難度較大。就實時性來說,FPGA是最高的。單從目前的發展來看,對於普通程序員來說,現實中普遍採用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領域。
這是我前天為這次分享而准備的一個AWS 上p2的實例。僅僅通過幾條命令就完成了實例的更新、驅動的安裝和環境的設置,總共的資源創建、設置時間大概在10分鍾以內。而之前,我安裝調試前面提到的那台計算機,足足花了我兩天時間。
另外,從成本上還可以做一個對比。p2.8xLarge 實例每小時的費用是7.2美元。而我自己那台計算機總共的花費了是¥16,904元。這個成本足夠讓我使用350多個小時的p2.8xLarge。在一年裡使用AWS深度學習站就可以抵消掉我所有的付出。隨著技術的不斷的升級換代,我可以不斷的升級我的實例,從而可以用有限的成本獲得更大、更多的處理資源。這其實也是雲計算的價值所在。
雲計算和深度學習究竟有什麼關系?今年的8月8號,在IDG網站上發表了一篇文章談到了這個話題。文章中做了這樣一個預言:如果深度學習的並行能力不斷提高,雲計算所提供的處理能力也不斷發展,兩者結合可能會產生新一代的深度學習,將帶來更大影響和沖擊。這是需要大家考慮和重視的一個方向!
軟體
深度學習除了硬體的基礎環境之外。程序員會更關心與開發相關的軟體資源。這里我羅列了一些曾經使用過的軟體框架和工具。
Scikit-learn是最為流行的一個Python機器學習庫。它具有如下吸引人的特點:簡單、高效且異常豐富的數據挖掘/數據分析演算法實現; 基於NumPy、SciPy以及matplotlib,從數據探索性分析,數據可視化到演算法實現,整個過程一體化實現;開源,有非常豐富的學習文檔。
Caffe專注在卷及神經網路以及圖像處理。不過Caffe已經很久沒有更新過了。這個框架的一個主要的開發者賈揚清也在今年跳槽去了Google。也許曾經的霸主地位要讓位給他人了。
Theano 是一個非常靈活的Python 機器學習的庫。在研究領域非常流行,使用上非常方便易於定義復雜的模型。Tensorflow 的API 非常類似於Theano。我在今年北京的QCon 大會上也分享過關於Theano 的話題。
Jupyter notebook 是一個很強大的基於ipython的python代碼編輯器,部署在網頁上,可以非常方便的進行互動式的處理,很適合進行演算法研究合數據處理。
Torch 是一個非常出色的機器學習的庫。它是由一個比較小眾的lua語言實現的。但是因為LuaJIT 的使用,程序的效率非常出色。Facebook在人工智慧領域主打Torch,甚至現在推出了自己的升級版框架Torchnet。
深度學習的框架非常之多,是不是有一種亂花漸欲迷人眼的感覺?我今天向各位程序員重點介紹的是將是TensorFlow。這是2015年穀歌推出的開源的面向機器學習的開發框架,這也是Google第二代的深度學習的框架。很多公司都使用了TensorFlow開發了很多有意思的應用,效果很好。
用TensorFlow可以做什麼?答案是它可以應用於回歸模型、神經網路以深度學習這幾個領域。在深度學習方面它集成了分布式表示、卷積神經網路(CNN)、遞歸神經網路(RNN) 以及長短期記憶人工神經網路(Long-Short Term Memory, LSTM)。
關於Tensorflow 首先要理解的概念就是Tensor。在辭典中對於這個詞的定義是張量,是一個可用來表示在一些向量、標量和其他張量之間的線性關系的多線性函數。實際上這個表述很難理解,用我自己的語言解釋Tensor 就是「N維數組」而已。
使用 TensorFlow, 作為程序員必須明白 TensorFlow這樣幾個基礎概念:它使用圖 (Graph) 來表示計算任務;在被稱之為 會話 (Session) 的上下文 (context) 中執行圖;使用 Tensor 表示數據;通過 變數 (Variable) 維護狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據。
一句話總結就是,TensorFlow 就是有狀態圖的數據流圖計算環境,每個節點就是在做數據操作,然後提供依賴性和指向性,提供完整數據流。
TensorFlow安裝非常簡單,但官網提供下載的安裝包所支持的CUDA 的版本是7.5。考慮到CUDA 8 的讓人心動的新特以及不久就要正式發布的現狀。或許你想會考慮立即體驗CUDA 8,那麼就只能通過編譯Tensorflow源代碼而獲得。目前TensorFlow已經支持了Python2.7、3.3+。
此外,對於使用Python 語言的程序員還需要安裝所需要的一些庫,例如:numpy、protobuf等等。對於卷積處理而言,cuDNN是公認的性能最好的開發庫,請一定要安裝上。常規的Tensorsorflow的安裝很簡單,一條命令足矣:
$ pip3 install —upgrade https://storage.233.wiki/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl
如果想評估一下或者簡單學習一下,還可以通過Docker進行安裝,安裝的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多優點。首先,目前為止,深度學習的開發框架裡面TensorFlow的文檔做的最好,對程序員學習而言是非常好的一點。第二,TensorFlow有豐富的參考實例,作為參考學習起來非常容易。
第三,開發者社區活躍,在任何一個深度學習的社區里,都有大量關於TensorFlow的討論。第四,谷歌的支持力度非常大,從2015年到現在升級速度非常快,這是其他開源框架遠遠達不到的結果。
參考TensorFlow的白皮書,我們會看到未來TensorFlow還將會有巨大的發展潛力。讓我特別感興趣是這兩個方向。第一,支持跨多台機器的 parallelisation。盡管在0.8版本中推出了並行化的能力,但是目前還不完善。隨著未來不斷發展,依託雲計算的處理能力的提升這個特性將是非常讓人振奮的。
第二,支持更多的開發語言,對於開發者來說這是一個絕大的利好,通過使用自己擅長的語言使用TensorFlow應用。這些開發語言將會擴展到Java、Lua以及R 等。
在這里我想給大家展示一個應用Tensorflow 的例子。這個例子的代碼託管在這個網址上 https://github.com/anishathalye/neural-style。白俄羅斯的現代印象派藝術家Leonid Afremov善於用濃墨重彩來表現都市和風景題材,尤其是其雨景系列作品。他習慣用大色塊的鋪陳來營造光影效果,對反光物體和環境色的把握非常精準。
於是我就找到了一張上海東方明珠電視塔的一張攝影作品,我希望通過Tensorflow 去學習一下Leonid Afremov 的繪畫風格,並將這張東方明珠的照片處理成那種光影色彩豐富的作品風格。利用Tensorflow 以及上面提到的那個項目的代碼,在一個AWS 的p2類型的實例上進行了一個一千次的迭代,於是就得到了下圖這樣的處理結果。
這個處理的代碼只有350行里,模型使用了一個成名於2014年ImageNet比賽中的明星 VGG。這個模型非常好,特點就是「go depper」。
TensorFlow 做出這樣的作品,並不僅僅作為娛樂供大家一笑,還可以做更多有意思的事情。將剛才的處理能力推廣到視頻當中,就可以看到下圖這樣的效果,用梵高著名的作品」星月夜「的風格就加工成了這樣新的視頻風格。
可以想像一下,如果這種處理能力在更多領域得以應用,它會產生什麼樣的神奇結果?前景是美好的,讓我們有無限遐想。事實上我們目前所從事的很多領域的應用開發都可以通過使用神經網路和深度學習來加以改變。對於深度學習而言,掌握它並不是難事。每一個程序員都可以很容易的掌握這種技術,利用所具備的資源,讓我們很快成為深度學習的程序開發人員。
結束語
未來究竟是什麼樣,我們沒有辦法預言。有位作家Ray Kurzweil在2005年寫了《奇點臨近》一書。在這本書裡面他明確告訴我們,那個時代很快到來。作為那個時代曙光前的人群,我們是不是有能力加速這個過程,利用我們學習的能力實現這個夢想呢?
中國人工智慧的發展
人工智慧的時代無疑已經到來,這個時代需要的當然就是掌握了人工智慧並將其解決具體問題的工程師。坦率的說,市場上這一類的工程師還屬於鳳毛麟角。職場上的薪酬待遇可以看得出來這樣的工程師的搶手的程度。人工智慧這門學科發展到今天,就學術自身而言已經具備了大規模產業化的能力。
所以說,對於工程師而言當務之急就是盡快的掌握應用人工智慧的應用技術。當下在互聯網上關於人工智慧的學習資料可以說已經是「汗牛充棟」,那些具備了快速學習能力的工程師一定會在人工智慧的大潮當中脫穎而出。
中國發展人工智慧產業的環境已經具備。無論從創業環境、人員的素質乃至市場的機遇而言完全具備了產生產業變革的一切條件。與美國相比較,在人工智慧的許多領域中國團隊的表現也可以說是不逞多讓。就人工智慧的技術層面而言,中國的工程師與全球最好的技術團隊正處於同一個起跑線上。
時不我待,中國的工程師是有機會在這個領域大展身手的。不過值得注意的是,要切忌兩點:一是好高騖遠,盲目與國外攀比。畢竟積累有長短,術業有專攻,我們要立足於已有的積累,尋求逐步的突破。二是一擁而上,盲目追求市場的風口。人工智慧的工程化需要大量的基礎性的積累,並非一蹴而就簡單復制就可以成功。
中國的科研技術人員在人工智慧領域的成就有目共睹。在王詠剛的一篇文章裡面,他統計了從2013年到2015年SCI收錄的「深度學習」論文,中國在2014年和2015年超已經超過了美國居於領跑者的位置。
另外一讓我感到驚訝的事情,Google的JeffDean在2016年發表過一篇名為《TensorFlow:Asystemforlarge-scalemachinelearning》的論文。文章的22個作者裡面,明顯是中國名字的作者占已經到了1/5。如果要列舉中國人/華人在人工智慧領域里的大牛,吳恩達、孫劍、楊強、黃廣斌、馬毅、張大鵬……很容易就可以說出一大串。
對於中國來說目前的當務之急是人工智慧技術的產業化,唯有如此我們才可以講科研/智力領域的優勢轉化為整體的、全面的優勢。在這一點上,中國是全球最大的消費市場以及製造業強國,我們完全有機會藉助市場的優勢成為這個領域的領先者。
矽谷創新企業
矽谷雖然去過許多回,但一直無緣在那裡長期工作。在人工智慧領域的市場我們聽到的更多是圍繞Google、Apple、Intel、Amazon這樣的一些大型科技公司的一舉一動。但是在美國市場上還有一大批小型的創業企業在人工智慧這個領域有驚艷的表現。僅以矽谷區域的公司為例:
Captricity,提供了手寫數據的信息提取;
VIVLab,針對語音識別開發了虛擬助手服務;
TERADEEP,利用FPGA提供了高效的卷積神經網路的方案;
還有提供無人駕駛解決方案的NetraDyne。
這個名單還可以很長,還有許許多多正在利用人工智慧技術試圖去創造歷史的團隊正在打造他們的夢想。這些團隊以及他們正在專注的領域是值得我們去學習和體會的。

F. 神經網路簡述

機器學習中談論的神經網路是指「神經網路學習」,或者說,是機器學習和神經網路這兩個學科領域的交叉部分[1]。

在這里,神經網路更多的是指計算機科學家模擬人類大腦結構和智能行為,發明的一類演算法的統稱。

神經網路是眾多優秀仿生演算法中的一種,讀書時曾接觸過蟻群優化演算法,曾驚訝於其強大之處,但神經網路的強大,顯然蟻群優化還不能望其項背。

A、起源與第一次高潮。有人認為,神經網路的最早討論,源於現代計算機科學的先驅——阿蘭.圖靈在1948年的論文中描述的「B型組織機器」[2]。二十世紀50年代出現了以感知機、Adaling為代表的一系列成功,這是神經網路發展的第一個高潮[1]。

B、第一次低谷。1969年,馬文.明斯基出版《感知機》一書,書中論斷直接將神經網路打入冷宮,導致神經網路十多年的「冰河期」。值得一提的是,在這期間的1974年,哈佛大學Paul Webos發明BP演算法,但當時未受到應有的重視[1]。

C、第二次高潮。1983年,加州理工學院的物理學家John Hopfield利用神經網路,在旅行商問題上獲得當時最好結果,引起轟動;Rumelhart等人重新發明了BP演算法,BP演算法迅速走紅,掀起神經網路第二次高潮[1]。

D、第二次低谷。二十世紀90年代中期,統計學習理論和支持向量機興起,較之於這些演算法,神經網路的理論基礎不清晰等缺點更加凸顯,神經網路研究進入第二次低谷[1]。

E、深度學習的崛起。2010年前後,隨著計算能力的提升和大數據的涌現,以神經網路為基礎的「深度學習」崛起,科技巨頭公司谷歌、Facebook、網路投入巨資研發,神經網路迎來第三次高潮[1]。2016年3月9日至15日,Google人工智慧程序AlphaGo對陣韓國圍棋世界冠軍李世乭,以4:1大比分獲勝,比眾多專家預言早了十年。這次比賽,迅速在全世界經濟、科研、計算機產業各領域掀起人工智慧和深度學習的熱烈討論。

F、展望。從幾個方面討論一下。

1)、近期在Google AlphaGo掀起的熱潮中,民眾的熱情與期待最大,甚至有少許恐慌情緒;計算機產業和互聯網產業熱情也非常巨大,對未來充滿期待,各大巨頭公司對其投入大量資源;學術界的反應倒是比較冷靜的。學術界的冷靜,是因為神經網路和深度神經網路的理論基礎還沒有出現長足的進步,其缺點還沒有根本改善。這也從另一個角度說明了深度神經網路理論進步的空間很大。

2)、"當代神經網路是基於我們上世紀六十年代掌握的腦知識。"關於人類大腦的科學與知識正在爆炸式增長。[3]世界上很多學術團隊正在基於大腦機制新的認知建立新的模型[3]。我個人對此報樂觀態度,從以往的仿生演算法來看,經過億萬年進化的自然界對科技發展的促進從來沒有停止過。

3)、還說AlphaGo,它並不是理論和演算法的突破,而是基於已有演算法的工程精品。AlhphaGo的工作,為深度學習的應用提供了非常廣闊的想像空間。分布式技術提供了巨大而廉價的計算能力,巨量數據的積累提供了豐富的訓練樣本,深度學習開始騰飛,這才剛剛開始。

一直沿用至今的,是McChlloch和Pitts在1943年依據腦神經信號傳輸結構抽象出的簡單模型,所以也被稱作」M-P神經元模型「。

其中,

f函數像一般形如下圖的函數,既考慮階躍性,又考慮光滑可導性。

實際常用如下公式,因形如S,故被稱作sigmoid函數。

把很多個這樣的神經元按一定層次連接起來,就得到了神經網路。

兩層神經元組成,輸入層接收外界輸入信號,輸出層是M-P神經元(只有輸出層是)。

感知機的數學模型和單個M-P神經元的數學模型是一樣的,如因為輸入層只需接收輸入信號,不是M-P神經元。

感知機只有輸出層神經元是B-P神經元,學習能力非常有限。對於現行可分問題,可以證明學習過程一定會收斂。而對於非線性問題,感知機是無能為力的。

BP神經網路全稱叫作誤差逆傳播(Error Propagation)神經網路,一般是指基於誤差逆傳播演算法的多層前饋神經網路。這里為了不佔篇幅,BP神經網路將起篇另述。

BP演算法是迄今最為成功的神經網路學習演算法,也是最有代表性的神經網路學習演算法。BP演算法不僅用於多層前饋神經網路,還用於其他類型神經網路的訓練。

RBF網路全程徑向基函數(Radial Basis Function)網路,是一種單隱層前饋神經網路,其與BP網路最大的不同是採用徑向基函數作為隱層神經元激活函數。

卷積神經網路(Convolutional neural networks,簡稱CNNs)是一種深度學習的前饋神經網路,在大型圖片處理中取得巨大成功。卷積神經網路將起篇另述。

循環神經網路(Recurrent Neural Networks,RNNs)與傳統的FNNs不同,RNNs引入定向循環,能夠處理那些輸入之間前後關聯的問題。RNNs已經在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應用[5]。RNNs將起篇另述。[5]

[1]、《機器學習》,周志華著

[2]、《模式識別(第二版)》,Richard O.Duda等著,李宏東等譯

[3]、《揭秘IARPA項目:解碼大腦演算法或將徹底改變機器學習》,Emily Singerz著,機器之心編譯出品

[4]、圖片來源於互聯網

[5]、 循環神經網路(RNN, Recurrent Neural Networks)介紹

G. 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.

H. 卷積神經網路(CNN)和循環神經網路(RNN)有什麼區別

簡單來說,卷積神經網路和循環神經網路都是深度學習的重要框架。區別在哪裡呢?區別就在循環層上。卷積神經網路沒有時序性的概念,輸入直接和輸出掛鉤;循環神經網路具有時序性,當前決策跟前一次決策有關。舉個例子,進行手寫數字識別的時候,我們並不在意前一個決策結果是什麼,需要用卷積神經網路;而自然語言生成時,上一個詞很大程度影響了下一個詞,需要用循環神經網路。

I. 深入淺出RNN

RNN是深度學習在自然語言處理領域中的元老級神經網路,它奠定了神經網路技術在NLP領域的發展方向,其名聲僅此於CNN,雖然近年來它已經鮮少露面,但江湖地位不減,就連當紅明星GRU和LSTM都是它的變種。

RNN(Recurrent Neural Networks),循環神經網路,指的是模型循環處理每個input,每次循環迭代稱為time(在公式中簡稱「t」)。Figure 1中,等號右側部分就是RNN的展開圖:input, ( ~ )經過隱藏層循環處理,每個time會生成一個output, ( ~ ),此外還會生成一個hidden state, ,它是隱藏層對input的學習成果,hidden state會和下一個input一起作為參數傳入隱藏層(紅色箭頭)。

我在 深入淺出全連接層 中提過,RNN是由全連接層(Linear layer)組成的,准確地說,RNN中的input layer、hidden layer、output layer,就是Figure 1中的那些箭頭,它們都是全連接層。

本文將會以重寫RNN的方式來由淺入深剖析RNN,點擊【 這里 】可以查看完整源碼。

除了使用 Fastai Library 外,還會用它的輕量級NLP數據集: http://files.fast.ai/data/examples/human_numbers.tgz 。數據集是從0到9999的英文數字:「one, two, three, four, five, ......, nine thousand nine hundred ninety eight, nine thousand nine hundred ninety nine」。

我們的任務就是創建一個RNN N-gram語言模型來學習數數,比如說,看到「one, two, three, four, five, 」這10個連續token(","也是一個token),就能預測出第11個token是"six"。關於token、N-gram、語言模型、embedding以及nlp mini-batch等內容,可以回看以前的文章 自己動手開發AI影評寫作機器人 ,這里不再贅述。

如Figure 1所示,Model1通過一個for循環來(遞歸)處理每個input(token),並將hidden state傳遞到下一個循環,等到N個(x.shape[1])token都學習完之後,用第N個hidden state來生成一個output。這就是RNN根據前面N個token來預測第N+1個token的過程。

之所以RNN可以預測第N+1個token,是因為hidden state包含了前面N個token的信息。 h = h + F.relu(self.input(self.emb(x[:, i]))) ,為RNN預測提供了前文的信息。

Learner是Fastai提供用於模型訓練的library,「acc_f」這欄顯示的是模型的預測准確率:45.9%。

Model1的hidden state只保留了同一個mini-batch內的token信息,一旦開始學習新的mini-batch,hidden state就會清零: h = torch.zeros(x.shape[0], nh).to(device=x.device)

因此,Model3會保留前一個mini-batch訓練得到的hidden state,換句話說,此時的hidden state保留了整個dataset的信息。不僅如此,Model3不只是預測第N+1個token,它會預測所有token的下一個token。

Model3實現了RNN的基本功能,它的預測准確率達到72.2%。除此之外,用tanh替代relu,准確率會提升到75.4%,標准RNN的默認激活函數就是tanh。

Model4是Model3的對標模型,用Pytorch官方提供的RNN實現,從訓練結果來看,它准確率比Model3要低不少,因此,這里溫馨提醒,不要把官方code當作聖旨。實踐表明,relu+batchnorm的組合應用到RNN中卓有成效,可惜,它無法作用於nn.RNN。

雖然nn.RNN的表現不如自己手擼的好,但並不是鼓勵大家自己造輪子,而且本人也很反對像自己造輪子這種幾乎不輸出價值的工作方式。事實上,當我們使用2層RNN之後,Model4的表現就優於Model3了。

2層RNN的結構如下圖所示,2個隱藏層雖然比1個隱藏層效果更好,但計算量也翻倍了,由於全連接層的參數數量比卷積層的要多得多,深層RNN的訓練時間要遠遠長於相同深度的CNN,因此,RNN層數不宜過多。

RNN雖然通過hidden state來保留各token的信息,但它並不能有效地處理和使用這些信息,它會將所有訓練得來的信息都一股腦地塞進hidden state,並用它來影響後續每個token的學習,而且這種影響不管是好是壞都會隨著訓練的深入,像滾雪球一樣有增無減地將越多越多的信息裹脅進來。

顯然RNN缺乏對新老信息(hidden state和token)的調控,這樣一來,當要學習的token較多時,起始部分的token信息在hidden state中的佔比就會越來越小,換句話說,文本起始部分的內容很容易會被忘記。

GPU和LSTM就是專門為了應對長文本訓練而設計的,它們為RNN中增加了input gate、output gate、forget gate、update gate等機制,對進出信息進行篩選,丟棄過時的、無用的信息,調控輸入信息對模型訓練的影響力等。

Model5用GRU替代了RNN後,在相同情況下,模型准確率又有了提升,達到了83.8%。關於GRU的分析留待下一篇博文,這里不作展開。

本文通過重構RNN的方式詳解了RNN模型的構成,通過分析它的缺陷,進一步介紹了GRU和LSTM的工作原理。

J. DNN、RNN、CNN分別是什麼意思

DNN(深度神經網路),是深度學習的基礎。

DNN可以理解為有很多隱藏層的神經網路。這個很多其實也沒有什麼度量標准, 多層神經網路和深度神經網路DNN其實也是指的一個東西,當然,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP)。

從DNN按不同層的位置劃分,DNN內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸出層,最後一層是輸出層,而中間的層數都是隱藏層。

CNN(卷積神經網路),是一種前饋型的神經網路,目前深度學習技術領域中非常具有代表性的神經網路之一。

CNN在大型圖像處理方面有出色的表現,目前已經被大范圍使用到圖像分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的參數相對較少,使的其能夠廣泛應用。

RNN(循環神經網路),一類用於處理序列數據的神經網路,RNN最大的不同之處就是在層之間的神經元之間也建立的權連接。

從廣義上來說,DNN被認為包含了CNN、RNN這些具體的變種形式。在實際應用中,深度神經網路DNN融合了多種已知的結構,包含卷積層或LSTM單元,特指全連接的神經元結構,並不包含卷積單元或時間上的關聯。

閱讀全文

與卷積神經網路和rnn哪個難相關的資料

熱點內容
電腦檢測寬頻網路重置 瀏覽:582
計算機網路技術包含計算機技術和 瀏覽:243
高明網路科技注冊公司多少錢 瀏覽:759
三星開了流量為什麼連接不了網路 瀏覽:928
網路和生命哪個重要 瀏覽:192
網路暴力說鹿晗什麼 瀏覽:266
網路創業公司怎麼樣 瀏覽:448
連接了車載wifi無法使用移動網路 瀏覽:702
移動網路玩cf怎麼辦 瀏覽:88
紅橋區如何網路優化 瀏覽:51
蘋果手錶5配對顯示連接網路 瀏覽:529
美版三星怎麼設置網路速度圖標 瀏覽:424
數據網路信號差嗎 瀏覽:835
關於網路營銷術語 瀏覽:554
網卡安裝完無法連接網路 瀏覽:578
百家號託管網路推廣途徑有哪些 瀏覽:178
怎麼讓抖音不在移動網路播放 瀏覽:332
中國三大運營商哪個網路最好 瀏覽:399
深圳市福彩中心網路安全培訓 瀏覽:550
機頂盒跟路由器連接網路用不了 瀏覽:813

友情鏈接