① 為什麼說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是不能獲要預測的信息的。
② SENet及對輕量級網路的一些理解
轉自: https://zhuanlan.hu.com/p/71995304
受限於硬體的羸弱,深度學習在上世紀的發展一直是不溫不火,直到2012年,Alexnet橫空出世,深度學習才開始前所未有的大發展。隨著技術的發展,卷積神經網路逐漸取代了之前全連接的神經網路,成為深度學習領域的主流演算法。
卷積神經網路的優勢在於能夠更好的提取特徵和權值共享,自Alexnet之後,VGG又提出了神經網路的深度越深,效果越好的思想。自此深度成為構建網路時所考慮的第一要素。此時,又有人提出了Inception模型,這是人們在關注深度之外第一次關注網路的時間復雜度和空間復雜度。
圖1
如圖1所示,就是Inception v1的模型,該模型主要利用了1x1卷積進行了降維處理,達到了減小網路參數量和計算量的效果。在接下來的改進中,Inception又提出了利用兩層3x3網路取代一層5x5網路這樣的奇思妙想,進一步達到了減輕網路復雜度的作用。
如圖2所示,就是5x5卷積變成3x3卷積的示意圖。
圖2
從此之後,輕量級網路開始盛行。諸如Squeezenet,Mobilenet等都是輕量級網路中的傑出代表。
自Inception之後,人們已經不再通過暴力的增加網路層數的方法來企圖獲得更高的准確率了,然而面對復雜的問題,過淺的網路很難達到理想的效果,所以加深網路依然是解決圖像分類問題的最佳途徑。但是增加網路很容易造成overfiting甚至訓練集上得到的效果也比淺層網路要差,所以如何有效的增加網路層數就成了深度學習領域研究的重中之重。
為了解決這個問題,很多學者提出了自己的見解,如resnet所講述的殘差網路就是一例。然而殘差網路雖然能夠增加層數但是層數增加到三位數之後再增加也就有些無能為力了。此時作者另闢蹊徑,提出了一種新型的網路結構SENet,這個網路結構可以對所有網路進行改進然後做到真正有效的增加層數,無論原網路層數有多深,通過加入SENet,都能增加相當數量的深度,並有效的提高實驗效果。值得一提的是SENet在2017年的ImageNet挑戰賽獲得冠軍。
從Inception開始,學者們提出網路的時候就主要是提出一個block,然後用這個block像搭積木一樣的搭出整個網路。同樣,作者也是用這個方法設計網路的,作者提出了一個Squeeze-and-Excitation block,然後用這個SE block搭出了整個網路。
卷積神經網路雖然有諸多的好處,但是卷積神經網路捕捉到的只是局部的信息,假如卷積核是7x7,那麼感受野的大小也只有7x7。但是一張圖片的每一個像素點之間都是互相有聯系的,之前使用局部感受野的網路都忽略掉了全局像素點之間的關聯信息,使得實驗效果不夠理想。Inception通過多尺度的卷積核,找到了提取一張feature map上全局關聯信息的方法,然而直到本文網路之前都沒有誰考慮各通道之間的全局關聯信息。所以作者將關注點放到了通道關聯信息上,作者發現提取出通道之間互相關聯的信息可以有效的增加神經網路的分類准確率。
圖3
如圖3所示,就是一個SE block。對於任意給定的變換
(1)
我們可以構造一個對應的SE塊來進行特徵重新校準。首先通過擠壓操作,跨越空間維度WXH產生一個全局描述符,這個全局描述符聚合了所有通道的空間信息,之後再進行激勵操作,其中通過基於通道依賴性的門控機制為每個通道學習特定采樣的激活,控制每個通道的激勵。然後特徵映射U被重新加權以生成SE塊的輸出,再與之前的block結合在一起,就達到了提取通道關聯信息的目的。
SE網路可以通過簡單地堆疊SE block的集合來生成,也可以用作架構中任意深度的原始塊的直接替換。
新CNN架構的開發是一項具有挑戰性的工程任務,通常涉及許多新的超參數和網路各層配置的選擇。相比之下,上面概述的SE塊的設計是簡單的,並且可以直接與現有的最新架構一起使用,其卷積層可以通過直接用對應的SE層來替換從而使效果得到加強。另外,SE塊在計算上是輕量級的,並且在模型復雜性和計算負擔方面僅稍微增加。為了支持這些聲明,作者開發了一些SENets,即SE-ResNet,SE-Inception,SE-ResNeXt和SE-Inception-ResNet,並在ImageNet 2012數據集上對SENets進行了廣泛的評估。此外,為了證明SE塊的一般適用性,作者還呈現了ImageNet之外的結果,這表明作者所提出的方法不受限於特定的數據集或任務。
圖3所示的Ftr,我們可以將其看做一個普通的卷積層,事實上,在SE-ResNet,SE-Inception中,對應的Ftr分別就是殘差塊和Inception塊。
Squeeze操作的目的其實就是將空間信息提取出來,為了網路的輕量級,事實上我們還希望能夠將信息進行壓縮,不要增加過大的時間復雜度和空間復雜度。
因此作者選取了全局平均池化進行Squeeze操作。如圖3所示,我們將通過全局平均池化得到的向量設為Z,那麼z的第c個元素即可通過公式(2)進行計算:
(2)
這個操作實際上是在得到U之後再進行的全局平均池化。一般CNN的每個通道的濾波器都是對局部感受野進行特徵提取,因此U中的每個feature map都無法利用與其他feature map之間的關聯關系,而且在較低網路層次上對應到原圖尺寸上的感受野相對於較高層數的來說,無疑是很小的,這樣空間關聯信息的流失就會更加嚴重。
那麼作者提出的這個Squeeze,實際上就相當於將感受野擴展到了全局,自然能夠提取的特徵就更為豐富,通過訓練得到的分類識別的准確率就更高了。
為了利用在上一個操作中得到的全局信息,作者就提出了Excitation這個操作來全面捕獲通道相關性。如圖4和圖5所示,就分別是SE-Inception Mole和SE-Inception Mole。作者指出我們所需的這個Excitation必須是靈活的同時又要能學習到非互斥的信息。
那麼通過觀察圖4和圖5我們也能輕易的得知:
(3)
其中指的是Relu函數,指的是sigmoid函數,r為壓縮比例。這實際上就是兩個全連接層再加上兩個激活層。第一層全連接層的作用就是將global pooling所得到的全局信息進行壓縮,作者通過實驗發現,壓縮比例r=16的時候實驗結果最為理想。那麼第二層全連接層的作用就是將被壓縮的向量進行還原,還原到和global pooling層之後的向量大小一致。然後再將該向量與Ftr得到的三維卷積進行乘運算,實際上該向量中的每個值就與三維卷積中每個通道對應的feature map 相乘,這樣每一個feather map就得到了與其他通道的空間關聯特徵了。
圖4
那麼圖4和圖5中的C指的就是通道的數目,而指的就是這個模塊輸入的feather map的尺寸大小。而通過圖示我們也能清楚的看到SE block可以通用的加在所有的網路結構中從而達到提升性能的作用。
SENet通過堆疊一組SE塊來構建。實際上,它是通過用原始塊的SE對應部分(即SE殘差塊)替換每個原始塊(即殘差塊)而產生的,作者在表1中描述了SE-ResNet-50和SE-ResNeXt-50的架構。
圖5
表1
作者通過實驗發現,SE block改進resnet-50時,所增加參數量不超過10%,卻提升了1.5個百分點的准確率,並且作者後來通過實驗發現整體網路最末尾的SE block對效果提升作用很小,去除掉這些block網路的准確率也不過下降0.1個百分點,而增加的額外參數量就減小到4%了。如表2所示,是幾個原有的網路結構的top-1和top-5的准確率,original表示的是網路提出者得到的結果,而re-implementation指的是作者復現的結果,而SENet指的是作者運用SENet加強之後得到的結果,很明顯有顯著的准確率提升。
表2(該表截取自論文)
同時,作者還提出了一個計算模型復雜度的方法來探究運用了SENet之後,模型的參數量到底增加了多少,很顯然准確率增加百分比相同的情況下,參數量增加越少的話,演算法性價比越高。
兩個全連接層的參數量都是,那麼兩個全連接層的參數量就是。以resnet為例,假設resnet一共包含了S個stage,其中第s個stage裡麵包含了個重復的殘差塊,那麼用SENet加強過的resnet所增加的參數量就可以用公式(4)進行計算:
(4)
SENet的結構非常簡單,特別容易部署,不需要引入新的函數或者卷積層,並且增加的參數量微乎其微,是一個有效增加神經網路分類准確率的方法。同時,作者通過實驗發現,在Faster-rcnn等用於實現目標檢測的網路中增加SENet塊進行加強,也能得到很好的效果,這進一步證明了SENet網路的通用性。
接下來,作者思考了最後一個問題,增加的SE block添加在原有block中位置的不同會不會影響到實驗結果。為此,作者進行了對比試驗。
如圖6所示, 是原來的殘差網路與作者在四個不同位置添加了SE block的四種不同的網路結構,總共是五個不同的網路結構。
圖6
表3
而表3即是四種不同的SENet結構的錯誤率對比,我們能夠看到SE-PRE結構是其中相對表現最好的,這說明了SE block塊所在位置確實會影響到神經網路的整體效果,所以我們在運用SENet時,對於其所添加的位置應該好好斟酌。
這篇論文提出了一個名為名為SE block的架構單元,通過使網路能夠執行動態的信道特徵重新校準來提高網路的表示能力。實驗證明了SENets的有效性,它在多個數據集和任務之間實現了最先進的性能。此外,SE塊揭示了以前的體系結構無法充分地對通道相關關系建模。並且SE塊生成的特徵重要度值可以用於其他任務,例如用於模型壓縮的網路剪枝。
③ 全連接層,1*1卷積,GAP的關系
當前層每一個神經元和前一層所有的神經元都連接。最後一個神經元輸出的是一個值。
對於CNN,如果前一層輸出的是H W C的feature map,全連接層由N個維度為H W C的卷積核組成。輸出N個值。
CNN提取的是局部特徵,全連接層的作用就是整合這些局部特徵,將feature map整合成一個值,提高位置不變性。
這里用一隻小貓解釋為什麼需要全連接層,還蠻清楚的
參數量暴增,在網路中全連接層的參數是最多的。
由於訓練過程中全連接層神經元尺寸確定,所以會限制輸入圖像的尺寸。
1 1卷積,顧名思義,卷積核的尺寸為1 1,通道數和輸入特徵通道數相同,但是卷積核的個數可以改變,實現升維和降維。
卷積核的通道數和輸入特徵通道數相同。
卷積核的個數決定輸出特徵的通道數。
全連接層會打破特徵原有的空間信息,將特徵打平用於下一步處理。
1*1卷積後,特徵的解析度沒有發生變化,但是通道數改變了。
-不改變特徵圖尺寸,對輸入尺寸無限制。
-參數量大大減少。可以先降維再升維,在減少計算量的同時實現和其他卷積操作相同的功能。
將Feature map的每一個通道內的像素值相加求平均,得到一個數值,用該值表示對應的特徵圖。
輸出結果直接送入softmax。
-減少參數量,代替全連接層。
-減少過擬合。
-直接賦予每一個channel實際的類別意義。
參考1
參考2
NIN論文的總結
這個也還行
④ 注意力機制與外部記憶
根據通用近似定理,前饋網路和循環網路都有很強的能力。但由於優化演算法和計算能力的限制,在實踐中很難達到通用近似的能力。
神經網路中可以存儲的信息量稱為 網路容量(Network Capacity) 。一般來講,利用一組神經元來存儲信息時,其 存儲容量和神經元的數量以及網路的復雜度成正比 。如果要存儲越多的信息,神經元數量就要越多或者網路要越復雜,進而導致神經網路的參數成倍地增加。
大腦神經系統有兩個重要機制可以解決信息過載問題: 注意力和記憶機制 。我們可以借鑒人腦解決信息過載的機制,從兩方面來提高神經網路處理信息的能力。 一方面是注意力,通過自上而下的信息選擇機制來過濾掉大量的無關信息;另一方面是引入額外的外部記憶,優化神經網路的記憶結構來提高神經網路存儲信息的容量 。
在計算能力有限情況下,注意力機制(Attention Mechanism)作為一種資源分配方案,將計算資源分配給更重要的任務,是解決信息超載問題的主要手段。
注意力是一種人類不可或缺的復雜認知功能,指人可以在關注一些信息的同時忽略另一些信息的選擇能力 。
注意力一般分為兩種:一種是自上而下的有意識的注意力,稱為 聚焦式(Focus)注意力 。聚焦式注意力是指有預定目的、依賴任務的、主動地有意識地聚焦於某一對象的注意力;另一種是自下而上的無意識的注意力,稱為 基於顯著性(Saliency-Based)的注意力 。基於顯著性的注意力是由外界刺激驅動的注意,不需要主動干預,也和任務無關。
一個和注意力有關的例子是 雞尾酒會效應 。當一個人在吵鬧的雞尾酒會上和朋友聊天時,盡管周圍噪音干擾很多,他還是可以聽到朋友的談話內容,而忽略其他人的聲音(聚焦式注意力)。同時,如果未注意到的背景聲中有重要的詞(比如他的名字),他會馬上注意到(顯著性注意力)。
在目前的神經網路中,我們 可以將最大匯聚(Max Pooling)、門控(Gating)機制來近似地看作是自下而上的基於顯著性的注意力機制 。除此之外,自上而下的會聚式注意力也是一種有效的信息選擇方式。
用 表示 組輸入信息,其中每個向量 都表示一組輸入信息。為了節省計算資源,不需要將所有信息都輸入到神經網路,只需要從 中選擇一些和任務相關的信息。 注意力機制的計算可以分為兩步:一是在所有輸入信息上計算注意力分布,二是根據注意力分布來計算輸入信息的加權平均 。
給定一個和任務相關的查詢向量 ,我們用注意力變數 來表示被選擇信息的索引位置,即 表示選擇了第 個輸入向量。為了方便計算,我們採用一種「軟性」的信息選擇機制,首先計算在給定 和 下,選擇第 個輸入向量的概率 :
其中 稱為注意力分布(Attention Distribution), 為 注意力打分函數 ,可以使用以下幾種方式來計算:
其中 為可學習的網路參數, 為輸入向量的維度。理論上,加性模型和點積模型的復雜度差不多,但是點積模型在實現上可以更好地利用矩陣乘積,從而計算效率更高。但當輸入向量的維度 比較高,點積模型的值通常有比較大方差,從而導致 函數的梯度會比較小。因此,縮放點積模型可以較好地解決這個問題。
上式稱為 軟性注意力機制(Soft Attention Mechanism) 。下圖給出了軟性注意力機制的示例。
上面提到的注意力是 軟性注意力,其選擇的信息是所有輸入向量在注意力分布下的期望。此外,還有一種注意力是只關注到某一個輸入向量,叫做硬性注意力 。
硬性注意力有兩種實現方式:
其中 為概率最大的輸入向量的下標,即
硬性注意力的一個缺點是基於最大采樣或隨機采樣的方式來選擇信息。因此最終的損失函數與注意力分布間的函數關系不可導,因此無法用反向傳播演算法進行訓練(硬性注意力需要通過強化學習來進行訓練) 。為了使用反向傳播演算法,一般使用軟性注意力來代替硬性注意力。
更一般地,我們可以用 鍵值對(key-value pair) 格式來表示輸入信息,其中「鍵」用來計算注意力分布 ,「值」用來計算聚合信息。
用 表示 組輸入信息,給定任務相關的查詢向量 時,注意力函數為:
下圖給出鍵值對注意力機制的示例。當 時,鍵值對模式就等價於普通的注意力機制。
多頭注意力(Multi-Head Attention)是利用多個查詢 ,來平行地計算從輸入信息中選取多組信息。每個注意力關注輸入信息的不同部分 。
其中 表示向量拼接。
在之前介紹中,我們假設所有的輸入信息是同等重要的,是一種扁平(Flat)結構,注意力分布實際上是在所有輸入信息上的多項分布。但 如果輸入信息本身具有層次結構,比如文本可以分為詞、句子、段落、篇章等不同粒度的層次,我們可以使用層次化的注意力來進行更好的信息選擇 。
注意力機制一般可以用作一個神經網路中的組件。
注意力機制可以分為兩步:一是計算注意力分布 ,二是根據 來計算輸入信息的加權平均。我們可以只利用注意力機制中的第一步,並 將注意力分布作為一個軟性的指針(pointer)來指出相關信息的位置 。
指針網路(Pointer Network) 是一種序列到序列模型, 輸入是長度為 的向量序列 , 輸出是下標序列 。
和一般的序列到序列任務不同,這里的輸出序列是輸入序列的下標(索引) 。比如輸入一組亂序的數字,輸出為按大小排序的輸入數字序列的下標。比如輸入為20, 5, 10,輸出為1, 3, 2。
條件概率 可以寫為:
其中條件概率 可以通過注意力分布來計算。假設用一個循環神經網路對 進行編碼得到向量 ,則:
其中 為在解碼過程的第 步時,每個輸入向量的未歸一化的注意力分布:
其中 為可學習的參數。下圖給出指針網路的示例。
當使用神經網路來處理一個變長的向量序列時,我們通常可以使用卷積網路或循環網路進行編碼來得到一個相同長度的輸出向量序列。
基於卷積或循環網路的序列編碼都是可以看做是一種局部的編碼方式,只建模了輸入信息的局部依賴關系。雖然循環網路理論上可以建立長距離依賴關系,但是由於信息傳遞的容量以及梯度消失問題,實際上也只能建立短距離依賴關系 。如果要建立輸入序列之間的長距離依賴關系,可以使用以下兩種方法:一種方法是 增加網路的層數 ,通過一個深層網路來獲取遠距離的信息交互;另一種方法是 使用全連接網路 。全連接網路是一種非常直接的建模遠距離依賴的模型,但是無法處理變長的輸入序列。不同的輸入長度,其連接權重的大小也是不同的。這時我們就可以 利用注意力機制來「動態」地生成不同連接的權重,這就是自注意力模型(Self-Attention Model) 。
假設輸入序列為 ,輸出序列為 ,首先我們可以通過線性變換得到三組向量序列:
其中 分別為查詢向量序列,鍵向量序列和值向量序列, 分別為可學習的參數矩陣。
利用鍵值對的注意力函數,可以得到輸出向量 :
其中 為輸出和輸入向量序列的位置, 連接權重 由注意力機制動態生成 。
下圖給出全連接模型和自注意力模型的對比,其中實線表示為可學習的權重,虛線表示動態生成的權重。 由於自注意力模型的權重是動態生成的,因此可以處理變長的信息序列 。
自注意力模型可以作為神經網路中的一層來使用,既可以用來替換卷積層和循環層,也可以和它們一起交替使用。
為了增強網路容量,我們可以 引入輔助記憶單元,將一些信息保存輔助記憶中,在需要時再進行讀取,這樣可以有效地增加網路容量 。這個引入輔助記憶單元一般稱為 外部記憶(External Memory) ,以區別與循環神經網路的內部記憶(即隱狀態)。
生理學家發現信息是作為一種 整體效應(collective effect) 存儲在大腦組織中。當大腦皮層的不同部位損傷時,其導致的不同行為表現似乎取決於損傷的程度而不是損傷的確切位置。 大腦組織的每個部分似乎都攜帶一些導致相似行為的信息。也就是說,記憶在大腦皮層是分布式存儲的,而不是存儲於某個局部區域 。
人腦中的記憶具有 周期性 和 聯想性 。
長期記憶可以類比於人工神經網路中的權重參數,而短期記憶可以類比於人工神經網路中的隱狀態 。
除了長期記憶和短期記憶,人腦中還會存在一個「緩存」,稱為 工作記憶(Working Memory) 。在執行某個認知行為(比如記下電話號碼,算術運算)時,工作記憶是一個記憶的臨時存儲和處理系統,維持時間通常為幾秒鍾。
和之前介紹的LSTM中的記憶單元相比,外部記憶可以存儲更多的信息,並且不直接參與計算,通過讀寫介面來進行操作。而 LSTM模型中的記憶單元包含了信息存儲和計算兩種功能,不能存儲太多的信息。因此,LSTM中的記憶單元可以類比於計算機中寄存器,而外部記憶可以類比於計算機中的存儲器:內存、磁帶或硬碟等 。
借鑒人腦中工作記憶,可以在神經網路中引入一個外部記憶單元來提高網路容量。 外部記憶的實現途徑有兩種:一種是結構化的記憶,這種記憶和計算機中的信息存儲方法比較類似,可以分為多個記憶片段,並按照一定的結構來存儲;另一種是基於神經動力學的聯想記憶,這種記憶方式具有更好的生物學解釋性 。
一個不太嚴格的類比表格如下:
為了增強網路容量,一種比較簡單的方式是引入結構化的記憶模塊, 將和任務相關的短期記憶保存在記憶中,需要時再進行讀取 。這種裝備外部記憶的神經網路也稱為 記憶網路(Memory Network,MN) 或 記憶增強神經網路(Memory Augmented Neural Network,MANN) 。
記憶網路結構如圖:
一般有以下幾個模塊構成:
這種結構化的外部記憶是帶有地址的,即每個記憶片段都可以按地址讀取和寫入。要實現類似於人腦神經網路的聯想記憶能力,就需要按內容定址的方式進行定位,然後進行讀取或寫入操作。 按內容定址通常使用注意力機制來進行。通過注意力機制可以實現一種「軟性」的定址方式,即計算一個在所有記憶片段上的分布,而不是一個單一的絕對地址 。比如讀取模型 的實現方式可以為:
其中 是主網路生成的查詢向量, 為打分函數。類比於計算機的存儲器讀取, 計算注意力分布的過程相當於是計算機的「定址」過程,信息加權平均的過程相當於計算機的「內容讀取」過程 。因此,結構化的外部記憶也是一種聯想記憶,只是其結構以及讀寫的操作方式更像是受計算機架構的啟發。
通過引入外部記憶,可以將神經網路的參數和記憶容量的「分離」,即在少量增加網路參數的條件下可以大幅增加網路容量。 注意力機制可以看做是一個介面,將信息的存儲與計算分離 。
端到端記憶網路(End-To-End Memory Network,MemN2N) 採用一種可微的網路結構,可以多次從外部記憶中讀取信息。 在端到端記憶網路中,外部記憶單元是只讀的 。
給定一組需要存儲的信息 ,首先將其轉換成兩組記憶片段 和 ,分別存放在兩個外部記憶單元中,其中 用來進行定址, 用來進行輸出。
主網路根據輸入 生成 ,並使用注意力機制來從外部記憶中讀取相關信息 :
並產生輸出:
其中 為預測函數。當應用到分類任務時, 可以設為softmax 函數。
為了實現更新復雜的計算,我們可以讓主網路和外部記憶進行多輪交互。在第 輪交互中,主網路根據上次從外部記憶中讀取的信息 ,產生新的查詢向量:
其中 為初始的查詢向量, 。
假設第 輪交互的外部記憶為 和 ,主網路從外部記憶讀取信息為:
端到端記憶網路結構如圖:
⑤ 全連接層
看了幾天的CNN ,一直沒太理解FC在網路中的作用。
全連接層(fully connected layers,FC)
在 CNN 中,全連接常出現在最後幾層,用於對前面設計的特徵做加權和。比如 mnist,前面的卷積和池化相當於做特徵工程,後面的全連接相當於做特徵加權。
一般使用ReLU激活函數
最後一層全連接層一般使用softmax進行分類
⑥ 理解神經網路卷積層、全連接層
https://zhuanlan.hu.com/p/32472241
卷積神經網路,這玩意兒乍一聽像是生物和數學再帶點計算機技術混合起來的奇怪東西。奇怪歸奇怪,不得不說,卷積神經網路是計算機視覺領域最有影響力的創造之一。
2012年是卷積神經網路崛起之年。這一年,Alex Krizhevsky帶著卷積神經網路參加了ImageNet競賽(其重要程度相當於奧運會)並一鳴驚人,將識別錯誤率從26%降到了15%,。從那開始,很多公司開始使用深度學習作為他們服務的核心。比如,Facebook在他們的自動標記演算法中使用了它,Google在照片搜索中使用了,Amazon在商品推薦中使用,Printerst應用於為他們的家庭飼養服務提供個性化定製,而Instagram應用於他們的搜索引擎。
然而,神經網路最開始也是最多的應用領域是圖像處理。那我們就挑這塊來聊聊,怎樣使用卷積神經網路(下面簡稱CNN)來進行圖像分類。
圖像分類是指,向機器輸入一張圖片,然後機器告訴我們這張圖片的類別(一隻貓,一條狗等等),或者如果它不確定的話,它會告訴我們屬於某個類別的可能性(很可能是條狗但是我不太確定)。對我們人類來說,這件事情簡單的不能再簡單了,從出生起,我們就可以很快地識別周圍的物體是什麼。當我們看到一個場景,我們總能快速地識別出所有物體,甚至是下意識的,沒有經過有意的思考。但這種能力,機器並不具有。所以我們更加要好好珍惜自己的大腦呀! (:зゝ∠)
電腦和人看到的圖片並不相同。當我們輸入一張圖片時,電腦得到的只是一個數組,記錄著像素的信息。數組的大小由圖像的清晰度和大小決定。假設我們有一張jpg格式的480 480大小的圖片,那麼表示它的數組便是480 480*3大小的。數組中所有數字都描述了在那個位置處的像素信息,大小在[0,255]之間。
這些數字對我們來說毫無意義,但這是電腦們可以得到的唯一的信息(也足夠了)。抽象而簡單的說,我們需要一個接受數組為輸入,輸出一個數組表示屬於各個類別概率的模型。
既然問題我們已經搞明白了,現在我們得想想辦法解決它。我們想讓電腦做的事情是找出不同圖片之間的差別,並可以識別狗狗(舉個例子)的特徵。
我們人類可以通過一些與眾不同的特徵來識別圖片,比如狗狗的爪子和狗有四條腿。同樣地,電腦也可以通過識別更低層次的特徵(曲線,直線)來進行圖像識別。電腦用卷積層識別這些特徵,並通過更多層卷積層結合在一起,就可以像人類一樣識別出爪子和腿之類的高層次特徵,從而完成任務。這正是CNN所做的事情的大概脈絡。下面,我們進行更具體的討論。
在正式開始之前,我們先來聊聊CNN的背景故事。當你第一次聽說卷積神經網路的時候,你可能就會聯想到一些與神經學或者生物學有關的東西,不得不說,卷積神經網路還真的與他們有某種關系。
CNN的靈感的確來自大腦中的視覺皮層。視覺皮層某些區域中的神經元只對特定視野區域敏感。1962年,在一個Hubel與Wiesel進行的試驗( 視頻 )中,這一想法被證實並且拓展了。他們發現,一些獨立的神經元只有在特定方向的邊界在視野中出現時才會興奮。比如,一些神經元在水平邊出現時興奮,而另一些只有垂直邊出現時才會。並且所有這種類型的神經元都在一個柱狀組織中,並且被認為有能力產生視覺。
在一個系統中,一些特定的組件發揮特定的作用(視覺皮層中的神經元尋找各自特定的特徵)。這一想法應用於很多機器中,並且也是CNN背後的基本原理。 (譯者註:作者沒有說清楚。類比到CNN中,應是不同的卷積核尋找圖像中不同的特徵)
回到主題。
更詳細的說,CNN的工作流程是這樣的:你把一張圖片傳遞給模型,經過一些卷積層,非線性化(激活函數),池化,以及全連層,最後得到結果。就像我們之前所說的那樣,輸出可以是單獨的一個類型,也可以是一組屬於不同類型的概率。現在,最不容易的部分來了:理解各個層的作用。
首先,你要搞清楚的是,什麼樣的數據輸入了卷積層。就像我們之前提到的那樣,輸入是一個32 × 32 × 3(打個比方)的記錄像素值的數組。現在,讓我來解釋卷積層是什麼。解釋卷積層最好的方法,是想像一個手電筒照在圖片的左上角。讓我們假設手電筒的光可以招到一個5 × 5的區域。現在,讓我們想像這個手電筒照過了圖片的所有區域。在機器學習術語中,這樣一個手電筒被稱為卷積核(或者說過濾器,神經元) (kernel, filter, neuron) 。而它照到的區域被稱為感知域 (receptive field) 。卷積核同樣也是一個數組(其中的數被稱為權重或者參數)。很重要的一點就是卷積核的深度和輸入圖像的深度是一樣的(這保證可它能正常工作),所以這里卷積核的大小是5 × 5 × 3。
現在,讓我們拿卷積核的初始位置作為例子,它應該在圖像的左上角。當卷積核掃描它的感知域(也就是這張圖左上角5 × 5 × 3的區域)的時候,它會將自己保存的權重與圖像中的像素值相乘(或者說,矩陣元素各自相乘,注意與矩陣乘法區分),所得的積會相加在一起(在這個位置,卷積核會得到5 × 5 × 3 = 75個積)。現在你得到了一個數字。然而,這個數字只表示了卷積核在圖像左上角的情況。現在,我們重復這一過程,讓卷積核掃描完整張圖片,(下一步應該往右移動一格,再下一步就再往右一格,以此類推),每一個不同的位置都產生了一個數字。當掃描完整張圖片以後,你會得到一組新的28 × 28 × 1的數。 (譯者註:(32 - 5 + 1) × (32 - 5 + 1) × 1) 。這組數,我們稱為激活圖或者特徵圖 (activation map or feature map) 。
如果增加卷積核的數目,比如,我們現在有兩個卷積核,那麼我們就會得到一個28 × 28 × 2的數組。通過使用更多的卷積核,我們可以更好的保留數據的空間尺寸。
在數學層面上說,這就是卷積層所做的事情。
讓我們來談談,從更高角度來說,卷積在做什麼。每一個卷積核都可以被看做特徵識別器。我所說的特徵,是指直線、簡單的顏色、曲線之類的東西。這些都是所有圖片共有的特點。拿一個7 × 7 × 3的卷積核作為例子,它的作用是識別一種曲線。(在這一章節,簡單起見,我們忽略卷積核的深度,只考慮第一層的情況)。作為一個曲線識別器,這個卷積核的結構中,曲線區域內的數字更大。(記住,卷積核是一個數組)
現在我們來直觀的看看這個。舉個例子,假設我們要把這張圖片分類。讓我們把我們手頭的這個卷積核放在圖片的左上角。
記住,我們要做的事情是把卷積核中的權重和輸入圖片中的像素值相乘。
(譯者註:圖中最下方應是由於很多都是0所以把0略過不寫了。)
基本上,如果輸入圖像中有與卷積核代表的形狀很相似的圖形,那麼所有乘積的和會很大。現在我們來看看,如果我們移動了卷積核呢?
可以看到,得到的值小多了!這是因為感知域中沒有與卷積核表示的相一致的形狀。還記得嗎,卷積層的輸出是一張激活圖。所以,在單卷積核卷積的簡單情況下,假設卷積核是一個曲線識別器,那麼所得的激活圖會顯示出哪些地方最有可能有曲線。在這個例子中,我們所得激活圖的左上角的值為6600。這樣大的數字表明很有可能這片區域中有一些曲線,從而導致了卷積核的激活 (譯者註:也就是產生了很大的數值。) 而激活圖中右上角的數值是0,因為那裡沒有曲線來讓卷積核激活(簡單來說就是輸入圖像的那片區域沒有曲線)。
但請記住,這只是一個卷積核的情況,只有一個找出向右彎曲的曲線的卷積核。我們可以添加其他卷積核,比如識別向左彎曲的曲線的。卷積核越多,激活圖的深度就越深,我們得到的關於輸入圖像的信息就越多。
在傳統的CNN結構中,還會有其他層穿插在卷積層之間。我強烈建議有興趣的人去閱覽並理解他們。但總的來說,他們提供了非線性化,保留了數據的維度,有助於提升網路的穩定度並且抑制過擬合。一個經典的CNN結構是這樣的:
網路的最後一層很重要,我們稍後會講到它。
現在,然我們回頭看看我們已經學到了什麼。
我們講到了第一層卷積層的卷積核的目的是識別特徵,他們識別像曲線和邊這樣的低層次特徵。但可以想像,如果想預測一個圖片的類別,必須讓網路有能力識別高層次的特徵,例如手、爪子或者耳朵。讓我們想想網路第一層的輸出是什麼。假設我們有5個5 × 5 × 3的卷積核,輸入圖像是32 × 32 × 3的,那麼我們會得到一個28 × 28 × 5的數組。來到第二層卷積層,第一層的輸出便成了第二層的輸入。這有些難以可視化。第一層的輸入是原始圖片,可第二層的輸入只是第一層產生的激活圖,激活圖的每一層都表示了低層次特徵的出現位置。如果用一些卷積核處理它,得到的會是表示高層次特徵出現的激活圖。這些特徵的類型可能是半圓(曲線和邊的組合)或者矩形(四條邊的組合)。隨著卷積層的增多,到最後,你可能會得到可以識別手寫字跡、粉色物體等等的卷積核。
如果,你想知道更多關於可視化卷積核的信息,可以看這篇 研究報告 ,以及這個 視頻 。
還有一件事情很有趣,當網路越來越深,卷積核會有越來越大的相對於輸入圖像的感知域。這意味著他們有能力考慮來自輸入圖像的更大范圍的信息(或者說,他們對一片更大的像素區域負責)。
到目前為止,我們已經識別出了那些高層次的特徵吧。網路最後的畫龍點睛之筆是全連層。
簡單地說,這一層接受輸入(來自卷積層,池化層或者激活函數都可以),並輸出一個N維向量,其中,N是所有有可能的類別的總數。例如,如果你想寫一個識別數字的程序,那麼N就是10,因為總共有10個數字。N維向量中的每一個數字都代表了屬於某個類別的概率。打個比方,如果你得到了[0 0.1 0.1 0.75 0 0 0 0 0 0.05],這代表著這張圖片是1的概率是10%,是2的概率是10%,是3的概率是75%,是9的概率5%(小貼士:你還有其他表示輸出的方法,但現在我只拿softmax (譯者註:一種常用於分類問題的激活函數) 來展示)。全連層的工作方式是根據上一層的輸出(也就是之前提到的可以用來表示特徵的激活圖)來決定這張圖片有可能屬於哪個類別。例如,如果程序需要預測哪些圖片是狗,那麼全連層在接收到一個包含類似於一個爪子和四條腿的激活圖時輸出一個很大的值。同樣的,如果要預測鳥,那麼全連層會對含有翅膀和喙的激活圖更感興趣。
基本上,全連層尋找那些最符合特定類別的特徵,並且具有相應的權重,來使你可以得到正確的概率。
現在讓我們來說說我之前有意沒有提到的神經網路的可能是最重要的一個方面。剛剛在你閱讀的時候,可能會有一大堆問題想問。第一層卷積層的卷積核們是怎麼知道自己該識別邊還是曲線的?全連層怎麼知道該找哪一種激活圖?每一層中的參數是怎麼確定的?機器確定參數(或者說權重)的方法叫做反向傳播演算法。
在講反向傳播之前,我們得回頭看看一個神經網路需要什麼才能工作。我們出生的時候並不知道一條狗或者一隻鳥長什麼樣。同樣的,在CNN開始之前,權重都是隨機生成的。卷積核並不知道要找邊還是曲線。更深的卷積層也不知道要找爪子還是喙。
等我們慢慢長大了,我們的老師和父母給我們看不同的圖片,並且告訴我們那是什麼(或者說,他們的類別)。這種輸入一幅圖像以及這幅圖像所屬的類別的想法,是CNN訓練的基本思路。在細細講反向傳播之前,我們先假設我們有一個包含上千張不同種類的動物以及他們所屬類別的訓練集。
反向傳播可以被分成四個不同的部分。前向傳播、損失函數、反向傳播和權重更新。
在前向傳播的階段,我們輸入一張訓練圖片,並讓它通過整個神經網路。對於第一個輸入圖像,由於所有權重都是隨機生成的,網路的輸出很有可能是類似於[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的東西,一般來說並不對任一類別有偏好。具有當前權重的網路並沒有能力找出低層次的特徵並且總結出可能的類別。
下一步,是損失函數部分。注意,我們現在使用的是訓練數據。這些數據又有圖片又有類別。打個比方,第一張輸入的圖片是數字「3」。那麼它的標簽應該是[0 0 0 1 0 0 0 0 0 0]。一個損失函數可以有很多定義的方法,但比較常見的是MSE(均方誤差)。被定義為(實際−預測)22(實際−預測)22。
記變數L為損失函數的值。正如你想像的那樣,在第一組訓練圖片輸入的時候,損失函數的值可能非常非常高。來直觀地看看這個問題。我們想到達CNN的預測與數據標簽完全一樣的點(這意味著我們的網路預測的很對)。為了到達那裡,我們想要最小化誤差。如果把這個看成一個微積分問題,那我們只要找到哪些權重與網路的誤差關系最大。
這就相當於數學中的δLδWδLδW (譯者註:對L關於W求導) ,其中,W是某個層的權重。現在,我們要對網路進行 反向傳播 。這決定了哪些權重與誤差的關系最大,並且決定了怎樣調整他們來讓誤差減小。計算完這些導數以後,我們就來到了最後一步: 更新權重 。在這里,我們以與梯度相反的方向調整層中的權重。
學習率是一個有程序員決定的參數。一個很高的學習率意味著權重調整的幅度會很大,這可能會讓模型更快的擁有一組優秀的權重。然而,一個太高的學習率可能會讓調整的步伐過大,而不能精確地到達最佳點。
前向傳播、損失函數、反向傳播和更新權重,這四個過程是一次迭代。程序會對每一組訓練圖片重復這一過程(一組圖片通常稱為一個batch)。當對每一張圖片都訓練完之後,很有可能你的網路就已經訓練好了,權重已經被調整的很好。
最後,為了驗證CNN是否工作的很好,我們還有另一組特殊的數據。我們把這組數據中的圖片輸入到網路中,得到輸出並和標簽比較,這樣就能看出網路的表現如何了。
⑦ 卷積神經網路卷積層算完數據超閾怎麼辦
、計算方法不同1、前饋神經網路:一種最簡單的神經網路,各神經元分層排列AI愛發貓 www.aifamao.com。每個神經元只與前一層的神經元相連。接收前一層的輸出,並輸出給下一層.各層間沒有反饋。
2、BP神經網路:是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路。3、卷積神經網路:包含卷積計算且具有深度結構的前饋神經網路。
二、用途不同1、前饋神經網路:主要應用包括感知器網路、BP網路和RBF網路。
2、BP神經網路:(1)函數逼近:用輸入向量和相應的輸出向量訓練一個網路逼近一個函數;(2)模式識別:用一個待定的輸出向量將它與輸入向量聯系起來;(3)分類:把輸入向量所定義的合適方式進行分類;(4)數據壓縮:減少輸出向量維數以便於傳輸或存儲。
3、卷積神經網路:可應用於圖像識別、物體識別等計算機視覺、自然語言處理、物理學和遙感科學等領域。聯系:BP神經網路和卷積神經網路都屬於前饋神經網路,三者都屬於人工神經網路。因此,三者原理和結構相同。
三、作用不同1、前饋神經網路:結構簡單,應用廣泛,能夠以任意精度逼近任意連續函數及平方可積函數.而且可以精確實現任意有限訓練樣本集。2、BP神經網路:具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。3、卷積神經網路:具有表徵學習能力,能夠按其階層結構對輸入信息進行平移不變分類。
(7)全連接網路增加層數擴展閱讀:1、BP神經網路優劣勢BP神經網路無論在網路理論還是在性能方面已比較成熟。其突出優點就是具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。但是BP神經網路也存在以下的一些主要缺陷。
①學習速度慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。②容易陷入局部極小值。③網路層數、神經元個數的選擇沒有相應的理論指導。④網路推廣能力有限。
2、人工神經網路的特點和優越性,主要表現在以下三個方面①具有自學習功能。
例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。自學習功能對於預測有特別重要的意義。
預期未來的人工神經網路計算機將為人類提供經濟預測、效益預測,其應用前途是很遠大的。②具有聯想存儲功能。用人工神經網路的反饋網路就可以實現這種聯想。③具有高速尋找優化解的能力。
尋找一個復雜問題的優化解,往往需要很大的計算量,利用一個針對某問題而設計的反饋型人工神經網路,發揮計算機的高速運算能力,可能很快找到優化解。
參考資料:網路—前饋神經網路網路—BP神經網路網路—卷積神經網路網路—人工神經網路。
卷積神經網路處理規格不同的圖片
用卷積神經網路處理 「圖」 結構數據應該怎麼辦
。
卷積神經網路有以下幾種應用可供研究:1、基於卷積網路的形狀識別物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。
2、基於卷積網路的人臉檢測卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。
它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。
3、文字識別系統在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。
然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。
卷積神經網路為什麼最後接一個全連接層
在常見的卷積神經網路的最後往往會出現一兩層全連接層,全連接一般會把卷積輸出的二維特徵圖(featuremap)轉化成(N*1)一維的一個向量全連接的目的是什麼呢?
因為傳統的端到到的卷積神經網路的輸出都是分類(一般都是一個概率值),也就是幾個類別的概率甚至就是一個數--類別號,那麼全連接層就是高度提純的特徵了,方便交給最後的分類器或者回歸。
但是全連接的參數實在是太多了,你想這張圖里就有20*12*12*100個參數,前面隨便一層卷積,假設卷積核是7*7的,厚度是64,那也才7*7*64,所以現在的趨勢是盡量避免全連接,目前主流的一個方法是全局平均值。
也就是最後那一層的featuremap(最後一層卷積的輸出結果),直接求平均值。有多少種分類就訓練多少層,這十個數字就是對應的概率或者叫置信度。
卷積神經網路是如何反向調整參數的?
卷積神經網路的模型問題? 50
。
怎麼又是你.....網路自然是搭建起來的啊,比如CNN,一層一層地建,如果你是用別人已經建好的網路,比如最簡單的LeNet-5,那麼Tensorflow中會直接提供你一個Net;但是如果你是自定義網路類型,那麼需要繼承nn.Noles,然後重新定義網路結構,封裝成一個Net,總結起來,模型是很多數學公式搭在一起,然鵝,數學公式是封裝好的,可以相互交流哈。
打開CSDN,閱讀體驗更佳
卷積神經網路的缺點是什麼?_土豆西瓜大芝麻的博客_卷積神經...
平移不變性 當我們說平移不變性時,我們意思是,稍微改變同一物體的朝向或位置,可能並不會激活那些識別該物體的神經元。 正如上圖所示,假如一個神經元是用來識別一隻貓的,其參數會隨著貓的位置和轉動的變化而變化。雖然數據擴增(data aug...
卷積神經網路存在的問題,卷積神經網路的卷積層_普通網友的博客-CSDN博 ...
對於無法完美解決的梯度消失問題,一個可能部分解決梯度消失問題的辦法是使用ReLU(RectifiedLinearUnit)激活函數,ReLU在卷積神經網路CNN中得到了廣泛的應用,在CNN中梯度消失似乎不再是問題。 那麼它是什麼樣子呢?其實很簡單,比我們前面提到的...
最新發布 影響深度卷積神經網路演算法的關鍵參數是網路結構
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。卷積神經網路的連接性:卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。
繼續訪問
卷積神經網路難點梳理
目錄1 基本概念及原理1.1 基本概念1.2 基本原理2 卷積是怎麼「卷」的2.1 數學中的卷積2.2 CNN中的卷積3 損失函數是怎樣當好指揮官的4 梯度下降、反向傳播和顯卡參考內容 1 基本概念及原理 1.1 基本概念 概念名稱 目的 操作 示意圖 卷積(Convolution) 提取特徵 將圖像矩陣遍歷乘以卷積核矩陣並輸出 池化(Pooling) 降低數據量 對小塊矩陣中的所有數取平均(平均池化)或者取最大(最大池化)並只輸出一個值,再遍歷 激活(Activation) 對
繼續訪問
卷積神經網路的缺點_遼寧大學的博客_卷積神經網路的優缺點
1.做卷積神經網路需要將數據集歸一化。不同的尺寸混合在一起難以訓練。2.卷積神經網路沒有記憶功能。3.對圖像處理很友善,對視頻語音自然語言處理能力差...
關於CNN卷積神經網路的問題_麥格芬230的博客
將卷積神經網路CNN應用到文本分類任務,利用多個不同大小的卷積核來提取句子中的關鍵信息(類似於多窗口大小的N-gram),從而能夠更好地捕捉局部相關性。 4.在情感分析任務中,TextCNN的卷積核,卷積的是哪些向量呢?卷積卷的是這些向量的什麼...
深入淺出——搞懂卷積神經網路的過擬合、梯度彌散、batchsize的影響的問題(二)
過擬合 梯度彌散 batchsize 不平衡數據集
繼續訪問
cnn卷積神經網路反向傳播,卷積神經網路維度變化
深度學習框架,尤其是基於人工神經網路的框架可以追溯到1980年福島邦彥提出的新認知機[2],而人工神經網路的歷史更為久遠。1989年,燕樂存(YannLeCun)等人開始將1974年提出的標准反向傳播演算法[3]應用於深度神經網路,這一網路被用於手寫郵政編碼識別。盡管演算法可以成功執行,但計算代價非常巨大,神經網路的訓練時間達到了3天,因而無法投入實際使用[4]。...
繼續訪問
卷積神經網路CNN特點功能及其缺陷_一隻不出息的程序員的博客...
卷積:簡單地說,圖像經過平移,相應的特徵圖上的表達也是平移的。 下圖只是一個為了說明這個問題的例子。輸入圖像的左下角有一個人臉,經過卷積,人臉的特徵(眼睛,鼻子)也位於特徵圖的左下角。 在神經網路中,卷積被定義為不同位置的特徵...
記錄 訓練卷積神經網路時遇到的問題_後知後覺w的博客
記錄 訓練卷積神經網路時遇到的問題 問題1、softmax分類的loss最後會停在0.6931這個值 原因分析:在分類層使用了keras.layers.Lambda,導致分類器沒有可訓練的參數,因此沒有分類能力,即,無論是否為object,softmax的輸出都是0.5,根據loss...
都說卷積神經網路是個好東西,但它有什麼弊端呢?
圖片來源:Mathworks翻譯 | 王赫編輯 | Donna2012年,三位深度學習的「巨人」Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,聯合發表了題為 「ImageNet Classification with Deep Convolutional Networks」 的論文。自此,卷積神經網路( CNNs )就成了一個萬人追捧的工具,並
繼續訪問
卷積神經網路—全連接層
卷積神經網路—全連接層 全連接層 全連接層與卷積層 全連接層與GAP(全局平均池化層) [1] https://blog.csdn.net/Touch_Dream/article/details/79775786 [2] https://www.cnblogs.com/zongfa/p/9048680.html [3] https://www.hu.com/question/410379...
繼續訪問
五、卷積神經網路CNN5(卷積相關問題2)_滿滿myno的博客
輸出深度(通道)與卷積核(過濾器)的個數相等。 激活函數通常放在卷積神經網路的那個操作之後 通常放在卷積層之後。 如何理解最大池化層有幾分縮小 池化層:對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網路計算復雜度;一方面 ...
卷積神經網路的缺點
(1)效果好是因為仿生學,缺點是無法擴展到平面視覺以外的地方吧。 (2)缺點一:實現比較復雜。缺點二:訓練所需時間比較久。 (3)不是單一演算法,不同的任務需要單獨訓練 (4)世界(物理空間、解空間等)是連續且局部平坦的+規律/特徵具有時空局部平移不變性,即世界存在局部平移不變的統計規律 舉個例子:在地球表面某局部畫三角形,發現內角和總是等於180,並且隨便跑到地球的哪裡都是如此,但是如果你
繼續訪問
神經網路 卷積神經網路,卷積神經網路常見問題
卷積神經網路(ConvolutionalNeuralNetwork,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出色表現。[1] 它包括卷積層(alternatingconvolutionallayer)和池層(poolinglayer)。卷積神經網路是近年發展起來,並引起廣泛重視的一種高效識別方法。...
繼續訪問
卷積神經網路(CNN)入門常見問題解答
目錄 什麼是神經元? 激活函數的作用? 什麼是神經網路? CNN怎麼進行識別? 計算機如何識別圖像? CNN如何更准確人性化的對比圖像? 什麼是卷積操作? 感謝作者: CNN筆記:通俗理解卷積神經網路_v_JULY_v的博客-CSDN博客_卷積神經網路通俗理解 什麼是神經元? 神經網路由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的連接代表加權值,稱...
繼續訪問
卷積神經網路——解決參數太多問題
一、全連接網路的局限性 圖像變大導致色彩書變多,不好解決 不便處理高維數據 對於比較復雜的高維數據,如果按照全連接的方法,則只能通過增加節點、增加層數的方式來解決。增加節點會引起參數過多的問題。由於隱藏層神經網路使用的是sigmod或tanh激活函數,其反向傳播的有效成層數只能在4~6層左右。 二、理解卷積神經網路 三、網路結構 卷積神經網路的結構與全連接網路相比復雜很多。它的網路結構主要包括卷積層、池化層。細節又可以分為濾波器、步長、卷積操作、池化操作。 1.網路結構描述 對於一般的圖片會使用多個卷積
繼續訪問
人工智慧深度學習卷積神經網路入門
<span style="font-size:16px;">"java大數據人工智慧培訓學校全套教材"系列課程由1000集視頻構成,基本就 是1)時下流行的java培訓學校主流內部教材,2)和市面上培訓學校的通 行的課程體系幾乎一樣。所以這套課程都能自己學下來,等於上了培訓學校一次,完全可以找個java工程師的工作了。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;"> 通過學習卷積神經網路概述,為什麼引入神經網路來做識別,判斷,預測,</span><strong><span style="font-size:16px;">訓練模型</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">導數和切線</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數如何求導</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">鏈式法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度下降法與delta法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">BP(back propagation)誤差逆傳播神經網路</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">卷積到底有什麼作用?如何做到特徵提取</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">池化的名字由來</span></strong><span style="font-size:16px;">,</span><strong><strong><span style="font-size:16px;">dropout</span></strong></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Anaconda Prompt的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Jupyter notebook的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Spyder的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">建立安裝Tensorflow所需的Anaconda虛擬環境</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">如何在Anaconda虛擬環境安裝Tensorflow與Keras</span></strong><span style="font-size:16px;">概念等讓大家對人工智慧,卷積神經網路快速入門。</span></span><br /> <br /> <span style="font-size:16px;">課程特色:專業細致,偏案例,理論強。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">課程軟體使用:</span><span style="font-size:14px;"><strong><span style="font-size:16px;">Anaconda,</span><span style="font-size:14px;"><strong><span><span style="font-size:16px;">Spyder,</span><span style="font-size:16px;"><strong><span style="font-size:16px;">Jupyter notebook</span></strong></span></span></strong></span></strong></span></span><br /> <br /> <span style="font-size:16px;">重要聲明:</span><br /> <br /> <span style="font-size:16px;">1) 如果感覺噪音大,可以選擇不用耳機,加音箱或用電腦原聲 </span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">2) 既然我們的名字叫</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">,這個課程的特點就在於成本最低的, 讓你最快速的,最容易的入門。</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">的最大的難點在於入門入不了,從而最終放棄。俗話說師傅領進門,修行在個人。只要入了門了,後面的事都好辦。選課前,務必注意本章的學習目標和內容。想學更多,注意後邊的課程。</span></span>
繼續訪問
python卷積神經網路回歸預測_回歸[keras]的一維卷積神經網路,做
在上一篇博客里我介紹了如何利用keras對一個給定的數據集來完成多分類任務。100%的分類准確度驗證了分類模型的可行性和數據集的准確度。在這篇博客當中我將利用一個稍加修改的數據集來完成線性回歸任務。相比較以往的線性回歸處理方式,我認為使用神經網路實現線性回歸要簡單和准確得多。數據集大小仍然是247*900,不同的是數據集的第247位變成了濕度特徵的真實濕度值。不同於分類演算法得到的決策面,回歸演算法得...
繼續訪問
卷積神經網路之全連接層
大多數內容來源於 :卷積神經網路中的全連接層 全連接層的作用是: 連接所有的特徵,將輸出值送給分類器 (如softmax分類器),其將卷積輸出的二維特徵圖轉化成 (N * 1)一維的一個向量。 最後的兩列小圓球就是兩個全連接層,在最後一層卷積結束後,又進行了一次池化操作,輸出了20個 12*12 的圖像(20指最後一層的厚度),然後通過了一個全連接層變成了 1*100 的向量(第一個全連接層神...
繼續訪問
人工神經網路的功能特點,神經網路的優缺點
此時,網路學習了過多的樣本細節,而不能反映樣本內含的規律由於BP演算法本質上為梯度下降法,而它所要優化的目標函數又非常復雜,因此,必然會出現「鋸齒形現象」,這使得BP演算法低效;多層前向BP網路的問題:從數學角度看,BP演算法為一種局部搜索的優化方法,但它要解決的問題為求解復雜非線性函數的全局極值,因此,演算法很有可能陷入局部極值,使訓練失敗;例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。第三,具有高速尋找優化解的能力。...
繼續訪問
【Keras】卷積神經網路數據回歸預測實戰
基於卷積神經網路的數據回歸預測
繼續訪問
熱門推薦 反向傳播演算法(過程及公式推導)
反向傳播演算法(Backpropagation)是目前用來訓練人工神經網路(Artificial Neural Network,ANN)的最常用且最有效的演算法。
繼續訪問
深度學習---卷積神經網路解決分類與回歸問題
一、CNN神經網路的發展史: Lenet,1986年 Alexnet,2012年 2012年,Imagenet比賽冠軍的model——Alexnet [2](以第一作者alex命名),AlexNet 是一種典型的 convolutional neural network,它由5層 convolutional layer,2層 fully connected layer,和最後一層 label layer (1000個node, 每個node代表ImageNet中的一個類別) 組成 GoogleNet
繼續訪問
深度學習之卷積神經網路CNN詳細
計算機視覺、自然語言處理等領域(圖像分類、圖像分割、圖像檢測、文本
繼續訪問
一文讓你徹底了解卷積神經網路
目錄 卷積層 直觀理解卷積 卷積計算流程 計算過程: 思考: 池化層(PoolingLayer) 卷積神經網路的組成 前向傳播與反向傳播 卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出
⑧ 卷積神經網路的 卷積層、激活層、池化層、全連接層
數據輸入的是一張圖片(輸入層),CONV表示卷積層,RELU表示激勵層,POOL表示池化層,Fc表示全連接層
全連接神經網路需要非常多的計算資源才能支撐它來做反向傳播和前向傳播,所以說全連接神經網路可以存儲非常多的參數,如果你給它的樣本如果沒有達到它的量級的時候,它可以輕輕鬆鬆把你給他的樣本全部都記下來,這會出現過擬合的情況。
所以我們應該把神經元和神經元之間的連接的權重個數降下來,但是降下來我們又不能保證它有較強的學習能力,所以這是一個糾結的地方,所以有一個方法就是 局部連接+權值共享 ,局部連接+權值共享不僅權重參數降下來了,而且學習能力並沒有實質的降低,除此之外還有其它的好處,下來看一下,下面的這幾張圖片:
一個圖像的不同表示方式
這幾張圖片描述的都是一個東西,但是有的大有的小,有的靠左邊,有的靠右邊,有的位置不同,但是我們構建的網路識別這些東西的時候應該是同一結果。為了能夠達到這個目的,我們可以讓圖片的不同位置具有相同的權重(權值共享),也就是上面所有的圖片,我們只需要在訓練集中放一張,我們的神經網路就可以識別出上面所有的,這也是 權值共享 的好處。
而卷積神經網路就是局部連接+權值共享的神經網路。
現在我們對卷積神經網路有一個初步認識了,下面具體來講解一下卷積神經網路,卷積神經網路依舊是層級結構,但層的功能和形式做了改變,卷積神經網路常用來處理圖片數據,比如識別一輛汽車:
在圖片輸出到神經網路之前,常常先進行圖像處理,有 三種 常見的圖像的處理方式:
均值化和歸一化
去相關和白化
圖片有一個性質叫做局部關聯性質,一個圖片的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。這個性質意味著每一個神經元我們不用處理全局的圖片了(和上一層全連接),我們的每一個神經元只需要和上一層局部連接,相當於每一個神經元掃描一小區域,然後許多神經元(這些神經元權值共享)合起來就相當於掃描了全局,這樣就構成一個特徵圖,n個特徵圖就提取了這個圖片的n維特徵,每個特徵圖是由很多神經元來完成的。
在卷積神經網路中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的 一個節點上 。我們拿灰度圖(只有一維)來舉例:
局部區域
圖片是矩陣式的,將這些以矩陣排列的節點展成了向量。就能更好的看出來卷積層和輸入層之間的連接,並不是全連接的,我們將上圖中的紅色方框稱為filter,它是2*2的,這是它的尺寸,這不是固定的,我們可以指定它的尺寸。
我們可以看出來當前filter是2*2的小窗口,這個小窗口會將圖片矩陣從左上角滑到右下角,每滑一次就會一下子圈起來四個,連接到下一層的一個神經元,然後產生四個權重,這四個權重(w1、w2、w3、w4)構成的矩陣就叫做卷積核。
卷積核是演算法自己學習得到的,它會和上一層計算,比如,第二層的0節點的數值就是局部區域的線性組合(w1 0+w2 1+w3 4+w4 5),即被圈中節點的數值乘以對應的權重後相加。
卷積核計算
卷積操作
我們前面說過圖片不用向量表示是為了保留圖片平面結構的信息。 同樣的,卷積後的輸出若用上圖的向量排列方式則丟失了平面結構信息。 所以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接,每一個藍色結點連接四個黃色的結點。
卷積層的連接方式
圖片是一個矩陣然後卷積神經網路的下一層也是一個矩陣,我們用一個卷積核從圖片矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接下一層的一個神經元,形成參數矩陣這個就是卷積核,每次滑動雖然圈起來的神經元不同,連接下一層的神經元也不同,但是產生的參數矩陣確是一樣的,這就是 權值共享 。
卷積核會和掃描的圖片的那個局部矩陣作用產生一個值,比如第一次的時候,(w1 0+w2 1+w3 4+w4 5),所以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:
卷積計算過程
上圖中左邊是圖矩陣,我們使用的filter的大小是3 3的,第一次滑動的時候,卷積核和圖片矩陣作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,會產生一個值,這個值就是右邊矩陣的第一個值,filter滑動9次之後,會產生9個值,也就是說下一層有9個神經元,這9個神經元產生的值就構成了一個矩陣,這矩陣叫做特徵圖,表示image的某一維度的特徵,當然具體哪一維度可能並不知道,可能是這個圖像的顏色,也有可能是這個圖像的輪廓等等。
單通道圖片總結 :以上就是單通道的圖片的卷積處理,圖片是一個矩陣,我們用指定大小的卷積核從左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接之後就會形成局部連接,每一條連接都會產生權重,這些權重就是卷積核,所以每次滑動都會產生一個卷積核,因為權值共享,所以這些卷積核都是一樣的。卷積核會不斷和當時卷積核所圈起來的局部矩陣作用,每次產生的值就是下一層結點的值了,這樣多次產生的值組合起來就是一個特徵圖,表示某一維度的特徵。也就是從左上滑動到右下這一過程中會形成一個特徵圖矩陣(共享一個卷積核),再從左上滑動到右下又會形成另一個特徵圖矩陣(共享另一個卷積核),這些特徵圖都是表示特徵的某一維度。
三個通道的圖片如何進行卷積操作?
至此我們應該已經知道了單通道的灰度圖是如何處理的,實際上我們的圖片都是RGB的圖像,有三個通道,那麼此時圖像是如何卷積的呢?
彩色圖像
filter窗口滑的時候,我們只是從width和height的角度來滑動的,並沒有考慮depth,所以每滑動一次實際上是產生一個卷積核,共享這一個卷積核,而現在depth=3了,所以每滑動一次實際上產生了具有三個通道的卷積核(它們分別作用於輸入圖片的藍色、綠色、紅色通道),卷積核的一個通道核藍色的矩陣作用產生一個值,另一個和綠色的矩陣作用產生一個值,最後一個和紅色的矩陣作用產生一個值,然後這些值加起來就是下一層結點的值,結果也是一個矩陣,也就是一張特徵圖。
三通道的計算過程
要想有多張特徵圖的話,我們可以再用新的卷積核來進行左上到右下的滑動,這樣就會形成 新的特徵圖 。
三通道圖片的卷積過程
也就是說增加一個卷積核,就會產生一個特徵圖,總的來說就是輸入圖片有多少通道,我們的卷積核就需要對應多少通道,而本層中卷積核有多少個,就會產生多少個特徵圖。這樣卷積後輸出可以作為新的輸入送入另一個卷積層中處理,有幾個特徵圖那麼depth就是幾,那麼下一層的每一個特徵圖就得用相應的通道的卷積核來對應處理,這個邏輯要清楚,我們需要先了解一下 基本的概念:
卷積計算的公式
4x4的圖片在邊緣Zero padding一圈後,再用3x3的filter卷積後,得到的Feature Map尺寸依然是4x4不變。
填充
當然也可以使用5x5的filte和2的zero padding可以保持圖片的原始尺寸,3x3的filter考慮到了像素與其距離為1以內的所有其他像素的關系,而5x5則是考慮像素與其距離為2以內的所有其他像素的關系。
規律: Feature Map的尺寸等於
(input_size + 2 * padding_size − filter_size)/stride+1
我們可以把卷積層的作用 總結一點: 卷積層其實就是在提取特徵,卷積層中最重要的是卷積核(訓練出來的),不同的卷積核可以探測特定的形狀、顏色、對比度等,然後特徵圖保持了抓取後的空間結構,所以不同卷積核對應的特徵圖表示某一維度的特徵,具體什麼特徵可能我們並不知道。特徵圖作為輸入再被卷積的話,可以則可以由此探測到"更大"的形狀概念,也就是說隨著卷積神經網路層數的增加,特徵提取的越來越具體化。
激勵層的作用可以理解為把卷積層的結果做 非線性映射 。
激勵層
上圖中的f表示激勵函數,常用的激勵函數幾下幾種:
常用的激勵函數
我們先來看一下激勵函數Sigmoid導數最小為0,最大為1/4,
激勵函數Sigmoid
Tanh激活函數:和sigmoid相似,它會關於x軸上下對應,不至於朝某一方面偏向
Tanh激活函數
ReLU激活函數(修正線性單元):收斂快,求梯度快,但較脆弱,左邊的梯度為0
ReLU激活函數
Leaky ReLU激活函數:不會飽和或者掛掉,計算也很快,但是計算量比較大
Leaky ReLU激活函數
一些激勵函數的使用技巧 :一般不要用sigmoid,首先試RELU,因為快,但要小心點,如果RELU失效,請用Leaky ReLU,某些情況下tanh倒是有不錯的結果。
這就是卷積神經網路的激勵層,它就是將卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中理解。它展示的是將非線性操作應用到一個特徵圖中。這里的輸出特徵圖也可以看作是"修正"過的特徵圖。如下所示:
非線性操作
池化層:降低了各個特徵圖的維度,但可以保持大分重要的信息。池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層並沒有參數,它只不過是把上層給它的結果做了一個下采樣(數據壓縮)。下采樣有 兩種 常用的方式:
Max pooling :選取最大的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖中取出最大的元素,最大池化被證明效果更好一些。
Average pooling :平均的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖算出平均值
Max pooling
我們要注意一點的是:pooling在不同的depth上是分開執行的,也就是depth=5的話,pooling進行5次,產生5個池化後的矩陣,池化不需要參數控制。池化操作是分開應用到各個特徵圖的,我們可以從五個輸入圖中得到五個輸出圖。
池化操作
無論是max pool還是average pool都有分信息被舍棄,那麼部分信息被舍棄後會損壞識別結果嗎?
因為卷積後的Feature Map中有對於識別物體不必要的冗餘信息,我們下采樣就是為了去掉這些冗餘信息,所以並不會損壞識別結果。
我們來看一下卷積之後的冗餘信息是怎麼產生的?
我們知道卷積核就是為了找到特定維度的信息,比如說某個形狀,但是圖像中並不會任何地方都出現這個形狀,但卷積核在卷積過程中沒有出現特定形狀的圖片位置卷積也會產生一個值,但是這個值的意義就不是很大了,所以我們使用池化層的作用,將這個值去掉的話,自然也不會損害識別結果了。
比如下圖中,假如卷積核探測"橫折"這個形狀。 卷積後得到3x3的Feature Map中,真正有用的就是數字為3的那個節點,其餘數值對於這個任務而言都是無關的。 所以用3x3的Max pooling後,並沒有對"橫折"的探測產生影響。 試想在這里例子中如果不使用Max pooling,而讓網路自己去學習。 網路也會去學習與Max pooling近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。
最大池化處理
在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網路的輸出層就會有四個神經元。
四分類問題
我們從卷積神經網路的輸入層、卷積層、激活層、池化層以及全連接層來講解卷積神經網路,我們可以認為全連接層之間的在做特徵提取,而全連接層在做分類,這就是卷積神經網路的核心。
⑨ 深度卷積網路
LeNet網路的結構如下圖所示,可以看出,LeNet網路並沒有使用padding,每進行一次卷積,圖像的高度和寬度都會縮小,而通道數會一直增加。在全連接層中有400個節點,每個極點都有120個神經元,有時還會從這400個節點抽取一部分節點構建一個全連接層,即有兩個全連接層。在該網路中,最後一步就是利用84個特徵得到最後的輸出,該網路剛開始使用的是 sigmoid 函數 tanh 函數,而現在常常傾向於使用 softmax 函數。需要注意的是,LeNet-5網路進行圖像分類時,輸入的圖像是單通道的灰度圖像。
AlexNet是以論文第一作者的名字命名的,該網路的結構,如下圖所示,該網路的輸出層使用了 softmax 函數。AlexNet網路比LeNet網路規模更大,大約有6000萬個參數,用於訓練圖像和數據集時,能夠處理非常相似的基本構造模塊,這些模塊中包含著大量的隱藏單元,並且與LeNet網路不同的是,該網路使用了ReLu的激活函數。
VGG-16網路沒有太多的超參數,這是一種專注於構建卷積層的簡單網路。如下圖所示,該網路首先利用64個過濾器進行了兩次卷積,接著在池化層將輸入圖像壓縮,接著又是128個過濾器進行兩次卷積,接著載池化。繼續用256個過濾器進行3次卷積,再池化,接著再利用512個過濾器卷積3次,再池化,將稍後得到的特徵圖進行全連接操作,再進 softmax 激活。
由於存在梯度消失和梯度爆炸的原因,深層次的神經網路是很難訓練的,如果採用一種跳躍連接的方式,即從某一層網路層獲取激活,然後迅速反饋給另外一層,甚至是神經網路的更深層。這種利用跳躍連接構建的深度神經網路ResNets,深度能夠超過100層
一個簡單的兩層神經網路示例,如下圖所示:
常規的輸出和輸出之間的關系可以用如下的公式表示:
如上公式所述,這是一條神經網路的主路徑。如果將 的輸入直接到深層的激活函數之前,此時,神經網路有了一條副路徑,其對應輸出將有公式(5)變成如下所示的公式(6)
此時的輸入除了原先的輸入 外,多了一個 項,即由於 產生了一個殘差塊。
構建一個ResNet網路就是將很多這樣的殘差塊堆積在一起,形成一個深度神經網路,如下所示:
使用傳統的標准優化演算法訓練一個網路,隨著網路深度的增加,訓練誤差會先減小再增加,隨著網路層數的增加,優化演算法會越難以訓練,訓練誤差也會越來越多。但是,使用ResNet網路,能夠有效地避免這種情況。
如上所述,加入殘差網路之後,其輸出計算公式如公式(6)所示,展開這個公式,則有:
如果使用L2正則化或者權重衰減,則會壓縮權重參數 的值,如果參數 和參數 等於0,其輸出將由公式(7)變成 ,假定使用ReLU激活函數,則有:
由於殘差網路存在的這種跳躍連接,很容易得出以上等式,這意味著,即使給神經網路增加兩層,但是其效率並不遜色與更簡單的神經網路。並且由於存在以上恆等式,使得網路學習隱藏層的單元的信息更加容易。而普通網路,隨著網路層數的增加,學習參數會變得很困難。
此外,關於殘差網路,如公式(6)所示,假設 與 具有相同的維度,由於ResNets使用了許多same卷積, 的維度等於輸出層的維度。如果輸入和輸出具有不同的維度,可以再增加一個矩陣 ,使得 和 具有相同的維度。而 的維度可以通過0值填充調節。
在卷積網路的架構設計中,一種有趣的想法是會使用到1×1的過濾矩陣,實際上,對於單通道的圖像而言,1×1的過濾矩陣,意義不大,但是,對於多通道的圖像而言,1×1的過濾矩陣能夠有效減少圖像卷積之後的通道數量。
根據卷積和池化的基本知識,隨著神經網路層數的增加,圖像的通道數量會逐漸增加,採用1×1的過濾矩陣卷積之後,可以有效減少圖像的通道數量,一個簡單的示例,如下所示:
假設有一個6×6×32的圖片,使用1×1×32的過濾矩陣進行卷積運算,整個運算過程將會遍歷36個單元格,並計算過濾矩陣所覆蓋區域的元素積之和,將其應用到ReLu非線性函數,會得到一個輸出值。此計算過程中,可能會用到多個1×1×32的過濾器,那麼,通過以上計算會得到一個 6×6×過濾器數量 的矩陣。
構建卷積神經網路時,有時會很難決定過濾器的大小,而Inception網路的引入,卻能很好的解決這個問題。
Inception網路的作用就是代替人工確定選擇卷積層的過濾器類型。如下圖所示,對於一個多通道圖像,可以使用不同的過濾矩陣或者池化層,得到不同的輸出,將這些輸出堆積起來。
有了如上圖所示的Inception塊,最終輸出為32+32+64+128=256,而Inception模塊的輸入為28×28×192,其整個計算成本,以5×5的過濾矩陣為例,其乘法的計算次數為:28×28×32×5×5×192,整個計算次數超過了1.2億次。而如果使用如下所示的優化計算方法,則可以有效減少計算量。
如果利用1×1的過濾器,將輸入矩陣的通道減少至16,則可以有效減少計算量,如下所示:
如上圖所示的價格中,整個網路的運算次數為:28×28×192×16+28×28×32×5×5×16=1240萬,整個計算成本降低至原來的十分之一。而,通過1×1×192過濾器卷積得到的這個網路層被稱之為瓶頸層。
如上,所示,可以給每一個非1×1的卷積層之前,加入一個1×1的瓶頸層,就可以構建一個基本的inception模塊了,如下圖所示:
而一個inception網路就是多個Inception模塊連接起來,如下圖所示:
事實上,以上網路中,還存在一些分支,如編號1所示,這些分支就是全連接層,而全連接層之後就是一個softmax層用於預測。又如分支2所示,包含一些隱藏層(編號3),通過全連接層和softmax進行預測。這些分支結構能夠確保,即使是隱藏層和中間層也參與了特徵計算,並且也能夠預測圖片的分類。這種做法能夠有效避免網路過擬合。
對於計算機視覺領域而言,神經網路的訓練可能需要大量的數據,但是當數據量有限時,可以通過數據增強來實現數據量的擴充,以提高系統的魯棒性,具體的數據增強方法如下所示:
除了以上三種數據增強的方法外,更多的數據增強方法和實現可以參考 圖像數據增強
數據增強可以利用計算機多線程實現,一個線程用來實現載入數據,實現數據增強,其他線程可以訓練這些數據以加快整體的運算速度。
⑩ 為什麼當神經元結點和層數增加時,全連接深度神經網路訓練權值很困難
層數多的時候,會造成梯度消失或梯度爆炸的問題