天天看點

關于卷積神經網絡的思考:将CNN視作泛函拟合

點選上方“小白學視覺”,選擇加"星标"或“置頂”

重磅幹貨,第一時間送達

           
本文轉自:深度學習這件小

圖像本身可以被了解成一種二維平面上的分布。更廣泛的說,就是二維多分量函數(考慮通道,通道就是分量),這些分布或者函數本身也可以被劃分成不同的函數族,直覺的說,前景是貓和前景是狗的圖像可以被看成是兩族函數,這種劃分不是唯一的,是由task決定的。

cnn可以被了解為作用在其上的泛函,把這樣函數空間映射到另一族函數空間,換句話說,cnn是場到場的變換,比如高度場到溫度場,一般說來,泛函是指函數(也就是場)到函數的變換,或者函數到标量或者向量的變換。

注意,本文中的函數,場,分布的意思接近,場和标量或者變量的差別在于場有自變量空間,通常就是坐标平面。

cnn是一個泛函,從源函數空間映射到目标函數空間。而反過來,知道了這樣一個映射,也能刻畫源函數空間的性質,因為一般目标函數空間都相對簡單(對于分割這種任務而言,目标函數空間就是定義在坐标平面上的多變量函數,每個坐标的值都是一個one-hot向量,向量值的變化發生在圖像邊緣處)。

場到向量的變換,可以直接從場到場的變換得到,隻需要在每個分量上對函數進行全平面積分即可,類似的手段也是可以的,目的是去掉自變量。例如,在分割的基礎上進行分類,隻需要把global average pooling即可,它就是全平面上的積分,是以我們現在認為源函數空間和目标函數空間都是定義在一個坐标平面上的場。

我們知道一般的神經網絡幾乎能夠拟合任意有界函數,universal approximation theorem告訴我們如果函數   的定義域和值域都是有界的,那麼一定存在一個三層神經網絡   ,它幾乎處處以指定的誤差逼近   ,這是普通的nn。

但是如果我們回到卷積神經網絡,我們會發現我們的輸入是一個有界信号(準确的說是滿足一定分布的一族有界信号),輸出也是一個有界信号,我們需要拟合的是函數族到函數族的一個變換,即存在有界函數   和有界函數   ,其中   本身也是有界的,我們需要的是一個變換

這其實是一個泛函,也就是函數的函數,(如果我們把所有分辨率的32x32圖像信号當成一族函數(另外,如果使用0延拓或者随機延拓,這個函數可以被當成定義在全空間上的函數),那麼邊緣提取正是一階微分算子,它就是一個泛函,在圖像中,它幾乎是最重要的泛函,它的離散形式是sobel算子,它作用在圖像上,得到邊緣響應,這也是一族有界函數,響應經過限制後依然有界)。

在數學上,如果一個泛函輸入是有界的,輸出是有界的,就說這個泛函是有界的。另外函數族的概念需要着重說一下,舉個例子,包含貓的圖像和包含狗的圖像其實是兩個函數族,當然task不同的情況下,也可以看成是一個函數族,分類任務就是把這些函數族映射到常函數上,或者onehot函數上(泛函可以把場變換成标量或者向量,不必定義在全空間上,但是其實如果把分類看成分割的子問題的話,這一步隻差一個global average pooling,一個全空間積分)。

關于卷積神經網絡的思考:将CNN視作泛函拟合

著名的sobel算子,它被用來求取圖像邊緣,它也是一階微分的離散形式

關于卷積神經網絡的思考:将CNN視作泛函拟合

原圖像的值域是有界的(0—255),那麼sobel算子的輸出也是有界的

另外傳統cnn中不需要采樣,這樣輸入和輸出函數的定義域就是相同的(這也說明,對于卷積神經網絡,隻有卷積是必不可少的,其他的運算都可以沒有),也就是說輸入輸出函數被定義在同一定義域上。

要拟合這樣一個變換,在廣義函數理論裡面,最容易并且直接想到的這樣一個變換,就是卷積:

它有平移不變性,這幾乎是這樣一種泛函所必須的性質,我們希望原函數有一個平移的同時,目标函數一定有同樣的平移

在某種意義上,它有一定的尺度不變性

原函數和卷積核變寬或者變窄的同時,像函數也會随之變寬或者變窄,在相差一個縮放因子的意義上,事實上這個變換不是尺度不變性,而是尺度等變性,但是這樣一個性質也是很有用的。

同時,卷積也有結合律與交換律

前者意味着,如果多個卷積作用在函數上,其實相當于一個更大的卷積作用在函數上。

在分析裡面,我們通常用   來記函數   的支撐集,這是函數取值不為0的地方,同時可以證明 

 ,這裡使用點集相加,其定義為,   ,其中加法就是簡單的數值加法,這意味着你總可以用多個支撐集更小的卷積核合成一個支撐集更大的卷積核。

在廣義函數裡,我們有dirac函數,它的定義是,

這樣一個函數并不存在,但是我們可以考慮用其他函數逼近它,比如高斯函數。

它的卷積有如下性質,

這意味着與它的導數作卷積可以很容易得到原函數的各階導數,而導數是函數最重要的性質。

直接用一個卷積不明智,我們也不知道如何去拟合它,但是我們可以用一系列卷積去拟合泛函變換,

平移不變性依然存在,但是尺度不變性沒有了,但是如果非線性函數其實是分段線性函數,例如ReLU,其實尺度不變性依然能保留下來。原因是尺度不變多出來一個因子,這個因子被非線性作用一次之後就沒有了(線性被非線性作用一次 ,就沒有線性關系了),但是分段線性函數卻能疊乘這個因子,如果層數固定,那麼這個泛函依然具有尺度等變性。

這是單分量的形式,事實上   必定不止一個分量,正确形式應該是   ,而且中間過程也不應該是單分量的,結果也不應該是單分量的,其中一個分量如下,其他類似,

每次權重都會産生新的分量,相當于卷積神經網絡中間産生的新通道,中間這些分量就是中間通道,輸入輸出都是多通道。

對上面的公式進一步的解釋如下,多分量函數就是多通道特征圖,對每個分量用depwise作用之後權重相加,這樣得到一個新的函數分量。然後這樣的操作重複多次,得到多個輸出分量,注意,重複同樣的計算過程,但是用的depwise卷積核不同。

考慮到如果從數學上去拟合,我們希望   都是在某一個函數空間裡,或者說強制它們在一個函數空間裡,然後研究這個空間的性質,這樣一來它們就可以在這個函數空間裡被基底函數展開,展開的好處是共享的卷積核變多了,

展開類似于線性權重,而這類似于可分離卷積神經網絡,設計成這樣是參考了論文Depthwise Convolution is All You Need for Learning Multiple Visual Domains其中權重的過程正是1x1卷積,

關于卷積神經網絡的思考:将CNN視作泛函拟合

左邊每個通道獨立做卷積,右邊1x1卷積相當于權重

我們選擇高斯函數(其實還有更多的選擇,比如著名的gabor小波)及其導數作為基底函數,它們構成了高斯小波基,

事實上不同的基底函數表征了這個task,中間的函數空間(也就是各層特征圖)分布也決定了這個網絡的全部性質,也就是說輸入函數族如何被映射到輸出函數族上,對于處理不同task的cnn,比如分類貓狗的,分類雞鴨的,哪怕結構完全相同,其中間函數分布也完全不一樣,這裡固定住隻是為了後面的實驗,證明這種結構有足夠的拟合能力。

關于卷積神經網絡的思考:将CNN視作泛函拟合

高斯小波基

構造這樣一個卷積神經網絡,這裡的卷積神經網絡沒有任何下采樣,采用和我的另一篇文章相似的架構,并在cifar100上訓練(當機所有的depthwise,證明即使函數空間的選取不是完全正确,一個正确的權重也足以得到比較好的結構),結果如下:

關于卷積神經網絡的思考:将CNN視作泛函拟合

預測精度

關于卷積神經網絡的思考:将CNN視作泛函拟合

訓練精度

然後補上resnet在cifar100上的結果作為baseline

關于卷積神經網絡的思考:将CNN視作泛函拟合

label裡面的前四個數字表示前四層的1x1卷積的通道數,ord後面指使用到高斯導數的階數,原函數的階數為0,對于每個通道,使用depth-multiplier控制高斯導數的階數,對每個通道而言,作用在其上的depwise-conv是相同的,也就是說如果有3個通道,使用到5階高斯導數,那麼每個通道的5個depwise-conv是相同的,這實際上相當于參數備援了。最後一個normal表示用正态分布初始化(he-initialization)。

縱向比較,四個通道數相同,都是64-80-96-112的網絡,使用高斯導數的階數為1,5,10,15,發現隻有ord1的預測精度偏低,但是ord5,ord10,ord15的預測精度極為相近,說明CNN可能對高階的導數不敏感(至少在圖像識别中是如此),同時,随着階數提升,訓練精度是逐個增加的,說明确實有過拟合。橫向比較,都使用5階高斯導數,但是通道數分别為32-44-56-68,60-80-96-112,64-128-256-512,發現預測精度和訓練精度都是同步增加,說明通道數确實有利于組合出更多的函數出來。

最後一個正态的結果作為參考,因為有depth-multiplier的情況下,使用正态分布随機初始化,會造成實際參數更多,是以這個比較并不是特别公平,但是可以看到CNN的巨大學習能力,使用這樣随機初始化依然能夠有好的結果。

同時這裡的方法過于大膽,事實上對于普通的分類分割網絡,淺層确實可以用一些常用函數來表示,比如gabor小波基,論文gaborconvet采用了這樣的思想。同時注意到,對于深層,這裡的基函數需要能反應這個分類或者分割問題的特征空間,而通過學習出來的卷積所構成的基函數,恰好反應了這一特征空間的實際分布。

對于普通的神經網絡,每一層都是在變換輸入分布或者中間分布,通過研究每一層的函數空間分布我們就能很好的研究這個多層卷積神經網絡的性質。

如果我們把圖像看成函數族,那它們也應該有它們的分布,任意圖像就是定義在某一塊區域,比如32x32上的下界為0,上界為255的任意連續(甚至連續這個條件都可以放寬)函數組成的函數族。大多數cnn的第一層行為都非常類似于邊緣提取,而邊緣圖像本身就可以一系列脈沖來描述,這是cnn第一層的函數空間。對于分割,最後一層通常是一個多分量的二值函數空間,對于每個點,都對應一個onehot向量。分類問題可以看成分割之後在全空間積分,而這正是常用的global average pooling。

下載下傳1:OpenCV-Contrib擴充子產品中文版教程

在「小白學視覺」公衆号背景回複:擴充子產品中文教程,即可下載下傳全網第一份OpenCV擴充子產品教程中文版,涵蓋擴充子產品安裝、SFM算法、立體視覺、目标跟蹤、生物視覺、超分辨率處理等二十多章内容。

下載下傳2:Python視覺實戰項目52講

在「小白學視覺」公衆号背景回複:Python視覺實戰項目,即可下載下傳包括圖像分割、口罩檢測、車道線檢測、車輛計數、添加眼線、車牌識别、字元識别、情緒檢測、文本内容提取、面部識别等31個視覺實戰項目,助力快速學校計算機視覺。

下載下傳3:OpenCV實戰項目20講

在「小白學視覺」公衆号背景回複:OpenCV實戰項目20講,即可下載下傳含有20個基于OpenCV實作20個實戰項目,實作OpenCV學習進階。

交流群

歡迎加入公衆号讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識别、醫學影像、GAN、算法競賽等微信群(以後會逐漸細分),請掃描下面微信号加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功後會根據研究方向邀請進入相關微信群。請勿在群内發送廣告,否則會請出群,謝謝了解~

關于卷積神經網絡的思考:将CNN視作泛函拟合
關于卷積神經網絡的思考:将CNN視作泛函拟合

繼續閱讀