| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 对胶囊网络中的路由机制的解析和思考 -> 正文阅读 |
|
[人工智能]对胶囊网络中的路由机制的解析和思考 |
一、提出背景胶囊网络被提出在《Dynamic Routing Between Capsules》论文中。 传统的神经网络的每一层有多个神经元,每个神经元是一个值,一个值相当于一个特征。这些值的大小表示了真实的含义,比如手写数字识别中,神经网络的输出层的每个神经元的值表示数字的概率。 有的时候,每个神经元是一个值是无法是不够的。比如下图中,倒数第二层的神经元的值表示对应器官存在的概率,最后一层表示是人脸的概率。然而,由倒数第二层的5个图是无法组成正常的人脸的,因为这些值没有表达出器官的方向、大小等特征。 为了更精确的表达特征,作者提出了一种胶囊网络。神经网络的每一层不再是多个神经元,而是多个胶囊,每个胶囊是多个神经元,因此每个胶囊存贮了多个特征。比如下图中,每个胶囊是个3维的向量,表示了三个特征,这三个特征可以为(可能性,大小,方向)。 下图是论文中给出的框架图。在神经网络的第二层(PrimaryCaps)和第三层(DigitCaps)是胶囊网络。如果到第二层采样传统的CNN,则每个channel是6*6的矩阵。PrimaryCaps的每个通道是6*6*8的矩阵,因为每个胶囊是个8维的向量。 胶囊的模长(二范式)表示实体存在的概率,向量表示实体的特征。 二、动态路由定义了胶囊网络,接下来需要解决的问题是:1)连续两层的胶囊网络如何进行前向传播;2)如果定义胶囊网络上的激活函数。 先说明如何解决的问题二的。胶囊网络上的激活函数必须需要满足以下特征:1)向量的方向不变,输入和输出的正负号必须相同,即输入大于0的值,输出也是大于0的值;输入是小于0的值,输出也是小于0的值;2)输出后模长必须在0-1之间;3)激活函数对于向量的模长得是单调函数,即出入向量的模长越小,输出向量的模长越小。最终论文给出的激活函数如下: ?是输入向量,是输出向量。该函数满足了以下特征: ?该激活函数是论文直接给出的,我们也可以探索更多可能的激活函数。接下来是前向传播(路由机制)。 首先是线性投影,公式如上。?是当前层第i个胶囊,是当前层第i个胶囊到第j个胶囊的投影矩阵。点积之后的向量定义为预测向量。形象化的例子如下:如果我们我们考虑的是普通的神经网络,那么u是一个值,W是一个向量。 ?最终得到的下一层第j的胶囊的向量为: 作者没有采用均值,而是定义了使用了c作为权重。?c是通过将下一层的胶囊网络与当前层的预测向量进行点积,然后归一化得到的: ?为了进一步更新b,作者提出了一种迭代的方式: ?b初始值为0,然后迭代地累加下一层与当前层预测向量的点积。v是s经过激活函数后得到的向量。路由算法总结如下,其中squash及时上面所述的激活函数。 路由想法的实际上可以类比于一种聚类算法,下一层的胶囊网络是当前层的中心。首先我们会求的所有向量的均值,然后不断让该值靠近相似的向量,最终的输出会远离偏离较大的向量。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 21:40:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |