人工智能学习

最近9年最厉害的人工智能算法只是加权平均

本文主要是介绍最近9年最厉害的人工智能算法只是加权平均,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

从网上搜索看,很多人理解“卷积”是困难的。“卷积”这个词,就吓住了很多人。

图片

图1 从网上搜索看,很多人理解“卷积”是困难的

 

有2个原因:

第一,汉语其他地方几乎从不用“卷积”这个词,所以中国人无法理解字面含义;

第二,很多人熟记卷积的公式、在工作中经常使用,但是并不理解卷积的实质含义。

 

理解卷积(Convolution),是理解卷积神经网络(CNN:Convolutional Neural Network)的关键。也是让我们理解,为什么最近9年(2012-2021),人类最厉害的人工智能算法卷积神经网络,其实只是计算加权平均

 

理解卷积的词义

 

卷积是英文convolution的翻译,convolution的英文释义是盘绕,弯曲(a twist or curve)。

图片

图2 Convolution的英文释义

 

为了便于理解英文convolution,我们可以和revolution对比:

“revolution”的词根re是“重新”的意思,revolution就是通过“重新创造”带来的变化,即革命、巨变;

苹果重新定义手机即Apple reinvents the phone,即re就是强调“全新”的意思。

 

“Convolution”的词根con是“共同”的意思,即本质不变,但通过转动、旋转、扭曲和弯曲带来的变化。

 

不同于中文,在英语中,convolution是一个可以被用于日常表达,如crosses adorned with elaborate convolutions,用精巧的曲线装饰的十字架。

 

如果“revolution”被翻译为“革变”,那“convolution”可以翻译为“卷变”。

 

所以,“convolution”引申为,本质不变,但是通过“变换”而带来的变化。记住了这个本质词义,后面对于“convolution”的各种花式变种,才会坦然接受,不再疑惑

 

Convolution的中文翻译是“卷积”,但卷积这个词在现代汉语当中,几乎不在其他地方使用,所以直接理解词义几乎是不可能的。

 

“卷”和convolution有关系的,但是“积”就没有什么关系了。我们推测,卷积这个中文翻译,是对卷积的数学公式做了“形式化”的解读,我们可以简单理解,卷积就是卷起来的乘积,可以理解为累加或叠加(对连续函数为积分)起来的乘积。

 

连续形式:图片

离散形式:图片

(函数f和函数g的卷积的计算公式,是累加(或积分)起来的乘积)

 

可以说,正是因为“卷积”这个中文翻译丢掉了“convolution”最本质的词义“本质不变的变换”,而是和具体的计算公式进行绑定,所以,给中国人理解,带来了很大困扰

 

这导致很多网上解释“卷积”的文章,都是对这个数学公式的形式进行解读,其实是颠倒了因果。

 

卷积实质上是对信号进行滤波

 

我们在大学课本里面就学习过卷积,主要是在《信号系统》当中。当一个信号经过一个系统之后,产生的输出,实际上就是这个输入x(n)和系统的冲击响应h(n)的卷积。

 

图片

图3 系统的框图

延伸阅读:当然,这里要求系统是线性时不变系统(Linear Time-Invariant System),但大家可以不用关注这个,因为我们绝大部分时间只讨论这样的系统。

图片

延伸阅读:这里只需要理解,系统的特性,完全由冲击响应h(n)完整描述了即可。冲击响应在物理世界并不存在,但是它是直接解释卷积公式的关键,见本文附录。详见参考资料[3]的第二章。

 

系统定义为处理(或变换)信号的物理设备。或者进一步说,凡是能将信号加以变换以达到人们要求的各种设备都是系统[1]。

 

信号处理是研究用系统对含有信息的信号进行处理(变换),以获得人们所希望的信号,从而达到提取信息、便于利用的一门学科。信号处理的内容包括滤波、变换、检测、谱分析、估计、压缩、识别等一系列的加工处理[1]。

 

卷积的过程其实就是相当于一个信号经过了一个系统进行处理,最典型的就是滤波器。

图片

图4 时域信号处理前后的波形[2]

图片

图5 微分滤波器后的图片效果[3]:(a) 2张原始图片;(b) 原始图片经过一个微分滤波器后的结果

 

在这里,只需要大家了解一个概念,就是卷积实质上是对信号进行滤波,它能够“过滤出”我们感兴趣的、对我们有用的信息

延时阅读:时域的卷积等于频域的乘积。傅里叶变换是一种频域分析法,它将信号表示成把周期信号分解成基波和各次谐波,非周期信号能够看成是周期无限长的周期信号[3]。傅里叶变换对信号的分析方法,是了解信号的成份的一种方法。卷积运算等价于傅里叶变换后的频域的乘积运算,有助于我们理解,卷积是对信号成份进行提取。

 

从一维到二维

 

我们以前在通讯系统的时候,我们学习到的信号一般都是一维的,因为我们的输入和我们的输出,都是时间的函数。因为每个时刻输入都是一个电平信号的数字,这个数字是一维的。

 

图像信号在每个时刻所输入的图像都有长和宽两个概念,所以图像的卷积就要考虑到二维了。

 

回顾一维离散卷积的定义:

图片

二维数据的卷积的定义,只需要将变了m和n变成二维的即可:

图片

先将h(m1, m2)绕其原点旋转180度,然后平移其原点,m1轴上平移n1,m2轴上平移n2,然后两个函数乘积相加,得到一个点处的输出。

 

可以看出,对于每一个点(n1, n2),实际是把一个点的像素值用它周围的点的像素值的加权平均代替。

 

从二维卷积到图像卷积

 

图像处理中的卷积与上面的定义稍微有一点不同。用一个模板(通常我们叫Kernel)和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上对应的点相乘,然后各点的积相加,就得到了该点的卷积值。对图像上的每个点都这样处理。由于大多数模板都是对称的,所以模板不旋转。

图片

图6 一个 3×3 的卷积核,在图像上的滑动

 

可以看出,图像卷积,实际上,是把一个点的像素值用它周围的点的像素值的加权平均代替。

延伸阅读:Convolution运算,仍然是一种线性运算。

 

由于模板不旋转,所以图像卷积的计算公式,已经和二维卷积的公式不同了,且与互相关函数(cross-correlation)相同[4],但是我们仍然称之为“卷积”。在参考文献[5]中,有各种卷积操作的变种。

 

只要我们理解了convolution的词义是“本质不变的变换”,就会对这样的具体计算的变种坦然接受。其操作依然是加权平均、乘加运算,其目的仍然是提取有用信息。

 

所以,卷积的本质是滤波(特征提取),操作是加权平均、乘加运算,其目的是提取有用信息。

 

延伸阅读:在通常的深度学习卷积层,有填充(Padding)、步长(Stride)的概念,这样做的好处是对防止图像边缘信息丢失、图像尺寸的控制更好,这使得操作与二维卷积的经典公式差别更大,但是convolution的本质含义并没有改变。

 

图片

图7 三个图像卷积操作的效果

 

理解了上面的概念,你就知道对图片进行滤波,是一种常见的操作。我们现在用的各种美颜工具,比如说磨皮、皮肤变白,你可以理解为是一种滤波行为,依靠的就是卷积操作。

 

卷积在OpenCV等传统图像处理中的应用

 

由于卷积或者说滤波是传统图像处理中的常用方式,所以,OpenCV 4中提供了filter2D()函数用于实现图像和卷积模板之间的卷积运算。

代码清单5-1 filter2D()函数原型
1.  void cv::filter2D(InputArray  src,
2.                        OutputArray  dst,
3.                        int  ddepth,
4.                        InputArray  kernel,
5.                        Point  anchor = Point(-1,-1),
6.                        double  delta = 0,
7.                        int  borderType = BORDER_DEFAULT 
8.                        )

src:输入图像。
dst:输出图像,与输入图像具有相同的尺寸和通道数。
ddepth:输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围,具体的取值范围在表5-1给出,当赋值为-1时,输出图像的数据类型自动选择。
kernel:卷积核,CV_32FC1类型的矩阵。
anchor:内核的基准点(锚点),默认值(-1,-1)代表内核基准点位于kernel的中心位置。基准点即卷积核中与进行处理的像素点重合的点,其位置必须在卷积核的内部。
delta:偏值,在计算结果中加上偏值。
borderType:像素外推法选择标志,可以选取的参数及含义已经在表3-5中给出。默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。

注意 filter2D()函数不会将卷积模板进行旋转,如果卷积模板不对称,需要首先将卷积模板旋转180°后再输入给函数的第四个参数。

 

深度学习中使用卷积层的方式

 

图片

图8 卷积神经网络的示例图

 

如上图所示,卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接(Fully Connected layers)。

 

在图中,卷积层Layer1使用了64个7×7卷积核(Kernel),Layer2使用了16个5×5卷积核。每一个卷积层的输出叫特征图(feature maps),因为我们预期它表示了图片的特征。

 

我们自然而然的会选择用多个不同的filters(即卷积核)对同一个图片进行多次抓取。如下图,同一个图片,经过两个(红色、绿色)不同的filters扫描过后可得到不同特点的Feature Maps。每增加一个filter,就意味着你想让网络多抓取一个特征。

 

图片

图9 两个卷积核学习两个Feature Maps

 

与OpenCV不同的是,深度神经网络中的卷积核(Kernel)是通过训练得到的,而OpenCV的函数中是人工指定的。所以,我们并不知道深度神经网络中学习的卷积核(Kernel)的参数,到底提取的什么特征,比如到底是模糊化还是边缘检测。这就是我们说,卷积神经网络是黑箱的原因之一。

 

在CNN的语境下,kernel = filter = feature detector。

 

深度学习中卷积层的优点

 

对比普通的深度神经网络,卷积层的优点是:

 

1)局部连接。即避免了把二维图像(长宽)的raw data直接摊平(flatten)为一维数据输入深度神经网络,保留了二维图像的相邻图像块的信息;

 

2)滤波提取特征。利用了传统图像处理的卷积核(Kernel)的滤波(特征提取)能力;

以上两个优点,是卷积神经网络本质的优势,这使得Yann LeCun在1989首次提出“卷积神经网络”以来,32年时间里面一直是图像处理的最流行深度神经网络可以大胆预测,技术将来的新网络结构,也一定会用到上面的2个因素。

 

顺带的,卷积神经网络也具备了以下优点:

 

1)具备了“平移不变性”,因为卷积核(Kernel)会把输入图像扫描一遍,且参数共享(即一个卷积核扫描输入图像时只用同一套参数),所以,被检测物体无论在哪个位置,都能被检测到;

图片

图10 在不同位置的同一形状

 

2)解决尺寸不变性成为可能。如下图,通过卷积层的级联,可以学习到不同尺寸的特征。也可以一次性使用多个不同filter size来抓取多个范围不同的概念是一种顺理成章的想法,而这个也就是Inception网络。

图片

图11 在人脸识别中经过层层的卷积后,所能够探测的形状、概念也变得越来越抽象和复杂

 

深度学习中卷积层的局限性

 

1)对特征的全局位置不敏感。由于卷积核参数共享,即一个卷积核扫描输入图像时只用同一套参数(主要是为了大大减小计算量),与实际情况不符,因为图片上有的位置的信息可能更有价值,有的位置的信息价值低一些。

 

2)难以跟踪图像中的远距离依赖关系。由于卷积核size的限制,提取的特征是局部敏感的,每个操作仅考虑图像的局部区域。

 

卷积层模型的训练来识别人脸可以编码信息是否“眼睛”、“鼻子”或“嘴”的特征出现在输入图像中,但是这些表示不会有这样的“眼睛上面鼻子”或“嘴下面的鼻子”的特征,因为每一个卷积内核不会足够大来处理多个这些特性。

 

为了跟踪图像中的远距离依赖关系,需要大的接收场,实际上,这涉及使用更大的核或更多的卷积层,但以牺牲效率为代价,并使模型极其复杂,甚至无法训练。

 

图片

图12 Transformer试图解决长依赖问题(2020年5月)

 

计算机视觉中的Transformer就是为了解决长依赖问题,DETR(arxiv.org/2005.12872)提出了一个简单的模型,实现了与SOTA对象检测方法相同的精度和性能。即,CNN输出的特征不是直接平铺,进入全连接层,而是将特征块输入到Transformer的编码器,学习长依赖信息。

 

图片

图13 Vision Transformer (ViT)结构示意图(2020年10月)

 

Vision Transformer (arxiv.org/2010.11929)提出了一种新的图像识别SOTA,该模型甚至可以完全依靠自我关注,并且能够提供与当前SOTA相当的性能。【注意:Patch块就是利用了局部连接,Linear Projection会用到乘加操作,起到滤波提取特征的效果】

 

3)卷积神经网络仍然没有考虑视频流的时序信息,即图像的前后帧的信息。这也是你在看到现在的视频检测框中,框晃动,有时甚至时有时无的原因之一。

 

4)卷积神经网络本身没有解决旋转和视角不变性,克服这一不变性的主要手段还是靠大量的数据。

图片

图14 CNN没有解决旋转和视角不变性

 

卷积神经网络的历史

 

卷积神经网络的创始人是著名的计算机科学家Yann LeCun,目前在Facebook工作,他是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。

图片

图15 Yann LeCunn

 

以下是几个比较有名的卷积神经网络结构,详细的请看CS231n。

网络结构名词

提出人

时间

说明

时间延迟网络(Time Delay Neural Network, TDNN)

Alexander Waibel等

1987

TDNN是一个应用于语音识别问题的卷积神经网络,使用FFT预处理的语音信号作为输入,其隐含层由2个一维卷积核组成。TDNN的表现超过了同等条件下的隐马尔可夫模型(Hidden Markov Model, HMM)。

 

平移不变人工神经网络(SIANN)

Wei Zhang

1988

第一个二维卷积神经网络,应用于检测医学影像。

LeNet

Yann LeCun

1989

第一个成功的卷积神经网络。

LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近。

LeCun (1989) 对权重进行随机初始化后使用了随机梯度下降(Stochastic Gradient Descent, SGD)进行学习,这一策略被其后的深度学习研究所保留。此外,LeCun (1989)在论述其网络结构时首次使用了“卷积”一词 ,“卷积神经网络”也因此得名。

AlexNet

Hinton和他的学生Alex Krizhevsky

2012

获得2012年ImageNet竞赛冠军。也是在那年之后,更多的更深的神经网络被提出,成为最近9年图像处理上最流行的算法,比如优秀的vgg,GoogLeNet。

类似LeNet,但更深更大。使用了层叠的卷积层来抓取特征(通常是一个卷积层马上一个max pooling层)

GoogLeNet

Christian Szegedy

2014

2014年ImageNet竞赛的第一名。

减少parameters数量,最后一层用max pooling层代替了全连接层,更重要的是Inception-v4模块的使用。

VGGNet

Oxford Visual Geometry Group

2014

2014年ImageNet竞赛的第二名。VGG模型在多个迁移学习任务中的表现要优于googLeNet。

只使用3x3 卷积层和2x2 pooling层从头到尾堆叠。

ResNet

Microsoft Research的4位学者

2015

2015年的ImageNet竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)中获得了图像分类和物体识别的优胜。

引入了跨层连接和batch normalization。

延伸阅读:理解了卷积层的本质是滤波(特征提取),操作是加权平均、乘加运算,其目的是提取有用信息,就对其他的各种的、无数的变种感到迷惑,比如,深度神经网络的结构的发展趋势有[6]:

- 使用small filter size的卷积层和pooling

- 去掉parameters过多的全连接层

- Inception(一次性使用多个不同filter size)

- 跳层连接

总结

 

1)卷积实质上是对信号进行滤波,它能够“过滤出”我们感兴趣的、对我们有用的信息。

 

2)图像卷积的公式与二维卷积有变化,但卷积的含义不变,本质是滤波(特征提取),操作是加权平均、乘加运算,其目的是提取有用信息。

 

3)卷积或者说滤波是传统图像处理的常用方式,OpenCV提供了相应的函数。

 

4)对比普通的深度神经网络,卷积层的优点:1)局部连接;2)滤波提取特征。这2个因素会一直是图像处理的关键要素。

 

5)卷积层的局限性:1)对特征的全局位置不敏感。2)没有考虑图像中特征的依赖关系。

 

附录:对时域卷积公式的直观解释

下面我们对一维离散信号的卷积公式做直观解释,详见参考文献[3]第二章。

图片

 

首先,我们人为定义了单位脉冲(或单位样本):

图片

(这是关键,因为这个定义,所以h[n]就是δ[n]的响应)

 

所以,我们可以将输入序列x[n]表示为:

图片

 

根据线性系统的叠加性质,对输入x[n]的响应y[n]就是上面的单位脉冲的响应的加权线性组合。再加上我们定义的δ[n]的响应就是h[n],所以y[n]就是h[n]的加权线性组合。

图片

 

由此可见,一个线性系统在时刻n的响应就是在时间上每一点的输入值所产生的各个响应在该时刻n的叠加。这个结果称为卷积和(convolution sum),并且右边的运算称为x[n]和h[n]的卷积,并符号记作

图片

相关文章

理解人工智能算法,初中数学知识就够了

5分钟理解激活函数让神经网络能逼近任何函数

 

参考资料

  1. 《数字信号处理教程》 程佩青 清华大学出版社

  2. Chapter 5: Linear Systems https://www.dspguide.com/ch5/1.htm

  3. 《信号与系统》奥本海姆

  4. 卷积(convolution)和互相关(cross-correlation) https://blog.csdn.net/u013498583/article/details/79481144

  5. 卷积有多少种?一文读懂深度学习中的各种卷积  https://baijiahao.baidu.com/s?id=1626340857776537248

  6. YJango的卷积神经网络——介绍   https://zhuanlan.zhihu.com/p/27642620

  7. 一文让你理解什么是卷积神经网络   https://www.jianshu.com/p/1ea2949c0056

  8. https://baike.baidu.com/item/卷积神经网络/17541100?fr=aladdin

  9. 用Transformer完全替代CNN  https://zhuanlan.zhihu.com/p/266311690

 

注:本文只代表个人观点,与任何组织和单位无关。

这篇关于最近9年最厉害的人工智能算法只是加权平均的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!