網上看了一大圈,都是在說已經學習到特徵的卷積核是如何提取輸入圖像的特徵的,但是沒有一個解釋卷積核是怎麼學習到特徵的。。。

因為一開始的時候卷積核是隨機初始化的,它不會對圖像中特定的紋理和形狀的刺激產生響應,通過梯度反向傳播才慢慢學習到的特徵,那麼這一過程是如何『保證』卷積核可以學習到特徵的呢?

要知道每一個卷積核都是要在整個圖像上進行滑動的,而一張圖像上的紋理特徵是多種多樣的,也就是卷積核訓練一開始的輸入就是在不斷變化的,損失函數是如何把約束傳播到這裡的呢?


首先我們簡化這個問題,我們定義很簡單問題:

使用一層卷積層做對一個二值化圖像做邊緣識別,首先輸出結果就是二值化結果,1代表是邊緣區域,0不是邊緣區域,定義我們使用一個3x3的卷積核去掃描得到輸出值;

此時,當我們使用卷積核去掃描整個圖像時,卷積核可以在圖片每個點的3x3的區域里尋找到底有什麼共同點,為什麼輸出結果定義為是邊緣,卷積核會不斷嘗試,尋找在圖像每個像素的3x3的區域內像素點的相似特徵,最後我們可以知道,如果說這個3x3區域內,當中心點位置為1,周圍八個點有為0的點,那此像素點就是邊緣區域;

損失函數的約束作用是什麼呢?

從上面簡單實例可以明顯看出,它是用來指導卷積核知道,那些點是邊緣,那些點不是邊緣,這樣,在梯度回傳的時候,使卷積核值的改變偏向於使其能夠得到更多的正確的分類結果,損失函數回傳的梯度,使3x3的卷積核和原圖3x3的區域值更加相近,尋找這些邊緣區域圖像的像素共性特徵,和那些不是邊緣區域的像素點的共性,不斷的跌宕嘗試更新,使正確分類像素點更多,最後學到相對最優解的特徵;所以能夠得到,卷積核其實是在學習卷積區域的圖像的局部相似特徵;

再回到多層卷積的情況,以下內容我們使用圖像是否含有人臉的分類來舉例,我們首先說越靠近圖像輸入端的為低維特徵,越靠近輸出端的特徵為高維特徵

我們分兩步假設討論,第一個假設,我們對每個卷積核的各個通道初始化相同,那麼我們就像根據梯度公式,假設第一個卷積核是64個通道為64x3x3x3,那第一次卷積得到的64張特徵圖應該是相同的結果,因為64個卷積核中的3x3x3都是相同,那乘相同的圖像得到的結果就是相同的,那麼一次類推,到最後一層的卷積核的輸出,結果也都是相同的,那麼這樣就是經過多次學習,每個卷積核的各個通道學習的特徵永遠是一樣的,這就使網路只能學到一個特徵,所以此時使用多個卷積核是沒有用的;所以卷積核初始化很重要的就是因為這個原因;

第二個假設,即現在的大家都是使用的隨機初始化卷積核,這樣類似上面的步驟來實現結果,那麼每一層輸出的特徵層各個通道值都是不一樣的,到最後全連接輸出的結果,我們假設輸出10個值,在經過計算最後輸出0和1的結果,那這10個值數值都是不一樣的,經過多次迭代最後的10個值包含的特徵已經很複雜了,即高維特徵,經過前面各個層計算的細微差別,這麼最後輸出的損失函數,會對10個值進行約束,其中某個值所代表的特徵值比較靠近鼻子,那麼就會約束它特徵值往鼻子靠近,另外一個值和眼睛的特徵值更加相近,那麼就會約束那個值的特徵靠近眼睛,這麼就使得每個特徵值梯度變化產生差別;

此後梯度向前傳播,那麼特徵高維特徵會逐漸解體,變為低維特徵即一些紋理特徵,比如鼻子特徵,那個生成此特徵的對應的卷積核,它的能力會逐漸學習它相應的鼻子一些特徵需求,可能是鼻孔,鼻樑等一系列細小的特徵,在往前層的卷積核的提取特徵能力就是組成鼻孔的特徵, 到最前一層即是組成各個高級特徵所需要的不同的紋理特徵;因為往前的共有特徵,會逐步細化特徵,即變為低維特徵紋理;

總結來說,每個卷積核都是在學習前一層特徵圖的相似特徵。


更新一下,題主在評論里對特徵是如何更新的有比較深入的探討,有興趣的可以點進去看看.

特徵學習其實是反向傳播操作負責的,這裡貼一個我以前的筆記:

----------------------------------------------------------------------------------------------------

其實本質上是這些特徵有相似性

通俗一點的說,神經網路在學習特徵的時候就是一個不斷提升維度以讓數據最終線性可分的過程.

舉個例子:

我們現在有"廣州市人均穿衣厚度"這個數據,然後我要你根據這個數據判斷當時的季節.

很明顯光有"人均穿衣厚度"這個數據是判斷不出來的,好,那我們現在增加一個新的數據維度,時間,你就會發現隨著時間的變化,人均穿衣厚度是會變化的,這個時候我們基本上就可以區分出冬夏季:即以365天為一個周期,人均穿衣厚度最高的那段時間就是冬天,最低的就是夏天

但是這還不行,這樣區分不了春秋,那我們接著接入新的維度,比如空氣濕度,這個時候機會發現人均穿衣厚度在均值附近,濕度較大的是春天,較小的是秋天.

當然上面這個例子不一定準確.

回到CNN這個問題上來,你看到卷積操作學到了"特徵",其實這些特徵是原本就存在於數據里的,反向傳播和鏈式法則只是幫助模型找到了這些特徵,在足夠深的模型中,他就能找到足夠多的特徵維度,在維度足夠高的時候,結果就變成線性可分的了.


卷積核不也是權重和偏置嗎?既然有損失函數,通過反向傳遞,就是求導就可以實現參數權重和偏置的更新。


一般都會講是視網膜細胞群仿生設計的,但是我認為用它學習特徵的動因,可以來自那群搞《信號與系統》的人,可以參考奧本海默那本。線性系統理論的基礎是將一個系統與一個脈衝進行卷積,在脈衝發生位置產生一個這個函數的副本。

「卷積」類似「相關」操作:空間卷積核濾波即傅里葉後頻域的「乘法濾波器」。

至於為什麼他能「提取特徵,看下面這張圖劃線句子,那是因為「圖像頻帶和圖像特徵聯繫在一起」:

《數字圖像處理》岡薩雷斯

準確地說,機器學習那個「filter對乘加」,應該叫做「相關操作」(相關是濾波器核相對於圖像位移的函數,相關第一個值對應核的零位移…),但是一般卷積核對稱的,而且這兩個操作本質都一樣,已經叫亂了就不區分了。

記得本科學過一門感測器的課,「相關操作」還能應用在感測器電流計中,測量電路損壞位置的距離信息。

語音識別等也是「信號處理」相關知識,「卷就完事兒了」,看過這張圖:

對了,CNN步長如果跳著走,我覺得還有降採樣的功能,應該是先找出那些有用圖像頻帶信息,再用這些頻帶進行「全連接層」去通用近似定理「擬合」出識別函數。

CNN既然源自視網膜細胞群的仿生設計,會不會我們人體也類似呢?


神經網路是個黑箱,題主要探究這個黑箱,那我就說說自己的看法:大多數神經網路都要定義損失函數,並採用反向傳播演算法來更新參數,那麼這個損失函數就有點意思了:

大家都說卷積核提取的是特徵,人識別圖像會考慮到特徵,但機器會的是計算數值、比大小,特徵對機器來說是不是太高級了?

我們可以從統計的角度去理解:神經網路訓練的時候處理大量的數據,提取出不同的統計指標,而在預測的時候判定新給的樣本符合哪些統計指標,神經網路的統計指標是「泛化」的,而傳統統計學裡面的統計指標通常只有平均值、方差、最大值、最小值等這些。

其實傳統的統計指標可以理解為一種降維工具,將數據集降維成「平均值」、「方差」等有限維度,可能神經網路以「黑箱」的形式「統計」的更細一些,維度更多一些。

是的,機器會的就是計算,大量的計算。


在深度學習沒出來之前,cv方向早就有了卷積核的概念。卷積核的功能多種多樣,卷積核又叫濾波器。高通濾波器和低通濾波器用的也比較多。實現的功能也不一樣,銳化鈍化,去噪,平滑。不過高通濾波器和低通濾波器卷積核的參數是固定的,提取的特徵也是單一的。後來深度學習出現了,有了自動提取特徵的功能。主要的思想就是在網路中各個卷積層,定義多個卷積核。參數採用隨機初始化的方式。訓練的時候,網路會提取各式各樣的特徵,有的接近高通濾波,有的接近低通濾波。反正就是混合起來。所以說,深度學習提取到的特徵比傳統機器學習方法手動提取的特徵更加豐富。


現在人們對神經網路的研究還是初級階段

一般的都會把神經網路當做黑箱模型,不去探究其內部到底是怎麼運作的,是怎麼前饋反饋的。

我大概說一下

首先最簡單的BP神經網路模型,是基於線性回歸理論的。也就是經典的「wx+b」模型。BP神經網路可以視為多層,多個線性回歸的結合,而偏置層的引入也就相當於「b」,讓回歸能夠「進行和x無關的參數優化」。

卷積這個概念吧,在圖像處理中相當好用。我覺得這個理論的提出和圖像的頻域空間理論有關係。數據圖像可以通過傅立葉變換轉移到頻域空間,而頻域空間的卷積運算則變得非常簡單。

所以卷積神經網路應該就是頻域空間下,圖像的多維線性優化模型。不知道這麼說有沒有一些道理。

卷積尚且能如此解釋,但是其他千奇百怪的神經網路也有很多。比方說專門用於強化學習優化的DQN,決策深度網路,甚至有些引入了貝葉斯的理論來優化網路。

怎麼說呢,每次看前沿的文章都感覺自己和天才差的太遠。我的數學建模能力和理論知識還非常有限。不知道有沒有這方面專業的人士,能從理論層面好好解析一下這些東西。


個人理解.卷積核不學習特徵,卷積核通過卷積參數處理輸入數據,生成輸出數據,輸出數據相對於輸入來說,稱之為特徵圖(影像)。如果說卷積核參數怎麼學習(確定)則是loss函數最小值下,做bp反向傳播,利用梯度下降的方法來確定最優卷積核參數。


因為卷積層通常會有有多個卷積核,每層卷積核的數量也可以叫做通道數(channel)。說到channel,可能就比較熟悉了,比如一般的圖片會有RGB三個channel,經過卷積後的結果可以被看做是一個廣義上的圖片(論文里叫特徵圖),比如128×128×3的圖經過16個stride為 2 的卷積核卷積後,得到64×64×16的圖(特徵圖),最後一個維度就是channel,數量對應卷積核的數量。而在網路訓練的過程中,每一個核只負責提取一種特徵,比如豎直線、水平線、或者45度斜線等(總之訓練完成的網路是這樣的,至於過程中為什麼會這樣,學術圈現在還沒有大家都信服的解釋,所以國家今年還有關於神經網路演算法可解釋性相關的重點專項,好像是3000萬吧)。

我的理解是:在損失函數合理的情況下,整個梯度鏈就像一根橡皮筋,只有當各層網路的卷積核處於最高效的組合方式時(第一層是最簡單的各個方向的邊緣檢測,後面的層是前面層的高級組合,例如菱形就是4個45度的邊組成,第一層負責找到4條斜邊,第二層負責檢測四條斜邊的相對位置是否符合菱形。實際上卷積核就是濾鏡,前基層的卷積核完全可以手動設定。研究也表明,不同的網路模型在訓練樣本足夠大的情況下,最初的特徵提取層的卷積核有非常高的相似性),橡皮筋最短,整體能量最低(能量最低最穩定),所以卷積和的權重最終會收斂到一個局部的最優質(小概率可能時全局最優)。

其實機器學習的過程類似閉環控制理論,就是一個反饋的過程,比如你要伸手抓一個杯子,第一次手的位置偏左了,那就向右移動做調整,結果向右的太多,那就再往左一點,通常腦子沒病的人,調整的幅度會根據手和杯子的距離(梯度)來確定(梯度乘以學習率,學習率對應閉環控制里的比例係數),所以手和杯子的距離會越來越小(梯度下降),調整量會越來越小,最終手正好放到杯子的位置。

監督學習的過程和閉環控制類似,只不過同時要調整的參數量比較多,比如上面那個菱形檢測的例子,如果是兩層網路,第一層應該包括4個45度斜邊的濾鏡(實際是兩個,因為卷積和可以滑動,相互平行的兩個邊用同一個濾鏡或者叫卷積核就可以檢測到),第二層需要一個正方形的卷積核(菱形的四個斜邊的相對位置是一個正方形或矩形),如果卷積核不是這樣,最後的損失(其實就是真和預測值之間差距的某種形式的度量)就會比較大,類似於單參數的閉環控制,各層的卷積和會根據自己本層的誤差(梯度,某個權重的偏導)進行調整(從後往前逐層求偏導就是反向傳播BP的由來),直至損失最小。(多參數最優化可以參考朗格朗日公式做過渡)。

補充:45度斜邊的特徵提取卷積核其實就是單位對角陣或者反對角陣。所以簡單的形狀檢測網路完全可以手動設定卷積核完成分類和位置的確定。

語言比較混亂,僅供參考。


推薦閱讀:
相关文章