卷積神經網路(convolutional,簡稱cnn)是一類特殊的人工神經網路,區別於神經網路其他模型(如,遞迴神經網路、boltzmann機等),其最主要的特點是卷積運算操作(convolution operator)。因此,在諸多領 域應用特別是影象相關任務上表現優異,諸如,影象分類(image classification)、 影象語義分割(image semantic segmentation)、影象檢索(image retrieval)、 物體檢測(object detection)等計算機視覺問題。此外,隨著cnn研究的深 入,如自然語言處理(natural language processing)中的文字分類,軟體工程 資料探勘(software mining)中的軟體缺陷**等問題都在嘗試利用卷積神經 網路解決,並取得了相比傳統方法甚至其他深度網路模型更優的**效果。
總體來說,卷積神經網路是一種層次模型(hierarchial model),其輸入是原始資料(raw data),如rgb影象、原始音訊資料等。
卷積神經網路通過卷積(convolution)操作、匯合(pooling)操作和非線性啟用函式(non-linear activation function)對映等一系列操作的層層堆疊,將高層語義資訊逐層由原始資料輸入層中抽取出來,逐層抽象,這一過程便是「前饋運算」(feed-forward)。
其中,不同型別操作在卷積神經網路中一般稱作「層」:卷積操作對應「卷積層」,匯合操作對應「匯合層」等等。
最終,卷積神經網路的最後一層將其目標任務(分類、回歸等)形式化為目標函式(objective) 。
通過計算**值與真實值之間的誤差或損失(loss),憑藉反向傳播演算法(back-pripagation)將誤差或損失由最後一層逐層向前反饋(back-forward),更新每層引數,並在更新引數後再次前饋,如此往復,知道網路模型收斂,從而達到模型訓練的目的。
更通俗地講,卷積神經網路猶如搭積木的過程,見公式1.1如下:
將卷積等操作層作為「基本單元」依次「搭」在原始資料(公式1.1中的x1)上,逐層「堆砌」,以損失函式的計算(公式1.1中的 z )作為過程結束,其中每層資料形式是乙個三維張量(tensor)。具體地,在計算機視覺應用中,卷積神經網路的資料層通常是rgb顏色空間的影象:h行,w列,3個通道(分別為r,g,b),在此記作x1。x1經過第一層操作可得 x2 .對應第一層操作中的引數記為 ω1 ;x2 作為第二層操作層 ω2 的輸入,可得 x3 .......直到第l-1層,此時網路輸出為 xl。
在上述的過程中,理論上每層操作層可為單獨卷積操作、匯合操作、非線性對映或其他操作變換,當然也可以是不同形式操作變換的組合。
最後,整個網路以損失函式的計算結束。若 y 是輸入 x1 對應的真實標記(ground truth),則損失函式表示如下公式1.2:
其中,函式l()中的引數即wl。事實上,可以發現對於層中的特定操作,其引數xi是可以為空的,如匯合操作、無參的非線性對映以及無參損失函 數的計算等。實際應用中,對於不同任務,損失函式的形式也隨之改變。以回歸問題為例,常用的 l2 損失函式即可作為卷積網路的目標函式,此時有:
若對於分類問題,網路的目標函式常採用交叉熵(cross entropy)損失函式,有
其中 c為分類任務類別數。顯然,無論回歸問題還是分類問題,在計算z前,均需要通過合適的操作得到與y同維度的xl,方可正確計算樣本**的損失/誤差值。
無論訓練模型時計算誤差還是模型訓練完畢後獲得樣本**,卷積神經網路的 前饋(feed-forward)運算都較直觀。同樣以影象分類任務為例,假設網路已訓練完畢,即其中引數ω1,...,ωl−1已收斂到某最優解,此時可用此網路進行影象類別**。
**過程實際就是一次網路的前饋運算:將測試集影象作為網路 輸入x1 送進網路,之後經過第一層操作 ω1 可得 x2,依此下去⋯⋯直至輸出xl ∈ rc。上一節提到,xl 是與真實標記同維度的向量。在利用交叉墒損失函 數訓練後得到的網路中,xl 的每一維可表示 x1 分別隸屬 c 個類別的後驗概率。如此,可通過下式得到輸入影象 x1 對應的**標記如下公式1.3:
同其他許多機器學習模型(支援向量機等)一樣,卷積神經網路包括其他所有深度學習模型都依賴最小化損失函式來學習模型引數,即最小化式中的 z。 不過需指出的是,從凸優化理論來看,神經網路模型不僅是非凸(non-convex) 函式而且異常複雜,這便帶來優化求解的困難。該情形下,深度學習模型採用 隨機梯度下降法(stochastic gradient descent簡記為sgd)和誤差反向傳播 (error back propogation)進行模型引數更新。
具體來講,在卷積神經網路求解時,特別是針對大規模應用問題(如, 分類或檢測任務),常採用批處理的隨機梯度下降法(mini-batch sgd)。批處理的隨機梯度下降法在訓練模型階段隨機選取 n 個樣本作為一批(batch)樣本,先通過前饋運算得到**並計算其誤差,後通過梯度下降法更新引數,梯度從後往前逐層反饋,直至更新到網路的第一層引數,這樣的乙個 引數更新過程稱為乙個「批處理過程」(mini-batch)。不同批處理之間按照無放 回抽樣遍歷所有訓練集樣本,遍歷一次訓練樣本稱為「一輪」(epoch)。其中,批處理樣本的大小(batch size)不宜設定過小。過小時(如batch size為1,2 等),由於樣本取樣隨機,按照該樣本上的誤差更新模型引數不一定在全域性上最優(此時僅為區域性最優更新),會使得訓練過程產生振盪。而批處理大小的上限 則主要取決於硬體資源的限制,如gpu視訊記憶體大小。一般而言,批處理大小設 為32,64,128或256即可。當然在隨機梯度下降更新引數時,還有不同的引數更新策略。
下面我們來看誤差反向傳播的詳細過程,假設某批處理前饋後得到 n 個樣本上的誤差為 z,且最後一層 l 為 l2 損失函式,則易得公式1.4、1.5:
不難發現,實際上每層操作都對應了兩部分導數:一部分是誤差關於第 i 層引數ωi 的導數
,另一部分是誤差關於該層輸入的導數 。其中,
下面以第 i 層引數更新為例。當誤差更新訊號(導數)反向傳播至第 i 層時, 第 i+1 層的誤差導數為
,第 i 層引數更新時需計算
和它的對應值。根據
鏈式法則,可得公式1.7、1.8:
此處使用向量標記「vec」是由於實際工程實現時張量運算均轉化為向量運算。前面提到,由於第 i + 1 層時已計算得到
在第 i 層用於更新該層引數時僅需對其做向量化和轉置操作即可得到
即公式1.7和1.8中等號右端的左項。另一方面,在第 i 層,由於 xi 經 ωi 直接作用得 x i+1,故反向求導時亦可直接得到其偏導數 ∂
和 如此,可求得公式1.7和1.8中等號左端項 和
。後根據式 1.6更新該層引數,並將
作為該層誤差傳至前層,即第 i − 1 層,如此下去, 直至更新到第1層,從而完成乙個批處理(mini-batch)的引數更新。
當然,上述方法是通過手動書寫導數並用鏈式法則計算最終誤差對每層不 同引數的梯度,之後仍需通過**將其實現。可見這一過程不僅繁瑣,且容易 出錯,特別是對一些複雜操作,其導數很難求得甚至無法顯式寫出。針對這種 情況,一些深度學習庫,如theano和tensorflow都採用了符號微分的方法進行自動求導來訓練模型。符號微分可以在編譯時就計算導數的數學表示,並進一步利用符號計算方式進行優化。在實際應用時,使用者只需把精力放在模型構建和前向**書寫上,不用擔心複雜的梯度求導過程。不過,在此需指出的是,讀者有必要對上述反向梯度傳播過程了解,也要有能力求得正確的導數形式。
魏秀參(xiu-shen wei)
神經網路基礎知識
1 前饋神經網路 前饋神經網路描述的是網路的結構,是指每一層的神經元只接受前一層神經元的輸入,並且輸出到下一層。2 bp神經網路 3 mlp mlp是多層感知機也被稱為多層神經網路,是一種前向結構,包括輸入層 隱藏層和輸出層。至少三層結構 即隱藏層只有一層網路 如圖所示 4 cnn cnn就是著名的...
神經網路基礎知識(神經網路簡介)
一 生物神經網路 神經元的排列和突觸的強度 由複雜的化學過程決定 確立了神經網路的功能。突觸有兩種型別,興奮性突觸和抑制性突觸。前者產生正突觸後電位,後者產生負突觸後電位。抑制性 神經元雖然接收到其他神經元傳遞的資訊,但沒有向外傳遞資訊,該神經元稱 抑制性 的 興奮性 當乙個神經元的樹突接收的興奮資...
卷積神經網路(1)
卷積神經網路作為一種置換了傳統網路中隱藏層的可自動提取樣本特徵的技術,具有較高的識別率。本文利用dlib與tensorflow平台實現了卷積神經網路人臉識別。結果準確率達到了0.984,取的了較為理想的結果。人臉識別是通過提取人的臉部特徵資訊進行身份識別的一種技術。目前,卷積神經網路在人臉識別上具有...