第三十课.向量胶囊与动态路由
向量胶囊的前向计算
神经元用于检测一种确定的特征,而胶囊在检测特征的同时更注重描述这个特征。向量胶囊使用单位向量表达某种具体的特征,向量的模长反映该特征存在的概率。神经元与胶囊元的示意如图所示,(a)是神经元的计算演示,neuron是一个带有可学习参数的非线性变换,用于激活神经元得到输出结果。(b)是胶囊元的计算演示,capsule是一个带有可学习参数的非线性变换,与neuron的不同在于输入输出从标量变成向量。神经元的激活只能反映该特征存在的概率,忽略了同类特征之间的差异性,是不变性的体现;而胶囊包含了区分同类特征的信息,是等变性的体现,胶囊的模长为特征存在的概率,也是不变性的体现。
假设有两个输入向量,对于一个胶囊元capsule,应当输出一个向量,其前向计算过程如下图,W1W_{1}W1和W2W_{2}W2是转换矩阵,用于变换胶囊对象的基空间,故又称视觉不变矩阵。系数c1c_{1}c1和c2c_{2}c2称为耦合系数,其目的是实现传统神经网络中的池化过程(pooling),pooling可以视为一种固定的注意力,而耦合系数则增加了动态性,并且是不借助反向传播学习的注意力。转换矩阵通过反向传播计算梯度并更新得到,耦合系数则是利用动态路由进行更新。Squash函数用于压缩向量的大小但不改变方向,使其模长在0到1之间。
以图中的前向计算为例,假设动态路由迭代次数为TTT,胶囊的动态路由更新过程描述如下:
步骤1. 将输入胶囊投影到视觉不变空间:u1=v1W1,u2=v2W2u^{1}=v^{1}W_{1},u^{2}=v^{2}W_{2}u1=v1W1,u2=v2W2,以及初始化系数(b10=0,b20=0)(b_{1}^{0}=0,b_{2}^{0}=0)(b10=0,b20=0);
步骤2. 对于迭代的第rrr次,执行以下操作:
(a)更新耦合系数:c1r,c2r=softmax(b1r,b2r)c_{1}^{r},c_{2}^{r}=softmax(b_{1}^{r},b_{2}^{r})c1r,c2r=softmax(b1r,b2r)比如,c10,c20=softmax(b10,b20)=0.5c_{1}^{0},c_{2}^{0}=softmax(b_{1}^{0},b_{2}^{0})=0.5c10,c20=softmax(b10,b20)=0.5;
(b)临时的聚合胶囊为:sr=c1ru1+c2ru2s^{r}=c_{1}^{r}u^{1}+c_{2}^{r}u^{2}sr=c1ru1+c2ru2
(c)对聚合胶囊的向量进行压缩:ar=squash(sr)=∣∣sr∣∣21+∣∣sr∣∣2⋅sr∣∣sr∣∣a^{r}=squash(s^{r})=\frac{||s^{r}||^{2}}{1+||s^{r}||^{2}}\cdot\frac{s^{r}}{||s^{r}||}ar=squash(sr)=1+∣∣sr∣∣2∣∣sr∣∣2⋅∣∣sr∣∣sr其中,当∣∣sr∣∣||s^{r}||∣∣sr∣∣的值较大时,∣∣sr∣∣21+∣∣sr∣∣2\frac{||s^{r}||^{2}}{1+||s^{r}||^{2}}1+∣∣sr∣∣2∣∣sr∣∣2将会趋近数值1,当∣∣sr∣∣||s^{r}||∣∣sr∣∣的值较小时,∣∣sr∣∣21+∣∣sr∣∣2\frac{||s^{r}||^{2}}{1+||s^{r}||^{2}}1+∣∣sr∣∣2∣∣sr∣∣2将会趋近数值0;
(d)更新系数:bir=bir−1+(ar)Tui,i∈{1,2}b_{i}^{r}=b_{i}^{r-1}+(a^{r})^{T}u^{i},i\in\left\{1,2\right\}bir=bir−1+(ar)Tui,i∈{1,2}
(e)更新迭代数r=r+1r=r+1r=r+1,如果r=Tr=Tr=T,则将aT−1a^{T-1}aT−1作为输出的聚合胶囊;否则,返回(a)并依次执行操作。
从动态路由更新的操作(d)可以看出,每次迭代都利用聚合胶囊与输入的视觉不变胶囊依次点积计算相似度,随着迭代过程的推进,耦合系数的分布将会发挥聚类作用,与聚合胶囊相似的胶囊将为结果提供更大比例的信息。这体现了耦合系数的动态变化注意力特点,它使得与数据加权中心相近的对象具有更高权重。
在梯度计算时,将迭代过程展开,计算形式和循环神经网络一致,因此,可以使用时序反向传播算法(BPTT,Back Propagation Through Time)更新可学习参数,即转换矩阵。
损失函数
向量胶囊网络基于折页函数构建损失。考虑图像识别问题,对于一个样本,假设类别数为KKK,网络输出KKK个胶囊向量,记vkv_{k}vk为第kkk个胶囊向量,该类别的损失计算为:Lk=Tkmax(0,m+−∣∣vk∣∣)2+λ(1−Tk)max(0,∣∣vk−m−∣∣)2L_{k}=T_{k}max(0,m^{+}-||v_{k}||)^{2}+\lambda(1-T_{k})max(0,||v_{k}-m^{-}||)^{2}Lk=Tkmax(0,m+−∣∣vk∣∣)2+λ(1−Tk)max(0,∣∣vk−m−∣∣)2其中,如果第kkk类是正确类别,则Tk=1T_{k}=1Tk=1。m+m^{+}m+和m−m^{-}m−分别取值0.9,0.1,用于限制边界,一方面强迫模型加大分类置信度的差异,另一方面削弱超参数对模型性能的敏感性。λ\lambdaλ取值0.5,用于平衡正确类别与错误类别之间的数值大小。该样本的损失为KKK个类别对应的损失求和。
全连接向量胶囊网络
类比神经元组成神经网络的方法,我们可以将胶囊元组成胶囊网络,和神经元一样,每一个胶囊元都是为了检测一个特征,胶囊元输出胶囊的模长反映了该特征被激活的程度。胶囊本身则包含了该特征的描述信息,比如方向,旋转角度等。向量胶囊的全连接网络架构由卷积神经网络层,预胶囊层与全连接胶囊层构成,网络结构如图所示。
我们将图像输入标准的卷积神经网络CNN,通过CNN提取低层特征(颜色,边缘细节信息)。预胶囊层用于将低层特征转为胶囊形式,图中的预胶囊层是32个并行排列的CNN,得到32个尺寸为6×66\times 66×6的8通道特征图,对特征图变形得到6×6×326\times 6\times 326×6×32个胶囊向量,,每个胶囊向量包含8个描述元素。这一变形操作是合理的,特征图的每个通道代表一个特征,8个通道代表胶囊向量包含的8个特征,即胶囊向量的描述元素。使用全连接的胶囊网络对6×6×326\times 6\times 326×6×32个胶囊进行计算,输出10个具有高层语义的胶囊向量,每个胶囊向量包含16个描述元素,该层的可学习参数为转换矩阵Wij∈R8×16W_{ij}\in R^{8\times 16}Wij∈R8×16。
胶囊网络也可以迁移到卷积架构,我们只需将CNN的滤波器用胶囊网络进行替换。胶囊卷积网络可以实现局部胶囊信息的聚合,使用一组轻量级的胶囊网络作为滤波器在低层胶囊上卷积,在卷积核大小的区域中激活并反映出存在的高层语义胶囊。形象地描述,在张量的视角下,CNN生成特征图的每个像素都将用向量替换;与CNN同理,特征图的每一层“胶囊图”都代表一种特征,而“胶囊图”内每个胶囊的模长则反映该位置存在这个特征的概率。
第三十课.向量胶囊与动态路由相关推荐
- 第三十一课.矩阵胶囊与EM路由
矩阵胶囊的前向计算 矩阵胶囊在向量胶囊的基础上改变了胶囊的表示方式,矩阵胶囊由激活概率与姿态矩阵两部分构成一个元组单位.激活概率用于表示矩阵胶囊被激活的概率,姿态矩阵用于表示胶囊的姿态信息.在向量胶囊 ...
- 三位数除以两位数竖式计算没有余数_二年级数学第三十课:有余数的除法 例4 试商...
二年级数学第三十课:有余数的除法 例4 试商 Spring is bound to come. 一.学习目标与重难点 学习目标: 1.通过计算引导学生探索有余数除法的想商试商方法,从计算中总结有余数除 ...
- NeHe OpenGL教程 第三十课:碰撞检测
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【问链财经-区块链基础知识系列】 第三十课 区块链金融面临的四大挑战
编者按:越来越多的人意识到区块链带来的价值和好处.其中他们最关心的问题是,如何将区块链不可篡改的特性与自己所在企业或行业的应用场景结合起来.就像区块链在金融领域的应用,探索的触角已伸出,效果又如何呢? ...
- 【转】ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
- 深入浅出CChart 每日一课——快乐高四第三十课 麦正帮主,ActiveX控件巨鲸帮巨鲸岛之易语言篇
现在呢,笨笨来揭晓上节课留下的悬念.其实笨笨想再介绍一下CChart在著名的国产语言易语言里面的应用. 下一段介绍来自百度百科. 易语言是一门以中文作为程序代码编程语言,其以"易" ...
- 爱情三十课,爱情整理术
爱情,来势汹汹,有人在这场"袭击"里拥有至诚的爱,也有人被冲得一身是伤.这并非是"幸运"与否的问题,而是理性与感性平衡的问题. 爱情里的感性和理性与" ...
- python第三十课--异常(raise关键字)
演示: 1.手动抛出异常对象-->raise关键字 2.try-except代码不能解决语法错误 try:print('try...')raise TypeError('类型有误的异常') ex ...
- 新版标准日本语初级_第三十课
语法 1. 动词的意志形:动词的意志形是说话人当场表示自己的决心.意志的表达形式. 一类动词:把基本形最后一个音变成相应的お段上的音的长音. 基本形 读音 意志形 書く かく かこう 急ぐ いそぐ ...
最新文章
- 2、redis.conf基本配置项说明
- 基础练习 字符串对比
- git bash学习3 -简单杂乱知识点记录
- Spark详解(二):Spark完全分布式环境搭建
- Kafka controller重设计
- Spring.ImportSelector接口
- 【机器学习】 关联规则Apriori和mlxtend——推荐算法
- 系统分析师资料_软考 系统分析师考试通过总结
- 使用grep进行负匹配(匹配不包含foo的行)
- C#获取屏幕大小或任务栏大小
- SQL基础知识总结(SQL必知必会)
- Visio2016安装
- 微信表情和emoji对应代码
- 克隆出错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_connect:
- ios文件和文件夹管理
- 启动SparkSql,报javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
- 【JavaScript系列】JS基础语法_从变量到数组一网打尽_有教程有实战
- win10的局域网如何设为专用网络
- MYSQL 获取当前日期及日期格式,和常用时间转换函数
- 计算机一级office考试大纲,计算机一级考试MSoffice考试大纲