① 卷積神經網路演算法是什麼
一維構築、二維構築、全卷積構築。
卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。
卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路(Shift-Invariant Artificial Neural Networks, SIANN)」。
卷積神經網路的連接性:
卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。具體地,卷積神經網路第l層特徵圖中的任意一個像素(神經元)都僅是l-1層中卷積核所定義的感受野內的像素的線性組合。
卷積神經網路的稀疏連接具有正則化的效果,提高了網路結構的穩定性和泛化能力,避免過度擬合,同時,稀疏連接減少了權重參數的總量,有利於神經網路的快速學習,和在計算時減少內存開銷。
卷積神經網路中特徵圖同一通道內的所有像素共享一組卷積核權重系數,該性質被稱為權重共享(weight sharing)。權重共享將卷積神經網路和其它包含局部連接結構的神經網路相區分,後者雖然使用了稀疏連接,但不同連接的權重是不同的。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。
在全連接網路視角下,卷積神經網路的稀疏連接和權重共享可以被視為兩個無限強的先驗(pirior),即一個隱含層神經元在其感受野之外的所有權重系數恆為0(但感受野可以在空間移動);且在一個通道內,所有神經元的權重系數相同。
② 神經網路(Neural Network)
(1)結構:許多樹突(dendrite)用於輸入,一個軸突 (axon)用於輸出。
(2)特性:興奮性和傳導性。興奮性是指當信號量超過某個閾值時,細胞體就會被激活,產生電脈沖。傳導性是指電脈沖沿著軸突並通過突觸傳遞到其它神經元。
(3)有兩種狀態的機器:激活時為「是」,不激活時為「否」。神經細胞的狀態取決於從其他神經細胞接收到的信號量,以及突觸的性質(抑制或加強)。
(1)神經元——不重要
① 神經元是包含權重和偏置項的 函數 :接收數據後,執行一些計算,然後使用激活函數將數據限制在一個范圍內(多數情況下)。
② 單個神經元:線性可分的情況下,本質是一條直線, ,這條直線將數據劃分為兩類。而線性分類器本身就是一個單層神經網路。
③ 神經網路:非線性可分的情況下,神經網路通過多個隱層的方法來實現非線性的函數。
(2)權重/參數/連接(Weight)——最重要
每一個連接上都有一個權重。一個神經網路的訓練演算法就是讓權重的值調整到最佳,以使得整個網路的預測效果最好。
(3)偏置項(Bias Units)——必須
① 如果沒有偏置項,所有的函數都會經過原點。
② 正則化偏置會導致欠擬合:若對偏置正則化,會導致激活變得更加簡單,偏差就會上升,學習的能力就會下降。
③ 偏置的大小度量了神經元產生激勵(激活)的難易程度。
(1)定義:也稱為轉換函數,是一種將輸入 (input) 轉成輸出 (output) 的函數。
(2)作用:一般直線擬合的精確度要比曲線差很多,引入激活函數能給神經網路 增加一些非線性 的特性。
(3)性質:
① 非線性:導數不是常數,否則就退化成直線。對於一些畫一條直線仍然無法分開的問題,非線性可以把直線變彎,就能包羅萬象;
② 可微性:當優化方法是基於梯度的時候,處處可導為後向傳播演算法提供了核心條件;
③ 輸出范圍:一般限定在[0,1],使得神經元對一些比較大的輸入會比較穩定;
④ 非飽和性:飽和就是指,當輸入比較大的時候輸出幾乎沒變化,會導致梯度消失;
⑤ 單調性:導數符號不變,輸出不會上躥下跳,讓神經網路訓練容易收斂。
(1)線性函數 (linear function)—— purelin()
(2)符號函數 (sign function)—— hardlim()
① 如果z值高於閾值,則激活設置為1或yes,神經元將被激活。
② 如果z值低於閾值,則激活設置為0或no,神經元不會被激活。
(3)對率函數 (sigmoid function)—— logsig()
① 優點:光滑S型曲線連續可導,函數閾值有上限。
② 缺點:❶ 函數飽和使梯度消失,兩端梯度幾乎為0,更新困難,做不深;
❷ 輸出不是0中心,將影響梯度下降的運作,收斂異常慢;
❸ 冪運算相對來講比較耗時
(4)雙曲正切函數(hyperbolic tangent function)—— tansig()
① 優點:取值范圍0中心化,防止了梯度偏差
② 缺點:梯度消失現象依然存在,但相對於sigmoid函數問題較輕
(5)整流線性單元 ReLU 函數(rectified linear unit)
① 優點:❶ 分段線性函數,它的非線性性很弱,因此網路做得很深;
❷ 由於它的線性、非飽和性, 對於隨機梯度下降的收斂有巨大的加速作用;
② 缺點:❶ 當x<0,梯度都變成0,參數無法更新,也導致了數據多樣化的丟失;
❷ 輸出不是0中心
(6)滲漏型整流線性單元激活函數 Leaky ReLU 函數
① 優點:❶ 是為解決「ReLU死亡」問題的嘗試,在計算導數時允許較小的梯度;
❷ 非飽和的公式,不包含指數運算,計算速度快。
② 缺點:❶ 無法避免梯度爆炸問題; (沒有體現優於ReLU)
❷ 神經網路不學習 α 值。
(7)指數線性單元 ELU (Exponential Linear Units)
① 優點:❶ 能避免「死亡 ReLU」 問題;
❷ 能得到負值輸出,這能幫助網路向正確的方向推動權重和偏置變化;
❸ 在計算梯度時能得到激活,而不是讓它們等於 0。
② 缺點:❶ 由於包含指數運算,所以計算時間更長;
❷ 無法避免梯度爆炸問題; (沒有體現優於ReLU)
❸ 神經網路不學習 α 值。
(8)Maxout(對 ReLU 和 Leaky ReLU的一般化歸納)
① 優點:❶ 擁有ReLU的所有優點(線性和不飽和)
❷ 沒有ReLU的缺點(死亡的ReLU單元)
❸ 可以擬合任意凸函數
② 缺點 :參數數量增加了一倍。難訓練,容易過擬合
(9)Swish
① 優點:❶ 在負半軸也有一定的不飽和區,參數的利用率更大
❷ 無上界有下界、平滑、非單調
❸ 在深層模型上的效果優於 ReLU
每個層都包含一定數量的單元(units)。增加層可增加神經網路輸出的非線性。
(1)輸入層:就是接收原始數據,然後往隱層送
(2)輸出層:神經網路的決策輸出
(3)隱藏層:神經網路的關鍵。把前一層的向量變成新的向量,讓數據變得線性可分。
(1)結構:僅包含輸入層和輸出層,直接相連。
(2)作用:僅能表示 線性可分 函數或決策,且一定可以在有限的迭代次數中收斂。
(3)局限:可以建立與門、或門、非門等,但無法建立更為復雜的異或門(XOR),即兩個輸入相同時輸出1,否則輸出0。 (「AI winter」)
(1)目的:擬合某個函數 (兩層神經網路可以逼近任意連續函數)
(2)結構:包含輸入層、隱藏層和輸出層 ,由於從輸入到輸出的過程中不存在與模型自身的反饋連接,因此被稱為「前饋」。 (層與層之間全連接)
(3)作用: 非線性 分類、聚類、預測等,通過訓練,可以學習到數據中隱含的知識。
(4)局限:計算復雜、計算速度慢、容易陷入局部最優解,通常要將它們與其他網路結合形成新的網路。
(5)前向傳播演算法(Forward Propagation)
① 方法:從左至右逐級依賴的演算法模型,即網路如何根據輸入X得到輸出Y,最終的輸出值和樣本值作比較, 計算出誤差 。
② 目的:完成了一次正反向傳播,就完成了一次神經網路的訓練迭代。通過輸出層的誤差,快速求解對每個ω、b的偏導,利用梯度下降法,使Loss越來越小。
② 局限:為使最終的誤差達到最小,要不斷修改參數值,但神經網路的每條連接線上都有不同權重參數,修改這些參數變得棘手。
(6)誤差反向傳播(Back Propagation)
① 原理:梯度下降法求局部極值
② 方法:從後往前,從輸出層開始計算 L 對當前層的微分,獲得各層的誤差信號,此誤差信號即作為修正單元權值的依據。計算結束以後,所要的兩個參數矩陣的 梯度 就都有了。
③ 局限:如果激活函數是飽和的,帶來的缺陷就是系統迭代更新變慢,系統收斂就慢,當然這是可以有辦法彌補的,一種方法是使用 交叉熵函數 作為損失函數。
(1)原理:隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。在神經網路中,每一層神經元學習到的是前一層神經元值的更抽象的表示。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
(2)方法:ReLU函數在訓練多層神經網路時,更容易收斂,並且預測性能更好。
(3)優點:① 易於構建,表達能力強,基本單元便可擴展為復雜的非線性函數
② 並行性號,有利於在分布是系統上應用
(4)局限:① 優化演算法只能獲得局部極值,性能與初始值相關
② 調參理論性缺乏
③ 不可解釋,與實際任務關聯性模糊
(1)原理:由手工設計卷積核變成自動學習卷積核
(2)卷積(Convolutional layer): 輸入與卷積核相乘再累加 (內積、加權疊加)
① 公式:
② 目的:提取輸入的不同特徵,得到維度很大的 特徵圖(feature map)
③ 卷積核:需要訓練的參數。一般為奇數維,有中心像素點,便於定位卷積核
④ 特點:局部感知、參數變少、權重共享、分層提取
(3)池化(Pooling Layer):用更高層的抽象表達來表示主要特徵,又稱「降采樣」
① 分類: 最大 (出現與否)、平均(保留整體)、隨機(避免過擬合)
② 目的:降維,不需要訓練參數,得到新的、維度較小的特徵
(4)步長(stride):若假設輸入大小是n∗n,卷積核的大小是f∗f,步長是s,則最後的feature map的大小為o∗o,其中
(5)填充(zero-padding)
① Full模式:即從卷積核(fileter)和輸入剛相交開始做卷積,沒有元素的部分做補0操作。
② Valid模式:卷積核和輸入完全相交開始做卷積,這種模式不需要補0。
③ Same模式:當卷積核的中心C和輸入開始相交時做卷積。沒有元素的部分做補0操作。
(7)激活函數:加入非線性特徵
(8)全連接層(Fully-connected layer)
如果說卷積層、池化層和激活函數層等是將原始數據映射到隱層特徵空間(決定計算速度),全連接層則起到將學到的「分布式特徵表示」映射到樣本標記空間的作用(決定參數個數)。
參考:
[1] 神經網路(入門最詳細)_ruthy的博客-CSDN博客_神經網路演算法入門
[2] 神經網路(容易被忽視的基礎知識) - Evan的文章 - 知乎
[3] 人工神經網路——王的機器
[4] 如何簡單形象又有趣地講解神經網路是什麼? - 舒小曼的回答 - 知乎
[5] 神經網路15分鍾入門!足夠通俗易懂了吧 - Mr.括弧的文章 - 知乎
[6] 神經網路——最易懂最清晰的一篇文章_illikang的博客-CSDN博客_神經網路
[7] 直覺化深度學習教程——什麼是前向傳播——CSDN
[8] 「反向傳播演算法」過程及公式推導(超直觀好懂的Backpropagation)_aift的專欄-CSDN
[9] 卷積、反卷積、池化、反池化——CSDN
[10] 浙大機器學習課程- bilibili.com
③ 卷積神經網路
關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。
卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號 。
卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:
目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。
卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。
一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:
我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:
信號序列 和濾波器 的卷積定義為:
一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :
二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:
下圖給出一個二維卷積示例:
注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。
在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map) 。
最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵 。
在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。
互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:
互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。
在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 和 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。
濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。
零填充(Zero Padding)是在輸入向量兩端進行補零。
假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。
一般常用的卷積有以下三類:
因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:
假設 。
, , 。函數 為一個標量函數。
則由 有:
可以看出, 關於 的偏導數為 和 的卷積 :
同理得到:
當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積 。
用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):
在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。
如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:
根據卷積的定義,卷積層有兩個很重要的性質:
由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。
卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。
特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。
在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。
不失一般性,假設一個卷積層的結構如下:
為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。
在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。
匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。
常用的匯聚函數有兩種:
其中 為區域 內每個神經元的激活值。
可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。
典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。
一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。
目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。
目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路 。
在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。
不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入
由 得:
同理可得,損失函數關於第 層的第 個偏置 的偏導數為:
在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。
卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為寬卷積。
LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:
不計輸入層,LeNet-5共有7層,每一層的結構為:
AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。
AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。
AlexNet的具體結構如下:
在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成 。
v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取 。
④ 如何理解人工智慧神經網路中的權值共享問題
權值(權重)共享這個詞是由LeNet5模型提出來的。以CNN為例,在對一張圖偏進行卷積的過程中,使用的是同一個卷積核的參數。比如一個3×3×1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因為圖像內位置的不同而改變卷積核內的權系數。說的再直白一些,就是用一個卷積核不改變其內權系數的情況下卷積處理整張圖片(當然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近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。
最大池化處理
在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網路的輸出層就會有四個神經元。
四分類問題
我們從卷積神經網路的輸入層、卷積層、激活層、池化層以及全連接層來講解卷積神經網路,我們可以認為全連接層之間的在做特徵提取,而全連接層在做分類,這就是卷積神經網路的核心。
⑥ 人工智慧CNN卷積神經網路如何共享權值
首先權值共享就是濾波器共享,濾波器的參數是固定的,即是用相同的濾波器去掃一遍圖像,提取一次特徵特徵,得到feature map。在卷積網路中,學好了一個濾波器,就相當於掌握了一種特徵,這個濾波器在圖像中滑動,進行特徵提取,然後所有進行這樣操作的區域都會被採集到這種特徵,就好比上面的水平線。
⑦ CNN基本運算元與操作
卷積神經網路 (Convolutional Neural Networks,CNN)是一種前饋神經網路。卷積神經網路是受生物學上感受野(Receptive Field)的機制而提出的。感受野主要是指聽覺系統、本體感覺系統和視覺系統中神經元的一些性質。比如在視覺神經系統中,一個神經元的感受野是指視網膜上的特定區域,只有這個區域內的刺激才能夠激活該神經元。
卷積神經網路有三個結構上的特性: 局部連接 , 權重共享 以及空間或時間上的 次采樣 。詳細介紹請見 卷積神經網路
1、卷積層 詳情參考 卷積層(Convolution Layer)
2、全連接層 詳情參考 全連接層 (Connected Layer) 作用:降維
3、Softmax Layer 詳情參考 Softmax Layer
4、 CNN池化
最大值池化 詳情參考 最大池化層(Maxpool Layer)
平局值池化 詳情參考 平均值池化
Golbal Average Pooling 詳情參考 Golbal Average Pooling
Spatial Pyramid Pooling 詳情參考 Spatial Pyramid Pooling
5、dropout layer:目的是為了防止CNN 過擬合,主要用於訓練過程,推理過程不需要 詳情參考 Dropout Layer
6、 激活函數 :線性激活函數與非線性激活函數
非線性激活函數,可以使神經網路隨意逼近復雜函數:Sigmoid、Tanh、ReLU
Sigmoid:詳情參考 Sigmoid
ReLU:詳情參考 ReLU
Tanh:詳情參考 Tanh
7、 loss函數
8、 梯度下降
⑧ MPNN:消息傳遞神經網路
近年來,隨著量子化學計算和分子動力學模擬等實驗的展開產生了巨大的數據量,大多數經典的機器學習技術都無法有效利用目前的數據。而原子系統的對稱性表明,能夠應用於網路圖中的神經網路也能夠應用於分子模型。所以,找到一個更加強大的模型來解決目前的化學任務可以等價於找到一個適用於網路圖的模型。
本文的目標是證明:能夠應用於化學預測任務的模型可以直接從分子圖中學習到分子的特徵,並且不受到圖同構的影響。本文提出的MPNN是一種用於圖上監督學習的框架,能夠概括之前一些文獻提出的一些方法,並且能夠按照這個框架提出一些新的架構。本文提出的新的MPNN變種基於實際的應用場景:預測有機小分子的量子力學性質。並且,作者希望以後提出的新的MPNN變種能夠從實際的應用出發,從實際應用中獲得啟發。
本文以QM9作為benchmark數據集,這個數據集由130k個分子組成,每個分子有13個性質,這些性質是通過一種計算昂貴的量子力學模擬方法(DFT)近似生成的,相當於13個回歸任務。這些任務似乎代表了許多重要的化學預測問題,並且目前對許多現有方法來說是困難的。
本文提出的模型的性能度量採用兩種形式:
①DFT近似的平均估計誤差;
②化學界已經確立的目標誤差,稱為「化學精度」。
本文介紹了能夠應用MPNN框架的8篇文獻,為了簡便起見,以處理無向圖 為例,無向圖 包含節點特徵 和邊的特徵 ,將這種形式推廣到有向重圖是不重要的。MPNN前向傳播的過程包含兩個階段,即消息傳遞階段(message passing phase)和讀出階段(readout phase)。消息傳遞階段運行 個時間步並且依賴消息函數 以及節點更新函數 。在消息傳遞階段,每個節點的隱狀態 都會根據消息 進行更新,具體過程是:
代表節點 的鄰居節點集合。讀出階段使用某種讀出函數 來為整個圖計算一個特徵向量:
都是用來學習的可微函數。 作用於節點狀態集合,並且必須對節點狀態的排列保持不變,以使MPNN對圖同構保持不變。注意MPNN也可以學習邊的特徵,這可以通過為每條邊引入隱狀態 並應用前面的兩個過程來實現。接下來,我們通過指定所使用的消息函數 、頂點更新函數 和讀出函數 來定義以前文獻中的模型。
本文提出的模型採用的消息函數是:
代表拼接。節點更新函數是:
是節點 的度, 對應於時間步 以及節點度 的學習矩陣。讀出函數將之前所有隱狀態 進行連接:
是一個神經網路, 是時間步 的一個學習矩陣。
這樣的消息傳遞的方法可能有問題,因為最終得到的消息向量為 ,這是邊和節點狀態向量的加和,缺乏邊和節點狀態向量的交互。
消息函數為:
是特定於邊的標簽的學習矩陣(這個模型假設邊有離散的標簽)。更新函數如下:
GRU就是門控循環單元,一種循環神經網路,對於每個時間步進行權重共享,也就是說每個時間步共用同一個更新函數。最後,讀出函數:
代表神經網路, 代表哈達瑪積。
這個模型考慮了兩種情況,一種是每個節點都有自己的目標,另一種是有一個graph level的目標。它還考慮了在每個時間步驟中存在node level影響的情況,在這種情況下,更新函數將 連接作為輸入,其中 是一個外部向量,表示頂點 受到的外部影響。消息函數 是一個神經網路,使用拼接向量 作為輸入,節點更新函數 也是一個神經網路,使用 作為輸入。最終讀出函數得到一個graph level的輸出: ,這里 是一個神經網路。注意,這個模型只定義了 的情況。
這個模型與之前的MPNNs稍微有一些不同,是因為它引入了邊的表示 ,並且會在消息傳遞階段進行更新。消息函數為:
節點更新函數為:
同樣的 代表拼接, 代表ReLU激活函數, 是學習權重矩陣。邊狀態更新的方式是:
都是學習矩陣。
消息函數為:
是矩陣, 是偏置向量。更新函數為:
讀出函數使用單個隱層神經網路獨立地通過每個節點,並對輸出進行求和:
8篇文獻中有3篇屬於這一類。其中兩篇採用消息函數:
矩陣 通過拉普拉斯矩陣的特徵向量和模型的學習參數來參數化。更新函數為:
代表非線性函數,比如ReLU激活函數。
另一篇文獻採用消息函數:
這里 。節點更新函數為:
本文以前述GG-NN作為baseline進行改進,提出一種新的MPNN變種。下文中以 代表節點特徵的維度,以 代表圖的節點的數量。這一變種適用於有向圖,這意味著入邊和出邊有分別的信息通道,那麼信息 由 和 拼接而成,當我們將模型應用無向圖時,就把無向圖的邊看做兩條邊,包含一條入邊,一條出邊,有相同的標簽,這樣處理的方式意味著信息通道的大小是 而不是 。
模型的輸入是每個節點的特徵向量 以及鄰接矩陣 ,鄰接矩陣 具有向量分量,表示分子中的不同化學鍵以及兩個原子之間的成對空間距離。初始狀態 是原子輸入特徵集合 ,並且需要padding到維度 。在實驗中的每個時間步 都要進行權重共享,並且更新函數採用GRU。
GG-NN原本採用的消息函數,採用矩陣相乘的方式(注意原來的GG-NN的邊有離散的標簽,而現在我們假設的邊有一個特徵向量 ):
是特定於邊的標簽的學習矩陣。為了兼容邊特徵,本文提出了新的消息函數:
是一個神經網路,將邊的特徵向量 映射到一個 的矩陣。上述兩種消息函數的特點是消息只依賴於 和 而不依賴於 ,如果消息同時依賴目標節點與源節點,那麼應該是更加高效的,可以嘗試以下這種消息函數:
這里 是一個神經網路。
對於有向圖,一共有兩個消息函數 和 ,對於邊 應用哪個消息函數取決於邊的方向。
本文探索了兩種方式來改變模型中信息的傳遞。第一種是為未連接的節點對添加一個單獨的「虛擬」邊類型。這一處理可以在預處理時實現,效果是可以使得在傳播過程中讓信息傳播更遠的距離。
另一種方式是添加一個「master」節點,讓它通過一種特殊類型的邊與所有節點連接。「master」節點充當全局暫存空間,每個節點在消息傳遞的每個步驟中都對其進行讀寫操作。另外「master」節點擁有單獨的節點維度 ,以及內部更新函數(實驗中是GRU)的單獨權重。這同樣可以使得在傳播過程中讓信息傳播更遠的距離。這樣可以允許模型有更大的容量,同時也不會過多的損失效率,其復雜度為 。
讀出函數採用set2set模型,這個模型使用 作為輸入,然後再經過 步計算後生成一個graph level的embedding ,其中過程與 內節點順序無關,最終將 輸入到一個神經網路中來獲得最終輸出。具體參考文獻: Sequence to sequence for sets。
由於消息傳遞階段的復雜度為 ,當 和 增大時,計算上就會是昂貴的。處理的方法是將 拆分成 個不同的 維的embedding ,並且在每個 上獨立運行傳播過程得到 ,然後進行混合:
代表神經網路, 代表拼接, 在所有節點上共享。這樣的混合過程保持了節點排列的不變性,同時允許圖的不同副本在傳播階段相互通信。這樣的設計提升了計算效率,比如在使用矩陣相乘的消息函數時一個副本的復雜度為 ,當有 個副本時一共為 。
一個分子有很多特徵,如下圖所示:
邊的特徵包括化學鍵與距離,因此有以下三種表示方式:
①化學圖(Chemical Graph):在不考慮距離的情況下,鄰接矩陣的值是離散的鍵類型:單鍵,雙鍵,三鍵或芳香鍵;
②距離分桶(Distance bins):GG-NN基於矩陣乘法的消息函數的前提假設是「邊信息是離散的」,因此作者將鍵的距離分為 10 個 bin,比如說 中均勻劃分 8 個 bin, 為 1 個 bin, 為 1 個 bin;
③原始距離特徵(Raw distance feature):也可以同時考慮距離和化學鍵的特徵,這時每條邊都有自己的特徵向量,此時鄰接矩陣的每個實例都是一個 5 維向量,第一維是距離,其餘4維是一個獨熱向量,代表4種不同的化學鍵。
實驗中對比了本文提出的方法與現有的方法:
以下為不考慮空間信息的結果:
以下為一些消融實驗:
具體實驗設置參照原文。
⑨ ENAS:首個權值共享的神經網路搜索方法,千倍加速 | ICML 2018
論文: Efficient Neural Architecture Search via Parameter Sharing
神經網路結構搜索(NAS)目前在圖像分類的模型結構設計上有很大的成果,但十分耗時,主要花在搜索到的網路(child model)的訓練。論文的主要工作是提出 Efficient Neural Architecture Search (ENAS),強制所有的child model進行權重共享,避免從零開始訓練,從而達到提高效率的目的。雖然不同的模型使用不同的權重,但從遷移學習和多任務學習的研究結果來看,將當前任務的模型A學習到的參數應用於別的任務的模型B是可行的。從實驗看來,不僅共享參數是可行的,而且能帶來很強的表現,實驗僅用單張1080Ti,相對與NAS有1000x倍加速
NAS的搜索結果可以看作是大圖中的子圖,可以用單向無環圖(DAG)來表示搜索空間,每個搜索的結構可以認為是圖2的DAG一個子網。ENAS定義的DAG為所有子網的疊加,其中每個節點的每種計算類型都有自己的參數,當特定的計算方法激活時,參數才使用。因此,ENAS的設計允許子網進行參數共享,下面會介紹具體細節
為了設計循環單元(recurrent cell),採用 節點的DAG,節點代表計算類型,邊代表信息流向,ENAS的controller也是RNN,主要定義:1) 激活的邊 2) 每個節點的計算類型。在NAS(Zoph 2017),循環單元的搜索空間在預先定義結構的拓撲結構(二叉樹)上,僅學習每個節點的計算類型,而NAS則同時學習拓撲結構和計算類型,更靈活
為了創建循環單元,the controller RNN首先採樣 個block的結果,取 , 為當前單元輸入信息(例如word embedding), 為前一個time step的隱藏層輸出,具體步驟如下:
注意到每對節點( )都有獨立的參數 ,根據選擇的索引決定使用哪個參數,因此,ENAS的所有循環單元能同一個共享參數集合。論文的搜索空間包含指數數量的配置,假設有N個節點和4種激活函數,則共有 種配置
ENAS的controller為100個隱藏單元的LSTM,通過softmax分類器以自回歸(autoregressive fashion)的方式進行選擇的決定,上一個step的輸出作為下一個step的輸入embedding,controller的第一個step則接受空embedding輸入。學習的參數主要有controller LSTM的參數 和子網的共享權重 ,ENAS的訓練分兩個交叉的階段,第一階段在完整的訓練集上進行共享權重 學習,第二階段訓練controller LSTM的參數
固定controller的策略 ,然後進行 進行隨機梯度下降(SGD)來最小化交叉熵損失函數的期望 , 為模型 在mini-batch上的交叉熵損失,模型 從 采樣而來
梯度的計算如公式1, 上從 采樣來的,集合所有模型的梯度進行更新。公式1是梯度的無偏估計,但有一個很高的方差(跟NAS一樣,采樣的模型性能差異),而論文發現,當 時,訓練的效果還行
固定 然後更新策略參數 ,目標是最大化期望獎勵 ,使用Adam優化器,梯度計算使用Williams的REINFORCE方法,加上指數滑動平均來降低方差, 的計算在獨立的驗證集上進行,整體基本跟Zoph的NAS一樣
訓練好的ENAS進行新模型構造,首先從訓練的策略 采樣幾個新的結構,對於每個采樣的模型,計算其在驗證集的minibatch上的准確率,取准確率最高的模型進行從零開始的重新訓練,可以對所有采樣的網路進行從零訓練,但是論文的方法准確率差不多,經濟效益更大
對於創建卷積網路,the controller每個decision block進行兩個決定,這些決定構成卷積網路的一層:
做 次選擇產生 層的網路,共 種網路,在實驗中,L取12
NASNet提出設計小的模塊,然後堆疊成完整的網路,主要設計convolutional cell和rection cell
使用ENAS生成convolutional cell,構建B節點的DAG來代表單元內的計算,其中node 1和node 2代表單元輸入,為完整網路中前兩個單元的輸出,剩餘的 個節點,預測兩個選擇:1) 選擇兩個之前的節點作為當前節點輸入 2) 選擇用於兩個輸入的計算類型,共5種運算元:identity, separable convolution with kernel size 3 × 3 and 5 × 5, and average pooling and max pooling with kernel size 3×3,然後將運算元結果相加。對於 ,搜索過程如下:
對於rection cell,可以同樣地使用上面的搜索空間生成: 1) 如圖5采樣一個計算圖 2) 將所有計算的stride改為2。這樣rection cell就能將輸入縮小為1/2,controller共預測 blocks
最後計算下搜索空間的復雜度,對於node i ,troller選擇前 個節點中的兩個,然後選擇五種運算元的兩種,共 種坑的單元。因為兩種單元是獨立的,所以搜索空間的大小最終為 ,對於 ,大約 種網路
節點的計算做了一點修改,增加highway connections,例如 修改為 ,其中 , 為elementwise乘法。搜索到的結果如圖6所示,有意思的是:1) 激活方法全部為tanh或ReLU 2) 結構可能為局部最優,隨機替換節點的激活函數都會造成大幅的性能下降 3) 搜索的輸出是6個node的平均,與mixture of contexts(MoC)類似
單1080Ti訓練了10小時,Penn Treebank上的結果如表1所示,PPL越低則性能越好,可以看到ENAS不準復雜度低,參數量也很少
表2的第一塊為最好的分類網路DenseNet的結構,第二塊為ENAS設計整個卷積網路的結果(感覺這里不應有micro search space),第三塊為設計單元的結果
全網路搜索的最優結構如圖7所示,達到4.23%錯誤率,比NAS的效果要好,大概單卡搜索7小時,相對NAS有50000x倍加速
單元搜索的結構如圖8所示,單卡搜索11.5小時, ,錯誤率為3.54%,加上CutOut增強後比NASNet要好。論文發現ENAS搜索的結構都是局部最優的,修改都會帶來性能的降低,而ENAS不採樣多個網路進行訓練,這個給NAS帶來很大性能的提升
NAS是自動設計網路結構的重要方法,但需要耗費巨大的資源,導致不能廣泛地應用,而論文提出的 Efficient Neural Architecture Search (ENAS),在搜索時對子網的參數進行共享,相對於NAS有超過1000x倍加速,單卡搜索不到半天,而且性能並沒有降低,十分值得參考
⑩ 卷積神經網路
一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣
濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了
局部連接 乘以 濾波器 得特徵映射
互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。
Tips:P是代表特徵映射