卷積的矩陣理解

2021-09-11 06:41:13 字數 2757 閱讀 9712

卷積是神經中常見的一種操作,人們通常習慣從直覺上理解卷積層的卷積操作。但是在**實現的時候通常需要更為數學化的卷積表達形式,而且理解卷積的數學形式反過來可以幫助更好地理解卷積操作的本質。

卷積的數學形式通常通過矩陣乘法來表示。本文從卷積最一般的數學形式開始講起,並從一般形式變換為不同網路中的各種特殊形式。

1. 卷積的一般數學形式

我們假設conv(·)表示卷積操作,左引數矩陣(下簡稱左陣)a∈ro×n,輸入矩陣(下簡稱輸入)x∈rn×c,右引數矩陣(下簡稱右陣)w∈rc×h,其中:o代表經過一次卷積操作後輸出的樣本數量,n代表輸入的樣本數量,c代表每個樣本的特徵維度(不同網路中有不同的稱呼,例如cnn中稱為channel),h代表經過一次卷積操作後輸出的每個樣本的特徵維度。由此我們定義一次卷積操作的數學形式為:

conv(x) = axw(eq. 1)

在一次卷積操作中,左陣a表示不同樣本間的聚合方式,即不同樣本間的資訊傳遞。a的每一行都表示輸出的樣本是如何由輸入的樣本聚合而成,非零的部分組成了卷積核的感受野。當o≤n時,就是卷積操作;當o>n時,就是反卷積操作。

右陣w表示同一樣本中特徵的聚合方式,即同一樣本內的資訊傳遞。右陣w每一列都表示一種聚合方式,也就是通常所說的卷積核,每一種卷積核都表示對樣本進行了一次潛在資訊的挖掘。右陣的列維度h表示卷積核的數量,即經過一次卷積操作後,每個樣本的隱向量的維度。

但需要注意的是,在上述一般形式中,所有的卷積核都共享同一種樣本間的聚合方式,即感受野的形狀和分布 。但是在實際網路架構中,通常不同的卷積核對應的感受野不一定相同,這就需要對eq. 1進行變化:

conv(x) = diag(a1 a2 … ah) · diag(x x … x) · diag(w1 w2 … wh) = diag(aixwi)(eq. 2)

其中,ai∈ro×n, i∈[1,h]表示第i個左陣,即第i個感受野,h個左陣組成對角矩陣diag(ai)∈rho×hn;對角矩陣diag(x)表示h個x組成的對角矩陣;wi∈rc, i∈[1,h]表示第i個右陣列向量,即第i個卷積核,h個wi組成對角矩陣diag(wi)rhc×h。

通過分塊矩陣的乘法,就可以實現不同感受野的不同卷積核分別對樣本就行卷積操作。但是當卷積核的數量非常多時,eq.2的對角矩陣維度會變成高緯度的稀疏矩陣,此時也可以對每個卷積核分別採用eq.1的卷積操作,得到oi∈ro, i∈[1,h],再將所有oi重新組成輸出矩陣output = [o1 … oh] ∈ro×h。

2. 不同神經網路中的卷積數學形式

cnn通常用於處理資料,我們以資料為例介紹,其他型別資料基本類似。

假設我們每次輸入batch size等於b的,分標率等於l×w,有rgb三個channel,則輸入樣本x∈rn×3,n=blw。通常,cnn中每乙個卷積核對不同channel的聚合方式都是直接相加,所以右陣實質上是單位陣w=e∈r3×h,每一列都是單位向量e∈r3,則cnn中的卷積操作可以由eq.2簡化為:

conv(x) = [a1 a2 … ah]t xe = [a1xe a2xe … ahxe]t(eq. 3)

conv(x)∈roh,每o個元素都是乙個卷積核的操作結果,經過resize可以得到最終的輸出output∈ro×h。

可以看出,相對於卷積的一般數學形式,cnn中的卷積簡化了右陣,即不同channel的聚合方法。遍歷各種cnn-based網路,對卷積核的調整主要集中在左陣,即感受野的形狀和分布。通常在神經網路中主要調整感受野的形狀,例如inception,感受野的分布則是learnable,通過學習獲得。而在swift中則將感受野的分布設為高斯分布。

進一步地,我們再討論一些卷積的變種。

如果右陣出現變化的分布,且每一列都有0存在,則意味著卷積在channel上也進行聚合,這就是常說的3d卷積,卷積操作在長、寬、通道三個維度上進行。

如果左陣行數超過列數,即輸出o>n,就是常說的反卷積,反卷積是卷積的逆運算。通常在形式上,反卷積的左陣是其對應的卷積的左陣的轉置矩陣,反卷積左陣的每一列都是卷積左陣每一行的感受野,反之同理。

如果左陣每一行代表感受野的非0值,彼此中間都有固定數量的0插值,意味這卷積核的感受野進行了膨脹,但輸出維度不增加,這種卷積就是常說的擴張卷積(atrous 卷積),可以參考**

另外,空間可分卷積、深度可分卷積和分組卷積等標準卷積的變體,都可以通過調整左陣和右陣的形式實現,可以參考博文kunlun bai。

gcn,圖卷積網路,成熟的網路架構提出可以參考** 本文也以該**提出的gcn網路架構為例進行介紹。

gcn用來處理圖結構,假設圖g = g(v, e, a)是無向、無權重圖,v為頂尖集合,大小為n;e為邊集合;a為鄰接矩陣,a∈rn×n。注意,此鄰接矩陣經過兩次調整:(1)對角線元素全部設為1,即加入了自連線,保證了聚合不同樣本的資訊時,可以保留一部分本樣本的資訊(2)規範化,方式為 a= d-0.5ad-0.5, d=diag(dii), dii=∑jaij。則卷積操作為:

conv(x) = axw(eq. 4)

從形式上看,eq.4與eq.1基本相同,只是a在eq.4中代表鄰接矩陣。gcn中,只有右陣w是learnable的(當然這裡是指相對於左陣而言,事實上特徵矩陣x也是可以在訓練中fine-tuning的),即同一樣本不同特徵間的聚合方式是可以學習的。左陣採用鄰接矩陣,保證了圖在卷積操作後仍然保持了原來的結構,每進行一次卷積操作都是聚合中心節點的相鄰節點資訊,k次卷積操作聚合距離中心節點k步的節點資訊。

在gat上,**可以參考通過加入了attention機制,調整左陣中卷積核的分布,每行之和規範至1,通過學習到的概率值對相鄰節點進行加權聚合。

卷積的理解

卷積,看著好煩人的東西啊。直接上來公式 好氣啊,什麼意思啊,一頭霧水。換種方式。假設你挨一拳f t 而這一拳的響應為h t 這樣後果疼痛就是fh。這很合理。你想啊,你一秒鐘挨一拳,那麼最新的一拳和舊的一拳都有疼痛的後果。這個痛是有多痛呢?你現在的拳,和之前拳的殘留。這樣求總痛怎麼求呢?依此疊加。注意...

卷積的理解

最近大火人工智慧,深度學習,各種提到卷積神經網路。不搞懂卷積,好像學習不下去了。於是就去看各種文章,以下是三篇解釋的比較不錯的,附上鏈結。我對卷積的理解 最容易理解的對卷積 convolution 的解釋 理解深度學習中的卷積 這裡做一下總結吧。離散的卷積公式 g n i f i h n i g n...

卷積的理解

訊號處理中的乙個重要運算是卷積.初學卷積的時候,往往是在連續的情形,兩個函式f x g x 的卷積,是 f u g x u du 當然,證明卷積的一些性質並不困難,比如交換,結合等等,但是對於卷積運算的來處,初學者就不甚了了。其實,從離散的情形看卷積,或許更加清楚,對於兩個序列f n g n 一般可...