zoukankan      html  css  js  c++  java
  • 如何通俗易懂地解释卷积?

    取自 知乎@马同学,在此表示感激,侵删。

    从数学上讲,卷积就是一种运算。

    某种运算,能被定义出来,至少有以下特征:

    • 首先是抽象的、符号化的

    • 其次,在生活、科研中,有着广泛的作用

    比如加法:

    • (a+b),是抽象的,本身只是一个数学符号
    • 在现实中,有非常多的意义,比如增加、合成、旋转等等

    卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。

    1 卷积的定义

    我们称 (f*g)(n)f,g 的卷积

    其连续的定义为:

    [displaystyle (f*g)(n)=int _{-infty }^{infty }f( au )g(n- au )d au ]

    其离散的定义为:

    [displaystyle (f*g)(n)=sum_{-infty}^{infty}f( au)g(n- au) ]

    这两个式子有一个共同的特征:

    这个特征有什么意义?

    我们令 (x= au ,y=n- au) ,那么 (x+y=n) 就是下面这些直线:

    只看数学符号,卷积是抽象的,不好理解的,但是,我们可以通过现实中的意义,来习惯卷积这种运算,正如我们小学的时候,学习加减乘除需要各种苹果、糖果来帮助我们习惯一样。

    我们来看看现实中,这样的定义有什么意义。

    2 离散卷积的例子:丢骰子

    我有两枚骰子:

    把这两枚骰子都抛出去:

    求:两枚骰子点数加起来为4的概率为多少?

    这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景。

    我们把骰子各个点数出现的概率表示出来:

    那么,两枚骰子点数加起来为4的情况有:

    因此,两枚骰子点数加起来为4的概率为:

    [f(1)g(3)+f(2)g(2)+f(3)g(1) ]

    符合卷积的定义,把它写成标准的形式就是:

    [displaystyle (f*g)(4)=sum _{m=1}^{3}f(4-m)g(m) ]

    3 连续卷积的例子:做馒头

    楼下早点铺子生意太好了,供不应求,就买了一台机器,不断的生产馒头。

    假设馒头的生产速度是 (f(t)),那么一天后生产出来的馒头总量为:

    [displaystyle int _{0}^{24}f(t)dt ]

    馒头生产出来之后,就会慢慢腐败,假设腐败函数为 (g(t)) ,比如,10个馒头,24小时会腐败:

    [10*g(t) ]

    想想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。

    如此,我们可以知道,一天后,馒头总共腐败了:

    [displaystyle int _{0}^{24}f(t)g(24-t)dt ]

    这就是连续的卷积。

    4 图像处理

    4.1 原理

    有这么一副图像,可以看到,图像上有很多噪点:

    高频信号,就好像平地耸立的山峰:

    看起来很显眼。

    平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去,用数学的话来说,就是把山峰周围的高度平均一下。

    平滑后得到:

    4.2 计算

    卷积可以帮助实现这一平滑算法。

    有噪点的原图,可以把它转为一个矩阵:

    然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像。

    [displaystyle g=egin{bmatrix} frac{1}{9} & frac{1}{9} & frac{1}{9} \ frac{1}{9} & frac{1}{9} & frac{1}{9} \ frac{1}{9} & frac{1}{9} & frac{1}{9} end{bmatrix} ]

    记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。

    比如我要平滑 (a_{1,1}) 点,就在矩阵中,取出 (a_{1,1}) 点附近的点组成矩阵 (f) , 和 (g) 进行卷积计算后,再填回去:

    要注意一点,为了运用卷积,(g) 虽然和 (f) 同纬度,但下标有点不一样:

    我用一个动图来说明计算过程:

    写成卷积公式就是:

    [displaystyle (f*g)(1,1)=sum _{h=0}^{2}sum _{k=0}^{2}f(h,k)g(1-h,1-k) ]

    要求 (C_{4,5}) ,一样可以套用上面的卷积公式。

    [displaystyle (f*g)(m,n)=sum _{h=m-1}^{m+1}sum _{k=n-1}^{n+1}f(h,k)g(m-h,n-k) ; (对于3*3的卷积核) ]

    这相当于实现了 (g) 这个矩阵在原来图像上的滑动(准确来说这幅图把 (g) 矩阵旋转了 (180^circ) ):

    此图出处:[Convolutional Neural Networks - Basics](https://link.zhihu.com/?target=https%3A//mlnotebook.github.io/post/CNN1/)
  • 相关阅读:
    [Ansible]copy 模块
    [Ansible]script模块
    [Ansible]command shell模块
    [Ansible]Systemd 模块
    [Ansible]YUM 模块
    [Ansible]yum_repository模块 添加 删除yum源
    [Ceph]osd 无法启动 start request repeated too quickly for ceph-osd@1.service
    [Ceph]pool 删除 Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
    题解 烷基计数 加强版 加强版
    Polya 定理 学习笔记
  • 原文地址:https://www.cnblogs.com/P3nguin/p/7777239.html
Copyright © 2011-2022 走看看