深度學習FPGA實現基礎知識14(如何理解“卷積”運算)


需求說明:深度學習FPGA實現知識儲備

來自:http://blog.sina.com.cn/s/blog_80556b34010186hf.html


百度百科

函數內涵

簡單定義:卷積是分析數學中一種重要的運算。 設:f(x),g(x)是R1上的兩個可積函數,作積分: 可以證明,關於幾乎所有的實數x,上述積分是存在的。這樣,隨着x的不同取值,這個積分就定義了一個新函數h(x),稱為函數fg的卷積,記為h(x)=(f*g)(x) 容易驗證,(f * g)(x) = (g * f)(x),並且(f * g)(x)仍為可積函數。這就是說,把卷積代替乘法,L1(R1)空間是一個代數,甚至是巴拿赫代數。
卷積與傅里葉變換有着密切的關系。利用一點性質,即兩函數的傅里葉變換的乘積等於它們卷積后的傅里葉變換,能使傅里葉分析中許多問題的處理得到簡化。
       由卷積得到的函數f*g一般要比f和g都光滑。特別當g為具有緊致集的光滑函數,f為局部可積時,它們的卷積f * g也是光滑函數。利用這一性質,對於任意的可積函數f,都可以簡單地構造出一列逼近於f的光滑函數列fs,這種方法稱為函數的光滑化或正則化。
函數定義 卷積是兩個變量在某范圍內相乘后求和的結果。如果卷積的變量是序列x(n)和h(n),則卷積的結果其中星號*表示卷積。當時序n=0時,序列h(-i)是h(i)的時序i取反的結果;時序取反使得h(i)以縱軸為中心翻轉180度,所以這種相乘后求和的計算法稱為卷積和,簡稱卷積。另外,n是使h(-i)位移的量,不同的n對應不同的卷積結果。如果卷積的變量是函數x(t)和h(t),則卷積的計算變為其中p是積分變量,積分也是求和,t是使函數h(-p)位移的量,星號*表示卷積。參考《數字信號處理》楊毅明著,p.55、p.188、p.264,機械工業出版社2012年發行。
正文:

卷積這個東東是“信號與系統”中論述系統對輸入信號的響應而提出的。因為是對模擬信號論述的,所以常常帶有繁瑣的算術推倒,很簡單的問題的本質常常就被一大堆公式淹沒了,那么卷積究竟物理意義怎么樣呢?
卷積表示為y(n) = x(n)*h(n)
使用離散數列來理解卷積會更形象一點,我們把y(n)的序列表示成y(0),y(1),y(2) and so on; 這是系統響應出來的信號。
同理,x(n)的對應時刻的序列為x(0),x(1),x(2)...and so on;
其實我們如果沒有學過信號與系統,就常識來講,系統的響應不僅與當前時刻系統的輸入有關,也跟之前若干時刻的輸入有關,因為我們可以理解為這是之前時刻的輸入信號經過一種過程(這種過程可以是遞減,削弱,或其他)對現在時刻系統輸出的影響,那么顯然,我們計算系統輸出時就必須考慮現在時刻的信號輸入的響應以及之前若干時刻信號輸入的響應之“殘留”影響的一個疊加效果。
假設0時刻系統響應為y(0),若其在1時刻時,此種響應未改變,則1時刻的響應就變成了y(0)+y(1),叫序列的累加和(與序列的和不一樣)。但常常系統中不是這樣的,因為0時刻的響應不太可能在1時刻仍舊未變化,那么怎么表述這種變化呢,就通過h(t)這個響應函數與x(0)相乘來表述,表述為x(m)×h(m-n),具體表達式不用多管,只要記着有大概這種關系,引入這個函數就能夠表述y(0)在1時刻究竟削弱了多少,然后削弱后的值才是y(0)在1時刻的真實值,再通過累加和運算,才得到真實的系統響應。
再拓展點,某時刻的系統響應往往不一定是由當前時刻和前一時刻這兩個響應決定的,也可能是再加上前前時刻,前前前時刻,前前前前時刻,等等,那么怎么約束這個范圍呢,就是通過對h(n)這個函數在表達式中變化后的h(m-n)中的m的范圍來約束的。即說白了,就是當前時刻的系統響應與多少個之前時刻的響應的“殘留影響”有關。
當考慮這些因素后,就可以描述成一個系統響應了,而這些因素通過一個表達式(卷積)即描述出來不得不說是數學的巧妙和迷人之處了。
  
對於非數學系學生來說,只要懂怎么用卷積就可以了,研究什么是卷積其實意義不大,它就是一種微元相乘累加的極限形式。卷積本身不過就是一種數學運算而已。就跟“蝶形運算”一樣,怎么證明,這是數學系的人的工作。
在信號與系統里,f(t)的零狀態響應y(t)可用f(t)與其單位沖激響應h(t) 的卷積積分求解得,即y(t)=f(t)*h(t)。學過信號與系統的都應該知道,時域的卷積等於頻域的乘積,即有 Y(s)=F(s)×H(s)。(s=jw,拉氏變換后等到的函數其實就是信號的頻域表達式)有一點你必須明白,在通信系統里,我們關心的以及 要研究的是信號的頻域,不是時域,原因是因為信號的頻率是攜帶有信息的量。所以,我們需要的是Y(s)這個表達式,但是實際上,我們往往不能很容易的得到F(s)和H(s)這兩個表達式,但是能直接的很容易的得到f(t)和h(t),所以為了找到Y(s)和y(t)的對應關系,就要用到卷積運算。
復頻域。s=jw,當中的j是復數單位,所以使用的是復頻域。通俗的解釋方法是,因為系統中有電感X=jwL、電容X=1/jwC,物理意義是,系統H(s)對不同的頻率分量有不同的衰減,即這種衰減是發生在頻域的,所以為了與時域區別,引入復數的運算。但是在復頻域計算的形式仍然滿足歐姆定理、KCL、KVL、疊加法。負的頻率。之所以會出現負的頻率,這只是數學運算的結果,只存在於數學運算 中,實際中不會有負的頻率。

卷積的過程就是相當於把信號分解為無窮多的沖擊信號,然后進行沖擊響應的疊加。
 

舉個小例子
有一個七品縣令,喜歡用打板子來懲戒那些市井無賴,而且有個慣例:如果沒犯大罪,只打一板,釋放回家,以示愛民如子。有一個無賴,想出人頭地卻沒啥指望,心想:既然揚不了善名,出惡名也成啊。怎么出惡名?炒作唄!怎么炒作?找名人呀!他自然想到了他的行政長官——縣令。

無賴於是光天化日之下,站在縣衙門前撒了一泡尿,后果是可想而知地,自然被請進大堂挨了一板子,然后昂首挺胸回家,躺了一天,嘿!身上啥事也沒有!第二天如法炮制,全然不顧行政長管的仁慈和衙門的體面,第三天、第四天......每天去縣衙門領一個板子回來,還喜氣洋洋地,堅持一個月之久!這無賴的名氣已經和衙門口的臭氣一樣,傳遍八方了!

縣令大人噤着鼻子,呆呆地盯着案子上的驚堂木,擰着眉頭思考一個問題:這三十個大板子怎么不好使捏?......想當初,本老爺金榜題名時,數學可是得了滿分,今天好歹要解決這個問題:

——人(系統!)挨板子(脈沖!)以后,會有什么表現(輸出!)?

——費話,疼唄!
——我問的是:會有什么表現?

——看疼到啥程度。像這無賴的體格,每天挨一個板子啥事都不會有,連哼一下都不可能,你也看到他那得意洋洋的嘴臉了(輸出0);如果一次連揍他十個板子,他可能會皺皺眉頭,咬咬牙,硬挺着不哼(輸出1);揍到二十個板子,他會疼得臉部扭曲,象豬似地哼哼(輸出3);揍到三十個板子,他可能會象驢似地嚎叫,一把鼻涕一把淚地求你饒他一命(輸出5);揍到四十個板子,他會大小便失禁,勉強哼
出聲來(輸出1);揍到五十個板子,他連哼一下都不可能(輸出0)—— 死啦!

縣令鋪開坐標紙,以打板子的個數作為X軸,以哼哼的程度(輸出)為Y軸,繪制了一條曲線:

——嗚呼呀!這曲線象一座高山,弄不懂弄不懂。為啥那個無賴連挨了三十天大板卻不喊繞命呀?

——呵呵,你打一次的時間間隔(Δτ=24小時)太長了,所以那個無賴承受的痛苦程度一天一利索,沒有疊加,始終是一個常數;如果縮短打板子的時間間隔(建議Δτ=0.5秒),那他的痛苦程度可就迅速疊加了;等到這無賴挨三十個大板(t=30)時,痛苦程度達到了他能喊叫的極限,會收到最好的懲戒效果,再多打就顯示不出您的仁慈了。

——還是不太明白,時間間隔小,為什么痛苦程度會疊加呢?

——這與人(線性時不變系統)對板子(脈沖、輸入、激勵)的響應有關。什么是響應?人挨一個板子后,疼痛的感覺會在一天(假設的,因人而異)內慢慢消失(衰減),而不可能突然消失。這樣一來,只要打板子的時間間隔很小,每一個板子引起的疼痛都來不及完全衰減,都會對最終的痛苦程度有不同的貢獻:
t個大板子造成的痛苦程度=Σ(第τ個大板子引起的痛苦*衰減系數)[衰減系數是(t-τ)的函數,仔細品味]
數學表達為:y(t)=∫T(τ)H(t-τ)

——拿人的痛苦來說卷積的事,太殘忍了。除了人以外,其他事物也符合這條規律嗎?

——呵呵,縣令大人畢竟仁慈。其實除人之外,很多事情也遵循此道。好好想一想,鐵絲為什么彎曲一
次不折,快速彎曲多次卻會輕易折掉呢?

——恩,一時還弄不清,容本官慢慢想來——但有一點是明確地——來人啊,將撒尿的那個無賴抓來,
狠打40大板!

整理來自:時間的詩


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com