查看原文
其他

教你用卷积神经网络对视觉神经元进行建模

Ioannis Kalfas 数据分析与开发 2019-03-19

(点击上方公号,快速关注我们)


英文:Ioannis Kalfas,转自:数据派(ID:datapi),翻译:笪洁琼


我们的大脑很奇特。它是一个神奇的器官,已经进化了数百万年,不断变化和调整来应对遇到的各种刺激和条件,它看起来就像一袋黏糊糊的物质,在我们的头脑中以不同的方式组建起来。这个器官和组成它的数十亿个神经元,是我们理解智力以及智力是如何产生的最佳研究对象。然而我们还有另一个选择,那就是自己创造(人工)智能,然后阐述我们自己的创造力。


图一:我们的大脑帮助我们创造智能


近年来,我们离创造智能机器又近了一步。至少在(计算机)视觉方面,我们现在拥有能够从数千个类别中精确地分类图像的系统。这要归功于卷积神经网络(CNN)(以及用于训练它们的图形处理单元的效率)。如果每个类别都有足够的图像来训练,CNNs可以学会调整里面的人造神经元的权重,这样,经过训练,CNNs就能对之前从未见过的图像进行分类。


有趣的是,CNNs的灵感来自于我们大脑的视觉系统,为了做到这一点(在这里,这里和这里(链接)幸好CNNs与神经科学关系密切,我有机会从神经生理学的角度(在鲁汶大学)来开展研究,发挥我对人工神经网络的热情和好奇心去了解大脑构造。

 

图二:一个典型的CNN的架构


在这篇博客文章中,我们将通过卷积神经网络层的人工神经元来模拟大脑视觉区域的神经元。通过“建模”,我指的是函数的创建,它与生物神经元的输入相同,并可以产生相似的输出。


def model_neuron(image):
    return realistic_response


在我们的举例中,输入是在空白背景下的剪影(黑色填充的形状)的图像。


图三:示例图像显示为生物神经元(没有绿色框架)


来自生物神经元的数据是通过电生理学实验收集的。在这些实验中,我们通过显示器对一只猴子显示图像(输入刺激),并在猴子大脑中插入一个电极,记录神经元的活动或反应。


这里说的活动或反应,通常指的是神经元每单位时间产生的动作电位(或峰值)的数量(如响应=30峰值/秒)。


图四:神经元很兴奋地看着这个...


在我们的例子中,数据是从下颞叶皮层收集的,这是我们视觉系统的“后期”处理阶段之一,更确切地说,是来自大脑的颞上沟(MSB)部分。


这些小区域中的神经元,正如你猜到的那样,对身体形状的图像的反应比其他类别的图像(如面孔)要敏感。当一个身体形状出现在图像中时,它们会感到兴奋,即使它们并没有头脑!


基本操作


让我们继续讨论基本操作部分的技术细节,同时需要不能让非技术读者感到厌烦。


在这里,我们将研究单个神经元的数据,称为“C65b”(不要问我为什么,它就叫这个名字)。


这个神经元被呈现出来(通过它的主人的眼睛,也就是一只叫埃舍尔的猕猴),有605张图像,图中有黑色形状和白色背景。有些形状是随机的,有些形状像动物或人类的身体,其他形状就像其他类别的剪影(更多细节请阅读我们论文的“材料和方法”)。


Materials and Methods:

http://www.eneuro.org/content/4/3/ENEURO.0113-17.2017


这些图像被调整以匹配我们选择的CNN的输入大小(例如224x224)。没有对它们进行进一步的预处理。


对于每一个图像(刺激),在实验室实验中,我们会记录单独的发射速率(峰值/秒)。我们的目标是找出是否可以使用来自CNN层的人造神经元来预测神经元对每个图像的实际生物反应(即回归问题)。我们该如何使用人工神经元?具体做法是,我们将给CNN提供同样的图像,并从每一层提取它们的特征。


  • (可选的)卷积神经网络的背景


让我们来详细解释一下CNNs的工作原理,以及在案例中的“特征”是什么。


正如你可能已经知道的,CNN的层由成千上万的人工神经元组成,它们被分成数百个特征地图(见图二)。每一个神经元都被分配了一些数学运算来执行,这个操作涉及到神经元的输入和它的权重,也就是神经元与它的输入的连接有多强。


例如,第一个卷积层中的一个神经元,在它的权重和输入图像的一个小窗口之间执行卷积运算(如图二所示。基本上是两个2D矩阵之间的元素乘法,然后是加上所有的)。这个想法是,如果神经元检测到一个类似它的权重,通过训练网络,我们实际上是在改变它们的权重,这样它们看起来就像是输入的模式。


因此,您可以将神经元看作是一个模式(或特征)检测器,检查它所看到的区域,包含一些熟悉的东西的权重模式,并输出一个“分数”来表示这种熟悉程度。有趣的是神经元的映射功能将具有相同的权重,所以基本上每个特征需要扫描整个输入图像来寻找一个特定的模式(这显然有助于训练权重时的计算和更新,因为你不需要更新每个神经元)。


在任何平均池层中,一个神经元接受上一层的一个小窗口的平均值。因此,一个最大池化层的神经元只是简单获取那个小窗口的最大值。这里的想法是,即使你把输入图像移到一边,或者旋转,或者缩放它,池中的神经元仍然会检测到相似的模式。这使得CNNs能够允许这些图像转换。


所以,通过“特征”,我们指的是一堆数字,这些数字是我们神经元的输出(或“模式检测器”)。


“激活”一词也可以与特征互换使用。从神经科学的角度来看,这更容易理解,因为它指的是一个神经元在输入刺激下被“激活”的程度。我不会详细讲CNNs的工作方式,因为网上有很多很棒的资源可以很好地解释这个问题(例如,卡洛西的课程,C. Olah的博客,Adit Deshpande的博客,hackernoon等等)。


Karpathy’s course:

http://cs231n.github.io/convolutional-networks/


 C. Olah’s blog:

http://colah.github.io/posts/2014-07-Conv-Nets-Modular/


 Adit Deshpande’s blog:

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/


hackernoon article:

https://hackernoon.com/visualizing-parts-of-convolutional-neural-networks-using-keras-and-cats-5cc01b214e59


  • 数学建模


我们将使用CNN层的VGG-16。像任何回归问题一样,我们需要一个预测矩阵X和一个目标矩阵y。在我们的举例中,X将是一个2D矩阵,其中每一行对应一个输入图像,每一列对应一个特定的CNN层神经元的激活。我们可以考虑整个CNN的神经元,建立一个巨大的X矩阵,但那将是计算量密集型的,它不会让我们知道层之间的差异。


因此,我们将为每个CNN层建立一个单独的回归设置,其中X将是nr。


输入图像的nr,CNN图层单元就会激活。


因此,对于VGG16的最后一层(fc8由1000单元组成),我们的X矩阵将是605x1000。


Y矩阵将是长度为605的一维向量,它将包含生物细胞的响应(峰值)到我们的每一个输入图像(刺激)。


图五:我们的回归问题中X和Y矩阵


请注意,这些图像是黑-白(二进制的),但是为了将它们输入到CNN,我们复制它们两次以得到一个3D卷(bnw图像3次)。要了解它们是如何与输入交互的,请从Karpathy的CS231n课程中了解这个令人难以置信的可视化(同时也要阅读其他的博客以获得更多的细节)。


Karpathy CS231n:

https://cs231n.github.io/assets/conv-demo/index.html


直观地说,到目前为止我们所做的是把一只猴子的生物神经元更换成出现在CNN层中的人工神经元。我们建立了一个人工的方式来表示相同的函数作为神经元C65b,我们需要找到一种有效的数学方法得到Y给X。接下来,我们将讨论建模选项以及为什么它不是一个简单的线性多重回归可以解决的问题。


基本历史:CNNs和神经科学的前身


在前文中,我提到CNNs是受神经科学的启发。为了让你知道为什么会这样,我将提供在CNNs出现之前的一个旧模型例子,它被用于视觉神经科学。


CNNs的神经科学灵感来自于它们处理和表示信息的方式。


特别是,卷积神经和最大池化的操作,并不是视觉计算的外来概念。


它们也被用于更古老的、受生物学启发的HMAX模型,它试图将大脑皮层的视觉处理解释为“越来越复杂的现象的层次”。


图六:信息通过我们的眼睛进入大脑,再通过大脑区域的神经元传递


在日益复杂的过程中被消化,从简单的视觉表现如边缘、线条、曲线等开始,逐渐进行更复杂的表示,例如,面部或全身。这将使我们了解更多关于观察对象的信息。


在HMAX中,卷积运算是用预先定义的权重集(Gabor滤波器)来表示的,它们代表了基本的4个方向。因此,第一个HMAX层(S1)的神经元(或“模式检测器”),在4个方向上寻找类似于边缘的特征。这发生在10个不同的图像大小中。然后,在下一个HMAX层,称为C1,这些操作的结果被合用(与CNNs的最大池化操作相同)。


接下来是对集合响应(S2层)和另一个池操作(C2层)的采样,它给出了HMAX模型的最终输出向量(见下面的图七)。

 

图七:HMAX模型架构


想要更完整地了解视觉皮层模型的历史,请阅读这篇非常有结构的学术百科全书:


http://www.scholarpedia.org/article/Models_of_visual_cortex#Riesenhuber1999


后记


免责声明:这里提供了所有数据(尽管我怀疑我提交的任何“数据”都属于鲁汶大学)关于这个主题的更多细节你可以参考eNeuro的出版物:


http://www.eneuro.org/content/4/3/ENEURO.0113-17.2017



【关于投稿】


如果大家有原创好文投稿,请直接给公号发送留言。


① 留言格式:
【投稿】+《 文章标题》+ 文章链接

② 示例:
【投稿】
《不要自称是程序员,我十多年的 IT 职场总结》:http://blog.jobbole.com/94148/


③ 最后请附上您的个人简介哈~



看完本文有收获?请转发分享给更多人

关注「数据分析与开发」,提升数据技能

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存