首页 > 编程知识 正文

卷积神经网络例子(神经网络可以做什么)

时间:2023-05-06 01:59:37 阅读:77823 作者:4378

编译| AI技术大本营

参加| fzdz

编辑|明明

【AI科技大本营推】什么是封装网络? 封装网络如何克服卷积神经网络的缺点和不足? 机器学习顾问AurlienGron发表了自己的意见。 营长把文章的内容翻译如下。

封装网络(Capsule networks,CapsNets )是一种热门的新型神经网络体系结构,可能会对深度学习,特别是计算机视觉领域产生重大影响。 等一下,计算机视觉问题还没有解决好吗? 卷积神经网络(Convolutional neural networks,CNNs )在分类、定位、物体检测、语义分割或实例分割等各种计算机视觉任务中都达到了超人类的水平,但我们都相信这些(参照图1 )

是的,我们已经看到了难以置信的CNNs :

这些CNNs接受了大量的图像训练(或者重用了训练过的神经网络的一部分)。 CapsNets可以用更少的训练数据很好地进行网络训练。

CNS不能很好地处理图像的多义性表达。 封装网络可以很好地解决这个问题,在拥挤的场景中也很好(虽然CapsNets至今仍与背景相关)。

cns在池化层丢失了大量的信息。 这些池化层降低了图像的空间分辨率(参见图2 ),因此,它们的输出对于输入端的微小变化是不变的。 如果需要保存整个网络的详细信息(如语义分割),这就成了问题。 现在,要解决这个问题,主要需要通过在CNNs周围构建复杂的结构来恢复丢失的信息。 使用CapsNets,详细的姿态信息(如目标位置、旋转、厚度、应变和大小)将保留在整个网络中,而不是丢失和恢复。 输入的细微变化将保留输出的细微变化——信息。 这就是所谓的“同性恋”。 因此,CapsNets可以为不同的可视任务使用相同的简单一致的体系结构。

最后,CNNs需要其他组件来自动识别部件属于哪个对象。 例如,这条腿属于这只羊。 CapsNets免费提供部件的分层结构。 图2的2 DeepLab2图像分割过程由梁- chieh Chen等人提供。 可见,CNN (右上)的输出结果非常粗糙,需要通过添加额外的步骤来恢复丢失的细节。 该图来自Deeplab论文《Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution,and Fully Connected CRFs》,引用已得到作者许可。 要了解语义划分体系结构的多样性和复杂性,请参阅S. Chilamkurthy撰写的这篇好文章。

CapsNets是Geoffrey Hinton等人于2011年在题为《转换自动编码器(Transforming Autoencoders )》的论文中首次提出的。 然而,就在几个月前,也就是2017年11月,强香菇Sabour、Nicholas Frosst和Geoffrey Hinton表示:“胶囊间动态路由(动态路由between capsules ) 在介绍了一个capsules的MNIST (手写数字图像的知名数据集)上达到了最高的性能,在MultiMNIST (由不同数字对重叠形成的变形手写数字图像数据集)上得到了比CNNs好得多的结果。 参照图3。

图3多重NIST图像(白色)和CapsNets重建图像(红绿)。 “r”表示重新配置,“l”表示标签。 例如,该示例预测(左上)正确,重建图像也正确。 但是,第五个例子的预测是错误的,预测为(5,0 )是) 5,7 )。 因此,5将正确重建,但没有0。 图形来自论文《Dynamic routing between capsules》,引用经作者许可。

CapsNets有很多方面,但并不完美。 首先,目前在CIFAR10和ImageNet等大型图像测试集中,CapsNets并不比CNNs好。 另外,CapsNets需要大量的计算,无法检测出相互接近的同类型的两个对象(这被称为“拥挤问题”,证明人类也有这个问题)。 但是,CapsNets的主要思想非常有前景,似乎只需要一些调整就能发挥出全部的潜力。 最终,现在的CNNs于1998年发明,经过几个调整,2012年在ImageNet数据集上战胜了最新技术。

那么,CapsNets到底是什么?

简而言之,CapsNet是胶囊,而不是上帝

经元组成。胶囊是用于学习检测给定图像区域内特定对象(如矩形)的一小组神经元,它输出一个向量(如一个8维矢量),该向量的长度表示被检测对象存在的估计概率,而方向(如在8维空间中)对被检测对象的姿态参数(如精确的位置,旋转等)进行编码。如果被检测对象发生稍微改变(如移动、旋转、调整大小等),则胶囊将输出相同长度的矢量,但方向稍有不同。这样,胶囊是等变的。

就像常规的神经网络一样,一个CapsNet也是按多个层组织的(见图4)。最下层的胶囊被称为主胶囊:每个胶囊都接收图像的一个小区域作为输入(称其为接受场),尝试检测一个特定模式的存在和姿态,如矩形。更高层的胶囊称为路由胶囊,检测更大更复杂的对象,如船只。

图4 两层胶囊网络。这个例子中,初始胶囊层有两个5×5映射,而第二个胶囊层有两个3×3映射。每个胶囊输出一个向量,每个箭头符号表示一个不同胶囊的输出,蓝色箭头符号表示一个尝试检测三角形的胶囊的输出,黑色箭头符号表示一个尝试检测矩形的胶囊的输出。图像由AurélienGéron提供。

主胶囊层采用几个常规的卷基层来实现。如本文使用两个卷基层输出256个包含标量的6×6特征映射,并将这个输出转变成32个包含8维矢量的6×6映射。最后,使用一个新颖的压缩函数来确保这些向量的长度在0到1之间(表示一个概率)。这样就给出了主胶囊的输出。

下几层胶囊也尝试检测对象及其姿态,但工作方式非常不同,即使用按协议路由算法。这就是胶囊网络的最大魔力所在。我们来看一个例子。

假设只有两个主胶囊:一个长方形胶囊和一个三角胶囊,假设它们都检测到正在寻找的东西。矩形和三角形都可能是房子或船的一部分(见图5)。由于长方形的姿态是略微向右旋转的,房子和船也得是稍微向右旋转。考虑到三角形的姿态,房子就得几乎是颠倒的,而船会稍微向右旋转。注意,形状和整体/部分关系都是在训练期间学习的。现在注意长方形和三角形对船的姿态达成一致,而对房子的姿态强烈不一致。所以,矩形和三角形很可能是同一条船的一部分,并没有房子的存在。

图5 按协议路由,第1步—基于存在的部分对象及其姿态去预测对象及其姿态,而后在预测结果之间寻求一致性。图像由AurélienGéron提供。

既然现在确信长方形和三角形是船的一部分,那么将长方形和三角形胶囊的输出结果更多地发送给船胶囊,而更少发送给房子胶囊,将更有意义:这样,船胶囊将接收更有用的输入信号,而房子胶囊将会收到较少的噪声。对于每个连接而言,按协议路由算法包含一个路由权重(见图6):达成一致时,增大路由权重;出现分歧时,减少路由权重。

图6 按协议路由,第2步—更新路由权重。图像由AurélienGéron提供。

按协议路由算法包括协议检测+路由更新的一些迭代(注意,每次预测这都会发生,不只是一次且也不仅是在训练时间)。这在拥挤的场景中特别有用:如图7中,场景是存在歧义的,因为你从中间看到的可能是倒置的房子,但是这会使底部的矩形和顶部的三角形无法解释。协议算法很可能会给出更好的解释:底部是一只船,顶部是一个房子。这种模棱两可的说法被认为是“可解释过去的”:下面的矩形最好用船的存在来解释,这也解释了下面的三角形,一旦这两个部分被解释清楚,剩下的部分就很容易被解释为一个房子。

图7按协议路由能解析拥挤场景,如可被误解为颠倒的房子而其他部分无法解释的存在歧义的图像。但底部矩形路由给船,同时底部三角形将也路由给船。一旦船被解释清楚,那么很容易将顶部解释为房子。图像由AurélienGéron提供。

作者| AurélienGéron

原文链接

https://www.oreilly.com/ideas/introducing-capsule-networks?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。