深度學習模型——CNN | 卷積神經(jīng)網(wǎng)絡(luò)
CNN,即一種專門用于處理具有類似網(wǎng)格結(jié)構(gòu)數(shù)據(jù)的深度學習模型。怎么理解CNN的全流程?這篇文章里,作者對CNN的模型結(jié)構(gòu)和每一層的具體步驟等內(nèi)容做了詳細解讀,一起來看。
一、定義
Convolutional Neural Networks /?k?nv??lu???n(?)l/ /?nj??r?l/
是一種專門用于處理具有類似網(wǎng)格結(jié)構(gòu)數(shù)據(jù)的深度學習模型 。
二、CNN模型結(jié)構(gòu)
接下來我們通過一個情境來理解CNN的全流程:
假設(shè)我們現(xiàn)在有一款智能鑒定APP,主要進行藝術(shù)品鑒定。我們要通過APP判斷其中一張圖片是不是古董,現(xiàn)在我們來了解下APP是怎么工作的吧。
輸入層:
用戶上傳了一張古董瓷瓶照片,這張照片就是進入CNN系統(tǒng)的”原材料”,輸入層的作用就是接收這張圖片數(shù)據(jù),并將其轉(zhuǎn)換為CNN神經(jīng)網(wǎng)絡(luò)可以理解的數(shù)字形式(通常是一個三維數(shù)組,即寬度、高度、顏色通道數(shù))。
卷積層:
鑒定師們開始工作了,他們每人手持一把放大鏡(卷積核),在瓷瓶照片上移動并聚焦(卷積運算),這些放大鏡專門用來搜尋特定的紋飾、釉色或工藝特征(特征提取),每位鑒定師記錄下各自發(fā)現(xiàn)的特征(注:在這里一位鑒定師只會去找一個特征),并且每人會生成一份詳細的特征報告(卷積后特征圖)。
激活函數(shù):
每份特征報告完成后,都交由魔法學徒(激活函數(shù))進行神秘加工。他們使用魔法藥水(ReLU、Sigmoid等),對報告內(nèi)容進行強化(正值保持或增大)或弱化(負值轉(zhuǎn)為0或壓縮到一定范圍內(nèi)),確保突出關(guān)鍵特征,隱藏無關(guān)或干擾信息。
池化層:
接下來,公司經(jīng)理(池化層)審查這些經(jīng)過魔法加工的特征報告。他們不需要關(guān)注每個細節(jié),而是提取每個報告的核心摘要(如最大特征或平均特征值),這樣既能減少冗余信息,又能確保關(guān)鍵特征得以保留,便于后續(xù)的全局分析。
全連接層:
到了決策階段,所有精煉的特征摘要被送到公司高層(全連接層),高層領(lǐng)導們圍坐一桌,每人面前都有一份長長的清單,上面列著所有可能影響鑒定結(jié)果的因素及其權(quán)重(神經(jīng)元及其連接權(quán)重)。他們根據(jù)清單討論、打分(加權(quán)求和),共同得出初步的鑒定結(jié)論(分類概率或回歸值)。
比喻解釋:
全連接層就像公司的高層領(lǐng)導團隊,他們依據(jù)精煉的特征摘要,參考各自的判斷清單,集體討論并給出初步的鑒定意見。
激活函數(shù)(再次):
初步鑒定結(jié)論出爐后,還需要最后一道魔法加持(激活函數(shù))。這次魔法學徒用另一種魔法藥水(如Softmax或Sigmoid等),確保鑒定結(jié)論符合預期格式(如概率分布),并具有良好的區(qū)分度。
比喻解釋:
再次使用的激活函數(shù)如同魔法學徒為鑒定結(jié)論施加的最后的魔法,確保結(jié)論既符合規(guī)范(概率分布),又具有明確的傾向性(區(qū)分度),便于用戶理解。
輸出層:
經(jīng)過多重鑒定與魔法加工,最終的鑒定結(jié)果出爐。APP將結(jié)果顯示給用戶,告訴他們這張瓷瓶照片是真品的概率為90%,贗品的概率為10%,用戶據(jù)此做出是否購買的決定
這個過程形象地展示了CNN如何通過層層處理,將原始圖像轉(zhuǎn)化為可供決策的分類或回歸結(jié)果。
其中上面括號加粗內(nèi)容,大家可以先有個印象,下文會對部分內(nèi)容做出講解。
其中我們發(fā)現(xiàn)激活函數(shù)會出現(xiàn)在多個位置,那到底正常應該放置在什么位置?怎么選擇呢?
激活函數(shù)嚴格來說可以放在任何地方,但我們一般是將其放到卷積層和全連接層后,因為放到其它層一般意義不到;
如果放到池化層之后可以嗎?為什么不建議?
可以放到池化層之后,不建議是因為根據(jù)上圖結(jié)構(gòu)我們看到池化層本身的功能就是降維和特征提取了,所以再增加非線性變換已經(jīng)意義不大了。
暫時來說激活函數(shù)放置位置選擇沒有什么技巧,主要參考大神們發(fā)表的一些論文,跟著論文上做選擇即可。
三、每一層具體步驟
1. 卷積層
1)準備輸入數(shù)據(jù):一張彩色圖片
最終將彩色圖片轉(zhuǎn)換為CNN可以理解的數(shù)字形式,一般是三維數(shù)組(維度:長、寬、顏色)。
下圖是一個三維數(shù)組展開的平面圖, 5*5*3:5*5代表長寬;3代表R、G、B三個通道。
2)定義卷積核(濾波器)
設(shè)置濾波器大?。杭礊V波器的長寬,常見的大小有3*3、5*5。
設(shè)置步長:即濾波器在輸入數(shù)據(jù)上滑動的間隔。
設(shè)置填充(Padding):即在輸入數(shù)據(jù)的邊界添加額外的零值像素的過程;目的:解決邊界卷積造成的圖像信息丟失情況。
設(shè)置選擇卷積類型:類型包括標準卷積、轉(zhuǎn)置卷積(用于上采樣)、空洞卷積(用于擴大感受野)。
選擇初始化方法:目的設(shè)置權(quán)重和偏置項 ;包括零初始化、隨機初始化、Xavler初始化和He初始化。
考慮使用的卷積函數(shù):一般用在卷積操作之后。
3)卷積操作
詳細解釋一下通過濾波器W0,和偏置項h0, 怎么卷積出最終結(jié)果1的。
R(0*1+0*1+0*-1)+ (0*-1+0*0+1*1)+ (0*-1+0*-1+1*0) = 1
G(0*-1+0*0+0*-1)+ (0*0+1*0+1*-1)+ (0*1+0*-1+2*0) = -1
B (0*0+0*1+0*0)+ (0*1+2*0+0*1)+ (0*0+0*-1+0*1) = 0
最終結(jié)果R(紅色通道)+G(綠色通道)+B(藍色通道)+b0(偏置項) 即 1 + (-1) + 0 + 1 = 1
4)滑動卷積核(濾波器)
根據(jù)步長為2,滑動卷積核,計算出其它值,計算方式同步驟3。
5)生成卷積特征圖
生成特征圖:通常指的是卷積操作完成后得到的最終結(jié)果矩陣。
6)應用激活函數(shù)
目的:在神經(jīng)網(wǎng)絡(luò)的層與層之間引入非線性,以便網(wǎng)絡(luò)能夠?qū)W習和表示復雜的函數(shù)。
常見的激活函數(shù):ReLU、Sigmold、Tanh。
使用激活函數(shù),對每個神經(jīng)元(即每個輸入矩陣中的值)應用非線性變換。
激活函數(shù)一般的位置:卷積層后、全連接層后。
2. 池化層
1)定義池化窗口
池化窗口 也稱池化核,是一個小的矩形區(qū)域,用于從輸入特征圖中提取信息,一般是2*2 或 3*3。
2)選擇池化操作
可選的池化操作有:最大池化和平均池化。
3)應用池化操作
輸入特征圖:指的是上一層卷積層生成的卷積特征圖。
4)滑動池化窗口
池化窗口按照指定的步長在輸入特征圖上移動。
5)生成池化特征圖
下圖中給出了2種池化方法后的示意圖;圖b為最大池化,圖c為平均池化。
6)將池化特征圖傳入下一層
下一層可能是卷積層,也可能是全連接層;可以看最開始 原理結(jié)構(gòu)圖。
下一層的輸入矩陣:是池化后的特征圖。
如果下一層是卷積層,它與第一次卷積的區(qū)別是什么?
- 輸入數(shù)據(jù)不一致:第二次輸入矩陣是第一次池化后的特征圖矩陣。
- 卷積核不一致:主要是指卷積核權(quán)重不一致。
然后在依次按照卷積層、池化層的步驟進行卷積/池化操作。
2. 全連接層 | FC
1)接收特征圖
輸入矩陣:是所有池化后/或經(jīng)過激活函數(shù)處理后的特征圖,是一個多維向量。
維度有:
- batch_size:批次大小
- heigh:特征圖的高度
- width:特征圖的寬度
- channels:特征通道數(shù)量
2)展平特征圖
目的:將多維特征圖展平為一維特征圖。
實現(xiàn)方式:將特征圖中的每個通道”展開成一個長向量”,并將所有通道的向量連接在一起形成一個大的一維向量。
展平后的向量長度是 batch_size * height * width * channels
3)權(quán)重分配
全連接層中的每一個神經(jīng)元(即一維向量中的每一個值),都與輸入矩陣中的每個元素相連,并且每個連接都有一個對應的權(quán)重,這些權(quán)重構(gòu)成了權(quán)重矩陣,反應了神經(jīng)元對輸入特征的重視程度。此外,每個神經(jīng)元還有一個偏置項(Bias),用于調(diào)整器整體響應水平。
4)線性變換
對輸入向量進行線性變換。
公式如下:
W:權(quán)重矩陣;x:輸入向量;b:偏置向量
通過這個公式,我們對輸入向量做線性變換,得到每個神經(jīng)元的凈輸入(即得到全連接層的最終輸出結(jié)果)。
5)激活函數(shù)應用(再次)
通過在次使用激活函數(shù),進行最終的處理,可能結(jié)果保持不變(如ReLU的正區(qū)間),或?qū)⒔Y(jié)果壓縮到某個范圍內(nèi)(如Sigmoid、Tanh),確保輸出符合規(guī)范,又具有明確的傾向性。
6)輸出結(jié)果
是對輸入數(shù)據(jù)的最終響應。在回歸任務(wù)中,輸出是一個連續(xù)值,表示預測的目標值。
四、相關(guān)概念
持續(xù)補充中……………
Padding
根據(jù)上面卷積過程,我們發(fā)現(xiàn),卷積操作時會遇到在圖像邊界卷積造成圖像信息丟失的問題,Padding操作的目的是為了解決此問題而提出的。
圖像信息丟失? 比如我們在卷積計算時會 對應像素值*權(quán)重 ,此時如果權(quán)重為0就會造成實際像素值信息丟失情況。
實現(xiàn)Padding方法:
Same Padding:根據(jù)卷積核的大小,對輸入圖像矩陣進行邊界補充(一般填充零值),使得卷積后得到的特征矩陣與輸入矩陣大小一致。
Valid Padding:不需要進行padding操作。
自定義padding:使用公式計算得出,如下。
其中inputh 指 輸入矩陣長度;kernelh 指卷積核長度;stride:卷積操作步長;outputh : 指卷積后矩陣的長度。
五、其它
1. 使用場景
圖像識別(人臉識別、物體識別)、計算機視覺(包括自動駕駛、醫(yī)療影像分析)、自然語言處理(用于文本分類、情感分析等)、視頻分析(如行為識別、視頻內(nèi)容理解等)、圖像生成(如風格遷移、圖像超分辨率等)。
一般主要用于圖像處理?
通過以下三點可以確認更適合用于圖片處理:
- 局部特征提取,降低了識別難度。
- 可應用于不同的圖像識別任務(wù),權(quán)重公用;比如 經(jīng)過訓練已經(jīng)可識別出小狗,那這些神經(jīng)元也可以應用于識別其它任何圖像中的相似物體。
- 雖特征維度降低,但是保留了主要特征,這樣做不僅不影響圖像識別,反而減少了其它像素影響和處理的數(shù)據(jù)量。
2. 優(yōu)點
- 特征提取能力強。
- 有效降維(將大數(shù)據(jù)量的圖像降維成小數(shù)據(jù)量,同時保留關(guān)鍵特征)。
- 減少參數(shù)數(shù)量(通過共享權(quán)重,減少了模型的參數(shù)數(shù)量,提供了訓練效率)。
3. 缺點
- 只能識別獨立事件。
- 過擬合分險(如果沒有足夠的數(shù)據(jù)或者正則化措施,CNN可能會過擬合訓練數(shù)據(jù))。
- 解釋性差。
- 計算量大,尤其在高分辨率圖像上。
- 參數(shù)多(盡管通過共享權(quán)重減少了參數(shù)量,但是CNN仍需要大量的參數(shù)來學習復雜的特征)。
本文由 @Luna 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
- 目前還沒評論,等你發(fā)揮!