我是靠谱客的博主 痴情蜗牛,最近开发中收集的这篇文章主要介绍胶囊网络以及在NLP的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Capsule Networks:A Survey

基于动态路由的胶囊网络在文本分类上的探索:github地址

Investigating Capsule Networks with Dynamic Routing for Text Classification

卷积神经网络取得了很大的成功,也很受欢迎。但是,它也不是适合所有的任务,架构上的一些缺陷,导致它并不能很好的完成一些任务。

CNNs提取图像中的特征并通过特征学习识别物体。网络底层学习一般性特征,比如轮廓,随着层数的加深,提取的特征更加复杂,比如像眼睛、鼻子或者整张脸。然后,网络用它学习到的所有特征作出最后的预测。这里存在一个缺陷,在CNN中没有可用的空间信息,而用于连接的池化层,效率实际上也非常低。

Reddit上有 Geoffrey Hitton关于pooling的看法。

 

在CNN中应用pooling是一个很大的错误,它工作得很好的事实是一场灾难。

最大池化

在最大池化过程中,很多重要的信息都损失了,因为只有最活跃的神经元会被选择传递到下一层,而这也是层之间有价值的空间信息丢失的原因。为了解决这个问题,Hinton提出使用一个叫做“routing-by-agreement”的过程。这意味着,较为底层的特征(手、眼睛、嘴巴等)将只被传送到与之匹配的高层。如果,底层特征包含的是类似于眼睛或者嘴巴的特征,它将传递到“面部”的高层,如果底层特征包含的是类似手指、手掌等特征,它将传递到“手”的高层。

这个完整的解决方案将空间信息编码为特征,同时使用动态路由(dynamic routing)。这由Geoffrey Hinton在NIPS2017提出,称为胶囊网络(Capsule Networks)。

胶囊

Capsule的定义

Capsule是什么呢?Capsule是一个你可以想成他想要取代neuron,原来neuron是output一个值, 而Capsule是output一个vector,在其余的部分它的用法你就把它想成是一个一般的neuron。

 

当我们通过计算机图形渲染来构建对象时,我们需要指定并提供一些几何信息,比如告诉计算机在何处绘制对象,该对象的比例,角度以及其他空间信息。而这些信息全部表示出来,是屏幕上的一个对象。但是,如果我们只是通过观察照片中的物体来提取信息呢?这就是胶囊网络(Capsule Network)的核心思想——逆渲染(inverse rendering)。

让我们一起来理解Capsules以及它是怎么解决提供空间信息的问题的。

当看到CNN是背后的逻辑时,我们开始注意到它的架构缺陷。看下图:

 

这看起来并不是一张十分正确的人脸图,虽然图中包含了人脸的每一个组成部分。人类可以很容易分辨出这不是一张正确的人脸,但是CNNs却很难判断这不是一张真实的人脸,因为它仅仅看图像中的这些特征,而没有注意这些特征的姿态信息。

 

胶囊网络(capsule networks)解决这个问题的方法是,实现对空间信息进行编码同时也计算物体的存在概率。这可以用向量来表示,向量的模表示特征存在的概率,向量的方向表示特征的姿态信息。

Capsule 的工作原理归纳成一句话就是,所有胶囊检测中的特征的状态的重要信息,都将以向量的形式被胶囊封装。

 

这里可以参照论文中关于胶囊网络的定义,论文地址:https://arxiv.org/pdf/1710.09829.pdf

在计算机图形应用程序中,比如设计或者渲染,对象通常是通过参数设置来呈现的。而在胶囊网络中,恰恰相反,网络是要学习如何反向渲染图像——通过观察图像,然后尝试预测图像的实例参数。

胶囊网络通过重现它检测到的对象,然后将重现结果与训练数据中的标记示例进行比较来学习如何预测。通过反复的学习,它将可以实现较为准确的实例参数预测。

论文  Dynamic Routing Between Capsules 中建议使用两个损失函数。主要是为了实现capsules之间的等效性。这意味着,在图像中移动特征会改变Capsule向量,但是不影响特征存在的概率。底层Capsules提取特征之后,就传递到匹配的更高层的Capsules。

 

如上图所示,所有特征的姿态参数用来决定最后结果。

胶囊内的操作

在传统神经网络里,一个神经元一般会进行如下的标量操作:

  1. 输入标量的标量加权;

  2. 对加权后的标量求和;

  3. 对和进行非线性变换生成新标量。

而在胶囊网络里面,这些操作有有一些的改变:

1、输入向量与权重矩阵的矩阵乘法。这编码了图像中低级特征和高级特征之间非常重要的空间关系。

2、加权输入向量。这些权重决定当前胶囊将其输出发送到哪个更高级的胶囊。这是通过动态路由(dynamic routing)的过程完成的。

3、对加权后的向量求和。 (这一点没什么差别)

4、非线性化使用squash函数。该函数将向量进行压缩使得它的最大长度为1,最小长度为0,同时保持其方向不变。

胶囊之间的动态路由

在路由(routing)过程中,下层胶囊将输入向量传送到上层胶囊。对于可以路由到的每个更高层的胶囊,下层胶囊通过将自己的输出乘上权重矩阵来计算预测向量。如果预测向量与上层胶囊的输出具有较大的标量积,则存在自顶向下的反馈,具有增加上层胶囊耦合系数,减小其他胶囊耦合系数的效果。

MNIST胶囊网络的架构

 

编码器

编码器用于获取图像输入,并学习如何将图像表示为16维向量,包含渲染图像所需要的所有信息。

1、Conv Layer——提取用于后续胶囊分析的特征。论文中包含大小为9*9*1的256个卷积核。

2、PrimaryCaps——这是下级胶囊层,包含32个不同的胶囊,每个胶囊将第8个9*9*256的卷积核用于之前卷积层的输出,并输出4D向量。

3、DigitCaps——上级胶囊层,使用动态路由的主要胶囊层,该层输出16D向量,包含重建对象所需要的实例化参数。

解码器

解码器从DigitCaps获取16D向量,并学习如何解码图像的实例参数。解码器与Euclidean distance 损失函数一起使用,确定重建特征与实际特征的相似度。解码器是一个非常简单的前馈网络。

为什么要使用胶囊网络

虽然,CapsNet在简单的数据集MNIST上表现出了很好的性能,但是在更复杂的数据集如ImageNet、CIFAR-10上,却没有这种表现。这是因为在图像中发现的信息过多会使胶囊脱落。

胶囊网络仍然处于研究和开发阶段,并且不够可靠,现在还没有很成熟的任务。但是,这个概念是合理的,这个领域将会取得更多的进展,使胶囊网络标准化,以更好的完成任务。

最后

以上就是痴情蜗牛为你收集整理的胶囊网络以及在NLP的应用的全部内容,希望文章能够帮你解决胶囊网络以及在NLP的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部