点击上方“AI算法与图像处理”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者:叶强
链接:https://zhuanlan.zhihu.com/p/28629034
本文仅用于学习交流分享,如有侵权请联系删除,禁止二次转载
前言
熟悉深度学习的朋友们一定不会对卷积神经网络(CNN)感到陌生,与传统的全连接深度学习神经网络(DNN)相比,CNN具有权重参数共享、灵活的特征检测等特点,其一定程度上甚至独立于主流的DNN。关于CNN,大家可能都广泛知晓其背后的灵感来自于人视觉系统中一个叫感受野的(receptive field)概念。其实CNN只是借用了这一概念,其整体机制与人的视觉系统还是有很大的差别。读完本文后,您将会对此有更加清晰的认识,并可能为您在基于视频处理的下一代神经网络研究中提供些灵感。
由于本人对于深度学习这一块知识的掌握仍有不少欠缺,可能会有一些错误的理解和表述,诚恳接受专业人士批评指正。
本文会同时涉及人工智能领域的深度学习以及神经科学中的视觉系统两方面知识,但不要求读者同时具备这两方面知识。同时由于突出重点及篇幅限制,本文不打算介绍单个神经元的解剖结构和生理功能,事先简单了解这部分知识将有助于对本文的理解。
一、简述CNN的历史和发展
CNN比深度学习成名要早,在2006年开启新一轮深度学习热潮的标志性论文发表以前,CNN就已经在美国的金融机构开启了商业级的应用:为银行识别手写支票上的金额数字。很多人都没见过支票长啥样,主要是咱们中国由于没有建立良好的信用体系,银行从来不主动给大家提供支票服务。不过那时候的CNN结构没有现在这么复杂,但也能在分类结果较少的小数据集上近乎完美的运行。自从2012年Hinton另外一篇关于卷积神经网络的论文发表以后,CNN的研究又开启了一个高潮,从那以后网络层数越来越多,规模越来越大,各种处理小技巧被应用于CNN中,可以说CNN已经很成熟了,这也是为什么今年是最后一年举办什么图像方面的大赛(我从来记不住这类比赛名称)。今后新的比赛将侧重于视频处理,更高大上了。关于CNN的结构、特点、各种小技巧我将在下文中穿插介绍。
二、感受野与池化
先从感受野这个概念说起。神经科学上的感受野,通常说的是“局部感受野”,指的是一个神经元可以接受来自不同位置、一定空间范围的众多其它上层神经元的信号输出,整合并作出自己的输出,上游神经元分布的空间范围就称为该神经元局部感受野,下文中如未特别说明,均使用感受野来指代局部感受野。
感受野不单存在于视觉系统中,几乎人体的所有外周感觉系统的中间(不直接接受物理或化学刺激,类似于神经网络中的隐藏层)神经元都具有一定程度的局部感受野。那么在CNN中,感受野对应的操作是卷积还是池化还是激活映射呢?按照我刚才给出的感受野的定义,我个人认为是池化操作。激活映射对应的是全局感受野。会不会有人把卷积认为对应于感受野呢?应该会有人这么认为。但是我认为卷积虽然是CNN的一个极其重要的操作,但它对应的不是局部感受野,甚至在人眼的视觉系统的网络结构中,找不到对应于这一操作的物理结构。仔细想一想,卷积操作对应的是人眼在看外界物体时的“扫视”过程。这就谈到了CNN与人眼视觉系统的第一个区别。
您可能又有疑问了,在人眼中,对应的池化操作出现在什么层次,是通过什么结构实现的?为了说明这个问题,我们需要对人眼视觉系统有一个初步的认识。
三、人类视觉系统是包含网络的网络
人眼的视觉系统可以被认为是由三大部分依次链接组合而成,这三大块分别位于人眼球后壁内部的视网膜(retina)、位于丘脑的外侧膝状体(lateral geniculate),以及大脑的视皮层区域(visual cortex)。下图展示了这三块区域的相对位置:其中眼球后壁的视网膜由于太薄,图中没有清晰绘制。链接这三块区域的分别是视神经(optic nerve)和视放射(optic radiation)。他们都是神经元的轴突,类似于深度学习神经网络中的层间链接。请不要把视觉系统简单的认为是三层神经网络,其实视网膜、外侧膝状体、视皮层这三个区域的每一个区域都是有深层神经网络组成,可以借用下名词“包含网络的网络”(Network in Network)。我个人倾向于认为这三块区域里都没有可以完成卷积操作的结构存在。
图片来源:https://image.slidesharecdn.com/afferentvisualpathway-170112193404/95/afferent-visual-pathway-5-638.jpg?cb=1484249824
我们依次来看看这三块结构的功能特点,首先是视网膜。
四、池化操作在视网膜内完成
首先指出是我目前认为的典型的池化操作仅出现在视网膜内,但这不意味着视网膜仅仅完成了池化操作。事实上,视网膜的功能极其复杂,以至于人们还并未完全弄清他们的所有结构和功能,只是相对于另外两个结构,研究得算是更加彻底点。
视网膜是什么?在眼球的什么位置?
如果用一句话来回答,可以是这样:视网膜是位于眼球后方负责将传入眼睛的光信号转化为生物电信号,并初步分析后将处理后的生物电信号通过视神经向外侧膝状体传递的神经网络结构。具体可见下图:
图片来源:https://link.zhihu.com/?target=http%3A//webvision.med.utah.edu/imageswv/Sagschem.jpeg
眼球的结构和本文关系不大,就不介绍了。图中,视网膜贴在后部(右)眼球壁的内侧,被放大的区域是视网膜的一部分。
视网膜有十层结构、其中三层被神经元占据。
下图是视网膜十层结构的一个示意图,这十层结构在图中上而下分别是:色素上皮层,视锥、视杆细胞层,外界膜,外颗粒层,外丛状层,内颗粒层,内丛状层,神经节细胞层,神经纤维层,内界膜。其中负责接受光信号(也就是网络的输入层)的是视锥、视杆细胞(感光细胞)层(Rods and cones layer)。一个有趣的现象是,光线在到达该层时(该层的神经元称为:感光细胞)要首先穿过视网膜的其余八层。二者八层不是完全透明的哦,其中部分层次分布有为视网膜提供营养的血管(不透明),可是我们从来感觉(看)不到血管的存在导致的视野中的阴影。光信号在到达感光细胞前经过其它视网膜的其它结构是脊椎动物与非脊椎动物视网膜结构的重要差别。
视网膜中由神经元占据的另外两层分别是外侧核状层(Outer nuclear layer)和内侧核状层(Inner nuclear layer)。前者主要是双极细胞(bipolar cell)和水平细胞胞体(神经元的主体,定义阈值和激活函数的地方,不是激活函数的映射)组成;后者则主要由神经节细胞(ganglion cell)和无长突细胞(amacrine cell)的胞体组成。这三层神经元通过他们相应的树突或轴突链接形成整体的网络结构。
图片来源:https://link.zhihu.com/?target=http%3A//journals.cambridge.org/fulltext_content/ERM/ERM6_15/S1462399404008129sup013.gif
池化发生在感光层与与双极细胞层、双极细胞层与神经节细胞层之间
从深度学习的角度来看,池化操作是使用一个值来替代某一局部区域的由多个值表示的信息,借此达到缩小网络规模但又一定程度保留原始数据特征的目的。具体方法有平均池化、最大化池化等。池化是感受野概念在CNN中的典型应用。在视网膜中,局部一个或多个感光细胞信号汇聚到一个双极细胞;一个或多个双极细胞的输出信号汇聚到一个神经节细胞。与CNN池化不同的是,视网膜的池化操作其核大小是不固定的。当人眼注视某一个区域时,该区域对应的视网膜相关的池化核是1对1的,离注视中心越远,核的尺寸越大。这就是人眼在注视区域中心的视觉灵敏度最高,在周边则要差很多的原因。人眼这样的池化设计一定程度上也是为了缩小传送到外侧膝状体的信号通道的规模。这种不均匀的池化操作并没有让人在看物体时感觉过度的不自然,这种平滑的过度是怎么做到的,我不太清楚。
在视网膜神经网络里具有层内链接
如果您仔细观察上图,您会发现有一类细胞叫水平细胞(horizontal cell),他们负责链接协调在感光层的信号;同样您会发现还有一类细胞叫无长突细胞(amacrine cell),它们在神经节细胞层内做类似的工作。这两类细胞的功能并不完全清楚,我个人感觉可能和抵消池化带来的不自然过渡有关,也可能和人眼处理的是动态的视频而不是静态的图片信号有关;也有可能和人眼的注意力机制有关(attention mechanism),人眼的注意力机制体现在人会把注视中心对准那些在视网膜上短时间内信号变化较大的区域。比如突然一个亮点或移动引起的视网膜上对应细胞的信号输出短时间内发生较大的变化。在CNN中,我们并没有找到类似的层内连接结构,也许未来我们需要这样的结构来处理复杂的问题,比如视频处理等。
到目前位置,我们已经在视网膜这个网络中见识了许多人类视觉系统与CNN的联系和区别,比如都有感受野、人眼没有卷积操作、CNN没有层内链接等;它们之间还有其他的联系和区别,由于不单发生在视网膜层次,我们另辟一节展开。
生物神经元与深度学习使用的神经元数学模型差别其实非常的大。由于篇幅,我不会全部展开,这里提到与激活函数相关的一个重要区别。在生物体内,一部分神经元对输入信号的相应是连续平滑的,比如前文提到的感光细胞、双极细胞、水平细胞大多数无长突细胞,他们由于比较靠近输入信号,对输入信号的响应比较及时。这类细胞不能产生脉冲电位,又叫动作电位。而向外侧膝状体传送信号的神经节细胞则仅依靠脉冲电位来编码。这就相当于一个网络里使用了两种不同的激活函数。这种方式在人的神经系统里还很多见,但是否在人工神经网络里有效就不好说了,有学者建议单一网络只使用一种激活函数。至于是否确应这样,我也不清楚。
其实脉冲神经元其实也可以被看成是产生连续输出的神经元,只不过他们输出的信号值不连续,很多人在研究脉冲神经元的数学建模工作,但我个人认为这类神经元我完全可以用LSTM结构中的单个神经元来模拟,而且LSTM的们结构已经给出了完美的参数调整办法。
生物体内使用脉冲神经元可能是不得已而为之的,因为有些信号要传输很远的距离,比如从腿部到大脑,而生物神经元的信号传递速度不能太慢,否则该物种可能存在着被灭绝的危险。
侧抑制也广泛的存在于生物体内神经系统中,在CNN中表现为local response normalization(LRN,翻译为:局部响应规范化吗?)。它的作用体现在当物理位置靠近的两个神经元给出的输出信号差别较大时,local response normalization会进一步放大这种差别,在图像处理中我个人认为和轮廓提取和注意力机制有关。有深度学习的研究学者认为LRN用处不大,我对此持保留意见。特别是在今后的处理视频的网络建模时,LRN可能会有大用处。
CNN中还有一个有趣的小技巧是drop-out,它使得神经元在训练时以一定几率出于静眠状态,既不发送输出信号,也不更新权重。这种机制被认为在抑制过拟合现象时很有效。在生物神经领域,我想到的对应的可能是神经元的备份与衰老机制,但这并不完全准确。生物细胞是会衰老死亡的,如果没有备份的话,具备检测某一特征的神经元死亡了,该特征就无法识别啦,这种事情在生物体内较少发生依靠的就是其备份机制(也有在大脑内大量发生的,产生的就是认知和行为障碍,比如阿尔兹海默病,俗称老年痴呆就是大量神经元失活无法传递信号)。CNN乃至所有的DNN都引入drop-out机制还有一个原因时我们目前对单一隐藏层到底该准备多少个神经元并没有理论上有突破的研究,通常我们会设置相对需要更多的神经元,通过引入drop-out机制来抵抗过多神经元带来的过拟合。特征备份这一功能对于人工神经网络没有什么意义。
跨层链接在生物神经系统里是否广泛存在不好说,但在某些网络结构中,承担跨层链接任务的细胞目前被认为仅对神经元提供营养支持,其本身不是神经元,不参与信号传递。真相是否如此,目前还不好说,我个人对此持保留意见。
关于深度学习网络中的跨层链接利用残差技术我是非常赞同的,我个人对次的理解是:初级特征既可以用来生成高级特征,也可以直接用来进行判别。未来可能会出现各种丰富多样的跨层链接方式,事实上这种事情正在发生。
经过视网膜的简单处理,视觉信号被神经节细胞送入外侧膝状体。在那里视觉信号得到了独立且完整的处理,其输出信号可以被送入所有有需要的地方,比如经视放射送入视皮层参与智慧生命活动,又比如被送入其他较为低级核团(脑组织中聚集在一起的神经元,不包括其对外联系的轴突和树突)直接参与产生输出信号控制肌肉运动,可以用低等动物通过视觉观察到危险不经思考拔腿就跑来理解。
关于外侧膝状体的详细结构和功能,我对其没有深入的研究,只大概知道其相当于一个全连接神经网络,分为大小两类细胞。这类细胞除了接受来自神经节细胞的视觉信号,还会接受来自其他核团的感觉信号,负责分析视觉信号的轮廓、纹理、颜色、运动等信息。同时人的很多器官都是左右各一的,外侧膝状体也不例外,而且外侧膝状体同时接受来自两侧视网膜的信号,者被认为与形成立体视觉有关。
目前并不了解在外侧膝状体是否有类似视网膜上的感受野(池化操作),我个人倾向于没有。在我看来中枢神经系统的一个小网络都是以循环神经网络为基本结构的。这类网络有一个很大的特点:输出会循环反馈给输入,自身形成回路;同时可以产生跨层连接。同时,从进化的角度看,在很多低等动物,由于大脑不够发达,丘脑基本上完成了大部分的生命活动所需要的与外界交互的决策,因此一定程度上,丘脑内部网络的结构与组成大脑皮质单元的皮质柱是类似的。
在谈大脑功能前,我要说的一句话是目前所有关于大脑的研究成果,无论发表在多么高级的期刊上,均有可能被再次推翻的可能。因此,关于这一部分我们可以充分大胆的想象而不用被质疑没有根据,因为已有的根据不一定是正确的。
首先我个人坚持认为,理论上没有大脑的人是可以有生命活动的,甚至是可以进行一定的活动的。这里定义生命活动指的是持续规律的自主心跳和呼吸。比如植物人,再比如车祸造成大脑组织严重缺损却可以正常生活的人,如下图。
图片来自与网络,为保护隐私这里不提供链接。
不过,大脑不同区域的负责不同的功能,当某一区域受损严重时,会出现对应功能的缺失。这类例子也有很多,就不举了。还有一类有趣的现象,就是大脑的功能区域是人们根据研究结果人工划分的,事实上其界限没有研究人员说得那么清楚。比如一个自幼失明的孩子可能具备灵敏的听觉或音乐天分。其背后的原因就是,由于失明,视皮质区域的大脑结构被用来参与处理与其相邻听觉系统相关的智慧活动去了。反而造成其在音乐上的独特天分。
因此,我大胆推测人类产生智慧活动所需要的知识是分块处理的,这些知识存储在一个个类似于皮质柱的神经网络里。记忆的并不存储在人们常说的海马区域,而是存储在这些一个个皮质柱里。大脑里有许多条高速信息公路在各脑区穿行,皮质柱通过自己的神经纤维挂在这些信息高速公路上,通过门控机制决定是否使用这些信息,同时记忆的提取也是利用一条类似的寻址高速公路,遗忘不是皮质柱的死亡,还是丢失了打开门控的信息。同时皮质柱也承担着决策功能,决策体现在信号的转化和流转、记忆和知识体现在某一个或多个层神经元的整体信号中。这就相当于神经网络中特征层存储着知识、权重参数充当着决策。
CNN的未来与展望
既然人视觉系统没有卷积操作,那么CNN引入了卷积操作那么成功其理由是什么?CNN未来又会怎样发展?
我个人的回答是:CNN的卷积操作代替的是人移动眼球扫描外界视觉信号的过程。在当前集中在静态图片处理的情况下,这种把扫视放入到网络里面来进行比较有优势;随着计算性能的提高,自动驾驶对于处理视频数据的要求,我们可能需要更多的借鉴人眼在处理视频数据中的特点,到时候CNN也许会被抛弃或改进。但是CNN中使用的各种技巧还是可以借鉴的,可能会抛弃卷积核,以注视中心为基准,采用"池化+全连接"联合注意力机制,辅以足够的基于数据扩增(data augmentation,包括平移、镜像、旋转和缩放)的监督训练,我个人对此很有信心。目前对视频处理的研究主要采用基于3D的CNN,卷积操作仍然是其核心操作,这种方法很可能只是过渡性的方法。
有关CNN还有什么技术本文没有提及,欢迎在评论区留言,我争取研究下找到其在人类视觉系统中的对应结构和功能。
补充:
关于权重参数的调整,实在搞不清楚人类系统是如何做到的。不过我个人认为,人类神经系统的权重调整很复杂,至少涉及到神经递质的类型、复杂的突触微结构、不基于链接的化学信号的影响等等,很可能没有精确的梯度作指导,但极有可能也是基于mini-batch的,权重参数的更新可能发生在睡眠期间,睡眠期间的梦可能就是参数调整时,偶然碰到一个神经元突然被激活进而导致整个大脑相关神经元的集体活动,产生了梦。(此段纯属娱乐,切莫当真)。
最后,非常感谢能坚持读到此句的读者。谢谢!
—END—
请长按或扫描二维码关注本公众号
喜欢的话,请给我个好看吧!