[深度神经网络简述与 Capsule 介绍]

点此原文

本人最近初学 Hinton 大神的论文《Dynamic Routing Between Capsules 》,对深度神经网络的内容进行了简要总结,将观看 “从传统神经网络的角度解读 Capsule” 视频的内容做了笔记。感谢网络资源,让我学习到很多知识。以后会有更新。

作者: 嫩芽 33
出处: http://www.cnblogs.com/nenya33/p/8079861.html 版权:本文版权归作者和博客园共有
转载:欢迎转载,但须保留此段声明,并在文章中给出原文连接;否则必究法律责任

====================我是分割线 =====================================

DNN = Deep Neural Network

1. 领军人物

2. 全连接神经网络

输入数据经过网络,执行一系列的操作后,找到输出类概率,与真实标签比较,计算出误差值,然后用误差计算梯度,之后梯度会告诉我们如何在反向传播过程中更新权重。

BP 算法

  • 是一个用来求解目标函数关于多层网络权值梯度的反向传播算法。
  • 求导的链式法则的具体应用。
  • 指导机器如何从前一层获取误差而改变本层的内部参数,这些内部参数可以用于计算表示。

3. 深层结构的启发

(1)深度不够,对于大的输入,每个隐藏层的节点太多,泛化能力差

(2)人脑是深层结构

(3)认知过程似乎是深度的 (人脑形成 idea 是层级的; 人第一次学习简单的 concepts 后会将其组合形成更抽象的表征)

4. 从深度上来看神经网络的进化史

CNN 更易于训练并且比全连接的神经网络的泛化性能更好,被计算机视觉团队广泛使用。

关于卷积层形象化的解释:像一个方形手电筒,照亮图像上的每个像素,找到图像中最相关的部分,然后做乘积、加和运算,最终输出一个特征图,特征图表示的是从图像中学习到的特征。在得到了特征图后,会用到非线性激活函数,作用是使网络既能学习线性特征,又能学习非线性特征,用 ReLU 函数而不是其他函数的原因在于,能够解决 BP 过程中梯度消失的问题。

关于池化层的解释:假设有一个像素矩阵,有很多数字 0-255,以 max pooling 为例,它做的就是把这些数字划分成小块,从每个小块中取出最大的像素值,向前传播,这样得到更小的新的像素矩阵,用于前向传播,加速,减少了训练的时间。

LeNet 1986

conv-pooling-conv-pooling

AlexNet 2012 8

conv-pooling-conv-pooling-conv-conv-conv-pooling

VGG-Net 2014 16-19

2convs- pooling-2convs-pooling-3convs-pooling-3convs-pooling-3convs-pooling

GoogLeNet 2014 22

用更多的卷积,更深的网络可以得到更好的模型

ResNet 2015 152

图中为 34 层

历届 ILSVRC 比赛代表性模型的成绩及其神经网络深度

参考

1. Deep learning. Yann LeCun, Yoshua Bengio& Geoffrey Hinton

2. http://blog.csdn.net/xbinworld/article/details/45619685

3. http://www.iqiyi.com/w_19rv08vrlp.html Siraj Raval(简洁直观)

4. https://www.leiphone.com/news/201702/dgpHuriVJHTPqqtT.html 把 CNN 总结得很好

Capsule

1. Who**?**

“神经网络之父”Geoffrey Hinton 提出 Capsule

2. Why**?为什么要提出** Capsule

2017 年 8 月 17 日,“神经网络之父”Geoffrey Hinton 加拿大多伦多菲尔兹研究所开讲,主题为《What is wrong with convolutional neural nets?》,指出了神经网络存在的问题。

在 Hinton 看来,标准神经网络存在如下问题:

(a)结构层次太少。只有神经元、层、网络三个层级;

(b)我们需要把每一层的神经元组成 capsules,capsule 可以做大量内部计算,然后输出压缩的结果。(灵感来自于大脑皮层中的微柱状体 mini-coulumn)

Capsule 表示什么呢?

(a)每个 capsule 表征检测类型的多维实体的实例化参数和存在性;

(b)例如,在视觉路径中,capsule 检测物体或者部分物体的特定类型;

(c)一个 capsule 输出两部分:物体呈现出某种类型的概率;物体的广义姿态,包括位置、方向、大小、形变、速率和颜色等。

Capsule 的作用是同步过滤:

(a)典型的 capsule 接收底层 capsule 的多维预测向量,寻找紧密的预测群(可以理解为类别);

(b)如果找到了一个紧密的群,capsule 会输出:这个类型存在的实体在这个 domain(领域)的较高概率,以及这个簇的中心,这个中心就是那个实体的广义姿态。

(c)善于过滤噪声,因为高维一致性不会偶然发生。capsule 比通常的神经元更好。

Yann LeCun 和绝大多数人做物体识别的现有方式分为以下几种:

(a)卷积网络使用多层的学习好的特征检测器(好);

(b)在卷积网络中,特征检测器是局部的,每种类型的检测器被复制到整个空间中(好);

(c)在卷积网络中,层次越高,特征检测器的空间域越大(好);

(d) 特征提取层与下采样层交叉存取,下采样层对同类型的相邻特征检测器的输出进行了池化(差)。

将复制的特征检测器的输出结合的动机和原因是什么?

(a)池化在每一层级带来了少量的平移不变性:舍去了最活跃的特征检测器的精确位置;如果 pool 之间重叠地更多或者特征对其他特征的相对位置进行了编码,可能没什么问题。

(b) 池化减少了特征提取的下一层的输入数量。这使得我们可以在下一层有更多特征类型。

池化存在四个主要的争论:

(a)池化与图形感知心理学不切合。它并没有解释为什么我们给物体安排内在的坐标框架,以及有效的原因。

(b)池化解决了错误的问题。我们想要的是均等性而不是不变性,是解开而不是丢弃。

(c)池化未能利用潜在的线性结构。它没有利用可完美处理图像中最大变动来源的自然线性流形。

(d)池化很不擅长处理动态路由。我们需要把输入的每一部分路由到知道如何处理它的神经元上去。发现最佳的选路等同于解析图像。

……

Hinton 的这种精神也获得了同行的肯定:工具都不是永恒的。

3. When**?**

2017 年 10 月 26 日

事实上,在 2011 年 Hinton 在论文 Transforming auto-encoders 中引入过 Capsule 单元。

(Geoffrey E Hinton, Alex Krizhevsky, and Sida D Wang. Transforming auto-encoders. In Artificial Neural Networks and Machine Learning–ICANN 2011, pp. 44–51. Springer, 2011.)

4. Where**?**

https://arxiv.org/abs/1710.09829

5. What****Capsule 究竟是什么

来自论文摘要:

A capsule is a group of neurons whose activity vector represents the instantiation parameters of a specific type of entity such as an object or object part. We use the length of the activity vector to represent the probability that the entity exists and its orientation to represent the instantiation parameters. Active capsules at one level make predictions, via transformation matrices, for the instantiation parameters of higher-level capsules. When multiple predictions agree, a higher level capsule becomes active.

Capsule 是一组神经元,它的激活向量表示物体或者物体部分的特定类型的实例参数。用激活向量的长度表示物体存在的概率,用方向表示实例参数。一个层级的激活 capsule 做预测,通过变换矩阵得到更高层级 capsule 的实例参数。当多个预测一致时,更高层级的 capsule 被激活。

6. How**?从传统神经网络角度解读** Capsule 模型

***1***Capsule 概念提出的背景

CNN 可能会把右上方左图也当做人脸,因为容易在 pooling 过程中丢失空间上的相关性,目标是得到右下方的结果。想要详细了解 capsule 的提出背景,可以看 Hinton 的报告和论文。

实验发现深度神经网络的另外一个缺点

***2***Capsule 模型与传统神经元的比较

Capsule 与传统神经元对比,相似处很多:

在传统神经元中,标量 xi,加权求和得到 aj。用非线性激活函数,转换得到神经元输出,是个标量值,激活函数可以选择 sigmoid、tanh 和 ReLU 等,最终得到标量。

在 Capsule 中,ui 是向量,矩阵的乘就是一个简单的仿射变换,在传统神经元中没有,然后,对 i 维度做加权求和,传统是对标量加权求和,Capsule 是对向量加权求和得到向量。Squash 函数是个非线性的函数,与传统非线性对应,输出是向量。

在论文第二部分核心内容:将标量输入输出扩展到向量输入输出。

新的神经元的参数有哪些呢?W 和 c。传统方法中参数是用梯度方法更新,capsule 中怎么更新?

*3*)参数更新算法 routing-by-agreement 的分析

CNN 用 pooling 做 routing,capsule 中则不同

实际上 W 用 BP 更新,Wij 是 8*16 的矩阵,更新不多说;

C 用另外一个原则更新,routing-by-agreement,cij 是标量,重点看伪代码。

假设 l 层有两个神经元,u1,u2,输出是四个神经元 v1v2v3v4。

从 ui 开始,用公式计算得到 u4|1,u4|2.

    根据伪代码中第 4 步和公式 3,计算 c14 和 c24,第 5 步得到 S4,得到 v4,根据伪代码第 7 步,得到新的 b 值。进行多轮迭代(r 轮),更新 c 值,确定连接权重,输出第 r 次迭代后的 v4,输入到网络的下一层。bij 的更新与 ui|i 和 vj 有关,是标量积,实际上是个投票的过程, bij 初始化为 0。

   迭代轮数 r 是自己定义的,是个超参数,论文实验表明 r 为 3 时效果最好。

在实验中可以看到,routing 还有很多相关的问题,效果还不是太理想。

实际上,总结起来,与简单地添加层不同,capsule 是在层中加嵌套层,添加一组神经元。

| |

Siraj Raval 总结为两点

Layer-based squashing :不是简单地对每个神经元激活,而是将这些神经元组成一个 capsule,然后对整个 capsule 内的所有神经元做非线性激活

Dynamic routing :通过 routing-by-agreement 原则替换 pooling

|

***4***CapNets 模型

Capsule 是个新的神经元,传统的神经元可以构建网络,论文中第四部分给出了 CapNets 的模型,主要三层,不包括后面的重构模型,一层一层地看。

第一层是常规的卷积层,有什么作用呢?为什么不直接用 capsule 呢?(报告人认为可以扩展到 capsule,需要实验证明)还有两层,PrimaryCaps 层和 DigitCaps 层。

整个论文就是两个卷积层,一个全连接层,Hinton 把 PrimaryCaps 看做 capsule 的卷积层,把 DigitCaps 看做 capsule 的全连接层

PrimaryCaps (在论文第四部分第一行):

论文中说每个 capsule 是 8D 的,是 8 个卷积单元的结构,可以理解为 8 个通常意义上的卷积层。

整个 L2 层的输入是 20*20*256 特征图,PrimaryCaps 层卷积核是 9*9,stride 是 2*2,通道是 32,非线性函数是 squashing 函数,没有用到 routing 算法。怎么理解呢?讲两种理解方式。

第一种:这一层可以看成 8 个并行的常规卷积层的叠堆,怎么理解呢?

先看下 a 图,从输入的 20*20*256,如果做常规的卷积层,与论文中提到的一样,得到 6*6*32,20-9=11,11/2=5.5,5.5+1=6.5,舍弃,最终得到 6*6*32。维度的变化从 20*20*256,得到 6*6*32,并行地做 8 个卷积,扩展维度,加个 1,就有 8 个张量了,怎么做呢?把 8 个张量合并。

可视化结果什么样? 现在有 8 个 6*6*32 的,就是 8 堆,每一次从每一堆取其中一张 6*6 的特征图,共 32 张,就得到 32 个 6*6*8,就与论文中模型一样了。

为什么是并行,不是串行呢?可以有多种理解方式,这里给出的是报告人最开始想到的一种方式,这种方式与论文中给出的 PrimaryCaps 层有 32 个通道,权重共享是 6*6 的描述对应起来了。

这种理解方式在计算时比较复杂,看另一种计算很简单的理解方式。

了解卷积概念的应该都清楚,32 个通道就是有 32 个相互独立的卷积核,8 个并行的卷积层的单元相互独立,就是说有 8*32 个相互独立的卷积核,计算过程可以看成有 8*32 个通道的卷积层。那么这一层的输入 input 只用普通卷积(TensorFlow 中 conv2d)来计算,通道数直接就是 self.num_outputs*self.vec_len=32*8,就实现了这一层的计算过程,之后 reshape 就得到下面 1152*8*1 的张量。8*1 对应一个 capsule 的输入,与论文一致。这个计算方式很简单,与传统卷积层无差别,但是意义已经不一样了,因为在 reshape 之后,还加了一些层,在后续层的作用上,达到对 8*1 的特征封装的效果。

DigitCaps *:*

可以把每个 capsule 看成是神经元,输出是向量,论文中说 DigitCaps 层是 16D 的向量,那么可不可以把向量看成一个向量点?

理解方式就是,把向量扁平化,看成一个点,那么这层的输入 PrimaryCaps 实际上是 6*6*32 特征图,其中每个点是 8*1 的向量点,输出是 10 个 capsule,每个是 10*1,也可以看成,每个神经元输出一个向量点。下图只画了 3 个输入三个输出的图,可以看做全连接,权重 cij,输出 ui,是 capsule 版的全连接。与常规的区别在两处:一是输入输出是向量,二是没有偏置值。代码可以直接做 capsLayer 的 fully_connected 直接调用,从 1152 个 capsule 的输入,得到 10 个 capsule 的输出,每个 capsule 向量是 16*1。参数个数计算方法,大家自己计算一下。

Q:有人问 cij 是矩阵吗?

A:从每一条边 u1-v1 来看 cij 是标量(公式 2),对于整个过程可以写成矩阵的形式。

第一层就是常规卷积,就不说了。

PrimaryCaps 层实际上就是一个卷积,就是一个 32*8=256 个通道,是个常规的卷积过程,直接做 reshape,得到 32 个 6*6*8,这个图非常好,把每个 8*1 的向量表示成向量点,用箭头表示,对特征图做非线性转换 squashing。这层结束。

DigitCaps 层实际上就是 capsule 版的全连接层,先把 6*6*32 张量直接 reshape 成 1152capsule,每个输出是 8D 的向量点,后面输出是 10 个 capsule,每个 capsule 是 16D 的向量,权重是 c。总结来说,capsNet 是常规卷积层与 capsule 版全连接层的结合体。

到这里介绍完了论文第四部分模型的结构。接下来与传统 CNN /FC 比较。

***5***CapsNet 模型与卷积 / 全连接神经网络的比较

CapsNet 共三层,先是常规卷积层,然后是 capsule 的卷积层,之后是 capsule 版的全连接层。

传统 CNN 也是这么干的,先卷积 - pooling,再卷积 - pooling,最后全连接层。能够理解 CNN 中最后放全连接层的话,也能明白这里也加全连接层的原因。理解相似之处。

另一个重要的是损失函数,论文中给出 margin loss 和重建 loss

先说下重构网络,论文中说重构的主要目的是正则化,用的网络很简单就是三层的全连接,不多说。

Margin loss 函数才是主要的目的,这个函数在支持向量机中经常见到,自己查阅了解下。主要是限制 vc 长度的上下边界,详细内容自己查阅理解。

直接跳到实验部分,论文中做了几个有趣的实验,按照论文的顺序说

第一个做分类精度,验证 dynamic routing 的效果,从论文给出的数据结果来看,第一列是模型,第二列是迭代次数,1 和 3,附录有实验证明,自己看,实验表明 3 的时候效果最好,第三列表示是否加了重构网络,加了之后效果更好一点。但是事实上,自己做的实验,就是 github 上的代码

实验条件尽量一致,也是 128 个 batchsize,epoch 100,验证 routing 迭代问题,取了 1,2,3,下面是迭代次数,左侧是精度。不知道是不是代码实现的问题,还是 routing 不是很好,主要时间消耗也在 routing 迭代,论文中一个很重要的改进点可以在 routing 上下手。

另一个实验重构

说一个很有趣的问题,输入是上面的一行,下面一行是重构出的,前三列竟然有去噪效果,尤其是 8,可以好好地利用这个特点吧

还有一个实验

之前说输出的每个 capsule 是个向量,意义是什么呢?实际上就是对实体的封装,实体有不同的属性,输出的向量每个维度是否能明确表明实体的一个属性,这个实验就是证明这点。16 维,在第一维上随机加扰动,加 0.05 看结果,再加 0.05,实验中结果很好,每个维度能很好地表示手写数字的一种属性。

第四个实验验证做图像分割的能力

很重要的实验,在一定程度上解决了 CNN 很难识别重叠图像的问题,输入是包含两个重叠数字的图,输出是能够把重叠的数字区别出来,实验结果表明具有非常强的像素级分割的能力。这个特点可以做什么问题呢?在处理公共场合的图像,行人多,有重叠,困难,CNN 处理这个问题不是很理想,可以试试 capsule

*6*)讨论:论文的贡献及可改进之处

论文的主要贡献

报告者认为参数更新方法与注意力机制有相似性

*7*)核心算法的代码剖析

核心代码是报告者自己实现的

地址在 github 上:https://github.com/naturomics/CapsNet-Tensorflow

论文出来当天就出来,2 天就跑起来了。

Capsnet 文件和 capslayer

Q: 训练过程是怎样的?BP 和 routing 是交替进行的吗?

A:Cij 是在数据前向传播更新的, 看前面的图

数据在前向计算时,在框内迭代更新 cij,更新完才输出 v4,直到 loss function,然后计算梯度,梯度返回来更新 w,即 c 是在前向过程中计算的,w 是在反向的过程 BP 中更新的。

Q:softmax 是对第 l 层的 i 还是 l+1 层的 j 做的

A:k 对应的是 j 的位置,即对图中的这四个 v 做的

代码非常简洁,只有四页 ppt

总结

正如 Hinton 在接受吴恩达采访时所说的:

如果你的直觉很准,那你就应该坚持,最终必能有所成就;反过来你直觉不好,那坚不坚持也就无所谓了。反正你从直觉里也找不到坚持它们的理由。

当 Hinton 在 70 岁时还在努力推翻自己积累了 30 年的学术成果时,我才知道什么叫做生命力。

参考:

1. http://www.sohu.com/a/200915041_697750 capsule 提出的时间点

2. Hinton 多伦多演讲

http://www.sohu.com/a/165989490_465975

http://www.sohu.com/a/166038358_464065 有 Hinton 讲 pooling 四个问题的详细示例

3. http://www.mooc.ai/open/course/288 从传统神经网络的角度解读 Capsule

4. http://www.iqiyi.com/w_19rv08vrlp.html Siraj Raval

有些图片和内容是之前学习的时候记录的,已经找不到出处了,如有侵权,请告诉我。如有错误,也请大家指出,谢谢阅读。

2convs- pooling-2convs-pooling-3convs-pooling-3convs-pooling-3convs-pooling

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值