大家好啊,我是董董灿。
搞过很多年的卷积,在很多芯片上手写过卷积算法。
如果把深度学习比作做饭,那么图片就是是做深度学习任务的原材料,而卷积就是做这道大餐的灶具、菜谱、厨师的刀工、颠勺的技术。
接下来我们一点点的剖析,卷积的算法在深度学习,特别是图像识别任务中的重要作用。
先务虚一下。
人脑是怎么记住东西的?
或许你已经听说过很多AI故事了,比如大名鼎鼎的阿尔法狗大战柯洁。
但是,你有没有想过一个问题。阿尔法狗确实是学会了下棋,但是它下棋的记忆到底是什么样的?存在什么地方呢?高中生物老师教过我们,人脑中有大量的脑神经元。每个脑神经元都可以看做是一个小的记忆体,神经元之间通过树突连接起来。
整个大脑的神经元,可以说是一张十分复杂的网络。人脑处理信息,就是利用这个复杂的网络处理信息,并最终得到一个结果。通过神经元网络,我们才能知道,眼睛看到的是一只猫,还是是一只狗。
稍微简化一下大脑神经元的复杂结构成如下的网络。
每个黑点代表一个神经元脑细胞,每个神经元都有自己负责记忆的东西。
当我们看到一张画着猫的图片的时候,图片信息通过视神经传给大脑神经元,于是,信息到达了最左边一排竖着的黑点(神经元)。
神经元的激活与静止
假如一个黑点(神经元)之前见过猫,那么这个黑点就会把信息往后传,此时神经元处于激活状态。
假如一个黑点从来没见过猫,那么这个黑点(神经元)就啥也不知道,啥也不做,此时神经元处于静止状态。
像不像初中课堂上,老师问了你一个超难的问题,而你不知道的时候,你也只能站着,可怜又无助,啥也不会做?没错,神经元如果没见过猫,他啥也不会做!
图片的信息就这样,一层一层的通过“见过猫且确信它是一只猫的”神经元往后传递,直到在最后输出一个结果。
这是一只猫。
这个过程叫做大脑的推理。
整个推理过程你应该注意到了一件事。所有的黑点(神经元),都可能是有记忆的,只不过记得东西各有不同,有的认识猫,有的认识狗,就像下面这样。
所有认识猫的神经元都会让信息通过,其他不认识猫的神经元都静止了。
但是只要信息能传到最后,人脑最终就可以得出一个结论,这就是一只猫。
那神经元的这些记忆是怎么获取的呢?当然是训练!人们在日常生活中不断地训练大脑,时刻观察着周围的事物。
见得多了,就会了!
训练 —— 人工智能获取记忆
那么计算机又该怎么模拟这个记忆过程呢?答案很简单:因为计算机只会计算,那就让它计算好了。
如果某个黑点认识猫,有什么办法可以把“这是一只猫”这一信息传递到后面呢?乘以1啊,任何数乘以1都是它自己,一只猫乘以1也还是他自己。
如果某个黑点压根没见过猫,有什么办法可以什么都不做呢?乘以0啊,任何数乘以0都是0,信息也就没了,一只猫乘以零,猫也就没了。
于是乎。
在深度学习的网络中,每个黑点(神经元)都有一个与之对应的数字(实际的网络中,不是0或者1这样简单的数字,而是一对复杂的数字,这里仅仅是为了说明示意),这些数字,在深度学习中,我们称之为权值。
神经元可以通过与权值的加权计算来判断是否让某一信息经过神经元,到达下一层。
权值乘以输入的信息(猫),然后经过激活函数去激活(类似于人脑神经元的激活)。
如果能成功激活,那么信息就往下传。
如果没有成功激活,信息就在此丢失。
当然神经网络中的权值不是简单的0或1,所以经过激活函数计算出来的只是一个概率值,也就是说黑点(神经元)觉得它是一只猫的概率。最终如果得到95%的概率觉的它是一只猫,那基本就是一只猫。
这个权值,就是 AI 的记忆。
这个权值,就是 AI 在训练的过程中学到的东西:千百万次计算得出的最优解。
这个权值,可以保证,只要 AI 在训练过程中看过猫,那么新的猫咪来的时候,猫咪乘以权值有很高的概率能通过激活函数,确保神经元被激活。为什么可以这么确定呢。
因为 AI 的训练过程早已经模拟了成千上万次“识猫”的过程了。
权值就是训练出来的!
就像我们的记忆被训练出来的一样!
而卷积这一算法,就天然存在一个记忆体,或者说权值。那就是卷积核。
开始说卷积 | Convolution
首先不要被这个名字吓到了。不管数学好不好的同学,看到卷积的第一反应,可能是记得有一个卷积公式,貌似可以进行信号处理。
一个代表卷积核的曲线在原始信号曲线上滑来滑去,得到不同的输出。在什么地方学过来着?好像是时频转换的时候,又好像不是。(当然不是!)
但是,不用回忆之前的知识,不用管它!
因为,深度学习中的卷积,和信号处理中的卷积,有相似之处,但又不完全一样。(至于哪里不一样,后面的公式解读会详细说说)深度学习中的卷积,完完全全模拟的,就是人眼看物体的过程!
卷积模拟人眼
上图是深度学习中卷积的示意图。
还记得之前说过的么,图片是由像素组成的。示意图下方的 4×4 的像素方格就是卷积需要处理的图片(模拟人眼观看图片的过程)。示意图上方的 2×2 的像素方格就是卷积的输出(人眼看到图片之后得出的结论)。
那么卷积核在哪?4×4方格上移动的灰色阴影,3×3的像素方格就是卷积核!
可以理解为人眼此时聚焦看到的区域(称之为感受野,人眼的视野),只不过,这个示意图中每次看到的都是一个3×3的像素方格!
而卷积过程,就是用3×3的卷积核,去逐步扫描图片。横着扫完竖着扫。每扫一次,就将逐个像素点的值相乘然后加一起,得到一个输出。
再换个更直观的角度看一眼。
上图第一次扫到的是左上角的9个点,与卷积核中9个点逐点相乘,然后相加,就得到了输出图片的左上角的一个点的值。
卷积,就是这么简单的过程。
我们可以通过调整卷积核的大小,比如把上图3×3的卷积核扩大到5×5,来控制 “人眼” 看到的图片范围,从而获取到不同的图片信息。
当然,在实际神经网络中,存在这个各种各样的卷积变种。
科学家或工程师们通过设计不同的卷积核以及卷积每次移动的多少等参数,来实现不同的功能。
但卷积操作万变不离其宗!
通俗点讲,卷积就是模仿的人眼识图的过程,以“感受野”的视角去扫描图片,从而获取不同区域的图片信息。
但其实,这并不是卷积算法的核心思想。
卷积的核心,是通过设计多个卷积核,同时对一张图片进行卷积操作,以完成不同特征的提取。
卷积的数学描述
不想看数学描述的同学可以略过,不影响后面的阅读。
有了之前的铺垫,这里说一张图片的尺寸是 [n, h, w, c],应该不陌生了,其中,
-
n 代表的是图片的张数。
-
h 代表的是图片的高度,通俗的讲,高度方向上有多少像素。
-
w 代表的是图片的宽度,通俗的讲,宽度方向上有多少像素。
-
c 代表图片的通道数,例如 RGB 图片,c 等于3。
不论是图片,还是卷积核,其数学描述都是具有n,h,w,c四个维度的数据。
因此,对于卷积算法而言,输入图片尺寸为 [n, hi, wi, c](下标i代表input,输入),卷积核尺寸为 [kn, kh, kw, c],输出图片尺寸为[n, ho, wo, kn](下标o代表output)。
有没有发现。输出图片的channel数与输入图片的channel数不一致!
输出图片的channel数与卷积核的个数一致!
图片的特征
这意味着什么?还记得么,channel 代表的是图片的特征,如果我们想让图片呈现出100个特征,怎么办?
用卷积,使用100个卷积核计算,输出图片就具有100个特征!卷积算法,可以通过设计卷积核的个数,随意的提取图片的不同的数量的特征!
说的数学一点,卷积算法,就是通过线性变换,将图片映射到特征空间!
有点绕?没关系,只需要知道,卷积的核心,是提取图片的特征就行了。
那么,特征怎么理解呢?
图像特征主要有图像的颜色特征、纹理特征、形状特征和空间关系特征。
(上图代表的事RGB图像和它的3个特征通道)
RGB图片有3个通道,可以说有3个颜色特征,分别为红色,绿色和蓝色。
那么纹理特征,形状特征和空间特征又是什么意思呢?
很简单,纹理特征就是图片的纹理,比如下面这样。
形状特征就是图片中物体的形状,比如下面这样。
那么卷积这一算法在神经网络的训练过程中学习到这些特征了么?
答案是肯定的!
卷积不仅学到了这些特征,而且还学到了更多人们不太好描述的特征,这些特征对于人类来说可能毫无意义,但对于神经网络来说,确实十分重要的。
上图是著名的论文《Visualizing and Understanding Convolutional Networks》中的截图,文中提出通过反卷积这一算法,以可视化的视角,形象的展示卷积神经网络在训练过程中到底看到了什么。
所谓反卷积,通俗的理解就是卷积的逆运算。
可以看到,随着神经网络深度的不断加深,卷积提取到的特征逐渐清晰起来。由浅层次的纹理特征,逐步到深层次的形状特征!比如,在Layer 4中已经可以看到狗狗的形象!
事实上,我们希望神经网络展现出来的是,看到一张画着小猫的图片,里面有一个代表猫的特征通道,该通道最终得分最高。
说到这里,即使你是一个AI算法小白,那也应该对卷积有了一些感性的认识。
本文作者原创,请勿随意转载哦。