前言
image
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個分支,是基于數(shù)據(jù)來學(xué)習(xí)表示數(shù)據(jù)的一組算法。下面我們列出最受歡迎的一些深度學(xué)習(xí)算法佛致。
卷積神經(jīng)網(wǎng)絡(luò)
深度信念網(wǎng)絡(luò)
自動編碼器
遞歸神經(jīng)網(wǎng)絡(luò)(RNN / LSTM / GRU)
對抗生成網(wǎng)絡(luò)(GAN)
深度學(xué)習(xí)的目的之一是他們將取代手工制作的特征提取。這個想法是,他們將從給定的數(shù)據(jù)中“學(xué)習(xí)”到所需的最佳特征畏浆。
image
層與層
深度學(xué)習(xí)模型由多層構(gòu)成,在人工神經(jīng)網(wǎng)絡(luò)的情況下狞贱,具有2個以上隱藏層的多層感知器(MLP)已經(jīng)是深度模型刻获。
作為一個經(jīng)驗法則,深層模型有可能比淺層模型表現(xiàn)更好瞎嬉。但是蝎毡,越深的神經(jīng)網(wǎng)絡(luò)你需要越多的數(shù)據(jù)來避免過擬合。
image
層類型
這里列出一些最常用的圖層:
卷積層
最大/平均池化層
Dropout層
批量標(biāo)準(zhǔn)化層
全連接層
Relu氧枣,Tanh沐兵,Sigmoid層(非線性層)
Softmax,交叉熵便监,SVM痒筒,歐幾里得(損失層)
避免過擬合(正則化)
除了獲得更多的數(shù)據(jù)之外,還有一些技巧用于解決過度擬合問題茬贵,這里列出了一些最常見的技術(shù):
Dropout
L2正則化
數(shù)據(jù)增強
Dropout
這是一種在訓(xùn)練期間隨機(jī)關(guān)閉全連接層中一些神經(jīng)元的技術(shù)簿透。
image
Dropout迫使全連接層以不同的方式學(xué)習(xí)相同的概念。
L2正則化
最常見的正則化形式是L2正則化解藻,L2正則化是給損失函數(shù)添加一個額外的懲罰項老充,這個懲罰項也就是我們正在優(yōu)化的所有權(quán)重/參數(shù)的平方值。對于神經(jīng)網(wǎng)絡(luò)的每一個參數(shù)ω,我們加入一項0.5λω2到損失函數(shù)中去螟左,λ表示正則化強度的參數(shù)啡浊,當(dāng)我們反向傳播計算導(dǎo)數(shù)時觅够,我們只是用了0.5λ作為正則化的強度。由于使用這種正規(guī)化巷嚣,非常高價值的權(quán)重受到嚴(yán)重懲罰喘先。所以我們更傾向于使用一層的所有權(quán)重作為輸入,而不是少數(shù)一些權(quán)重帶替代廷粒。這種方法的效果比較好窘拯,因為我們的模型權(quán)重將被最大限度地利用,并且我們有更少未使用的權(quán)重坝茎。
除了L2正則化之外涤姊,還有L1正則化和Max Norm,但這里沒有討論嗤放,因為L2一般表現(xiàn)更好思喊。
數(shù)據(jù)增強
通過對輸入數(shù)據(jù)進(jìn)行一些轉(zhuǎn)換,可以合成新的訓(xùn)練樣例次酌。例如恨课,進(jìn)行圖像翻轉(zhuǎn)或隨機(jī)移動RGB值。在2012年Imagenet競賽期間岳服,Alex Krizhevesky(Alexnet)使用了2048倍的因子進(jìn)行數(shù)據(jù)增強庄呈,這意味著用于訓(xùn)練其模型的數(shù)據(jù)集實際上比開始時大2048倍,并且在不使用數(shù)據(jù)增強的情況下改進(jìn)了泛化派阱。
image
image
分層的特征表示
它是讓學(xué)習(xí)算法找到從輸入到更深層的最佳表示。
淺層學(xué)會用簡單的形式表示數(shù)據(jù)斜纪,深層用前面學(xué)到的特征來學(xué)習(xí)更高緯度的特征來表示數(shù)據(jù)贫母。
image
image
卷? 積
卷積是一種數(shù)學(xué)運算,它對兩個函數(shù)(信號)乘積進(jìn)行積分盒刚,其中一個信號是被翻轉(zhuǎn)腺劣。例如下面我們對2個信號f(t)和g(t)進(jìn)行卷積。
image
首先要做的是水平翻轉(zhuǎn)(180度)信號g因块,然后將翻轉(zhuǎn)后的g滑過f橘原,對應(yīng)相乘并累加所有的值。
conv(a涡上,b)== conv(b趾断,a)的結(jié)果是一樣的,
在這種情況下吩愧,規(guī)定藍(lán)色信號 F(τ)F(τ) 是我們的輸入信號和 G(t )G(?) 作為我們的卷積核芋酌,當(dāng)使用卷積來過濾信號時使用術(shù)語卷積核。
輸出一維信號
在一維卷積的情況下雁佳,輸出尺寸計算如下:
outputSize=(InputSize?KernelSize)+1
卷積的應(yīng)用
人們在以下用例中對信號處理使用卷積:
濾波器信號(1D音頻脐帝,2D圖像處理)
檢查一個信號與另一個信號的相關(guān)程度
在信號中查找模式
在matlab和python(numpy)中的簡單例子
下面我們將兩個信號x =(0,1,2,3,4)與w =(1同云,-1,2)進(jìn)行卷積。
image
image
手工操作
為了更好地理解卷積的概念堵腹,我們手工完成上面的例子炸站。我們要卷積2個信號(x,w)疚顷。首先是水平翻轉(zhuǎn)W(或向左旋轉(zhuǎn)180度)
image
之后旱易,我們將翻轉(zhuǎn)的W滑過輸入X.
image
注意到在步驟3,4,5中,翻轉(zhuǎn)后的窗口完全位于輸入信號的內(nèi)部荡含。稱為“有效”卷積咒唆。在翻轉(zhuǎn)窗口不完全位于輸入窗口(X)內(nèi)部的情況下,我們可以將其視為零释液,只計算位于窗口內(nèi)的數(shù)據(jù)全释,例如在步驟1中,我們將1乘以零误债,其余部分將被忽略浸船。
對輸入進(jìn)行填充
為了保持卷積結(jié)果大小與輸入大小相同,并避免稱為循環(huán)卷積的效應(yīng)寝蹈,我們用零填充信號李命。
你把零放在哪個位置取決于你想要做什么,例如:在1D的情況下箫老,你可以在每一端連接它們封字,但在2D上它通常放置在原始信號周圍。
image
image
在matlab上耍鬓,你可以使用命令'padarray'來填充輸入信號:
x
x(:,:,1) =
1? ? 1? ? 0? ? 2? ? 0
2? ? 2? ? 2? ? 2? ? 1
0? ? 0? ? 0? ? 2? ? 1
2? ? 2? ? 2? ? 2? ? 1
2? ? 0? ? 2? ? 2? ? 1
x(:,:,2) =
2? ? 1? ? 0? ? 0? ? 0
0? ? 2? ? 0? ? 1? ? 0
1? ? 0? ? 1? ? 2? ? 0
1? ? 2? ? 0? ? 2? ? 1
1? ? 2? ? 1? ? 2? ? 2
x(:,:,3) =
2? ? 1? ? 1? ? 2? ? 2
1? ? 1? ? 1? ? 0? ? 0
2? ? 0? ? 1? ? 0? ? 2
0? ? 2? ? 0? ? 2? ? 1
0? ? 0? ? 2? ? 1? ? 0
padarray(x,[1 1])
ans(:,:,1) =
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
0? ? 1? ? 1? ? 0? ? 2? ? 0? ? 0
0? ? 2? ? 2? ? 2? ? 2? ? 1? ? 0
0? ? 0? ? 0? ? 0? ? 2? ? 1? ? 0
0? ? 2? ? 2? ? 2? ? 2? ? 1? ? 0
0? ? 2? ? 0? ? 2? ? 2? ? 1? ? 0
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
ans(:,:,2) =
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
0? ? 2? ? 1? ? 0? ? 0? ? 0? ? 0
0? ? 0? ? 2? ? 0? ? 1? ? 0? ? 0
0? ? 1? ? 0? ? 1? ? 2? ? 0? ? 0
0? ? 1? ? 2? ? 0? ? 2? ? 1? ? 0
0? ? 1? ? 2? ? 1? ? 2? ? 2? ? 0
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
ans(:,:,3) =
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
0? ? 2? ? 1? ? 1? ? 2? ? 2? ? 0
0? ? 1? ? 1? ? 1? ? 0? ? 0? ? 0
0? ? 2? ? 0? ? 1? ? 0? ? 2? ? 0
0? ? 0? ? 2? ? 0? ? 2? ? 1? ? 0
0? ? 0? ? 0? ? 2? ? 1? ? 0? ? 0
0? ? 0? ? 0? ? 0? ? 0? ? 0? ? 0
將卷積轉(zhuǎn)化為計算圖
將操作轉(zhuǎn)化為計算圖阔籽,更容易計算每個節(jié)點參數(shù)的偏導(dǎo)數(shù),這里我們演示將之前的一維卷積轉(zhuǎn)化為計算圖牲蜀,這也可以擴(kuò)展到二維卷積笆制。
image
計算圖的創(chuàng)建是在翻轉(zhuǎn)的內(nèi)核完全插入被卷積的數(shù)據(jù)之前的。
image
之后我們將使用這個圖來推斷卷積層的輸入(x)和權(quán)重(w)的梯度涣达。
2D卷積
現(xiàn)在我們延伸到第二個維度在辆。2D卷積被用作圖像濾波器。下面是一個2D圖像卷積的例子:
image
Matlab與Python示例
image
手工操作
首先度苔,我們應(yīng)該翻轉(zhuǎn)內(nèi)核匆篓,然后在輸入信號上滑動內(nèi)核。
image
image
步? 長
默認(rèn)情況下寇窑,當(dāng)我們進(jìn)行卷積運算時奕删,我們的窗口每次移動一個像素(步幅= 1),但是在卷積神經(jīng)網(wǎng)絡(luò)中我們需要移動多個像素疗认。例如完残,在使用大小為2的內(nèi)核進(jìn)行卷積時伏钠,我們將使用2的步幅。將步幅和內(nèi)核大小都設(shè)置為2將導(dǎo)致輸出沿著兩個維度恰好為輸入大小的一半谨设。
觀察紅色內(nèi)核窗口下方的移動遠(yuǎn)遠(yuǎn)多于一個像素熟掂。
image
2D的輸出尺寸
下面提供了一個公式計算我們卷積之后的輸出尺寸 。
如果我們考慮將由P填充的空間大小[H扎拣,W]的輸入與大小為F的方形核并使用步長S進(jìn)行卷積赴肚,那么卷積的輸出大小被定義為:
image
F是內(nèi)核的大小,通常我們使用方形內(nèi)核二蓝,所以F既是內(nèi)核的寬度又是高度誉券。
實現(xiàn)卷積運算
下面的示例將對一個5x5x3的輸入進(jìn)行卷積,其中具有以下參數(shù)Stride=2,Pad=1刊愚,F(xiàn)=3(3x3內(nèi)核)和K=2(兩個濾波器)的conv層踊跟。
我們的輸入有3個通道,所以需要3x3x3的內(nèi)核權(quán)重鸥诽。有2個過濾器(K = 2)商玫,所以最后會有2個輸出。計算這兩個輸出的大小為:(5 - 3 + 2)/ 2 + 1 = 3牡借。得到最終的尺寸(3x3x2)拳昌。
image
仔細(xì)看看這個例子,我們需要計算2個卷積钠龙,不要忘了給每個3x3x3濾波器(w0炬藤,w1)添加偏差。
image
參考文獻(xiàn)
https://en.wikipedia.org/wiki/Convolution
http://www.dspguide.com/ch6/2.htm
作者:機(jī)器學(xué)習(xí)算法工程師
鏈接:http://www.reibang.com/p/5d50b5e80f3f
來源:簡書
簡書著作權(quán)歸作者所有碴里,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處沈矿。