卷积神经网络的卷积

有不少专业术语乍一听很唬人,“人工神经网络”就属于这一类,至少我第一次听到这个词就被唬住了。

吴军博士——《数学之美》

在众多运算算法中不得不提的,就是卷积神经网络(convolutional neural network, 缩写CNN)。卷积神经网络被广泛运用于图像处理、语音识别等领域,被目前绝大多数的人工智能或多或少采用,而它的扬名,则很大程度上归功于AlphaGo。作为一名数学水平止步于高中时代的法科学子,看到卷积神经网络这个名词时是非常不解的,没错,因为我连啥是卷积也不知道。因此接下来我们就来谈谈对卷积的理解。

1

重新认识多位数乘法

通常作为科普文,往往开篇会解释某个概念是什么。但是在解释一个数学运算是什么的时候,解释概念远不如先知道怎么算来的直接。因此在回答卷积是什么这个问题前,我们首先来了解卷积怎么计算。而在了解卷积运算之前,我们重新来认识一下小学所学习的多位数乘法。以最常使用的123×45这个乘法运算为例,展开后的计算过程如下:

以上的123是一个三位数、45是一个两位数,我们将45中的十位数4、个位数5分别拿出来与123相乘,最后相加,得到的结果与直接相乘的结果一致,这是大家在小学都学过的乘法分配律。(留意上图中出现的4、13、22、15四个数字哦,后面还会出现)

2

从乘法角度看向量卷积

如果我们将数字123理解为向量(1 , 2 , 3),将数字45理解为向量(4 , 5),那么这两个向量的卷积计算(此处用*号代表卷积运算)结果应为:(4 , 5)*(1 , 2 , 3)= (4 × 1 , 4 × 2 , 4 × 3 , 0)+(0 , 5 × 1 , 5 × 2 , 5 × 3)= (4 , 8 , 12 , 0)+(0 , 5 , 10 , 15)= (4 , 13 , 22 , 15)没错,这里新得到的新向量中的四个数,正好与123 × 45的结果中得到的分配律下需要累加的四个数字是一致的。当然,这绝不是巧合,我们也可以换个维度来理解向量卷积。在换个维度理解向量卷积之前,我们先回顾一下向量的内积。如果我们将所有两位数的十位数视为一个二维向量的第一个方向,个位数视为这个二维向量的第二个方向,那么数字12、数字45可以理解为两个二维向量,即数字12理解为向量(1 , 2),数字45理解为向量(4 , 5),那么向量(1 , 2)与向量(4 , 5)的内积应计算为:(1 , 2)•(4 , 5) = 1 × 4 + 2 × 5 = 4 + 10 = 14为什么要提到乘法和向量内积呢?因为如上乘法分配律所展示的算法,也可以直观的以另一种通过逐个计算内积的方式得到向量卷积:(4 , 5)*(1 , 2 , 3)= ((1 , 2 , 3)•(4 , 0 , 0),(1 , 2 , 3)•(5 , 4 , 0),(1 , 2 , 3)•(0 , 5 , 4),(1 , 2 , 3)•(0 , 0 , 5) )= (4 , 13 , 22 , 15)这种算法可以看做是向量(4 , 5)与向量(1 , 2 , 3)在做相遇运动,并计算他们从相识第一刻到最终分开在每一时刻的向量内积。因为向量内积的运算要求两个向量的维度一致,所以在维度空缺的地方用数字0补足。题外话,卷积的名称也非常符合这种算法的运算方式,如果将乘法类比为一种二维层面的算法,加法类比成一种一维层面的算法,则卷积是将二维算法简化为一种一维算法的运算规则,盗用知乎上的一个回答,卷积运算相当于降维打击,就类似于卷毛巾

卷积被广泛用于信号处理,是一个信号在另一个信号上的延迟叠加,或者说,是一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加,能够将特定的信号放大,被用于信号过滤。那么进一步到人工智能领域,以机器视觉为例,卷积则被广泛用于视觉图像的筛选与特征处理

3

认识一下机器视觉中的卷积运算

前面讲到的数字123和数字45,只代表一个标度大小,并不代表任何方向,属于一种标量(scalar)。前面提到的(1 , 2 , 3),可以将百位、十位、个位分别想象成一个坐标方向,因此向量除了标度大小,还附带方向性质,属于一种向量(vector)。引申出去,如果向量有了厚度,即除了横向发展(行向量)之外,加入垂直发展的向量(列向量),即构成了一种矩阵(matrix,就是黑客帝国的英文哦)。如果我们将0~255范围内的每一个数字,代表黑白图片中黑色浓度的大小,那么这样的一个数字矩阵就可以表示一张黑白图片了。

此处我们再引入张量(tensor)的概念,张量有“”的概念,阶的数量可以由“”表示。前面提到的标量属于零阶张量、向量属于一阶张量、矩阵属于二阶张量。如果再进一步,我们知道计算机的颜色可以用红绿蓝(RGB)的数字来表示,那么一张彩色图片,实际上可以由三张矩阵表(分别代表红色、绿色、蓝色各自的浓度)叠加表示,这样的矩阵表构成一种三阶张量。

为什么要提这些呢,因为机器视觉中的卷积运算,实际就是将图像分解为矩阵,并以矩阵为单位进行卷积运算。还记得向量相遇的计算方法么?矩阵的卷积运算,实际上就是以逐个滑动的方式计算每次滑动后的内积:

这里被用来运算内积的小矩阵,也被称为卷积核(convolution kernel),卷积核的设计与最终卷积层的运行效果有着非常大的关系。前面提到卷积运算被用于信号处理,是一种滤波器,可以简单的理解为,我们要识别图像中的某种特定曲线,也就意味着需要一个滤波器要对这种曲线有很高的输出,对其他形状则输出很低,这也就像是神经元的激活机器视觉中的图像识别,正是通过经过精心设计的不同卷积核来筛选出不同的图像特征。假设我们设计的卷积核和想要识别的曲线分别对应如下:

假设上面的卷积核(滤波器)按照卷积顺序沿着下图移动:

那么当它移动到上面黄色方框的位置时,按照内积运算的结果,这个区域就会出现一个很大的值(6600):

但是当这个卷积核移动到其他区域时,我们只会得到一个相对较小的内积值:

如此,我们对整个原图进行一次卷积,得到的结果中,在那个特定曲线和周边区域,值就很高,在其他区域,值相对低。这就是一张激活图。这就是机器视觉能够识别图像特征并进行筛选的原理。

「 部分图片来源于互联网,

本文仅代表作者个人观点 」

- END -

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G093XZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券