我是靠谱客的博主 老迟到汉堡,最近开发中收集的这篇文章主要介绍[笔记][胶囊神经网络]Dynamic Routing Between CapsulesDynamic Routing Between Capsules 笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Dynamic Routing Between Capsules 笔记

胶囊神经网络,路由机制,capsule network,capsnet

参考资料

1.论文:Sabour S, Frosst N, Hinton G E. Dynamic routing between capsules[J]. Advances in neural information processing systems, 2017, 30.

2.讲解视频:Capsule Networks (CapsNets) – Tutorial: https://www.youtube.com/watch?v=pPN8d0E3900
该视频的b站转载: https://www.bilibili.com/video/BV1RW411W7rv
Hinton亲自称赞该视频: “This is an amazingly good video. I wish I could explain capsules that well.”

3.讲解博客:“Understanding Dynamic Routing between Capsules (Capsule Networks)”:https://jhui.github.io/2017/11/03/Dynamic-Routing-Between-Capsules/
该博客的csdn翻译转载:https://blog.csdn.net/bhneo/article/details/79391469

4.pytorch代码: https://github.com/adambielski/CapsNet-pytorch

文章目录

  • Dynamic Routing Between Capsules 笔记
    • 参考资料
    • 简介
    • 胶囊的路由(routing)机制
    • margin loss
    • CapsNet网络结构
      • 整体
      • 卷积层
      • primarycaps
      • digitcaps
      • capsnets的正则方法
    • 胶囊神经网络的优势

简介

胶囊:描述(探测)某一特征的一组神经元。向量长度代表某特征出现的概率,向量方向体现了实例化参数。

作者使用 iterative routing-by-agreement mechanism 来传输胶囊的参数,并达到了很好的效果。高层胶囊向量由低层胶囊向量通过转移矩阵然后加权相加变换而来,可以提炼出更抽象的特征。

胶囊的路由(routing)机制

作者想要使用输出向量的模长来代表某一特征出现的概率,并使用了squashing function 来达到这一目的。
s q u a s h ( x ) = ∣ ∣ x ∣ ∣ 2 1 + ∣ ∣ x ∣ ∣ 2 x ∣ ∣ x ∣ ∣ squash(x)=dfrac{||x||^2}{1+||x||^2}dfrac{x}{||x||} squash(x)=1+x2x2xx
对于不是第一层的胶囊 j j j,我们设它接收到的前胶囊的总输入为 s j s_j sj,我们可以使用如下方法来传输:

u i u_i ui是前胶囊的输出,我们首先通过乘一个参数得到“预测向量”(prediction vectors) u ^ j ∣ i hat u_{j|i} u^ji ,即
u ^ j ∣ i = W i j u i hat u_{j|i}=W_{ij}u_i u^ji=Wijui
这一步如果将胶囊看作神经元,类似神经网络的全连接层,不同的是,下一步我们不只是将所有的 u ^ j ∣ i hat u_{j|i} u^ji 简单相加,而是继续给它增加一个权重 c i j c_{ij} cij ,使系统学习到低层胶囊对高层胶囊影响的大小。

需要注意,这里如果 u i u_i ui 是标量,那么这两个参数可以简化为一个参数。而这里 u i u_i ui 是矢量,我们可以理解为 W i j W_{ij} Wij 调整了胶囊内部的权重, c i j c_{ij} cij 调节了胶囊间的权重。

现在只剩下一个问题待解决,那就是我们如何求权重 c i j c_{ij} cij ?答案也是这篇文章的精髓,路由机制:

在这里插入图片描述

路由机制的大概想法就是,增加最“像”输出的那个预测向量的权重,某种意义上是一种“注意”,达到了类似池化的效果,但是也并没有损失过多信息。

margin loss

目的:当某一特征(在这篇文章中使digit)出现,则输出向量的模长 ∣ ∣ v k ∣ ∣ ||v_k|| vk尽量长(靠近1)

作者构造了如下损失函数:
L k = T k max ⁡ ( 0 , m + − ∣ ∣ v k ∣ ∣ ) 2 + λ ( 1 − T k ) max ⁡ ( 0 , ∣ ∣ v k ∣ ∣ − m − ) 2 L_k=T_kmax(0,m^+-||v_k||)^2+lambda(1-T_k)max(0,||v_k||-m^-)^2 Lk=Tkmax(0,m+vk)2+λ(1Tk)max(0,vkm)2
这里 T k = 1 T_k=1 Tk=1 当第k类特征存在于该样本中,其余情况 T k = 0 T_k=0 Tk=0 m + = 0.9 m^+=0.9 m+=0.9 m − = 0.1 m^-=0.1 m=0.1 是阈值,更直观的,这个损失函数可以重写成:
L ( k ) = { max ⁡ ( 0 , m + − ∣ ∣ v k ∣ ∣ ) 2 , k t h   f e a t u r e   e x i s t s λ max ⁡ ( 0 , ∣ ∣ v k ∣ ∣ − m − ) 2 , k t h   f e a t u r e   d o e s   n o t   e x i s t L(k) = begin{cases} max(0,m^+-||v_k||)^2 ,& k^{th} feature exists\ lambdamax(0,||v_k||-m^-)^2 ,& k^{th} feature does not exist end{cases} L(k)={max(0,m+vk)2,λmax(0,vkm)2,kth feature existskth feature does not exist

CapsNet网络结构

整体

  • 卷积层
  • primarycaps
  • digitcaps

在这里插入图片描述

卷积层

普通二维卷积

primarycaps

二维卷积+重排+squash

digitcaps

作为primarycaps中胶囊的高层胶囊,使用前面介绍的传输机制搭建网络。

capsnets的正则方法

方法: 重建

目的: 鼓励digitcaps编码原始图像(类似自编码器的bottleneck层)

tricks:新增三个全连接层来解码,使用SE作为重构误差,并赋予重构误差一个较小的权重(相对于margin loss)

胶囊神经网络的优势

5.2: 对经过仿射变换的图像很稳定

6:分割高度重叠的digits效果很好

最后

以上就是老迟到汉堡为你收集整理的[笔记][胶囊神经网络]Dynamic Routing Between CapsulesDynamic Routing Between Capsules 笔记的全部内容,希望文章能够帮你解决[笔记][胶囊神经网络]Dynamic Routing Between CapsulesDynamic Routing Between Capsules 笔记所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部