當前位置:首頁 » 網路連接 » 輸入600維的全連接神經網路

輸入600維的全連接神經網路

發布時間: 2024-10-24 23:09:48

❶ CNN網路簡介

卷積神經網路簡介(Convolutional Neural Networks,簡稱CNN)

卷積神經網路是近年發展起來,並引起廣泛重視的一種高效識別方法。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於局部敏感和方向選擇的神經元時發現其獨特的網路結構可以有效地降低反饋神經網路的復雜性,繼而提出了卷積神經網路(Convolutional

Neural

Networks-簡稱CNN)。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網路避免了對圖像的復雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。

K.Fukushima在1980年提出的新識別機是卷積神經網路的第一個實現網路。隨後,更多的科研工作者對該網路進行了改進。其中,具有代表性的研究成果是Alexander和Taylor提出的「改進認知機」,該方法綜合了各種改進方法的優點並避免了耗時的誤差反向傳播。

一般地,CNN的基本結構包括兩層,其一為特徵提取層,每個神經元的輸入與前一層的局部接受域相連,並提取該局部的特徵。一旦該局部特徵被提取後,它與其它特徵間的位置關系也隨之確定下來;其二是特徵映射層,網路的每個計算層由多個特徵映射組成,每個特徵映射是一個平面,平面上所有神經元的權值相等。特徵映射結構採用影響函數核小的sigmoid函數作為卷積網路的激活函數,使得特徵映射具有位移不變性。此外,由於一個映射面上的神經元共享權值,因而減少了網路自由參數的個數。卷積神經網路中的每一個卷積層都緊跟著一個用來求局部平均與二次提取的計算層,這種特有的兩次特徵提取結構減小了特徵解析度。

CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。由於CNN的特徵檢測層通過訓練數據進行學習,所以在使用CNN時,避免了顯示的特徵抽取,而隱式地從訓練數據中進行學習;再者由於同一特徵映射面上的神經元權值相同,所以網路可以並行學習,這也是卷積網路相對於神經元彼此相連網路的一大優勢。卷積神經網路以其局部權值共享的特殊結構在語音識別和圖像處理方面有著獨特的優越性,其布局更接近於實際的生物神經網路,權值共享降低了網路的復雜性,特別是多維輸入向量的圖像可以直接輸入網路這一特點避免了特徵提取和分類過程中數據重建的復雜度。

1. 神經網路

首先介紹神經網路,這一步的詳細可以參考資源1。簡要介紹下。神經網路的每個單元如下:

其對應的公式如下:

其中,該單元也可以被稱作是Logistic回歸模型。當將多個單元組合起來並具有分層結構時,就形成了神經網路模型。下圖展示了一個具有一個隱含層的神經網路。

其對應的公式如下:

比較類似的,可以拓展到有2,3,4,5,…個隱含層。

神經網路的訓練方法也同Logistic類似,不過由於其多層性,還需要利用鏈式求導法則對隱含層的節點進行求導,即梯度下降+鏈式求導法則,專業名稱為反向傳播。關於訓練演算法,本文暫不涉及。

2 卷積神經網路

在圖像處理中,往往把圖像表示為像素的向量,比如一個1000×1000的圖像,可以表示為一個1000000的向量。在上一節中提到的神經網路中,如果隱含層數目與輸入層一樣,即也是1000000時,那麼輸入層到隱含層的參數數據為1000000×1000000=10^12,這樣就太多了,基本沒法訓練。所以圖像處理要想練成神經網路大法,必先減少參數加快速度。就跟辟邪劍譜似的,普通人練得很挫,一旦自宮後內力變強劍法變快,就變的很牛了。

2.1 局部感知

卷積神經網路有兩種神器可以降低參數數目,第一種神器叫做局部感知野。一般認為人對外界的認知是從局部到全局的,而圖像的空間聯系也是局部的像素聯系較為緊密,而距離較遠的像素相關性則較弱。因而,每個神經元其實沒有必要對全局圖像進行感知,只需要對局部進行感知,然後在更高層將局部的信息綜合起來就得到了全局的信息。網路部分連通的思想,也是受啟發於生物學裡面的視覺系統結構。視覺皮層的神經元就是局部接受信息的(即這些神經元只響應某些特定區域的刺激)。如下圖所示:左圖為全連接,右圖為局部連接。

在上右圖中,假如每個神經元只和10×10個像素值相連,那麼權值數據為1000000×100個參數,減少為原來的千分之一。而那10×10個像素值對應的10×10個參數,其實就相當於卷積操作。

2.2 參數共享

但其實這樣的話參數仍然過多,那麼就啟動第二級神器,即權值共享。在上面的局部連接中,每個神經元都對應100個參數,一共1000000個神經元,如果這1000000個神經元的100個參數都是相等的,那麼參數數目就變為100了。

怎麼理解權值共享呢?我們可以這100個參數(也就是卷積操作)看成是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:圖像的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個圖像上的所有位置,我們都能使用同樣的學習特徵。

更直觀一些,當從一個大尺寸圖像中隨機選取一小塊,比如說 8×8 作為樣本,並且從這個小塊樣本中學習到了一些特徵,這時我們可以把從這個

8×8 樣本中學習到的特徵作為探測器,應用到這個圖像的任意地方中去。特別是,我們可以用從 8×8

樣本中所學習到的特徵跟原本的大尺寸圖像作卷積,從而對這個大尺寸圖像上的任一位置獲得一個不同特徵的激活值。

如下圖所示,展示了一個33的卷積核在55的圖像上做卷積的過程。每個卷積都是一種特徵提取方式,就像一個篩子,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來。

2.3 多卷積核

上面所述只有100個參數時,表明只有1個100*100的卷積核,顯然,特徵提取是不充分的,我們可以添加多個卷積核,比如32個卷積核,可以學習32種特徵。在有多個卷積核時,如下圖所示:

上圖右,不同顏色表明不同的卷積核。每個卷積核都會將圖像生成為另一幅圖像。比如兩個卷積核就可以將生成兩幅圖像,這兩幅圖像可以看做是一張圖像的不同的通道。如下圖所示,下圖有個小錯誤,即將w1改為w0,w2改為w1即可。下文中仍以w1和w2稱呼它們。

下圖展示了在四個通道上的卷積操作,有兩個卷積核,生成兩個通道。其中需要注意的是,四個通道上每個通道對應一個卷積核,先將w2忽略,只看w1,那麼在w1的某位置(i,j)處的值,是由四個通道上(i,j)處的卷積結果相加然後再取激活函數值得到的。

所以,在上圖由4個通道卷積得到2個通道的過程中,參數的數目為4×2×2×2個,其中4表示4個通道,第一個2表示生成2個通道,最後的2×2表示卷積核大小。

2.4 Down-pooling

在通過卷積獲得了特徵 (features)

之後,下一步我們希望利用這些特徵去做分類。理論上講,人們可以用所有提取得到的特徵去訓練分類器,例如 softmax

分類器,但這樣做面臨計算量的挑戰。例如:對於一個 96X96

像素的圖像,假設我們已經學習得到了400個定義在8X8輸入上的特徵,每一個特徵和圖像卷積都會得到一個 (96 − 8 + 1) × (96 − 8+ 1) = 7921 維的卷積特徵,由於有 400 個特徵,所以每個樣例 (example) 都會得到一個 892 × 400 =3,168,400 維的卷積特徵向量。學習一個擁有超過 3 百萬特徵輸入的分類器十分不便,並且容易出現過擬合 (over-fitting)。

為了解決這個問題,首先回憶一下,我們之所以決定使用卷積後的特徵是因為圖像具有一種「靜態性」的屬性,這也就意味著在一個圖像區域有用的特徵極有可能在另一個區域同樣適用。因此,為了描述大的圖像,一個很自然的想法就是對不同位置的特徵進行聚合統計,例如,人們可以計算圖像一個區域上的某個特定特徵的平均值(或最大值)。這些概要統計特徵不僅具有低得多的維度 (相比使用所有提取得到的特徵),同時還會改善結果(不容易過擬合)。這種聚合的操作就叫做池(pooling),有時也稱為平均池化或者最大池化 (取決於計算池化的方法)。

至此,卷積神經網路的基本結構和原理已經闡述完畢。

2.5 多層卷積

在實際應用中,往往使用多層卷積,然後再使用全連接層進行訓練,多層卷積的目的是一層卷積學到的特徵往往是局部的,層數越高,學到的特徵就越全局化。

3 ImageNet-2010網路結構

ImageNetLSVRC是一個圖片分類的比賽,其訓練集包括127W+張圖片,驗證集有5W張圖片,測試集有15W張圖片。本文截取2010年AlexKrizhevsky的CNN結構進行說明,該結構在2010年取得冠軍,top-5錯誤率為15.3%。值得一提的是,在今年的ImageNetLSVRC比賽中,取得冠軍的GoogNet已經達到了top-5錯誤率6.67%。可見,深度學習的提升空間還很巨大。

下圖即為Alex的CNN結構圖。需要注意的是,該模型採用了2-GPU並行結構,即第1、2、4、5卷積層都是將模型參數分為2部分進行訓練的。在這里,更進一步,並行結構分為數據並行與模型並行。數據並行是指在不同的GPU上,模型結構相同,但將訓練數據進行切分,分別訓練得到不同的模型,然後再將模型進行融合。而模型並行則是,將若干層的模型參數進行切分,不同的GPU上使用相同的數據進行訓練,得到的結果直接連接作為下一層的輸入。

上圖模型的基本參數為:

輸入:224×224大小的圖片,3通道

第一層卷積:5×5大小的卷積核96個,每個GPU上48個。

第一層max-pooling:2×2的核。

第二層卷積:3×3卷積核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,輸出的每一維都是圖片屬於該類別的概率。

4 DeepID網路結構

DeepID網路結構是香港中文大學的Sun

Yi開發出來用來學習人臉特徵的卷積神經網路。每張輸入的人臉被表示為160維的向量,學習到的向量經過其他模型進行分類,在人臉驗證試驗上得到了97.45%的正確率,更進一步的,原作者改進了CNN,又得到了99.15%的正確率。

如下圖所示,該結構與ImageNet的具體參數類似,所以只解釋一下不同的部分吧。

上圖中的結構,在最後只有一層全連接層,然後就是softmax層了。論文中就是以該全連接層作為圖像的表示。在全連接層,以第四層卷積和第三層max-pooling的輸出作為全連接層的輸入,這樣可以學習到局部的和全局的特徵。

❷ 深度神經網路全連接層

全連接層通常位於網路的後部,用於實現分類輸出。該層包含m個輸入和n個輸出,每個輸出與所有輸入相連接,其連接權重w各不相同,同時每個輸出還包含一個偏差項。

以輸入為4,輸出為4的例子,每個輸出點都對應一個輸入點的參數,共需16個w參數,每個輸出點都有一個b參數,共需4個b參數。

前向全連接的定量分析如下:

算力:[公式] Flops

BPE byte per element

input feature M*bpe

output feature N*bpe

w參數[公式] *bpe

b參數 N*bpe

反向全連接包括兩部分:一是梯度傳遞,已知[公式],求解[公式],為前一層參數的梯度求解做准備;二是參數梯度求解,已知[公式],求解[公式]和[公式],以獲得參數的更新值。

以輸入為4,輸出為4的例子,每個輸出點都對應一個輸入點的參數,共需16個w參數,每個輸出點都有一個b參數,共需4個b參數。

反向全連接梯度傳遞的過程如下:(根據前向公式和求導法則容易得出)

可以看到weight矩陣進行了轉置,記為[公式] = [公式][公式]

算力為 2MN Flops

參數w梯度求解,已知[公式],求解[公式]

為[公式],其中input feature進行了轉置

算力為 MN mul

參數b梯度求解,已知[公式],求解[公式]

為[公式],兩者相等

❸ 為什麼說Transformer的注意力機制是相對廉價的注意力機制相對更對於RNN系列及CNN系列演算法有何優勢

QA形式對自然語言處理中注意力機制(Attention)進行總結,並對Transformer進行深入解析。


二、Transformer(Attention Is All You Need)詳解
1、Transformer的整體架構是怎樣的?由哪些部分組成?
2、Transformer Encoder 與 Transformer Decoder 有哪些不同?
3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?
4、multi-head self-attention mechanism具體的計算過程是怎樣的?
5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?

一、Attention機制剖析

1、為什麼要引入Attention機制?

根據通用近似定理,前饋網路和循環網路都有很強的能力。但為什麼還要引入注意力機制呢?

  • 計算能力的限制:當要記住很多「信息「,模型就要變得更復雜,然而目前計算能力依然是限制神經網路發展的瓶頸。

  • 優化演算法的限制:雖然局部連接、權重共享以及pooling等優化操作可以讓神經網路變得簡單一些,有效緩解模型復雜度和表達能力之間的矛盾;但是,如循環神經網路中的長距離以來問題,信息「記憶」能力並不高。

  • 可以藉助人腦處理信息過載的方式,例如Attention機制可以提高神經網路處理信息的能力。

    2、Attention機制有哪些?(怎麼分類?)

    當用神經網路來處理大量的輸入信息時,也可以借鑒人腦的注意力機制,只 選擇一些關鍵的信息輸入進行處理,來提高神經網路的效率。按照認知神經學中的注意力,可以總體上分為兩類:

  • 聚焦式(focus)注意力:自上而下的有意識的注意力,主動注意——是指有預定目的、依賴任務的、主動有意識地聚焦於某一對象的注意力;

  • 顯著性(saliency-based)注意力:自下而上的有意識的注意力,被動注意——基於顯著性的注意力是由外界刺激驅動的注意,不需要主動干預,也和任務無關;可以將max-pooling和門控(gating)機制來近似地看作是自下而上的基於顯著性的注意力機制。

  • 在人工神經網路中,注意力機制一般就特指聚焦式注意力。

    3、Attention機制的計算流程是怎樣的?


  • Attention機制的實質:定址(addressing)
  • Attention機制的實質其實就是一個定址(addressing)的過程,如上圖所示:給定一個和任務相關的查詢Query向量q,通過計算與Key的注意力分布並附加在Value上,從而計算Attention Value,這個過程實際上是Attention機制緩解神經網路模型復雜度的體現:不需要將所有的N個輸入信息都輸入到神經網路進行計算,只需要從X中選擇一些和任務相關的信息輸入給神經網路。

  • 注意力機制可以分為三步:一是信息輸入;二是計算注意力分布α;三是根據注意力分布α 來計算輸入信息的加權平均。
  • step1-信息輸入:用X= [x1, · · · , xN ]表示N 個輸入信息;

    step2-注意力分布計算:令Key=Value=X,則可以給出注意力分布

    我們將稱之為注意力分布(概率分布),為注意力打分機制,有幾種打分機制:


    step3-信息加權平均:注意力分布可以解釋為在上下文查詢q時,第i個信息受關注的程度,採用一種「軟性」的信息選擇機制對輸入信息X進行編碼為:

    這種編碼方式為軟性注意力機制(soft Attention),軟性注意力機制有兩種:普通模式(Key=Value=X)和鍵值對模式(Key!=Value)。


  • 軟性注意力機制(soft Attention)
  • 4、Attention機制的變種有哪些?

    與普通的Attention機制(上圖左)相比,Attention機制有哪些變種呢?

  • 變種1-硬性注意力:之前提到的注意力是軟性注意力,其選擇的信息是所有輸入信息在注意力 分布下的期望。還有一種注意力是只關注到某一個位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有兩種實現方式:(1)一種是選取最高概率的輸入信息;(2)另一種硬性注意力可以通過在注意力分布式上隨機采樣的方式實現。硬性注意力模型的缺點:

  • 硬性注意力的一個缺點是基於最大采樣或隨機采樣的方式來選擇信息。因此最終的損失函數與注意力分布之間的函數關系不可導,因此無法使用在反向傳播演算法進行訓練。為了使用反向傳播演算法,一般使用軟性注意力來代替硬性注意力。硬性注意力需要通過強化學習來進行訓練。——《神經網路與深度學習》
  • 變種2-鍵值對注意力:即上圖右邊的鍵值對模式,此時Key!=Value,注意力函數變為:


  • 變種3-多頭注意力:多頭注意力(multi-head attention)是利用多個查詢Q = [q1, · · · , qM],來平行地計算從輸入信息中選取多個信息。每個注意力關注輸入信息的不同部分,然後再進行拼接:


  • 5、一種強大的Attention機制:為什麼自注意力模型(self-Attention model)在長距離序列中如此強大?

    (1)卷積或循環神經網路難道不能處理長距離序列嗎?

    當使用神經網路來處理一個變長的向量序列時,我們通常可以使用卷積網路或循環網路進行編碼來得到一個相同長度的輸出向量序列,如圖所示:


  • 基於卷積網路和循環網路的變長序列編碼
  • 從上圖可以看出,無論卷積還是循環神經網路其實都是對變長序列的一種「局部編碼」:卷積神經網路顯然是基於N-gram的局部編碼;而對於循環神經網路,由於梯度消失等問題也只能建立短距離依賴。

    (2)要解決這種短距離依賴的「局部編碼」問題,從而對輸入序列建立長距離依賴關系,有哪些辦法呢?

  • 如果要建立輸入序列之間的長距離依賴關系,可以使用以下兩種方法:一 種方法是增加網路的層數,通過一個深層網路來獲取遠距離的信息交互,另一種方法是使用全連接網路。 ——《神經網路與深度學習》
  • 全連接模型和自注意力模型:實線表示為可學習的權重,虛線表示動態生成的權重。
  • 由上圖可以看出,全連接網路雖然是一種非常直接的建模遠距離依賴的模型, 但是無法處理變長的輸入序列。不同的輸入長度,其連接權重的大小也是不同的。

    這時我們就可以利用注意力機制來「動態」地生成不同連接的權重,這就是自注意力模型(self-attention model)。由於自注意力模型的權重是動態生成的,因此可以處理變長的信息序列。

    總體來說,為什麼自注意力模型(self-Attention model)如此強大:利用注意力機制來「動態」地生成不同連接的權重,從而處理變長的信息序列。

    (3)自注意力模型(self-Attention model)具體的計算流程是怎樣的呢?

    同樣,給出信息輸入:用X = [x1, · · · , xN ]表示N 個輸入信息;通過線性變換得到為查詢向量序列,鍵向量序列和值向量序列:


    上面的公式可以看出,self-Attention中的Q是對自身(self)輸入的變換,而在傳統的Attention中,Q來自於外部。


  • self-Attention計算過程剖解(來自《細講 | Attention Is All You Need 》)
  • 注意力計算公式為:


    自注意力模型(self-Attention model)中,通常使用縮放點積來作為注意力打分函數,輸出向量序列可以寫為:


    二、Transformer(Attention Is All You Need)詳解

    從Transformer這篇論文的題目可以看出,Transformer的核心就是Attention,這也就是為什麼本文會在剖析玩Attention機制之後會引出Transformer,如果對上面的Attention機制特別是自注意力模型(self-Attention model)理解後,Transformer就很容易理解了。

    1、Transformer的整體架構是怎樣的?由哪些部分組成?


  • Transformer模型架構
  • Transformer其實這就是一個Seq2Seq模型,左邊一個encoder把輸入讀進去,右邊一個decoder得到輸出:


  • Seq2Seq模型
  • Transformer=Transformer Encoder+Transformer Decoder

    (1)Transformer Encoder(N=6層,每層包括2個sub-layers):


  • Transformer Encoder
  • sub-layer-1:multi-head self-attention mechanism,用來進行self-attention。

  • sub-layer-2:Position-wise Feed-forward Networks,簡單的全連接網路,對每個position的向量分別進行相同的操作,包括兩個線性變換和一個ReLU激活輸出(輸入輸出層的維度都為512,中間層為2048):

  • 每個sub-layer都使用了殘差網路:

    (2)Transformer Decoder(N=6層,每層包括3個sub-layers):


  • Transformer Decoder
  • sub-layer-1:Masked multi-head self-attention mechanism,用來進行self-attention,與Encoder不同:由於是序列生成過程,所以在時刻 i 的時候,大於 i 的時刻都沒有結果,只有小於 i 的時刻有結果,因此需要做Mask。

  • sub-layer-2:Position-wise Feed-forward Networks,同Encoder。

  • sub-layer-3:Encoder-Decoder attention計算。

  • 2、Transformer Encoder 與 Transformer Decoder 有哪些不同?

    (1)multi-head self-attention mechanism不同,Encoder中不需要使用Masked,而Decoder中需要使用Masked;

    (2)Decoder中多了一層Encoder-Decoder attention,這與 self-attention mechanism不同。

    3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?

    它們都是用了 multi-head計算,不過Encoder-Decoder attention採用傳統的attention機制,其中的Query是self-attention mechanism已經計算出的上一時間i處的編碼值,Key和Value都是Encoder的輸出,這與self-attention mechanism不同。代碼中具體體現:

  • ## Multihead Attention ( self-attention)

  • self.dec = multihead_attention(queries=self.dec,

  • keys=self.dec,

  • num_units=hp.hidden_units,

  • num_heads=hp.num_heads,

  • dropout_rate=hp.dropout_rate,

  • is_training=is_training,

  • causality=True,

  • scope="self_attention")


  • ## Multihead Attention ( Encoder-Decoder attention)

  • self.dec = multihead_attention(queries=self.dec,

  • keys=self.enc,

  • num_units=hp.hidden_units,

  • num_heads=hp.num_heads,

  • dropout_rate=hp.dropout_rate,

  • is_training=is_training,

  • causality=False,

  • scope="vanilla_attention")

  • 4、multi-head self-attention mechanism具體的計算過程是怎樣的?


  • multi-head self-attention mechanism計算過程
  • Transformer中的Attention機制由Scaled Dot-Proct Attention和Multi-Head Attention組成,上圖給出了整體流程。下面具體介紹各個環節:

  • Expand:實際上是經過線性變換,生成Q、K、V三個向量;

  • Split heads: 進行分頭操作,在原文中將原來每個位置512維度分成8個head,每個head維度變為64;

  • Self Attention:對每個head進行Self Attention,具體過程和第一部分介紹的一致;

  • Concat heads:對進行完Self Attention每個head進行拼接;

  • 上述過程公式為:


    5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?

  • GPT中訓練的是單向語言模型,其實就是直接應用Transformer Decoder;

  • Bert中訓練的是雙向語言模型,應用了Transformer Encoder部分,不過在Encoder基礎上還做了Masked操作;

  • BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能處理其左側的上下文。雙向 Transformer 通常被稱為「Transformer encoder」,而左側上下文被稱為「Transformer decoder」,decoder是不能獲要預測的信息的。