1、對(duì)卷積的困惑
卷積這個(gè)概念,很早以前就學(xué)過(guò),但是一直沒(méi)有搞懂。教科書(shū)上通常會(huì)給出定義,給出很多性質(zhì),也會(huì)用實(shí)例和圖形進(jìn)行解釋?zhuān)烤篂槭裁匆@么設(shè)計(jì),這么計(jì)算,背后的意義是什么,往往語(yǔ)焉不詳。作為一個(gè)學(xué)物理出身的人,一個(gè)公式倘若倘若給不出結(jié)合實(shí)際的直觀的通俗的解釋?zhuān)ㄒ簿褪潜澈蟮摹拔锢怼币饬x),就覺(jué)得少了點(diǎn)什么,覺(jué)得不是真的懂了。
教科書(shū)上一般定義函數(shù)?f, g?的卷積?f * g(n)?如下:
連續(xù)形式:
離散形式:
并且也解釋了,先對(duì)g函數(shù)進(jìn)行翻轉(zhuǎn),相當(dāng)于在數(shù)軸上把g函數(shù)從右邊褶到左邊去,也就是卷積的“卷”的由來(lái)。
然后再把g函數(shù)平移到n,在這個(gè)位置對(duì)兩個(gè)函數(shù)的對(duì)應(yīng)點(diǎn)相乘,然后相加,這個(gè)過(guò)程是卷積的“積”的過(guò)程。
這個(gè)只是從計(jì)算的方式上對(duì)公式進(jìn)行了解釋?zhuān)瑥臄?shù)學(xué)上講無(wú)可挑剔,但進(jìn)一步追問(wèn),為什么要先翻轉(zhuǎn)再平移,這么設(shè)計(jì)有何用意?還是有點(diǎn)費(fèi)解。
在知乎,已經(jīng)很多的熱心網(wǎng)友對(duì)卷積舉了很多形象的例子進(jìn)行了解釋?zhuān)缇淼靥骸G骰子、打耳光、存錢(qián)等等。讀完覺(jué)得非常生動(dòng)有趣,但過(guò)細(xì)想想,還是感覺(jué)有些地方還是沒(méi)解釋清楚,甚至可能還有瑕疵,或者還可以改進(jìn)(這些后面我會(huì)做一些分析)。
帶著問(wèn)題想了兩個(gè)晚上,終于覺(jué)得有些問(wèn)題想通了,所以就寫(xiě)出來(lái)跟網(wǎng)友分享,共同學(xué)習(xí)提高。不對(duì)的地方歡迎評(píng)論拍磚。。。
明確一下,這篇文章主要想解釋兩個(gè)問(wèn)題:
1. 卷積這個(gè)名詞是怎么解釋?zhuān)俊熬怼笔鞘裁匆馑迹俊胺e”又是什么意思?
2. 卷積背后的意義是什么,該如何解釋?zhuān)?/p>
2、考慮的應(yīng)用場(chǎng)景
為了更好地理解這些問(wèn)題,我們先給出兩個(gè)典型的應(yīng)用場(chǎng)景:
1. 信號(hào)分析
一個(gè)輸入信號(hào)f(t),經(jīng)過(guò)一個(gè)線(xiàn)性系統(tǒng)(其特征可以用單位沖擊響應(yīng)函數(shù)g(t)描述)以后,輸出信號(hào)應(yīng)該是什么?實(shí)際上通過(guò)卷積運(yùn)算就可以得到輸出信號(hào)。
2. 圖像處理
輸入一幅圖像f(x,y),經(jīng)過(guò)特定設(shè)計(jì)的卷積核g(x,y)進(jìn)行卷積處理以后,輸出圖像將會(huì)得到模糊,邊緣強(qiáng)化等各種效果。
3、對(duì)卷積的理解
對(duì)卷積這個(gè)名詞的理解:所謂兩個(gè)函數(shù)的卷積,本質(zhì)上就是先將一個(gè)函數(shù)翻轉(zhuǎn),然后進(jìn)行滑動(dòng)疊加。
在連續(xù)情況下,疊加指的是對(duì)兩個(gè)函數(shù)的乘積求積分,在離散情況下就是加權(quán)求和,為簡(jiǎn)單起見(jiàn)就統(tǒng)一稱(chēng)為疊加。
整體看來(lái)是這么個(gè)過(guò)程:
翻轉(zhuǎn)——>滑動(dòng)——>疊加——>滑動(dòng)——>疊加——>滑動(dòng)——>疊加.....
多次滑動(dòng)得到的一系列疊加值,構(gòu)成了卷積函數(shù)。
卷積的“卷”,指的的函數(shù)的翻轉(zhuǎn),從?g(t)?變成?g(-t)?的這個(gè)過(guò)程;同時(shí),“卷”還有滑動(dòng)的意味在里面(吸取了網(wǎng)友李文清的建議)。如果把卷積翻譯為“褶積”,那么這個(gè)“褶”字就只有翻轉(zhuǎn)的含義了。
卷積的“積”,指的是積分/加權(quán)求和。
有些文章只強(qiáng)調(diào)滑動(dòng)疊加求和,而沒(méi)有說(shuō)函數(shù)的翻轉(zhuǎn),我覺(jué)得是不全面的;有的文章對(duì)“卷”的理解其實(shí)是“積”,我覺(jué)得是張冠李戴。
對(duì)卷積的意義的理解:
1. 從“積”的過(guò)程可以看到,我們得到的疊加值,是個(gè)全局的概念。以信號(hào)分析為例,卷積的結(jié)果是不僅跟當(dāng)前時(shí)刻輸入信號(hào)的響應(yīng)值有關(guān),也跟過(guò)去所有時(shí)刻輸入信號(hào)的響應(yīng)都有關(guān)系,考慮了對(duì)過(guò)去的所有輸入的效果的累積。在圖像處理的中,卷積處理的結(jié)果,其實(shí)就是把每個(gè)像素周邊的,甚至是整個(gè)圖像的像素都考慮進(jìn)來(lái),對(duì)當(dāng)前像素進(jìn)行某種加權(quán)處理。所以說(shuō),“積”是全局概念,或者說(shuō)是一種“混合”,把兩個(gè)函數(shù)在時(shí)間或者空間上進(jìn)行混合。
2. 那為什么要進(jìn)行“卷”?直接相乘不好嗎?我的理解,進(jìn)行“卷”(翻轉(zhuǎn))的目的其實(shí)是施加一種約束,它指定了在“積”的時(shí)候以什么為參照。在信號(hào)分析的場(chǎng)景,它指定了在哪個(gè)特定時(shí)間點(diǎn)的前后進(jìn)行“積”,在空間分析的場(chǎng)景,它指定了在哪個(gè)位置的周邊進(jìn)行累積處理。
4、舉例說(shuō)明
下面舉幾個(gè)例子說(shuō)明為什么要翻轉(zhuǎn),以及疊加求和的意義。
例1:信號(hào)分析
如下圖所示,輸入信號(hào)是?f(t)?,是隨時(shí)間變化的。系統(tǒng)響應(yīng)函數(shù)是?g(t)?,圖中的響應(yīng)函數(shù)是隨時(shí)間指數(shù)下降的,它的物理意義是說(shuō):如果在?t=0 的時(shí)刻有一個(gè)輸入,那么隨著時(shí)間的流逝,這個(gè)輸入將不斷衰減。換言之,到了?t=T時(shí)刻,原來(lái)在?t=0 時(shí)刻的輸入f(0)的值將衰減為f(0)g(T)。
考慮到信號(hào)是連續(xù)輸入的,也就是說(shuō),每個(gè)時(shí)刻都有新的信號(hào)進(jìn)來(lái),所以,最終輸出的是所有之前輸入信號(hào)的累積效果。如下圖所示,在T=10時(shí)刻,輸出結(jié)果跟圖中帶標(biāo)記的區(qū)域整體有關(guān)。其中,f(10)因?yàn)槭莿傒斎氲模云漭敵鼋Y(jié)果應(yīng)該是f(10)g(0),而時(shí)刻t=9的輸入f(9),只經(jīng)過(guò)了1個(gè)時(shí)間單位的衰減,所以產(chǎn)生的輸出應(yīng)該是 f(9)g(1),如此類(lèi)推,即圖中虛線(xiàn)所描述的關(guān)系。這些對(duì)應(yīng)點(diǎn)相乘然后累加,就是T=10時(shí)刻的輸出信號(hào)值,這個(gè)結(jié)果也是f和g兩個(gè)函數(shù)在T=10時(shí)刻的卷積值。
顯然,上面的對(duì)應(yīng)關(guān)系看上去比較難看,是擰著的,所以,我們把g函數(shù)對(duì)折一下,變成了g(-t),這樣就好看一些了。看到了嗎?這就是為什么卷積要“卷”,要翻轉(zhuǎn)的原因,這是從它的物理意義中給出的。
上圖雖然沒(méi)有擰著,已經(jīng)順過(guò)來(lái)了,但看上去還有點(diǎn)錯(cuò)位,所以再進(jìn)一步平移T個(gè)單位,就是下圖。它就是本文開(kāi)始給出的卷積定義的一種圖形的表述:
所以,在以上計(jì)算T時(shí)刻的卷積時(shí),要維持的約束就是:t+ (T-t) = T??。這種約束的意義,大家可以自己體會(huì)。
例2:丟骰子
在本問(wèn)題?如何通俗易懂地解釋卷積?中排名第一的馬同學(xué)在中舉了一個(gè)很好的例子(下面的一些圖摘自馬同學(xué)的文章,在此表示感謝),用丟骰子說(shuō)明了卷積的應(yīng)用。
要解決的問(wèn)題是:有兩枚骰子,把它們都拋出去,兩枚骰子點(diǎn)數(shù)加起來(lái)為4的概率是多少?
分析一下,兩枚骰子點(diǎn)數(shù)加起來(lái)為4的情況有三種情況:1+3=4, 2+2=4, 3+1=4
因此,兩枚骰子點(diǎn)數(shù)加起來(lái)為4的概率為:
寫(xiě)成卷積的方式就是:
在這里我想進(jìn)一步用上面的翻轉(zhuǎn)滑動(dòng)疊加的邏輯進(jìn)行解釋。
首先,因?yàn)閮蓚€(gè)骰子的點(diǎn)數(shù)和是4,為了滿(mǎn)足這個(gè)約束條件,我們還是把函數(shù) g 翻轉(zhuǎn)一下,然后陰影區(qū)域上下對(duì)應(yīng)的數(shù)相乘,然后累加,相當(dāng)于求自變量為4的卷積值,如下圖所示:
進(jìn)一步,如此翻轉(zhuǎn)以后,可以方便地進(jìn)行推廣去求兩個(gè)骰子點(diǎn)數(shù)和為 n 時(shí)的概率,為f 和 g的卷積 f*g(n),如下圖所示:
由上圖可以看到,函數(shù) g 的滑動(dòng),帶來(lái)的是點(diǎn)數(shù)和的增大。這個(gè)例子中對(duì)f和g的約束條件就是點(diǎn)數(shù)和,它也是卷積函數(shù)的自變量。有興趣還可以算算,如果骰子的每個(gè)點(diǎn)數(shù)出現(xiàn)的概率是均等的,那么兩個(gè)骰子的點(diǎn)數(shù)和n=7的時(shí)候,概率最大。
例3:圖像處理
還是引用知乎問(wèn)題?如何通俗易懂地解釋卷積?中馬同學(xué)的例子。圖像可以表示為矩陣形式(下圖摘自馬同學(xué)的文章):
對(duì)圖像的處理函數(shù)(如平滑,或者邊緣提取),也可以用一個(gè)g矩陣來(lái)表示,如:
注意,我們?cè)谔幚砥矫婵臻g的問(wèn)題,已經(jīng)是二維函數(shù)了,相當(dāng)于:
那么函數(shù)f和g的在(u,v)處的卷積該如何計(jì)算呢?
首先我們?cè)谠紙D像矩陣中取出(u,v)處的矩陣:
然后將圖像處理矩陣翻轉(zhuǎn)(這個(gè)翻轉(zhuǎn)有點(diǎn)意思,不是延x軸和y軸兩個(gè)方向翻轉(zhuǎn),而是沿右上到左下的對(duì)角線(xiàn)翻轉(zhuǎn),這是為了湊后面的內(nèi)積公式。),如下:
可對(duì)比下圖:
計(jì)算卷積時(shí),就可以用和的內(nèi)積:
?
請(qǐng)注意,以上公式有一個(gè)特點(diǎn),做乘法的兩個(gè)對(duì)應(yīng)變量a,b的下標(biāo)之和都是(u,v),其目的是對(duì)這種加權(quán)求和進(jìn)行一種約束。這也是為什么要將矩陣g進(jìn)行翻轉(zhuǎn)的原因。以上矩陣下標(biāo)之所以那么寫(xiě),并且進(jìn)行了翻轉(zhuǎn),是為了讓大家更清楚地看到跟卷積的關(guān)系。這樣做的好處是便于推廣,也便于理解其物理意義。實(shí)際在計(jì)算的時(shí)候,都是用翻轉(zhuǎn)以后的矩陣,直接求矩陣內(nèi)積就可以了。
以上計(jì)算的是(u,v)處的卷積,延x軸或者y軸滑動(dòng),就可以求出圖像中各個(gè)位置的卷積,其輸出結(jié)果是處理以后的圖像(即經(jīng)過(guò)平滑、邊緣提取等各種處理的圖像)。
再深入思考一下,在算圖像卷積的時(shí)候,我們是直接在原始圖像矩陣中取了(u,v)處的矩陣,為什么要取這個(gè)位置的矩陣,本質(zhì)上其實(shí)是為了滿(mǎn)足以上的約束。因?yàn)槲覀円悖╱,v)處的卷積,而g矩陣是3x3的矩陣,要滿(mǎn)足下標(biāo)跟這個(gè)3x3矩陣的和是(u,v),只能是取原始圖像中以(u,v)為中心的這個(gè)3x3矩陣,即圖中的陰影區(qū)域的矩陣。
推而廣之,如果如果g矩陣不是3x3,而是6x6,那我們就要在原始圖像中取以(u,v)為中心的6x6矩陣進(jìn)行計(jì)算。由此可見(jiàn),這種卷積就是把原始圖像中的相鄰像素都考慮進(jìn)來(lái),進(jìn)行混合。相鄰的區(qū)域范圍取決于g矩陣的維度,維度越大,涉及的周邊像素越多。而矩陣的設(shè)計(jì),則決定了這種混合輸出的圖像跟原始圖像比,究竟是模糊了,還是更銳利了。
比如說(shuō),如下圖像處理矩陣將使得圖像變得更為平滑,顯得更模糊,因?yàn)樗?lián)合周邊像素進(jìn)行了平均處理:
而如下圖像處理矩陣將使得像素值變化明顯的地方更為明顯,強(qiáng)化邊緣,而變化平緩的地方?jīng)]有影響,達(dá)到提取邊緣的目的:
5、對(duì)一些解釋的不同意見(jiàn)
上面一些對(duì)卷積的形象解釋?zhuān)缰鯁?wèn)題?卷積為什么叫「卷」積?中荊哲以及問(wèn)題?如何通俗易懂地解釋卷積?中馬同學(xué)等人提出的如下比喻:
其實(shí)圖中“卷”的方向,是沿該方向進(jìn)行積分求和的方向,并無(wú)翻轉(zhuǎn)之意。因此,這種解釋?zhuān)](méi)有完整描述卷積的含義,對(duì)“卷”的理解值得商榷。
審核編輯:黃飛
?
評(píng)論
查看更多