胶囊网络深入理解

news2024/11/27 12:31:45

胶囊网络的概念与理解

胶囊网络概述

人工神经元不应当追求神经元活动中的视角不变性,(使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动)。而应当使用局部的胶囊,这些胶囊对其输入执行一些相当复杂的内部计算。然后将这些计算的结果封装成一个包含信息丰富输出的小向量,每个胶囊学习辨识一个有限的观察条件和变形范围内隐式定义的视觉实体,并输出实体在有限范围内存在的概率及一组实例参数实例参数可能包含相对这个视觉实体的隐式定义的典型版本的精确的位姿、照明条件和变形信息。当胶囊工作正常时,视觉实体存在的概率具有局部不变性—当实体在胶囊覆盖的有限范围内外观流形上移动时,概率不会改变。实例参数确实等变的,随着观察条件的变化,实体在外观流形上移动时,实例参数也会相应地变化,因为实例参数表示实体在外观流形上的内在坐标。
当我们通过计算机图形渲染来构建对象时,我们需要指定并提供一些几何信息,比如告诉计算机在何处绘制对象,该对象的比例,角度以及其他空间信息。对象通常是通过参数设置来呈现的,而这些信息全部表示出来,是屏幕上的一个对象。但是,如果我们只是通过观察照片中的物体来提取信息,这就是胶囊网络的核心思想—逆渲染。在胶囊网络中,恰恰相反,网络是要学习如何反向渲染图像——通过观察图像、然后尝试预测图像的实例参数。胶囊网络通过重视其检测到的对象**,然后将重视结果与训练数据中的标记示例进行比较来学习如何预测。通过反复学习,它将可以实现较为准确的实例参数预测**。
一个胶囊网络是由胶囊而不是由神经元构成的,一个胶囊就是将原有大家熟知的神经网络中的个体神经元替换成了一组神经元组成的向量,这些神经元被包括在了一起。组成了一个胶囊。(注意:原文表述的胶囊是一组神经元,也就是说胶囊指的是一整层)它们可以学习在一个图片的一定区域内检查一个特定对象,(比如:一个矩形)。它输出是一个向量(例如:一个8维向量)。每个向量的长度代表了物体是否存在估计概率。它的方向,(例如在8维空间里)记录了物体的姿态参数,(比如精确的位置、旋转等)。如果物体有稍微的变化(比如移动、旋转、尺寸变化等),胶囊也将会输出一个长度相同但是方向稍微变化的向量,因此胶囊是等变的。
长度:物体是否存在的估计概率。
长度:记录了物体的姿态参数。
要理解胶囊网络,我们首先需要抛开对CNN架构的固有印象,因为Geoffrey Hinton实际上认为在CNN中应用pooling是一个很大的错误,它工作很好的事实是一场灾难(来自演讲)。在最大池化过程中,很多重要的信息都损失了,因为只有最活跃的神经元会被选择传递到下一层。而这也是层之间有价值的空间信息丢失的原因。当我们看到下图时,这看起来并不是一张十分正确的人脸图,虽然图中包含了人脸的每个组成部分,人类可以很容易的分辨出这不是一张正确的人脸。但是CNNS却很难判断,这不是一张真实的人脸,因为它仅仅看图像的这些特征,而没有注意这些特征的姿态信息。(CNN仅仅看图像的特征)
CNN着力于检测图像像素中的重要特征,考虑简单的人脸检测任务,一张脸是由代表脸型的椭圆、两只眼睛、一个鼻子和一个嘴巴构成,而基于CNN的原理,只要存在这些对象就有强的刺激,因此这些对象的空间关系反而没有那么重要。
如下图,右图不是人脸但都具备了人脸需要的对象,所以CNN有很大可能通过具有的对象激活了是人脸的判断,从而使得结果判断出错。
在这里插入图片描述
如下图,重新审视CNN的工作方式,高层特征是低层特征组合的加权和,前一层的激活和下一层神经元权重相乘且相加,接着通过非线性激活函数进行激活。在这么一个架构中,高层特征和底层特征的位置关系变得模糊,(还是没有一些很好的利用)而CNN解决这个问题的方法是通过最大池化层,(最大池化层或多或少得会丢失位置信息)。
在这里插入图片描述
胶囊网络解决这个问题的方法是实现对空间信息进行编码的同时也计算物体的存在概率,这可以用向量表示,向量的模表示特征存在的概率,向量的方向表示特征的姿态信息
Cauple的工作原理是归纳成一句话就是,所有胶囊检测中的特征的状态的重要信息,都将以向量的形式被胶囊封装
简单来说,可以理解成:

  • 人造神经元输出单个标量,卷积网络运用了卷积核从而使得将同个卷积核对于二维矩阵的各个区域计算出来的结果堆叠在一起形成了卷积层的输出
  • 通过最大池化的方法来实现视角的不变性,因为最大池化持续搜寻二维矩阵的区域,选取区域中的最大数字,所以满足了我们想要的活动不变性。(即我们略微调整输入,输出仍然一样)。换句话说,在输入图像上,我们稍微变换以下我们想要检测的对象,模型仍然能够检测到对象
  • 池化层损失了有价值的信息,同时也没有考虑到编码特征间的相对空间关系,因此,我们应该使用胶囊,所有胶囊检测中的特征的状态的重要信息,都将以向量的形式被胶囊封装(神经元是标量)
  • 特征状态的重要信息,都将以向量的形式被胶囊封装。
    论文Dynamic Routing Between Capsules中建议使用两个损失函数,主要是为了实现Capsules之间的等变性,这意味着:在图像中移动特征会改变Capsules向量,但是不影响特征的存在概率,底层Capsules提取特征之后,就传递到匹配到更高层的Capsules
    (底层胶囊提取特征后就传递到更高层的胶囊)
    在这里插入图片描述

一个胶囊的组成(与普通神经元进行对比)

在这里插入图片描述
(胶囊利用向量形式考虑到其空间状态)
注意:参数 w 1 w1 w1 w 2 w2 w2是需要被学习出来的,而 c 1 c1 c1 c 2 c2 c2不是被学习出来的,而是由dynamic动态决定的(c的和为1)。
在传统神经网络中,一个神经元一般会进行如下的标量操作:

  • 输入标量的标量加权;
  • 对加权后的标量求和
  • 对和进行非线性变换生成新标量。

胶囊可以理解为上述四个步骤的向量版,同时增加了对输入的仿射变换

  • 输入向量的矩阵乘法
    胶囊接受的输入向量:编码了低层胶囊检测出的相应对象的概率
    向量的方向:编码了检测出对象的一些内部状态。

  • 仿射变换
    在这里插入图片描述
    接着将这些向量乘以相应的权重矩阵W,W编码了底层特征(例如:眼睛、嘴巴和鼻子)和高层特征(例如:面部)之间的空间关系和其他重要关系

  • 动态路由
    神经元的权重是通过反向传播学习的,而胶囊则使用动态路由,这一过程使用权重 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cKdDbRx-1637908330661)(https://www.zhihu.com/equation?tex=c)] 决定了(经过本层的权重矩阵投影处理后的)来自下层的向量将会如何进入高一层的向量,需要注意的是这一过程并不加入bias
    动态路由的关键在于权重系数如何确定,对于max pooling而言,只有一个值能够进入本层,显然对应的就是一个独热向量,而在这里我们通过一种类似聚类的方式对向量进行赋权重,称为基于一致程度的路由,

  • 求和向量到输出向量的非线性变换(Squash)
    胶囊神经网络的非线性激活函数接受一个向量,然后在不改变方向的前提下,将其长度压缩至1以下。
    在这里插入图片描述
    在这里插入图片描述

胶囊之间的动态路由

李宏毅:动态路由由剔除离群点的意思,类似于RNN的循环神经网络,最后训练的时候依旧使用backprop反向传播。
动态路由算法流程:

  • 在这里的迭代计算过程中,在系数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1PIP9BF-1637908330667)(https://www.zhihu.com/equation?tex=c)] 最终确定前的步骤是不会计算梯度的,单纯通过聚类的方式得到, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZOrPEAYA-1637908330668)(https://www.zhihu.com/equation?tex=c)] 不会参与梯度下降调整参数的过程。
  • 这里的softmax过程,是指某个输入向量进入每一个高层胶囊神经元的概率和为1,而不是反过来。结合上文的理解是:向量在上层的某个胶囊神经元空间中越接近中心簇,被该神经元感知到的可能性越大,所以分配到这个神经元的权重就大,相应地分配到其他神经元的权重就小。
  • 第 1 行表示算法的输入为:低层所有胶囊的输出 u,以及路由迭代计数 r。
  • 第 2 行中的 bij 为一个临时变量,其值在迭代过程中更新,算法运行完毕后其值被保存在 cij 中,初始化都为0。
  • 第 3 行表示如下步骤将会被重复 r 次。
  • 第 4 行利用 bi 计算低层胶囊的权重向量 ci。softmax 确保了所有权重为非负数,且和为一。第一次迭代后,所有系数 cij 的值相等,随着算法的继续,这些均匀分布将发生改变。
  • 第 5 行计算经前一步确定的路由系数 cij 与 加权后的输入向量的线性组合。该步缩小输入向量并将他们相加,得到输出向量 sj。
  • 第 6 行对前一步的输出向量应用 squash 非线性函数。这确保了向量的方向被保留下来,而长度被限制在 1 以下。
  • 第 7 行通过观测低层和高层的胶囊,根据公式更新相应的权重 bij。胶囊 j 的当前输出与从低层胶囊 i 处接收到的输入进行点积,再加上旧的权重作为新的权重。点积检测胶囊输入和输出之间的相似性。
  • 重复 r 次,计算出所有高层胶囊的输出,并确立路由权重。之后正向传导就可以推进到更高层的网络
    胶囊动态流程,算法过程如下:
    在这里插入图片描述
    动态路由算法过程如下:
    动态路由算法更新参数

图像直观理解

在这里插入图片描述
在这里插入图片描述

对路由系数c的理解

在这里插入图片描述
在路由(routing)过程中,下层胶囊将输入向量传送到上层胶囊。对于可以路由到的每个更高层的胶囊,下层胶囊通过将自己的输出乘上权重矩阵来计算预测向量。如果预测向量与上层胶囊的输出具有较大的标量积,则存在自顶向下的反馈,具有增加上层胶囊耦合系数,减小其他胶囊耦合系数的效果。类似于聚类或者剔除离群点
在这里插入图片描述
可见,在投影后的每个空间中较为合群的(接近中心簇的)向量权重将会提高,而反之则降低。由此可以提取出所有向量的主要特征
在这里插入图片描述

胶囊网络与CNN的对比

在这里插入图片描述
两者最大的不同在于,胶囊网络中的神经元是一个整体,包含了特征状态的各类重要信息 , 比如长度、角度、方向等,而传统的CNN 里每个神经元都是独立的个体,无法刻画位置角度等信息 。这也就是为什么CNN通过数据增广的形式(对于同一个物体 ,加入不同角度、不同位置的图片进行训练),能够大大提高模型最后的结果

胶囊网络的优点

当前,每种任务都需要一个不一样的CNN架构。比如分类里的ResNet,物体检测里的YOLO,实例分割里的Mask R-CNN等。恩,是的。我们已经见到了很多神奇的CNN,但是。

  • CNN需要非常多的图片进行训练(或重复使用了已用海盖数据训练过的神经网络的一部分)。而 CapsNet便用少得多的训练数据就能泛化,且胶囊网络在MNIST数据集上达到业界最佳精度
  • CNN们并不能很好地应对模糊性,但CapsNet可以,动态路由算法也十分适合拥挤的场景,所以它能在非常拥挤的场景里也表现得很好(尽管它目前还需要解决背景图的问题);
  • CNN会在池化层里丟失大是的信息,从而降低了空间分辨率,这就导致对于输入的微小变化, 其输出基本上是不变的。在诸如语义分割这样的场景里,这会是一个问题,因为细节信息必须要在网络里被保留。**现在,这一问题已经被通过在CNN里构建复杂的架构来恢复这些损失的信息所解决。**在CapNet里,细节的姿态信患(比如对象的准确位置、旋转、厚度、倾斜度、尺寸等)会在网络里被保存下来,不用先丟失再恢复。输入上微小的变化会带来输出上的小变化,信息被保存。这被称为==“等变的”==。这就让 * * CapsNet能使用一个简单和统一的架构来应対不同的视觉任务,且使得它非常使用于图像分区与目标检测处;
  • 最后,CNN需要额外的组件来自动识别每个小部分属于哪个物体(例如这条腿属于这只羊)。而CapsNet路由树的结构映射着对象组件的层次结构关系,这样所有部件都与整体相连,则它可以给你这些部分的层次结构。

胶囊网络的缺点

跟传统的CNN相比,当前的胶囊网络在实验效果手写数字识别上取得了更好的结果,但是训练过程却慢了很多,因为动态路由过程消耗资源,算法含有内部循环

无论什么类型的对象,在给定位置永远只有一个胶囊,所以胶囊网络不可能检测出两个非常靠近的同一类型的对象,叫做拥挤现象;

虽然CapsNet在简单的数据集MNIST上表现出了很好的性能,但并未在较大的网络上表现较好,比如在更复杂的数据集如ImageNet、CIFAR-10上表现欠缺,这是因为在图像中发现的信息过多会使胶囊脱落

总体来看,胶囊网络仍然处于研究和开发阶段,并且不够可靠,现在还没有很成熟的任务。

动态路由算法

迭代的动态路由算法进行更新的。

设计网络都借鉴的那方面的知识

先大致到此为止,后续学习深入的话,在继续将该网络的公式推导完整,全部都将其搞定都行啦的样子与打算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类,用来描述时间,使用无参构造创建的对象默认表示系统的当前时间,使用有参构造(指定的毫秒值)表示从时间原点(1970年)过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式: Ethernet封包格式 TCP封包格式: ICMP封包格式:ping 知识点2【数据包的分析】 案例:网络分析器: 知识点2【混杂模式】接受数据(了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲:线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…

微服务系列之单体架构

随笔 终于迎来了“微服务、云原生”系列文章,这个系列的文章的更新速度博主无法保证能够每个星期一篇,因为这个系列的难度比以往系列都要高(以往的系列就没有保证一个星期一更)。但是长时间不去写文章,自己可能会慢慢…

Keepalived+LVS部署

目录 一、环境准备 二、实验拓扑 三、部署LVS DR环境 四、LVS服务器配置keepalived 1、安装keepalived 2、修改lvs1服务器keepalived配置 3、修改lvs2服务器keepalived配置 五、客户端测试 1、负责均衡测试 2、LVS服务器高可用测试 一、环境准备 准备4台centos服务器…

学习日记(单元测试、反射、注解、动态代理)

文章目录学习日记(单元测试、反射、注解、动态代理)一、单元测试1. 单元测试实践2. JUnit 常用注解二、反射1. 反射获取类对象2. 反射获取构造器对象3. 反射获取成员变量对象4. 反射获取成员方法对象三、反射的作用举例1. 绕过编译阶段为集合添加数据2. …

基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java中的BigDecimal使用

文章目录1、什么是BigDecimal?2、为什么使用BigDecimal?3、如何使用BigDecimal?(1)BigDecimal初始化赋值(2)加减乘除运算(3)BigDecimal保留两位小数及舍入模式&#xff0…

WFP实现侧边栏导航菜单

菜单导航功能实现,常规的管理系统应该常用,左侧显示菜单条目,点击菜单,右侧切换不同的业务用户控件。 常用菜单可以采用TreeView树形控件特定样式实现 ,本文介绍的是使用ExpanderListView的组合形式实现的导航菜单&am…

算法day24|理论基础77

详细布置 理论基础 什么是回溯法:递归函数下面通常有回溯法 它使用的地方:组合,切割,子集,排列,棋盘问题(N皇后,解数独) 回溯算法的模板: void backtracking(参数)&…

微型计算机基础

微型计算机常用术语 位(bit):计算机所能表示的最基本,最小的数据单元。1个二进制位有两种状态0和1 通常情况下0表示低电平(接地),1表示高电平接电源(VCC) 字节&#xff0…

MATLAB 矩阵处理及多项式计算

一、实验目的 (1)掌握生成特殊矩阵以及矩阵处理的方法 (2)掌握数据统计和分析的方法 (3)掌握多项式的常用计算 二、实验原理与实验设备 原理:计算机编程相关知识技能和MATLAB软件编译环境 …

c++——map和set的封装

注:该封装基于前面博客已实现红黑树,map和set封装并不难,主要还是对红黑树的理解 目录 一. 改造红黑树 1. 改变节点的定义,使用更高维度的泛型 2. 红黑树追加迭代器的实现 1. 红黑树迭代器的构造函数和基本框架 2. begin()和e…

2.4、编码与调制

2.4、编码与调制 在计算机网络中。计算机需要处理和传输用户的文字,图片,音频和视频。它们可以统称为消息。 数据是运送消息的实体。 计算机中的网卡将比特 000 和 111,变换成相应的电信号发送到网线。 也就是说,信号是数据的…

[附源码]java毕业设计网络学习平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode力扣刷题——更加复杂的数据结构

更加复杂的数据结构 一、引言 目前为止,我们接触了大量的数据结构,包括利用指针实现的三剑客和 C 自带的 STL 等。 对于一些题目,我们不仅需要利用多个数据结果解决问题,还需要把这些数据结构进行嵌套和联 动,进行更为…

五.STM32F030C8T6 MCU开发之RTC模块基础例程

五.STM32F030C8T6 MCU开发之RTC模块基础例程 文章目录五.STM32F030C8T6 MCU开发之RTC模块基础例程0.总体功能概述1.RTC硬件介绍1.1日历的功能1.2 闹钟输出1.3 入侵检测1.4 时间戳事件检测2.RTC软件配置2.1.RTC 模块初始化配置2.2 RTC 开始时间配置2.2.1RTC 年月日 时分秒配置2.…

_linux 进程间通信(管道)

文章目录1. 进程间通信目的2. 进程间通信发展3. 进程间通信分类4. 管道1. 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息&#x…

【English】十大词性之介词

介词 文章目录介词前言一、方位介词1.1 某地1.2 里里外外1.3 上上下下1.4 前前后后1.5 ....中间1.6 ...穿越1.7 ...树上1.8 在...墙上1.9 旁边(距离远近区分)二、时间介词三、方式介词四、易混淆介词4.1 制成4.2 交通工具4.3 除了总结前言 介词是表示名词、代词与句子中其它词…