深度学习 - 胶囊网络
1 CNN现存问题
1. 池化操作提供了局部不变性,错误解决了需要解决的等变性问题,从而丢失了位置等信息:
平移等变性:对于一个函数,如果对其输入施加的变换也会同样反应在输出上,那么这个函数就对该变换具有等变性;
平移不变性:对于一个函数,如果对其输入施加的某种操作丝毫不会影响到输出,那么这个函数就对该变换具有不变性;
卷积神经网络中使用的池化操作是一个很大的错误,它运行良好的事实是一场灾难。
– 如果池化不重叠,则池化会丢失有关事物所在位置的有价值信息;
我们需要这些信息来检测对象各部分之间的精确关系。确实,如果池化重叠得足够多,特征的位置将通过“粗编码”准确地保留(有关这种效果的解释,请参见我在 1986 年关于“分布式表示”的论文)。但我不再相信粗略编码是表示物体相对于观察者的姿势的最佳方式(姿势是指位置、方向和比例)
Geoffrey Hinton
2 胶囊网络的提出
1. 胶囊网络的改进
使用胶囊作为网络基本单元;
特征向量表示可视实体,对方位等信息进行编码;
动态路由算法代替池化操作;
2. 特征向量表示可视实体
实体的存在概率具有局部不变性——当胶囊覆盖的有限视觉域内的实体变换姿态时,它是不变的;
实体的实例化参数具有等变性——由于实例化参数表示实体的姿态坐标,因此随着实体的姿态变化,实例化参数会相应改变;
特征向量长度表示实体存在概率;
特征向量各维特征表示实体姿态;
关于这两句话的解释: 比如有一个胶囊,这个胶囊输出的vector 表示的是否一个三角形, 计算这个vector,若其值越接近于1,表示这个输入越接近于三角形;
而这个胶囊输出的vector每个分量表示这个三角形的各个属性,比如某个分量表示角的大小等,每个维度代表一个特征。
那么我们该如何得到这个输出的vector:
胶囊输出的实例化参数提供了一种由部分到整体的简单识别方法,由单个有限视觉域逐层向上预测,最终形成对目标图像的解析树,达到识别目的;
在连接到下一层时,可以做出一个简单选择——实体是否能够由多个激活的具有正确的空间关系的胶囊表示,并且激活更高级别的胶囊;
设胶囊的输入为, 使用预测矩阵
与
相乘对高层特征向量进行预测,得到预测的特征向量
(这里也就是把输入向量与一个矩阵相乘--一种映射,得到映射后的向量)
当前层胶囊对所有预测向量求取加权平均,便得到了向量 (就是得到的映射矩阵与标量相乘(相当于一种权重,然后这个权重是动态变化的--动态路由使其值发生变化))
称作耦合系数
为了使特征向量的长度能够表示实体存在的概率,需要使用非线性压缩(squashing)函数将向量长度限制在0到1之间 -- 相当于普通神经网络中的sigmoid
上面的过程用图示表示就是:
输入是vector, 输出也是一个vector;
3. 胶囊间的动态路由
胶囊间的动态路由机制可以确保每一层胶囊输出的特征向量被正确地发送到下一层中对应的胶囊;
耦合系数是使用Softmax函数来计算的:
其中为胶囊i应该耦合到胶囊j的对应先验概率,它取决于两个胶囊的类型和位置,与当前的输入图像无关,其初始值为0,然后通过预测向量
和实际输出向量
的一致性修正;
一个简单的表明一致性关系的函数就是标量积,在计算新的耦合系数之前;
要把加到初始的
上;
特别注意的是其整个路由过程不仅仅是存在于胶囊网络的训练过程中,也存在于验证和测试过程,而且需要迭代多次;
看上幅图基本就明白胶囊网络的工作过程:
首先, 对应于
;
首先初始化 都为0; -- 就类似于为
投票,一开始公平对待;
之后用权重乘被映射的向量,得到
, 又经过Squashing函数,得到
-- 也就是前面描述的
;
得到的再与
相乘(内积/标量积), 与原始的b相加,赋值给
-- 就类似于
谁表现的好,权重就增加;
然后再进行新一轮的更新,达到更新次数后,就得到我们要的;
4. CapsNet -- 网络基本结构 -- MNIST
实现从主胶囊(8D)到数字胶囊(16D)的转换,即:低级特征向量向高级特征向量的转换;
由于使用特征向量长度来表示对应类别存在概率,所以在最后一层进行分类时,需要将输出的特征向量取L2范数;
256个步幅为1的9×9的卷积核,完成图像信息到低级特征的转换;
实现低级特征到胶囊多维实体(低级特征向量)的转换;
具有32个通道的8D胶囊卷积层,每个主胶囊具有8个步幅为2的9×9的卷积核的卷积单元;
5. 边际损失( margin loss)
为了实现同时对多个对象的识别,每类目标对象对应的胶囊应分别使用边际损失函数得到类损失;
网络的卷积参数和Capsule内的权值都要根据损失函数进行更新,采用的损失函数是最大化正负样本到超平面的距离:
根据损失函数更新,c是分类Tc是分类的指示函数,c类如果存在,就为1,不存在就为0;
就是上界,惩罚假阳性,也就是说预测c类存在,但真实不存在,识别出来,但识别错了;
为下界,惩罚假阴性,预测c类不存在,但真实是存在的,没有识别出来;
是比例系数,来调节假阳性与假阴性两者之间比重,减少那些图片中没有出现过的数字类别的损失,防止一开始损失过大,导致全部输出值都在收缩,总损失是各个样例之和。
是上界,一般取0.9
是下界,一般取0.1
λ为不存在的对象类别的损失的下调权重,避免最开始从不存在分类对应的胶囊输出的特征向量中学习,一般取0.5;
对每一个表征数字k的胶囊分别给出单独的边缘损失函数;
6. CapsNet - 重构正则化
重构是用预测的类别Capsule向量,即模值最大的向量重新构建出该类别代表的实际图像;
重构网络包含三层全连接层的网络解码器,解码器输出784个数字,对应重构图像的像素个数28*28;
这一过程的损失函数通过计算FC sigmoid层的输出像素与原始图像像素点的欧式距离而构造;
参考: 国科大- 深度学习课件
深度学习 - 胶囊网络相关推荐
- [ 深度学习 ] 胶囊网络(Capsule)
基本框架 参考:| 知乎 | 延伸资料:| 机器之心 |
- 《中国人工智能学会通讯》——第3章 3.1基于深度学习的网络表示研究进展
第3章 3.1基于深度学习的网络表示研究进展 网络结构在现实世界中无处不在(如航线网络.通信网络.论文引用网络.世界万维网和社交网络等),在此基础之上的应用和研究问题受到了学术界和工业界的广泛关注,这 ...
- pytorch | 深度学习分割网络U-net的pytorch模型实现
原文:https://blog.csdn.net/u014722627/article/details/60883185 pytorch | 深度学习分割网络U-net的pytorch模型实现 这个是 ...
- 深度学习 自组织映射网络 ——python实现SOM(用于聚类)
深度学习 自组织映射网络 --python实现SOM(用于聚类) 摘要 python实现代码 计算实例 摘要 SOM(Self Organizing Maps ) 的目标是用低维目标空间的点来表示高维 ...
- HALCON 21.11:深度学习笔记---网络和训练过程(4)
HALCON 21.11:深度学习笔记---网络和训练过程(4) HALCON 21.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的.整 ...
- 【网络流量识别】【深度学习】【三】CNN和LSTM—基于信息获取和深度学习的网络流量异常检测
本文是北京大学陆祥林等人,2019年四月发表于ICISDM的一篇文章,收录于ACM网站. 文章题目:基于信息获取和深度学习的网络流量异常检测 原文网址:基于信息获取和深度学习的网络流量异常检测|201 ...
- 深度学习经典网络解析图像分类篇(二):AlexNet
深度学习经典网络解析图像分类篇(二):AlexNet 1.背景介绍 2.ImageNet 3.AlexNet 3.1AlexNet简介 3.2AlexNet网络架构 3.2.1第一层(CONV1) 3 ...
- 深度学习——从网络威胁情报中收集TTPs
从网络威胁情报中收集TTPs 摘要 为啥要用网络威胁情报 被动防御 & 主动防御 网络威胁情报的概念 何为情报(Intelligence)? 何为网络威胁(Cyber Threat)? 何为网 ...
- 深度学习深度前馈网络_深度学习前馈网络中的讲义第4部分
深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...
最新文章
- python进程的注意点(进程之间不共享全局变量、主进程会等待所有的子进程执行结束再结束)
- 智慧城市建设中的五个误区和四大难点
- 资源文件的读取和使用
- dbms_xplan.display_cursor 获取执行过的sql的执行计划
- DevOps到底是什么鬼?DevOps介绍及工具推荐
- 用lighttpd+mono在Linux上面跑ASP.NET程序
- kali php服务器,在云服务器上搭建公网kali linux2.0
- 微服务(接口)设计原则
- 100、新华三交换机配置方法及操作案例-弱电必备
- SQLite3-轻量级数据库
- Codewars练习题目
- 图信号处理之图拉普拉斯矩阵的含义
- python中ones的含义和用法
- 计算机网络:随机访问介质访问控制之ALOHA协议
- iOS 加载本地gif缓慢
- linux /etc/motd,Linux 修改进站提示 /etc/motd
- 二次元高清无水印壁纸
- $.ajax异步请求总结
- 消息队列:RabbitMQ
- BPM那些事儿——开源BPM引擎