了解卷积:深度学习中的卷积之我见

一、前言

最近在学习OpenCV的过程中接触到了几个常见的算子(canny算子、sobel算子、laplace算子),并对其中的卷积产生了非常大的困惑,此为其一;同时,卷积也可以说是深度学习当中最重要的概念,如CNN神经网络(Conventional Neural Net)更是深度学习中最为常见,也是最为优秀的神经网络之一,此为其二。可以说,卷积是一道不得不迈的门槛,迈过去能办事,迈不过去就只能吹牛了。在翻阅许多博客之后,我发现每个人对卷积的理解都不尽相同,每一篇都能让我有或多或少的收获,但没有一篇能让我完全理解,因此我想站在自己的角度上,稍微谈谈我对卷积以及卷积在深度学习中的使用的一些浅见。

二、一维卷积及其意义

在数学中,卷积地表示是一维的。我们称 (f*g)(n) 为 f,g 的卷积,其连续的定义为:
(f∗g)(n)=∫∞−∞f(τ)g(n−τ)dτ
其离散的定义为:
(f∗g)(n)=∑−∞∞f(τ)g(n−τ)

好家伙,看是看得懂,可卷积出来的结果究竟是个什么东西?它的意义是什么?我看到的最能让我明白的是这两个答案:


看完你理解一下就会知道,卷积的一个重要意义就是:一个函数在另一个函数上的加权叠加。在深度学习中,我们把一个函数看作是输入的图像代表的矩阵(Input Image),把另一个图像看作是卷积核(Convolution Kernel),两者卷积,就是输入图像和卷积核的加权叠加,权重越大,卷积值越大,就代表越重要。这是一个陌生的概念,我先按下不提。我之所以会提及一维卷积,是因为一维的卷积更能帮助我们理解卷积的意义:加权叠加。这就是为什么要用卷积的原因所在。

三、人类视觉原理

在谈及卷积在深度学习的应用之前,我想先分享一下深度学习神经网络是怎么出现的,这是摘自


它更能帮助我们了解神经网络的作用,以及卷积在其中扮演的角色。

深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。

1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”,可视皮层是分级的。

人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。下面是人脑进行人脸识别的一个示例:

对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的:

我们可以看到,在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。

那么我们可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?答案是肯定的,这也是许多深度学习算法(包括CNN)的灵感来源。

四、深度学习中的卷积

由上一节可见,机器学习脱胎于人类视觉原理,而卷积的作用,就是把关键细节抽象化,因为同一类事物总是有各种相同或者相似的细节,记得卷积的作用吗?加权叠加可以提取出相同的、我们所需要的细节并强调它,一层层的提取和强调,就可以生成机器识物的“逻辑”。

在深度学习中,我们所使用的卷积是二维的,因为机器所“看”的图片实质上是一个矩阵,那么相应的,卷积核也是一个矩阵,这个卷积核在 2 维输入数据上“滑动”,对当前输入的部分元素进行矩阵乘法,然后将结果汇为单个输出像素。

这里曾是让我最百思不得其解的地方,可能是智商限制了我的发挥,很长时间有一个问题困扰着我:一维卷积和二维卷积有什么关系?为什么二维卷积会这么计算而不是别的什么方法?其实稍微转换一下角度就很好理解:把输入图像的矩阵和卷积核排成一行而不是将它以二维的形式放置,就会发现它们其实就是f(x)和g(x)以离散的形式所构成的函数!实质上图像正是以这样一种方式,通过训练得出的卷积核,来抽象出图像的特征:强调个性,抑制共性,抽丝剥茧出一套“逻辑”来。

五、后记

以上是我在一天的学习后所做的总结,本文没有涉及任何高级的操作,只是我对卷积的一些浅显认识过程。我认为,在深度学习中,打好基础,掌握必要概念非常重要,它会对后面的学习起到意想不到的效果!希望能给予想要学习深度学习的读者一个比较清楚的认识!

参考链接:




以及所有我看过的博客们!
转载请注明出处