卷積神經網絡(CNN)之代數淺析

前言

在下面的文字裏我將試着從代數學的角度給出CNN一些解析,希望能爲讀者帶來一些啓發。

多層感知器

在正式開始講解之前,我認爲有必要先說一說多層感知器,多層感知器(MLP)是一類前饋人工神經網絡,MLP至少由三層節點組成:輸入層、隱藏層和輸出層。除輸入節點外,每個節點都是一個神經元,使用非線性激活函數。一種稱爲反向傳播的監督學習技術首先出現於MLP。它的多層結構和非線性激活將MLP與線性感知器區分開來。
激活函數在人工神經網絡尤其是多層感知器中是非常重要的,沒有它,多層感知器不可能有這麼強的表達能力,依據Cover 定理,給定一組不可線性分離的訓練數據,我們可以用高概率將其轉換成一個線性可分離的訓練集,方法是通過激活函數將其投影到高維空間中。一般來說,激活函數越是平滑,逼近效果就越好,可除了要考慮平滑度,還要考慮訓練的難易程度,這樣折中的方案就是目前比較流行的ReLU、Maxout等函數。
如果把人工神經網絡看成是一類函數,那其全體可看成是張量的可積函數空間,其中多層感知器的自變量是一階張量;卷積神經網絡的自變量是二階張量。神經元是人工神經網絡的基本結構,下圖是多層感知器的結構:
在這裏插入圖片描述
因爲每一層的前向傳播實際上是:
oi=σi(ω1x1++ωnxn)o_{i}=\sigma_{i} \left ( \omega _{1}x_{1}+\cdots +\omega _{n}x_{n}\right )這樣寫成矩陣的格式:[o1o2om]=([ω11ω12ω1nω21ω22ω2nωm1ωm2ωmn][x1x2xn])\begin{bmatrix} o_{1}\\ o_{2}\\ \vdots \\ o_{m} \end{bmatrix}=\mho \left (\begin{bmatrix} \omega _{11} & \omega _{12} &\cdots &\omega _{1n} \\ \omega _{21}& \omega _{22} & \cdots & \omega _{2n}\\ \vdots & \vdots & \ddots &\vdots \\ \omega _{m1}& \omega _{m2} & \cdots & \omega _{mn} \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \\ x_{n} \end{bmatrix} \right )其中(x1, ,xn)=(σ(x1), ,σ(xn))\mho \left ( x_{1},\cdots ,x_{n} \right )=\left ( \sigma(x_{1}),\cdots ,\sigma(x_{n})\right )σ\sigma是激活函數,所以多層感知器的每一層實際上是一階張量,它出自線性空間裏,另外由於訓練收斂需要梯度下降,它必須具備微分結構,即支持微分算子,所以需要支持元素之間的乘法運算——因爲纖維叢是積流形的推廣,微分結構又是基於叢結構的,下面用一個簡單的例子簡略的說明一下。f(x)=limx0(f(x+x)f(x)x){f}'(x)=\lim_{\bigtriangledown x\rightarrow 0}\left ( \frac{f(x+\bigtriangledown x)-f(x)}{\bigtriangledown x} \right )看上式可知,神經元如果要支持微分算子,至少首先要支持加法和每個非零元都必須可逆,所以神經元集合至少應該是一個代數。學過交換代數的同學應該知道,交換環可以保證所有的理想組合成一個域,這樣就保證了最終神經元都可以收斂到一個極小理想(這裏暫假設極小理想的存在),而且乘法交換律可以保證度量函數極易構造,微積分學的絕大部分理論都是基於這個度量函數,這就爲技術的拓展創造了極其便利的條件。從工程的角度,這大大增加了網絡效能的穩定性和可回溯性,由於構成域,所以支持的算子更加豐富,在其上可任意的設計算法,使其成爲一門獨立學科分支。
我們經常接觸的多層感知器的神經元是實數,構成域,域是更高級的代數結構,其本身就是個代數。
所以作者在設計一個新型的神經網絡結構時,首先是構思,其次是驗證,驗證其結構是不是一個好的結構,也就是說它是不是具備完備的“表達能力”,更具體的說,它的神經元集合是不是構成交換環上的代數。

卷積神經網絡

回到卷積神經網絡,它主要是用來處理階數大於一的張量,通常是二階張量,即圖像。做圖像處理時我們最常用的工具——加權平均,有一個更加學術的詞:互相關(cross-correlation),大部分的圖像處理算法其實都是互相關運算,但是互相關運算有一點不那麼自洽的成分:它不支持交換律,正如上面所述,這會給深度學習這門“學科”帶來很多問題,不誇張的講,如果沒有這個交換環,深度學習也就不可能是一門獨立學科的獨立分支了。互相關操作(cross-correlation)可抽象成下面的公式:C(i,j)=(IK)(i,j)=0m0nI(i+m,j+n)K(m,n)\mathbb{C}\left ( i,j \right )=\left (I\ast K \right )\left ( i,j \right )=\sum_{0}^{m}\sum_{0}^{n}I\left ( i+m,j+n \right )K(m,n)互相關運算的一個最大的優點就是易操作cross-correlation
通過kernel在原圖上遍歷的方式,即完成了互相關操作,絕大部分的圖像處理算法都是基於此,比如數學形態學操作、邊緣提取、細化、角點、時頻變換……,基於豐富的數學內涵,它不但可以準確的表達各種複雜的算法,而且實現簡單易於理解,但它卻有一個嚴重的結構上的缺陷,這裏的情況和四元數極其相似,即是不支持乘法交換律,就好像函數擬合過程爲什麼容易過擬合?很大程度上是因爲一般來說函數集合構成環,不滿足乘法交換律。所以看起來互相關運算這樣一個“小小”的缺陷確爲理論的推廣帶來了很大的障礙,所以說四元數的出現僅僅是剛體變換方向的錦上添花,而遠遠不像複數域那樣爲整個學科帶來了革命性的昇華。但較之四元數,CNN在這裏顯得比較幸運,因爲互相關算子的伴隨算子是滿足交換律的,而且只需一個簡單操作(翻轉,rot180)即可相互轉化,在這裏共軛函數即是我們常說的卷積函數,在分析學中,卷積是一個古老的概念,第一個卷積函數是在Dirichlet關於傅里葉序列的原始回憶錄裏:(φτ)(x)=1πππφ(α)sin(n+12)(αx)2sin12(αx)dα\left ( \varphi \ast \tau \right )(x)=\frac{1}{\pi}\int_{-\pi}^{\pi}\varphi (\alpha )\frac{sin(n+\frac{1}{2})(\alpha -x)}{2sin\frac{1}{2}(\alpha -x)}d\alpha 其中,τ(x)=sin(n+12)(x)2sin12(x)\tau\left ( x \right )=\frac{sin(n+\frac{1}{2})\left (x \right )}{2sin\frac{1}{2}\left ( x \right )}隨後卷積運算作爲頻域的乘法在傅里葉分析中得到了廣泛的應用,繼而擴展到其他領域,更一般的,卷積定義了可積函數線性空間的乘積。它滿足於如下性質:

交換律fg=gff\ast g=g\ast f
結合律f(gh)=(fg)hf\ast\left ( g\ast h \right )=\left ( f\ast g \right )\ast h
分配律f(g+h)=(fg)+(fh)f\ast\left ( g+ h \right )=\left ( f\ast g \right )+ \left ( f\ast h \right )
與標量乘法的結合律a(fg)=(af)ga\left ( f\ast g \right )=\left ( af \right )\ast g

其單位元是狄拉克函數。這樣,二階張量連同卷積運算和加法運算、數乘運算構成一個交換環代數,也就是說,對二階張量(圖像)做處理時,表面上是在做互相關運算,實際上冥冥之中,在更爲廣闊的運行法則中它是在做着卷積運算。在這裏插入圖片描述
這裏做的互相關,上圖的kernel並不是真的卷積核,真的卷積核是其旋轉180度,也可理解爲水平和垂直各翻轉一次。所以最後的卷積核是下面這個樣子:
Alt
卷積代數的出現爲CNN的穩定的反向傳播算法奠定了基礎,爲人工神經網絡向高階張量推廣提供了強大的理論支撐。反向傳播算法看似是個簡單的梯度下降,但是由於是在流形中定義的(函數空間的浸入流形),所以無論是推導還是收斂過程,都沒有那麼的簡單。

反向傳播算法淺談

無論是多層感知器還是卷積神經網絡,反向傳播算法都可分解成以下四個步驟:
1.把實例xix_{i}輸入網絡,並計算網絡中每個單元uu的輸出ouo_{u}
2.對於網絡的每個輸出單元kk,計算它的誤差項δk\delta _{k},其中σ\sigma是激活函數、tkt_{k}是目標輸出δkσ(ok)(tkok)\delta _{k}\leftarrow {\sigma}'\left ( o_{k} \right )\left ( t_{k}-o_{k} \right )3.對於網絡的每個隱藏層單元(i,h)\left ( i,h \right )(第hh層第ii個元素),計算它的誤差項δih\delta _{i}^{h}δil1=σ(xil1)j=1mδjlrot180(ωijl1)\delta _{i}^{l-1}= {\sigma}'\left ( x_{i}^{l-1} \right )\sum_{j=1}^{m}\delta _{j}^{l}\ast rot_{180}\left (\omega_{ij}^{l-1} \right )4.更新每個網絡權值ωijl=ωijl+ωijl\omega _{ij}^{l}=\omega _{ij}^{l}+\bigtriangledown \omega _{ij}^{l}其中ωijl=ηδjlxil\bigtriangledown \omega _{ij}^{l}=\eta \cdot \delta _{j}^{l} \ast x_{i}^{l}ωijl\omega _{ij}^{l}是指第ll層從第ii個元素指向第jj個元素的卷積核,η\eta是學習速率,’\ast'是互相關運算,函數rot180rot_{180}實際上是把反向傳播得到的卷積核梯度翻轉得到互相關核來進行互相關運算。所以說這裏的卷積算子是通過互相關算子起作用的,涉及到的轉換就是反轉180180^{\circ}
至於池化,對應的是張量代數中的一種縮並運算,縮並算子和卷積算子在某種意義上是協調的,而且其有着明顯的物理意義——降維,作用是逐步減小表示的空間大小,逐步減少網絡中的參數和計算量,從高維空間平滑映射到低維空間,從而控制過擬合。
人工神經網絡ff,前向求值可表示爲:y=f(x)\vec{y}=f\left ( \vec{x} \right ),其對偶函數可表示爲:y=x(f)\vec{y}=\vec{x}\left ( f \right ),可以看出,訓練的過程相當於通過對y\vec{y}的梯度下降過程,來間接的控制ff進行梯度收斂。所以神經網絡的訓練也可歸爲變分問題,這也許可以作爲未來的研究方向吧!

參考資料

[1] https://www.jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章