如何通俗易懂地解釋卷積?

取自 知乎@馬同學,在此表示感激,侵刪。

從數學上講,卷積就是一種運算。

某種運算,能被定義出來,至少有以下特徵:

  • 首先是抽象的、符號化的

  • 其次,在生活、科研中,有着廣泛的作用

比如加法:

  • a+ba+b,是抽象的,本身只是一個數學符號
  • 在現實中,有非常多的意義,比如增加、合成、旋轉等等

卷積,是我們學習高等數學之後,新接觸的一種運算,因爲涉及到積分、級數,所以看起來覺得很複雜。

1 卷積的定義

我們稱 (f*g)(n) 爲 f,g 的卷積

其連續的定義爲:

(f∗g)(n)=∫∞−∞f(τ)g(n−τ)dτ(f∗g)(n)=∫−∞∞f(τ)g(n−τ)dτ

其離散的定義爲:

(f∗g)(n)=∑−∞∞f(τ)g(n−τ)(f∗g)(n)=∑−∞∞f(τ)g(n−τ)

這兩個式子有一個共同的特徵:

這個特徵有什麼意義?

我們令 x=τ,y=n−τx=τ,y=n−τ ,那麼 x+y=nx+y=n 就是下面這些直線:

只看數學符號,卷積是抽象的,不好理解的,但是,我們可以通過現實中的意義,來習慣卷積這種運算,正如我們小學的時候,學習加減乘除需要各種蘋果、糖果來幫助我們習慣一樣。

我們來看看現實中,這樣的定義有什麼意義。

2 離散卷積的例子:丟骰子

我有兩枚骰子:

把這兩枚骰子都拋出去:

求:兩枚骰子點數加起來爲4的概率爲多少?

這裏問題的關鍵是,兩個骰子加起來要等於4,這正是卷積的應用場景。

我們把骰子各個點數出現的概率表示出來:

那麼,兩枚骰子點數加起來爲4的情況有:



因此,兩枚骰子點數加起來爲4的概率爲:

f(1)g(3)+f(2)g(2)+f(3)g(1)f(1)g(3)+f(2)g(2)+f(3)g(1)

符合卷積的定義,把它寫成標準的形式就是:

(f∗g)(4)=∑m=13f(4−m)g(m)(f∗g)(4)=∑m=13f(4−m)g(m)

3 連續卷積的例子:做饅頭

樓下早點鋪子生意太好了,供不應求,就買了一臺機器,不斷的生產饅頭。

假設饅頭的生產速度是 f(t)f(t),那麼一天後生產出來的饅頭總量爲:

∫240f(t)dt∫024f(t)dt

饅頭生產出來之後,就會慢慢腐敗,假設腐敗函數爲 g(t)g(t) ,比如,10個饅頭,24小時會腐敗:

10∗g(t)10∗g(t)

想想就知道,第一個小時生產出來的饅頭,一天後會經歷24小時的腐敗,第二個小時生產出來的饅頭,一天後會經歷23小時的腐敗。

如此,我們可以知道,一天後,饅頭總共腐敗了:

∫240f(t)g(24−t)dt∫024f(t)g(24−t)dt

這就是連續的卷積。

4 圖像處理

4.1 原理

有這麼一副圖像,可以看到,圖像上有很多噪點:

高頻信號,就好像平地聳立的山峯:

看起來很顯眼。

平滑這座山峯的辦法之一就是,把山峯刨掉一些土,填到山峯周圍去,用數學的話來說,就是把山峯周圍的高度平均一下。

平滑後得到:

4.2 計算

卷積可以幫助實現這一平滑算法。

有噪點的原圖,可以把它轉爲一個矩陣:

然後用下面這個平均矩陣(說明下,原圖的處理實際上用的是正態分佈矩陣,這裏爲了簡單,就用了算術平均矩陣)來平滑圖像。

g=⎡⎣⎢⎢⎢191919191919191919⎤⎦⎥⎥⎥g=[191919191919191919]

記得剛纔說過的算法,把高頻信號與周圍的數值平均一下就可以平滑山峯。

比如我要平滑 a1,1a1,1 點,就在矩陣中,取出 a1,1a1,1 點附近的點組成矩陣 ff , 和 gg 進行卷積計算後,再填回去:

要注意一點,爲了運用卷積,gg 雖然和 ff 同緯度,但下標有點不一樣:

我用一個動圖來說明下計算過程

寫成卷積公式就是:

(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)

要求 C4,5C4,5 ,一樣可以套用上面的卷積公式。

(f∗g)(m,n)=∑k=m−1m+1∑h=n−1n+1f(h,k)g(m−h,n−k)(對於3∗3的卷積核)(f∗g)(m,n)=∑k=m−1m+1∑h=n−1n+1f(h,k)g(m−h,n−k)(對於3∗3的卷積核)

這相當於實現了 gg 這個矩陣在原來圖像上的滑動(準確來說這幅圖把 gg 矩陣旋轉了 180∘180∘ ):


此圖出處:Convolutional Neural Networks - Basics

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章