首先,本文章對提高卷積

題目的計算速度沒有任何幫助。只是想通過這篇文章解開很多同學心中的疑惑:卷積到底應該怎樣理解?

計劃分為兩個部分:

  1. 矢量的卷積
  2. 函數的卷積

我個人去理解很多數學概念都是通過它們的名稱,因為在絕大多數情況下,名稱本身是非常具有代表性的,其描述的往往是一個事物最本質的特徵,首先要讀懂一件事物的名稱才能更好的理解它。比如這裡要講的卷積。

談談我個人對卷積的理解:卷積,顧名思義分為一個動作,名曰「卷」,一個結果,名曰「積」。卷是個再通俗不過的動詞,而積表示的就是乘法的結果,所以卷積想要表達的意思就是將乘積捲起來。問題是怎麼卷?我相信這是很多同學疑惑的地方,下面我們就從矢量的卷積開始講起,讓各位同學體會一下這個卷的過程。

  1. 矢量的卷積

在開始講矢量的卷積之前,必須先要介紹一個與矢量的卷積密切相關的概念:矢量的張量積。

矢量的張量積在張量分析中又叫做並矢。千萬不要被這個張量積名字嚇到了,因為它畢竟還有另一個名字並矢。並矢並矢,顧名思義就是將幾個矢量並排寫。而且,並矢的定義式也十分簡單,比如兩個三維矢量 vec{a}=egin{pmatrix} a_{1}\  a_{2}\  a_{3} end{pmatrix},vec{b}=egin{pmatrix} b_{1}\  b_{2}\  b_{3} end{pmatrix} 的並矢為:

vec{a}vec{b}:=egin{pmatrix} a_{1}b_{1} & a_{1}b_{2} &a_{1}b_{3} \  a_{2}b_{1} & a_{2}b_{2} &a_{2}b_{3} \  a_{3}b_{1} & a_{3}b_{2} &a_{3}b_{3}  end{pmatrix}

需要注意的是,矢量 vec{a},vec{b} 之間沒有任何符號!!!

上例中因為只有兩個矢量並在一起所以叫做二階並矢(本文章就以二階並矢為例介紹矢量的卷積)。顯然,並矢的結果是一個矩陣(但並矢一般不會是方陣,後面會舉例),這個矩陣中的元素是將是矢量中的所有項兩兩組合(相乘),再按照矩陣中的下標規定寫在相應位置就可以了。

並矢中的兩個矢量的順序是不能夠任意調換的!例如在上例中,若調換矢量 vec{a},vec{b} 的順序會得到結果:

vec{b}vec{a}:=egin{pmatrix} b_{1}a_{1} & b_{1}a_{2} &b_{1}a_{3} \  b_{2}a_{1} & b_{2}a_{2} &b_{2}a_{3} \  b_{3}a_{1} & b_{3}a_{2} &b_{3}a_{3}  end{pmatrix}
evec{a}vec{b}=egin{pmatrix} a_{1}b_{1} & a_{1}b_{2} &a_{1}b_{3} \  a_{2}b_{1} & a_{2}b_{2} &a_{2}b_{3} \  a_{3}b_{1} & a_{3}b_{2} &a_{3}b_{3}  end{pmatrix}

調換順序後的並矢與調換之前的並矢互為轉置並矢,即:

vec{b}vec{a}=left ( vec{a}vec{b} 
ight )^{T}

張量積的部分就說到這裡,下面開始進入正題:

矢量的卷積

為了簡單起見,我們設兩個矢量 vec{a},vec{b} 都是 n 維矢量(上面的定義式就是針對這種情況的簡化版),即:

vec{a}=egin{pmatrix} a_{0}\  a_{1}\  ...\  a_{n-1}  end{pmatrix} , vec{b}=egin{pmatrix} b_{0}\  b_{1}\  ...\  b_{n-1}  end{pmatrix}

然後我們畫一個如下所示的圖:

將上面圖中的相同顏色的項加起來,在寫成矢量的形式就是矢量 vec{a},vec{b} 的卷積了,即:

mathrm{conv}left ( vec{a} ,vec{b} 
ight ) =vec{c}=egin{pmatrix} {color{Red} c}_{{color{Red} 0}}\  {color{Blue} c}_{{color{Blue} 1}}\  {color{DarkOrange} c}_{{color{DarkOrange} 2}}\  ...\  {color{DarkRed} c}_{{color{DarkRed} 2}{color{DarkRed}n{color{DarkRed} -{color{DarkRed} 1}} }} end{pmatrix}=egin{pmatrix} {color{Red}a_{{color{Red} 0}}{color{Red} b}_{{color{Red}0 }} }\  {color{Blue}a_{{color{Blue} 1}}{color{Blue} b}_{{color{Blue}0 }} }+{color{Blue}a_{{color{Blue} 0}}{color{Blue} b}_{{color{Blue}1 }} }  \  {color{DarkOrange}a_{{color{DarkOrange} 2}}{color{DarkOrange} b}_{{color{DarkOrange}0 }} }+{color{DarkOrange}a_{{color{DarkOrange} 1}}{color{DarkOrange} b}_{{color{Orange}1 }} }+{color{DarkOrange}a_{{color{DarkOrange} 0}}{color{DarkOrange} b}_{{color{DarkOrange}2}} } \ ... \ {color{DarkRed}a_{{color{DarkRed} n{color{DarkRed} -{color{DarkRed} 1}}}}{color{DarkRed} b}_{{color{DarkRed}n{color{DarkRed} -{color{DarkRed} 1}} }} }  end{pmatrix}

可見,矢量的卷積結果還是一個矢量。而且必須要注意的是由於並矢裡面的矢量不能隨意調換位置,所以卷積裡面的矢量也不能雖已調換位置。舉個例子:

例:計算矢量: vec{a}=egin{pmatrix} 1\  2\  3\  4 end{pmatrix}vec{b}=egin{pmatrix} 4\  3\  2\  1 end{pmatrix} 的卷積 mathrm{conv}left ( vec{a} ,vec{b} 
ight )

第一步:寫出張量積

vec{a}vec{b}=egin{pmatrix} 1cdot 4  & 1cdot 3  & 1cdot 2  & 1cdot 1 \   2cdot 4 & 2cdot 3  & 2cdot 2  & 2cdot 1 \   3cdot 4 & 3cdot 3  & 3cdot 2  & 3cdot 1 \  4cdot 4  & 4cdot 3  & 4cdot 2  & 4cdot 1  end{pmatrix}=egin{pmatrix} 4 & 3 & 2 & 1\   8&  6& 4 & 2\  12 & 9 &6  & 3\   16& 12 &8  & 4 end{pmatrix}

第二部:按照上面的演算法將相同顏色的項加起來然後寫成矢量形式即可:

mathrm{conv}left ( vec{a} ,vec{b} 
ight )=egin{pmatrix} {color{Red} 4}\  {color{Blue} 1{color{Blue} 1} }\  {color{DarkOrange} 2{color{DarkOrange} 0}}\  {color{Purple} 3{color{Purple} 0}}\  {color{Pink} 2{color{Pink}0 }}\  {color{Green} 1{color{Green}1 }}\  4end{pmatrix}

上面的兩個步驟是標準步驟,需牢記。

現在,我們來分析一下矢量卷積的定義式( gradleft(  vec{a}
ight)=gradleft(  vec{b}
ight)=n ):

c_{k}=sum_{i,j< n\i+j=k}{a_{i}cdot b_{j}}     k=0,1,...,2n-2

有了上面的例子,我們理解這個式子就會更加容易些:

這個圖有點問題,最後一項應該是c_2n-1

不知道各位同學有沒有發現矢量的卷積是如何卷的呢?我們來看一下,還是拿 gradleft(  vec{a}
ight)=gradleft(  vec{b}
ight)=n 為例,可以把兩者的張量積想像成一個平面,由於兩個矢量的維度相等,所以,這個平面應該是一個正方形:

從上面的例子來看,兩個同維度的矢量的卷積是將矢量的張量積從左上角向右下角捲起來(各位可以拿出一張紙來自己體會一下):

即沿上圖中黑色對角線的方向捲起來,而這個卷的動作實際上就是一個求和的動作,用上面的例子說明會更加具體:

這就是矢量卷積的本質了,即對矢量的張量積矩陣從左上到右下捲起來,每卷一次就做一次加法運算,並記錄數據,最後按順序將所有的數據寫成矢量即可得到兩個矢量的卷積。對於 gradleft(  vec{a}
ight) 
e grad left(  vec{b}
ight) 的情況也是類似的分析方法。

2. 函數的卷積

我們先來看一下函數卷積的定義式:

left(fast g 
ight)left( t 
ight)=int_{-infty}^{+infty}fleft( 	au 
ight)gleft( t-	au 
ight)d	au

我們還是來說明一下這個定義式中的每一項:

對於 gleft( t 
ight)
ightarrow gleft( t-	au 
ight) 的過程我們畫幾個圖來看看:

現在有兩個問題:1. 	au-infty 變到 +infty 時,  fleft( 	au 
ight) 會不會滑動

答案是不會。這個問題的很好解釋:

對於  fleft( 	au 
ight) 裡面的 	au 就是一個從負無窮運動到負無窮的點而已。其實就是按一元函數的自變數變化理解。

2. 	au-infty 變到 +infty 時, gleft( t-	au 
ight) 會不會滑動?

答案是會那麼為什麼 gleft( t-	au 
ight) 會發生滑動現象呢?我們一步一步來解釋:

我們知道,當 	au-infty 變到 +infty 時一定會經過 	au=a ,所以 a 只是在 	au-infty 變到 +infty 變化的過程中的一個「特殊點」。也就是說 	au 可以取 ...,a-2,a-1,a,a+1,a+2,... 等等無窮多的值(不一定是整數),但無論 	au 如何取,都要滿足有信號的區間長度為 a 。我們假設 	au 取值 a+m>0 ,這時,圖像在上圖中虛線的基礎上又向左移動了 m 個單位:

m
ightarrow+infty 時,圖像被移動到了最左邊:

也就是說 m 的變化導致了圖像的滑動,所以,我個人給 m 起了一個名字:滑動因子

下面,我們通過一個例子來研究一下卷積:

通過上面的例子,我們可以很清楚的看到函數的卷積是如何運作的,即:

兩個函數的卷積就是求兩個函數重合部分的面積如何變化。

那這個卷的動作在哪裡呢?其實這個滑動的動作就是「卷」:

視頻封面

00:20函數的卷積如何卷(強行解釋)

還沒關注關注專欄《數學及自然科學》的朋友們趕快關注吧!您的支持是我最大的動力!

推薦閱讀:

相关文章