漫谈Capsule Network基本原理

2017 年 12 月 6 日 深度学习每日摘要 DLdigest

漫谈Capsule Network基本原理

半个多月前,Hinton的让人期待已久的Dynamic Routing Between Capsules终于在arixv上公开,第一作者是Sara Sabour,据Hinton本人介绍,Sabour是伊朗人,本来想去华盛顿大学读计算机视觉,但是签证被美国拒绝了,于是Google的多伦多人工智能实验室挖到了她,跟随Hinton一起做Capsule Network方面的研究。

目前一共有两篇文章关于Capsule Network,它们分别如下,虽然第二篇是处在盲审阶段,我们有理由相信第二篇也是出自Hinton之手,本期先介绍第一篇文章。
Capsule Network参考文献

Dynamic Routing Between Capsules
Matrix Capsules with EM Routing

首先我们谈谈Hinton为什么要提出Capsule Network,传统的图像识别是使用CNN来做的(如下图所示),CNN通常由卷积层和池化层共同构成,卷积层从原始图像中提取每个局部的特征,池化层则负责将局部特征进行概括,最终模型通过softmax分类器输出每个类别的概率分布。

CNN应用到图像识别上似乎非常合理,而且实际表现也非常好,但是Hinton则认为CNN中的池化操作是一个灾难,原因就在于池化操作只能给出粗略的位置信息,允许模型对一些小的空间上的变化视而不见,并不能精准地学习到不同物体的位置关联,比如一个区域内的实体的位置、大小、方向甚至是变形度和纹理。虽然CNN可以识别一张正常的人脸,但是如果把人脸照片中的一只眼睛与嘴巴的位置对调一下,CNN还是会将其识别成人脸,这是不对的。虽然池化的本意是为了保持实体的位置、方向的不变性,但是实际中的简单粗暴的取最大或取平均的池化操作会使得池化的效果事与愿违。

人类识别图片是基于平移和旋转将看到的图片与大脑中已有的模式进行匹配,例如,对于一个雕像,无论以什么角度取拍照,人们都可以轻松识别出它就是一个雕像,但是这个对于CNN来说是十分困难的,为了解决这个问题,即更好地表示实体的各种空间属性信息,Hinton在这篇文章中介绍了Capsule Network的概念。

Capsule Network的每一层是由很多Capsule构成的,一个Capsule可以输出一个活动向量,该向量就代表着一个实体的存在,向量的方向代表着实体的属性信息,向量的长度代表实体存在的概率,所以,即使实体在图片中的位置或者方向发生了改变,则仅仅导致该向量的方向发生变化,而向量的长度没有发生改变,也就是实体存在的概率没有变化。

与传统的神经元模型不同的是,传统的神经元是通过将每个标量进行加权求和作为输入,然后通过一个非线性激活函数(如sigmoid,tanh等等)映射到另外一个标量,而Capsule Network则是每一层都是由一些Capsule构成,其具体的工作原理可以分为以下几个阶段:

(1) 较低层的Capsule产生的活动向量u_i与一个权重矩阵W_ij相乘,得到了预测向量u_ij_hat,这个向量的含义就是根据低维特征预测得到高维特征的位置,举个例子,如果要识别一辆马车,那么某一层低维的特征是马和车,那么根据马就可以判断马车的总体位置,同样也可以根据车来判断马车的位置,如果这两个低维特征的判断的马车的位置完全一致的话,就可以认为这就是一辆马车了;

(2) 如果用u表示上一层的所有Capsule的输出矩阵,用v表示下一层的所有Capsule的输出矩阵,由(1)知道,上一层的每一个Capsule的输出向量u_i经过权重算出了预测向量u_ij_hat,那么接下来它需要把这个预测向量传递给下一层的每个Capsule,但不是完全对等地发给下一层的每一个Capsule,而是先要乘以耦合系数c_ij,这个耦合系数可以认为是代表低维特征对高维特征的预测程度,至于这个耦合系数c是怎么确定的,后文会详细介绍iterative dynamic routing过程;

(3) 将传送到下一层的第j个Capsule的所有信号求和,即s_j=SUM(c_ij×u_ij_hat)这一点和神经元模型中的w*x类似,只不过一个是标量运算,另一个是向量运算;

(4) 类似于神经元模型中的激活函数sigmoid将输入映射到0~1的区间,这里作者采用了非线性的squashing函数来将较短的向量映射成长度接近于0的向量,将较长的向量映射成长度接近于1的向量,而方向始终保持不变,这个过程相当于是对预测向量做了归一化,最终得到的v_j就是下一层第j个Capsule的输出向量。

以上就是相邻层之间的Capsule的活动向量的计算流程,接下来我们来看一下相邻层的Capsule之间的耦合向量c_ij是如何确定的。

首先我们需要明白,既然是权重,那么对于上一层的Capsule i,它的所有c_ij之和必定等于1,并且c_ij的个数是等于下一层中Capsule的个数。这个c_ij是经过iterative dynamic routing算法确定的,dynamic routing算法的核心就是要求较浅层的Capsule的活动向量与较高层的Capsule的活动向量保持极高的相似度。

如上图算法图所示,第二行中的b_ij是一个未经归一化的临时累积变量,初始值为0,它的个数是由上一层和下一层的Capsule的个数决定的;每次迭代中,先将b经过softmax归一化得到总和为1均为正数的系数c_ij,第五行和第六行是进行前向计算并经过squashing函数进行归一化得到下一层的Capsule的输出v_j,第七行是更新c_ij(即更新b_ij)的核心,新的b_ij等于旧的b_ij加上上一层的Capsule与下一层的Capsule的“相似度”。从图中可以看到,这个迭代过程似乎没有收敛条件,关于迭代次数,文中并没有给出详细的说明,而是指出了迭代次数越多则发生过拟合的概率越大,在MNIST手写字体识别实验中,迭代次数设置为3得到的性能较好。

上面讲了这么多,仅仅说明了c_ij的确定算法,似乎还有一个问题没有解决,那就是确定其他参数的值?回到老方法,文中依然采用了后向传播算法来更新参数值,这就涉及到目标函数的确定。以MNIST手写数字识别为例,由于输出的类别是10,那么可以在最后一层中设置Capsule的个数为10,对于每个Capsule的loss可以按照如下公式进行计算,总loss就是把10个Capsule的loss求和即可。

除了介绍Capsule Network模型之外,文中还设计了一个基于卷积神经网络的Capsule Network用于MNIST手写字识别,如下图所示是一个简单三层结构的Capsule Network,一幅图片首先经过一层CNN(卷积核大小为9×9,包含256个feature map,stride设置为1,激活函数为ReLU)得到局部特征作为初级Capsule的输入,初级Capsule是一个包含32个feature map的卷积层,卷积核大小为9×9,stride为2,卷积神经元个数为8,也就是说这一层中一共有32×6×6个Capsule,并且每个Capsule的活动向量的维度是8,每个Capsule都是处在6×6的网格之中,它们彼此共享着它们的权重,并且卷积中用的激活函数就是前文说的squashing函数。最后一层DigitCaps是由10个Capsule组成的,每个Capsule的活动向量维度是16,在PrimaryCapsules与DigitCaps之间需要执行iterative dynamic routing算法来确定耦合系数c_ij,整个过程使用的是Adam优化算法来对参数进行更新。

文中仅仅使用了较小的数据集MNIST作为模型性能的评估,期待Capsule Network应用到更大规模机器学习任务上的表现,接下来几期将继续关注Capsule Network的研究进展及其在语音识别中的TensorFlow实践。

题图:Pablo Picasso, 1914


漫谈机器阅读理解之Facebook提出的DrQA系统

详解TensorFlow Eager命令式执行环境

动态层归一化(Dynamic Layer Normalization)

端对端的深度卷积神经网络在语音识别中的应用

SampleRNN语音合成模型

详述DeepMind wavenet原理及其TensorFlow实现

Layer Normalization原理及其TensorFlow实现

Batch Normalization原理及其TensorFlow实现

Maxout Network原理及其TensorFlow实现

时延神经网络(TDNN)原理及其TensorFlow实现

ConvLSTM原理及其TensorFlow实现

Network-in-Network原理及其TensorFlow实现

如何基于TensorFlow实现ResNet和HighwayNet

详解TensorFlow的新seq2seq模块及其用法

TensorFlow seq2seq中的Attention机制(续)

深度学习每日摘要|坚持技术,追求原创

微信ID:deeplearningdigest
长按二维码关注我
登录查看更多
9

相关内容

【ICML2020-华为港科大】RNN和LSTM有长期记忆吗?
专知会员服务
74+阅读 · 2020年6月25日
【CVPR2020】图神经网络中的几何原理连接
专知会员服务
56+阅读 · 2020年4月8日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
BERT技术体系综述论文:40项分析探究BERT如何work
专知会员服务
139+阅读 · 2020年3月1日
Capsule Networks,胶囊网络,57页ppt,布法罗大学
专知会员服务
67+阅读 · 2020年2月29日
【ICLR-2020】网络反卷积,NETWORK DECONVOLUTION
专知会员服务
38+阅读 · 2020年2月21日
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
【教程】可视化CapsNet,详解Hinton等人提出的胶囊概念与原理
GAN生成式对抗网络
8+阅读 · 2018年4月11日
胶囊网络(Capsule Network)在文本分类中的探索
PaperWeekly
13+阅读 · 2018年4月5日
看完这篇,别说你还不懂Hinton大神的胶囊网络
人工智能头条
8+阅读 · 2018年3月28日
Github 项目推荐 | 用 Pytorch 实现的 Capsule Network
AI研习社
22+阅读 · 2018年3月7日
三味Capsule:矩阵Capsule与EM路由
PaperWeekly
10+阅读 · 2018年3月2日
CapsNet入门系列之四:胶囊网络架构
论智
12+阅读 · 2018年2月23日
CapsNet入门系列之三:囊间动态路由算法
论智
12+阅读 · 2017年12月1日
Capsule Networks教程
全球人工智能
10+阅读 · 2017年11月24日
CapsNet入门系列之一:胶囊网络背后的直觉
论智
8+阅读 · 2017年11月20日
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Arxiv
11+阅读 · 2019年1月24日
Arxiv
7+阅读 · 2018年8月21日
Recurrent Fusion Network for Image Captioning
Arxiv
3+阅读 · 2018年7月31日
Arxiv
10+阅读 · 2018年2月17日
VIP会员
相关VIP内容
【ICML2020-华为港科大】RNN和LSTM有长期记忆吗?
专知会员服务
74+阅读 · 2020年6月25日
【CVPR2020】图神经网络中的几何原理连接
专知会员服务
56+阅读 · 2020年4月8日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
BERT技术体系综述论文:40项分析探究BERT如何work
专知会员服务
139+阅读 · 2020年3月1日
Capsule Networks,胶囊网络,57页ppt,布法罗大学
专知会员服务
67+阅读 · 2020年2月29日
【ICLR-2020】网络反卷积,NETWORK DECONVOLUTION
专知会员服务
38+阅读 · 2020年2月21日
相关资讯
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
【教程】可视化CapsNet,详解Hinton等人提出的胶囊概念与原理
GAN生成式对抗网络
8+阅读 · 2018年4月11日
胶囊网络(Capsule Network)在文本分类中的探索
PaperWeekly
13+阅读 · 2018年4月5日
看完这篇,别说你还不懂Hinton大神的胶囊网络
人工智能头条
8+阅读 · 2018年3月28日
Github 项目推荐 | 用 Pytorch 实现的 Capsule Network
AI研习社
22+阅读 · 2018年3月7日
三味Capsule:矩阵Capsule与EM路由
PaperWeekly
10+阅读 · 2018年3月2日
CapsNet入门系列之四:胶囊网络架构
论智
12+阅读 · 2018年2月23日
CapsNet入门系列之三:囊间动态路由算法
论智
12+阅读 · 2017年12月1日
Capsule Networks教程
全球人工智能
10+阅读 · 2017年11月24日
CapsNet入门系列之一:胶囊网络背后的直觉
论智
8+阅读 · 2017年11月20日
Top
微信扫码咨询专知VIP会员