A. 神經網路訓練過程中靠近輸出層的參數學習速度快,而靠近輸入層的參數學習速度慢
摘要 訓練樣本數必須多於網路模型的連接權數,一般為2~10倍,否則,樣本必須分成幾部分並採用「輪流訓練」的方法才可能得到可靠的神經網路模型。
B. 誰能告訴我神經網路的時間復雜度啊,比如最傳統的BP前饋網路,謝謝,急啊,十萬火急!!!!!
神經網路其中一層的時間復雜度:O(n*m)
n為輸入神經元個數,m為輸出神經元個數
C. 如何更好的理解分析深度卷積神經網路
用局部連接而不是全連接,同時權值共享。
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。這樣一來需要訓練的權值數相比全連接而言會大大減少,進而減小對樣本空間大小的需求。
權值共享的概念就是,某一隱藏層的所有神經元共用一組權值。
這兩個概念對應卷積層的話,恰好就是某個固定的卷積核。卷積核在圖像上滑動時每處在一個位置分別對應一個「局部連接」的神經元,同時因為「權值共享」的緣故,這些神經元的參數一致,正好對應同一個卷積核。
順便補充下,不同卷積核對應不同的特徵,比如不同方向的邊(edge)就會分別對應不同的卷積核。
激活函數f(x)用ReLU的話避免了x過大梯度趨於0(比如用sigmoid)而影響訓練的權值的情況(即GradientVanishing)。同時結果會更稀疏一些。
池化之後(例如保留鄰域內最大或採納平均以舍棄一些信息)一定程度也壓制了過擬合的情況。
總體來說就是重復卷積-relu來提取特徵,進行池化之後再作更深層的特徵提取,實質上深層卷積網路的主要作用在於特徵提取。最後一層直接用softmax來分類(獲得一個介於0~1的值表達輸入屬於這一類別的概率)。
D. 如何計算一個卷積神經網路的復雜度
學習率實際和信號分析里的時間常數是一樣的,學習率越小 學習會越精細,但同時學習速度也會降低,因為現實中很多模型都是非線性的,猶如一條曲線,梯度下降採用很多小直線迭代去逼近非線性的曲線,如果每一步跨度太大(學習率)就會失去很多曲線的扭曲信息,局部直線化過嚴重,跨度太小你要到達曲線的盡頭就需要很多很多步,這就需要更多的樣本,所以這個也要考慮實際問題再來決定學習率的。
E. 什麼是神經網路的局部極小值
這是BP網路的缺陷問題,BP學習演算法用梯度下降法調整網路的權值,對於凸狀的誤差函數來說,它有唯一最小值。但是對實際問題中經常遇到的非凸狀誤差函數卻不能取得最佳的結果,甚至在網路訓練後不知道誤差函數是否取得全局最小。 推薦書《神經網路理論與matlab7實現》
F. 神經網路容易陷入局部極小特性的原因是什麼
神經網路在作為一種搜索策略的時候,受搜索演算法的控制,當解空間函數存在局部最小值時,如果搜索步長較小(動量較小),那麼有可能在這個局部求解時求得的所有解都指向了極小值的方法,就是陷入的局部最小。
以BP為例,他是按照誤差下降的最大梯度方向搜索,就好像地下有個坑,他是按照坡度最大方向找最低點,搜索步長就是邁的步長,走一步後找最大坡度方向邁下一步,如夠一步不能邁出這個坑,那麼你就永遠在這個坑內轉悠了。而其他地面可能存在的更低的點就找不到了。
G. 卷積神經網路中的局部連接是什麼意思
網路的下一層和上一層之間通過卷積核連接,或者說上一層的數據和卷積核卷積之後得到下一層。在全連接網路中,上一層的每個數據和下一層的每個數據都會有關,局部連接的意思就是說下一層只和上一層的局部數據有關。
這張圖就是局部連接,可以看到上一層只有3個單元和下一層連接(這張圖的流程是從下到上,所以我說的上一層是最底層,下一層是按照箭頭方向的上邊那層)。
局部連接的作用是減少計算參數。
H. 為什麼說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)的過程,如上圖所示:給定一個和任務相關的查詢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)。
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 model)中,通常使用縮放點積來作為注意力打分函數,輸出向量序列可以寫為:
二、Transformer(Attention Is All You Need)詳解
從Transformer這篇論文的題目可以看出,Transformer的核心就是Attention,這也就是為什麼本文會在剖析玩Attention機制之後會引出Transformer,如果對上面的Attention機制特別是自注意力模型(self-Attention model)理解後,Transformer就很容易理解了。
1、Transformer的整體架構是怎樣的?由哪些部分組成?
Transformer其實這就是一個Seq2Seq模型,左邊一個encoder把輸入讀進去,右邊一個decoder得到輸出:
Transformer=Transformer Encoder+Transformer Decoder
(1)Transformer Encoder(N=6層,每層包括2個sub-layers):
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):
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不同。代碼中具體體現:
4、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是不能獲要預測的信息的。