直觀理解卷積

卷積直觀理解

原文來自最容易理解的對卷積(convolution)的解釋

🎬個人簡介:一個全棧工程師的升級之路!
📋個人專欄:計算機雜記
🎀CSDN主頁?發狂的小花
🌄人生秘訣:學習的本質就是極致重復!

目錄

啰嗦開場白

1.知乎上排名最高的解釋

2.卷積的另外解釋

3.卷積的數學定義

4.卷積的應用

5.補充

6.另外一個關于卷積的有意思的解釋


啰嗦開場白

讀本科期間,信號與系統里面經常講到卷積(convolution),自動控制原理里面也會經常有提到卷積。碩士期間又學了線性系統理論與數字信號處理,里面也是各種大把大把卷積的概念。至于最近大火的深度學習,更有專門的卷積神經網絡(Convolutional Neural Network, CNN),在圖像領域取得了非常好的實際效果,已經把傳統的圖像處理的方法快干趴下了。啰啰嗦嗦說了這么多卷積,慚愧的是,好像一直以來對卷積的物理意義并不是那么清晰。一是上學時候只是簡單考試,沒有仔細思考過具體前后的來龍去脈。二是本身天資比較愚鈍,理解能力沒有到位。三則工作以后也沒有做過強相關的工作,沒有機會得以加深理解。趁著年前稍微有點時間,查閱了一些相關資料,力爭將卷積的前世今生能搞明白。

1.知乎上排名最高的解釋

首先選取知乎上對卷積物理意義解答排名最靠前的回答。?
不推薦用“反轉/翻轉/反褶/對稱”等解釋卷積。好好的信號為什么要翻轉?導致學生難以理解卷積的物理意義。?
這個其實非常簡單的概念,國內的大多數教材卻沒有講透。

直接看圖,不信看不懂。以離散信號為例,連續信號同理。

已知x[0] = a, x[1] = b, x[2]=c?
這里寫圖片描述

已知y[0] = i, y[1] = j, y[2]=k?
這里寫圖片描述

下面通過演示求x[n] * y[n]的過程,揭示卷積的物理意義。

第一步,x[n]乘以y[0]并平移到位置0:?
這里寫圖片描述

第二步,x[n]乘以y[1]并平移到位置1?
這里寫圖片描述

第三步,x[n]乘以y[2]并平移到位置2:?
這里寫圖片描述

最后,把上面三個圖疊加,就得到了x[n] * y[n]:?
這里寫圖片描述

簡單吧?無非是平移(沒有反褶!)、疊加。?
從這里,可以看到卷積的重要的物理意義是:一個函數(如:單位響應)在另一個函數(如:輸入信號)上的加權疊加。

重復一遍,這就是卷積的意義:加權疊加。

對于線性時不變系統,如果知道該系統的單位響應,那么將單位響應和輸入信號求卷積,就相當于把輸入信號的各個時間點的單位響應 加權疊加,就直接得到了輸出信號。

通俗的說:?
在輸入信號的每個位置,疊加一個單位響應,就得到了輸出信號。?
這正是單位響應是如此重要的原因。

在輸入信號的每個位置,疊加一個單位響應,就得到了輸出信號。?
這正是單位響應是如此重要的原因。

在輸入信號的每個位置,疊加一個單位響應,就得到了輸出信號。?
這正是單位響應是如此重要的原因。

以上是知乎上排名最高的回答。比較簡單易懂。

有個回復也可以參考:?
樓主這種做法和通常教材上的區別在于:書上先反褶再平移,把輸入信號當作一個整體,一次算出一個時間點的響應值;而樓主把信號拆開,一次算出一個信號在所有時間的響應值,再把各個信號相加。兩者本質上是相同的。

2.卷積的另外解釋

卷積表示為y(n)=x(n)?h(n)?
使用離散數列來理解卷積會更形象一點,我們把y(n)的序列表示成y(0),y(1),y(2),?, 這是系統響應出來的信號。?
同理,x(n)的對應時刻的序列為x(0),x(1),x(2),??
其實我們如果沒有學過信號與系統,就常識來講,系統的響應不僅與當前時刻系統的輸入有關,也跟之前若干時刻的輸入有關,因為我們可以理解為這是之前時刻的輸入信號經過一種過程(這種過程可以是遞減,削弱,或其他)對現在時刻系統輸出的影響,那么顯然,我們計算系統輸出時就必須考慮現在時刻的信號輸入的響應以及之前若干時刻信號輸入的響應之“殘留”影響的一個疊加效果。?
假設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的范圍來約束的。即說白了,就是當前時刻的系統響應與多少個之前時刻的響應的“殘留影響”有關。?
當考慮這些因素后,就可以描述成一個系統響應了,而這些因素通過一個表達式(卷積)即描述出來不得不說是數學的巧妙和迷人之處了。

3.卷積的數學定義

前面講了這么多,我們看看教科書上對卷積的數學定義。?
這里寫圖片描述

4.卷積的應用

用一個模板和一幅圖像進行卷積,對于圖像上的一個點,讓模板的原點和該點重合,然后模板上的點和圖像上對應的點相乘,然后各點的積相加,就得到了該點的卷積值。對圖像上的每個點都這樣處理。由于大多數模板都是對稱的,所以模板不旋轉。卷積是一種積分運算,用來求兩個曲線重疊區域面積。可以看作加權求和,可以用來消除噪聲、特征增強。?
把一個點的像素值用它周圍的點的像素值的加權平均代替。?
卷積是一種線性運算,圖像處理中常見的mask運算都是卷積,廣泛應用于圖像濾波。?
卷積關系最重要的一種情況,就是在信號與線性系統或數字信號處理中的卷積定理。利用該定理,可以將時間域或空間域中的卷積運算等價為頻率域的相乘運算,從而利用FFT等快速算法,實現有效的計算,節省運算代價。

5.補充

另外在知乎上看到非常好也非常生動形象的解釋,特意復制粘貼過來。(知乎馬同學的解釋)

從數學上講,卷積就是一種運算。?
某種運算,能被定義出來,至少有以下特征:?
1.首先是抽象的、符號化的?
2.其次,在生活、科研中,有著廣泛的作用

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

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

這里寫圖片描述

這兩個式子有一個共同的特征:?
這里寫圖片描述

這個特征有什么意義?

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

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

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

我有兩枚骰子:

這里寫圖片描述

把這兩枚骰子都拋出去:?
這里寫圖片描述

求:兩枚骰子點數加起來為4的概率是多少??
這里問題的關鍵是,兩個骰子加起來要等于4,這正是卷積的應用場景。

我們把骰子各個點數出現的概率表示出來:?
這里寫圖片描述

那么,兩枚骰子點數加起來為4的情況有:?
這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

因此,兩枚骰子點數加起來為4的概率為:?
f(1)g(3)+f(2)g(2)+f(3)g(1)

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

(f?g)(4)=∑m=13f(4?m)g(m)

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

樓下早點鋪子生意太好了,供不應求,就買了一臺機器,不斷的生產饅頭。?
假設饅頭的生產速度是 f(t) ,那么一天后生產出來的饅頭總量為:?
∫240f(t)dt?
饅頭生產出來之后,就會慢慢腐敗,假設腐敗函數為 g(t) ,比如,10個饅頭,24小時會腐敗:?
10?g(t)?
想想就知道,第一個小時生產出來的饅頭,一天后會經歷24小時的腐敗,第二個小時生產出來的饅頭,一天后會經歷23小時的腐敗。?
如此,我們可以知道,一天后,饅頭總共腐敗了:?
∫240f(t)g(24?t)dt?
這就是連續的卷積。

4 圖像處理?
4.1 原理

有這么一副圖像,可以看到,圖像上有很多噪點:?
這里寫圖片描述

高頻信號,就好像平地聳立的山峰:?
這里寫圖片描述

看起來很顯眼。

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

平滑后得到:?
這里寫圖片描述

4.2 計算

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

有噪點的原圖,可以把它轉為一個矩陣:?
這里寫圖片描述

然后用下面這個平均矩陣(說明下,原圖的處理實際上用的是正態分布矩陣,這里為了簡單,就用了算術平均矩陣)來平滑圖像:

g=????191919191919191919????

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

比如我要平滑a1,1?點,就在矩陣中,取出a1,1點附近的點組成矩陣 f ,和 g 進行卷積計算后,再填回去?
這里寫圖片描述

要注意一點,為了運用卷積, g 雖然和 f 同維度,但下標有點不一樣:?
這里寫圖片描述

這里寫圖片描述

寫成卷積公式就是:

(f?g)(1,1)=∑k=02∑h=02f(h,k)g(1?h,1?k)

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

這樣相當于實現了 g 這個矩陣在原來圖像上的劃動(準確來說,下面這幅圖把 g 矩陣旋轉了180°?):

6.另外一個關于卷積的有意思的解釋

看了好多關于卷積的答案,看到這個例子才徹底地理解了這個過程~?
關于卷積的一個血腥的講解?
比如說你的老板命令你干活,你卻到樓下打臺球去了,后來被老板發現,他非常氣憤,扇了你一巴掌(注意,這就是輸入信號,脈沖),于是你的臉上會漸漸地(賤賤地)鼓起來一個包,你的臉就是一個系統,而鼓起來的包就是你的臉對巴掌的響應,好,這樣就和信號系統建立起來意義對應的聯系。下面還需要一些假設來保證論證的嚴謹:假定你的臉是線性時不變系統,也就是說,無論什么時候老板打你一巴掌,打在你臉的同一位置(這似乎要求你的臉足夠光滑,如果你說你長了很多青春痘,甚至整個臉皮處處連續處處不可導,那難度太大了,我就無話可說了哈哈),你的臉上總是會在相同的時間間隔內鼓起來一個相同高度的包來,并且假定以鼓起來的包的大小作為系統輸出。好了,那么,下面可以進入核心內容——卷積了!?
如果你每天都到地下去打臺球,那么老板每天都要扇你一巴掌,不過當老板打你一巴掌后,你5分鐘就消腫了,所以時間長了,你甚至就適應這種生活了……如果有一天,老板忍無可忍,以0.5秒的間隔開始不間斷的扇你的過程,這樣問題就來了,第一次扇你鼓起來的包還沒消腫,第二個巴掌就來了,你臉上的包就可能鼓起來兩倍高,老板不斷扇你,脈沖不斷作用在你臉上,效果不斷疊加了,這樣這些效果就可以求和了,結果就是你臉上的包的高度隨時間變化的一個函數了(注意理解);如果老板再狠一點,頻率越來越高,以至于你都辨別不清時間間隔了,那么,求和就變成積分了。可以這樣理解,在這個過程中的某一固定的時刻,你的臉上的包的鼓起程度和什么有關呢?和之前每次打你都有關!但是各次的貢獻是不一樣的,越早打的巴掌,貢獻越小,所以這就是說,某一時刻的輸出是之前很多次輸入乘以各自的衰減系數之后的疊加而形成某一點的輸出,然后再把不同時刻的輸出點放在一起,形成一個函數,這就是卷積,卷積之后的函數就是你臉上的包的大小隨時間變化的函數。本來你的包幾分鐘就可以消腫,可是如果連續打,幾個小時也消不了腫了,這難道不是一種平滑過程么?反映到劍橋大學的公式上,f(a)就是第a個巴掌,g(x-a)就是第a個巴掌在x時刻的作用程度,乘起來再疊加就ok了,大家說是不是這個道理呢?我想這個例子已經非常形象了,你對卷積有了更加具體深刻的了解了嗎?

參考資料:?
1.如何通俗易懂地解釋卷積? - 知乎?
2.卷積的意義-CSDN博客?
3.【分享】轉一篇好文——談談卷積的物理意義 - 數學 - 小木蟲 - 學術 科研 互動社區?
4.為什么輸入信號卷積沖激響應就能得到輸出信號? - 知乎?
5.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C?
6.卷積的本質及物理意義(全面理解卷積)_卷積的物理意義-CSDN博客?
7.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E5%AE%9A%E7%90%86?
8.如何理解傅里葉變換公式? - 知乎?如何理解傅里葉變換公式?

🌈我的分享也就到此結束啦🌈
如果我的分享也能對你有幫助,那就太好了!
若有不足,還請大家多多指正,我們一起學習交流!
📢未來的富豪們:點贊👍→收藏?→關注🔍,如果能評論下就太驚喜了!
感謝大家的觀看和支持!最后,?祝愿大家每天有錢賺!!!歡迎關注、關注!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712282.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712282.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從經典學習 NLP:小白到大白:1. Word Tokenization

文章目錄 1 Word Tokenization1.1 Top-down/rule-based tokenization1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm 1 Word Tokenization 來源:JM3 Chapter 2.5 p19-23 tokenization 就是 把 running text 分割成為 words; 常有兩種方…

AVL 樹

AVL樹的概念 二叉搜索樹雖可以縮短查找的效率,但如果數據有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當于在順序表中搜索元素,效率低下。因此,兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年 發明了一種解決…

k8s筆記26--快速實現prometheus監控harbor

k8s筆記26--快速實現prometheus監控harbor 簡介采集指標&配置grafana面板采集指標配置grafana面板 說明 簡介 harbor是當前最流行的開源容器鏡像倉庫項目,被大量IT團隊廣泛應用于生產、測試環境的項目中。本文基于Harbor、Prometheus、Grafana介紹快速實現監控…

3. 臺階問題

數樓梯 題目描述 樓梯有 N N N 階,上樓可以一步上一階,也可以一步上二階。 編一個程序,計算共有多少種不同的走法。 輸入格式 一個數字,樓梯數。 輸出格式 輸出走的方式總數。 樣例 #1 樣例輸入 #1 4樣例輸出 #1 5提示…

FPGA之帶有進位邏輯的加法運算

module ADDER( input [5:0]A, input [5:0]B,output[6:0]Q ); assign Q AB; endmodule 綜合結果如下圖所示: 使用了6個Lut,,6個LUT分布…

詳細介紹如何用windows11自帶Hyper-V安裝虛擬機

通過系統自帶的hyper-v安裝windows11,舒服又愜意,相比用第三方虛擬機軟件速度快很多。 硬件準備 1、對于電腦自帶的虛擬機Hyper-V,不是每種電腦系統版本都帶著的。我們先要確定您的系統符合 Hyper-V 的最低要求。我們跟著下面的步驟來執行&…

鴻蒙開發相關知識(四)【數據持久化(用戶首選項、關系型數據庫)、通知(基礎通知、進度條通知、通知意圖)】

文章目錄 一、數據持久化1、用戶首選項(1)語法說明(2)完整代碼示例 2、關系型數據庫(1)初始化數據庫(2)增刪改數據(3)查詢數據(4)完整…

《2023年勒索軟件攻擊態勢報告》

獲取方式: 鏈接:https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取碼:2lo0

探索數據結構:解鎖計算世界的密碼

?? 歡迎大家來到貝蒂大講堂?? 🎈🎈養成好習慣,先贊后看哦~🎈🎈 所屬專欄:數據結構與算法 貝蒂的主頁:Betty‘s blog 前言 隨著應用程序變得越來越復雜和數據越來越豐富,幾百萬、…

600萬訂單每秒Disruptor +SpringBoot,如何解決消息不丟失?

尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中,最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、shein 希音、百度、網易的面試資格,遇到很多很重要的面試題: Disruptor 官方說能達到每秒600w OPS訂單處理能力&…

Java——Object

1.Object萬類之祖 1.1 Object類型的概述 Object類是所有類型的頂層父類,所有類型的直接或者間接的父類;所有的類型中都含有Object類中的所有方法。 隨意定義一個類型,不手動顯式定義其父類,那么這個類的父類就是Object類 public Object() …

【C語言】指針初階2.0版本

這篇博文我們來繼續學習指針的其他內容 指針2.0 傳值調用與傳址調用傳值調用傳址調用 一維數組與指針理解數組名使用指針深入理解一維數組 二級指針指針數組二維數組與指針 傳值調用與傳址調用 在開始之前,我們需要先了解這個概念,后面才能夠正常的學習…

利用 Python 抓取數據探索汽車市場趨勢

一、引言 隨著全球對環境保護意識的增強和技術的進步,新能源汽車作為一種環保、高效的交通工具,正逐漸受到人們的關注和青睞。在這個背景下,對汽車市場的數據進行分析和研究顯得尤為重要。 本文將介紹如何利用 Python 編程語言,結…

VSCode上搭建C/C++開發環境(vscode配置c/c++環境)Windows系統---保姆級教程

引言勸退 VSCode,全稱為Visual Studio Code,是由微軟開發的一款輕量級,跨平臺的代碼編輯器。大家能來搜用VSCode配置c/c,想必也知道VSCode的強大,可以手握一個VSCode同時編寫如C,C,C#&#xff…

微服務day02-Ribbon負載均衡與Nacos安裝與入門

一.Ribbon負載均衡 在上一節中,我們通過在RestTemplte實例中加上了注解 LoadBalanced,表示將來由RestTemplate發起的請求會被Ribbon攔截和處理,實現了訪問服務時的負載均衡,那么他是如何實現的呢? 1.1 Ribbon負載均衡的原理 Rib…

鏈表的歸并排序-LeetCode(Python版)

雙指針歸并排序!圖解排序鏈表!-知乎 class ListNode(object):def __init__(self, val0, nextNone):self.val valself.next nextclass Solution(object):def find_mid(self, head): # 快慢指針slow, fast head, headwhile fast.next and fast.next.n…

linux 硬盤存儲剩余容量自動化監控+報警通知

linux 硬盤存儲剩余容量自動化監控報警通知 編寫shell腳本 #!/bin/bash# 獲取系統存儲大小(單位為GB) storage_size$(df -h / | awk NR2 {print $4} | sed s/G//)# 閾值(小于10GB觸發報警) threshold10# 釘釘機器人 Webhook UR…

LabVIEW非接觸式電阻抗層析成像系統

LabVIEW非接觸式電阻抗層析成像系統 非接觸式電阻抗層析成像(NEIT)技術以其無輻射、非接觸、響應速度快的特點,為實時監測提供了新的解決方案。基于LabVIEW的電阻抗層析成像系統,實現了數據的在線采集及實時成像,提高…

代碼隨想錄算法訓練營第四十四天|139.單詞拆分、56.攜帶礦石資源

139.單詞拆分 思路:將字符串s看作為背包容量,從字符串中獲取物品,剛好滿足背包容量的過程,因為可以從字符串中多次取值,相當于物品的數量是不限制,這就是一個完全背包的問題!這個題有個關鍵點&a…

Python中的windows路徑問題

在Python中處理Windows路徑時,經常會遇到一些特殊的問題。這主要是因為Windows和大多數其他操作系統(如Linux和macOS)使用不同的路徑分隔符。在Windows中,路徑使用反斜杠(\)作為分隔符,而在其他操作系統中,路徑使用正斜杠(/)作為分隔符。 以下是在Python中處理Windo…