閱讀145 返回首頁    go 阿裏雲 go 技術社區[雲棲]


關於“卷積”的通俗解釋

這幾天搞圖像總遇到卷積,對於以前是通信專業的我來說,卷積並不陌生,《信號與係統》裏麵的常客,但是既然這個數學工具最初是出於物理上麵,那肯定有通俗易懂的物理背景。

數據挖掘中有時需要卷積這一數學工具(例如計算個體適應度、對象間距離,以及幹預效果等等),昨天又有同學問到相關問題,借用最近在網上的滾燙的詞匯集 { 輻射,服碘,補鹽,空襲 },對卷積做了一個直觀的解釋。反饋還算滿意,又在過去講課的PPT中取些素材,改寫成了這篇博文。
  
  幼童背古詩文的感覺,來自數學係的同學覺得卷積是小菜一碟,隨手就寫出卷積定義
      F(t)= ∫ f(τ)g(t-τ)dτ  (積分限從-∞ 到+∞)
  並指出這是含參積分,t是參數,覺得淺而又顯,無須解釋。而部分(例如來自工科和醫學專業的)選修數據挖掘的學生,還是覺得稍有點難,說:相關公式能默寫、能推導、能通過考試,自己還是覺得不踏實,覺得沒有真正理解;發明者是怎樣想出來的?有何直觀背景?用在哪些場合?
  一言以蔽之,在邏輯上認可,而直觀上迷茫。好像很小的時候背誦古詩文那種感覺。
  鑒於數學老師已經講解過理論推導,作為一種補充,這裏用生活實例做一些直觀解釋,給出一個大框架和物理直觀,為敘述簡單,忽略一些細節。需要說明,直觀的解釋僅用於輔助理解,不能取代嚴格的描述和證明。

 

  幾個時髦(但可能不很貼切)的例子.
  輻射:設某核電站事故中,某工作人員每天到搶險現場工作T分鍾,接受一定劑量的輻射,輻射會自然地衰減,如此工作N天,總的輻射量用什麼計算工具來(粗略地)估計?回答:可以用卷積。 
  服碘:某人為了防輻射,自己找來碘片,每天口服若幹,體內碘殘量會隨人體代謝衰減,N天後體內積累的碘殘量如何(粗略地)估計?還是卷積;(後麵科普部分將給出簡單的推導過程);
  補鹽:某人為了反輻射,搶購來碘鹽,每餐口服若幹,體內鹽殘量會隨人體代謝衰減。N天後體內積累的鹽量和碘殘量如何(粗略地)估計?可以用卷積;
  空襲:某多國部隊每隔N小時對桀驁不馴的某地區或國家實行間歇性空中打擊,每次打擊後,其物理破壞和心理震懾作用會隨時間衰減(例如,被打方會組織搶修,心裏承受度增加等等),如此進行M天後,累積的打擊總效果如何(粗略地)估計?還是可以用卷積。
  還有其他例子,如長期服藥的血藥濃度,長期吸入汙染物在人體內的積累,吸煙或喝咖啡的積累效應,多次噴灑農藥的殘留量,等等,也可以用卷積來估計。
  上麵的有些例子可能不很貼切,有幾個原因:,
  (a)卷積是積分運算,處理對象要求是可以積分的函數,在工程中,一般對應於連續現象而不是離散對象;把離散對象當做連續的現象處理,隻能粗略估計。
  (b)社會問題,政治問題比較複雜,即使加上很多假定,也隻是框架性的估算。
  但是,有計算、有依據的估計總比算命先生的神仙數字可信。
  
  難懂之因:為了數學美,拆卸了腳手架。 教科書書常用“定義—定理”的體係,先給出數學定義,然後給出若幹性質, 從公式 到 公式,逐步推導。有的教科書采用用信號“反褶、平移、相乘、積分”給出幾何解釋,屬於用數學解釋數學,提問者不滿足這種解釋。
  這不是當年發明卷積的大師們的“需求–猜想—發現—證明—應用”的路徑,大師們建設好“卷積”大廈後,為了數學美,拆卸了腳手架,現在人們看到的是煉成的鋼鐵,看不出鋼鐵是怎樣煉成的。造成了部分非數學專業學生的一個難點。

 

  一次輸液引出的班門弄斧 一次偶感風寒,服藥未愈,轉作靜脈滴注,無聊地望著那藥液慢騰騰地滴,忽然靈感一閃:
  (1)這是一個可離散觀察的連續過程。透明玻璃管構成了可視化的界麵,能離散地對藥滴計數,而下麵是相對穩定的液柱高度,保證了藥液連續(有點脈動)地注入靜脈,比較適合積分處理;(口服和注射,就相對離散,結果就更粗略一些)。
  (2)藥動學有個術語血藥濃度,怎樣來保證血藥濃度在安全閾值之下,又在有效閾值之上呢?
  立刻在草稿本上寫劃,哇噻,原來可以用卷積!而且隻需要簡單的積分知識。於是,對此常問難點,有了一個易懂的直觀解釋。正是:小恙滴注,焉知非福?
  下麵將敘述這次雙重的(數學與醫學)的班門弄斧,疏漏之處,請專家指正。
  
  靜脈滴注與體內藥物濃度 為簡單又不失一般性,給出下列符號和假定:
  從t=0開始,每隔τ秒,輸入藥物一次(離散化是為了簡單);藥量隨時間變化, 在時刻t時的那次給藥量為f(t),關注的時刻點為 t=0, τ,2τ,3τ,…

  
  一滴藥液的在體內衰減規律 藥物以多種方式代謝(衰減),按假設,在τ1時的那滴藥液含藥量f(τ1),當時間流逝到t時刻,假設那一滴藥物在體內的殘量是f(τ1) g(tτ1),其中g(tτ1)稱為衰減因子函數,怎麼找出衰減因子的具體結構呢? 藥動學中有兩種衰減方式 :

  (a)零級動力學消除,即恒速消除,如乙醇血濃>0.05 mg/ml時,較簡單;

  (b)一級動力學消除,即恒比消除,消除速度與血藥濃度成正比,如乙醇血濃<0.05 mg/ml時的衰減規律,這也類似於簡單熱傳導中散熱速度與溫差成正比。

  設在τ時刻 ,輸入一滴藥,藥量為f(τ) 根據一級動力學消除,建立最簡單的微分方程 ;

 

       dg/dt =-kg

   考慮t=τ時不衰減的初始條件,容易求得 g=e-k(t-τ)   

  為下麵方便,把衰減因子改寫為  

      g(t-τ)= e-k(t-τ)

      於是,在τ>0,給藥一次,藥量為f(τ) 

              當t2τ時,血藥濃度降到  f(τ)*g(t-τ)= f(τ)*g(τ)= f(τ)(1/ek ) 

              當t3τ時,血藥濃度降到  f(τ)*g(t-τ) = f(τ)*g(2τ)= f(τ)(1/e2k ) 

              當t4τ時,血藥濃度降到   f(τ)*g(t-τ) = f(τ)*g(3τ)= f(τ)(1/e3k )

   可見,隻給藥一滴,血藥濃度衰減很快,難以治療那種要與病毒或細菌打持久戰的疾病。

 

   多次密集給藥 或連續給藥  上麵是隻在τ>0,給藥一次,現在,τ動起來,n次給藥,給藥時間依次取τ1, τ2,….. τn  ;n次密集給藥後,當時間流逝到t時的血藥濃度是    

    f(τj)*g(t-τj)              ( 對 j=1,2,….. n  求和)

 

 前麵說過,靜脈滴注是一個可離散觀察的連續過程。,所以,上麵的和式可寫為積分形式,即卷積 

    F(t)=  f(τ)g(t-τ)dτ 

 

    曲線光滑工具 當f(τ)是脈衝函數時(例如考察一滴藥引發的血藥濃度),曲線顯得不夠光滑,而卷積F(t)是多次脈衝的(平均)累積效應,或可視為是一種加權平均,所以,F(t)的曲線就光滑一些,所以,醫生要考察N小時的滴注效果,而不察幾分鍾或一滴藥的效果。選擇適當的g(t-τ)函數,(例如,3/2次方衰減型、平方衰減性、指數衰減型、周期兼指數衰減型,...),可用卷積作為突出不同加權方式的曲線光滑工具。

   比較光滑、不是陡升陡降的血藥濃度曲線表明,靜脈滴注能較好地控製血藥濃度;這大概也是有些醫生和病人喜歡它的原因;當然,如果過分依賴靜脈滴注,則減少了免疫係統的鍛煉機會,所以很多醫生主張,如果服藥能解決問題,就不要滴注

   

   更多的應用實例  卷積的結果可輔助人們定量地協調脈動式輸入 f(τ) 和 衰減g(t-τ) 這一對矛盾,使得累積效應F(t)= ∫ f(τ)g(t-τ)dτ 在控製範圍內。

   例如,研究幹預規則,(例如,葉酸幹預新生兒腦畸形缺陷),幹預為f(τ),複雜的衰減g(t-τ),總的幹預效果可否用卷積來粗略描述?
  再例如,製定正確的給藥劑量和周期,例如照醫囑攝入碘或鹽;
  又例如,製定空中打擊方案的強度和頻度,常識告訴人們,足夠的強度和密度才能有效打擊。卷積作為工具,或許可定量計算出最經濟打擊強度和密度。而被打擊的一方,可計算出足夠的衰減因子,使得能在被轟炸後有效恢複;戰爭是鐵血與智慧的較量,當雙方的鐵與血差不多時,如《孫子.計篇》所說,“多算勝,少算不勝”,而卷積隻不過在眾多的計算方法基礎上,增加了一個算法,僅此而已,

   最近,在這個不平靜的世界上,有一場空襲和反空襲的較量,不知持續多久?10天,100天,還是200天?研究軍事的專家或許可用卷積做個模型。

    武俠小說中,有時候看見一方逐步投入兵力,使用添油戰術,好像是多次服藥,每次都沒有服夠量,血藥濃度低於有效門限。被逐次殲滅。

    卷積並不神秘,它有其退化版,例如水池一麵進水,一麵放水,求瞬時水量。當進水勻速且放水速度服從零級或一級動力學消除規律時,偶爾也作為中小學生的數學奧賽題,基礎好的聰明學生能用初等方法計算。但當進水是1+sin(t)這樣的脈動函數,或更複雜的函數時,就隻能用卷積了。

    卷積是一個老技術,對某些專業的學生是一個難點,“老技術+新講法+直觀解釋”使其容易被初學者接受。這裏要強調,直觀解釋不能取代嚴格的數學推理,這裏的班門弄斧。不能取代數學老師的正規訓練。。




之二

作者用最通俗的語言詮釋了卷積,覺得不錯,公式太抽象,這樣解釋就易懂很多。


最近總是和卷積打交道,工作需要,每天都要碰到它好幾次,不勝煩惱,因為在大學時候學信號與係統的時候就沒學會,我於是心想一定要把卷積完全搞明白。正好同辦公室的同學也問我什麼是卷積,師姐昨天也告訴我說:“我也早就想把這個問題搞明白了!”經過一段時間的思考之後,有一些很有趣的體會和大家分享。


聽說卷積這種運算式物理學家發明的,在實際中用得不亦樂乎,而數學家卻一直沒有把運算的意義徹底搞明白。仔細品以下,還是有那麼點滋味的。


我們都知道這個公式,但是它有什麼物理意義呢,平時我們用卷積做過很多事情,信號處理時,輸出函數是輸入函數和係統函數的卷積,在圖像處理時,兩組幅分辨率不同的圖卷積之後得到的互相平滑的圖像可以方便處理。卷積甚至可以用在考試作弊中,為了讓照片同時像兩個人,隻要把兩人的圖像卷積處理即可,這就是一種平滑的過程,可是我們怎麼才能真正把公式和實際建立起一種聯係呢,也就是說,我們能不能從生活中找到一種很方便且具體的例子來表達公式的物理意義呢?我想到一種,下麵進入正題:
比如說你的老板命令你幹活,你卻到樓下打台球去了,後來被老板發現,他非常氣憤,扇了你一巴掌(注意,這就是輸入信號,脈衝),於是你的臉上會漸漸地(賤賤地)鼓起來一個包,你的臉就是一個係統,而鼓起來的包就是你的臉對巴掌的響應,好,這樣就和信號係統建立起來意義對應的聯係。下麵還需要一些假設來保證論證的嚴謹:假定你的臉是線性時不變係統,也就是說,無論什麼時候老板打你一巴掌,打在你臉的同一位置(這似乎要求你的臉足夠光滑,如果你說你長了很多青春痘,甚至整個臉皮處處連續處處不可導,那難度太大了,我就無話可說了哈哈),你的臉上總是會在相同的時間間隔內鼓起來一個相同高度的包來,並且假定以鼓起來的包的大小作為係統輸出。好了,那麼,下麵可以進入核心內容——卷積了!
如果你每天都到地下去打台球,那麼老板每天都要扇你一巴掌,不過當老板打你一巴掌後,你5分鍾就消腫了,所以時間長了,你甚至就適應這種生活了……如果有一天,老板忍無可忍,以0.5秒的間隔開始不間斷的扇你的過程,這樣問題就來了,第一次扇你鼓起來的包還沒消腫,第二個巴掌就來了,你臉上的包就可能鼓起來兩倍高,老板不斷扇你,脈衝不斷作用在你臉上,效果不斷疊加了,這樣這些效果就可以求和了,結果就是你臉上的包的高度歲時間變化的一個函數了(注意理解);如果老板再狠一點,頻率越來越高,以至於你都辨別不清時間間隔了,那麼,求和就變成積分了。可以這樣理解,在這個過程中的某一固定的時刻,你的臉上的包的鼓起程度和什麼有關呢?和之前每次打你都有關!但是各次的貢獻是不一樣的,越早打的巴掌,貢獻越小,所以這就是說,某一時刻的輸出是之前很多次輸入乘以各自的衰減係數之後的疊加而形成某一點的輸出,然後再把不同時刻的輸出點放在一起,形成一個函數,這就是卷積,卷積之後的函數就是你臉上的包的大小隨時間變化的函數。本來你的包幾分鍾就可以消腫,可是如果連續打,幾個小時也消不了腫了,這難道不是一種平滑過程麼?反映到劍橋大學的公式上,f(a)就是第a個巴掌,g(x-a)就是第a個巴掌在x時刻的作用程度,乘起來再疊加就ok了,大家說是不是這個道理呢?我想這個例子已經非常形象了,你對卷積有了更加具體深刻的了解了嗎?
最近要忙開題了,不過周末了還是放鬆一下吧。其實我真的希望我的朋友們看到這篇文章能給我留言,發表你們的想法,有不妥之處歡迎提出來。在本文的下半部分,我會再講一個抽象的例子,以便能讓大家從卷積中能更好地了解數學與生活的聯係。

最後更新:2017-04-03 05:39:34

  上一篇:go Akka學習筆記(三):什麼是Actor
  下一篇:go Android 適配器教程(四)