CapsNet个人理解与总结

2024-02-17 16:32
文章标签 总结 理解 个人 capsnet

本文主要是介绍CapsNet个人理解与总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

CapsNet为解决CNN的缺点而生。其实回过头来再想一下神经网络和CNN这一系列的模型,他们放佛一直在强调特征的识别,通过什么样的方法能够更准确高效的识别图像的特征,就像CapsNet一直在强调他们的Net具有方向、大小等属性的识别和内部联系的生成一样。从这里我感觉出一些顶级Paper的魅力和特点所在,那就是从提出的创新点出发,所有的论点围绕创新点,所有的依据站在巨人的肩膀,解决前人没有解决的问题。那么这样对于读者来说,理解起来就不会很困难。创新点贯穿整篇文章,非常条理清晰,非常有说服力,确实值得我们去研读,去学习。

出发点

CNN是非常善于捕捉特征是否存在,因为CNN的卷积结构就是为此而设计,但是在探索特征属性之间的关系(比如相对位置关系、相对大小关系等,特征的方向)上,CNN力不从心。比如在下面第一幅图中,CNN对于两幅图的识别效果都是人脸,显然这是不正确的。从人类的视觉是别来说,人脸的各个部位都是有相对大小和位置关系的,人的多层视觉系统对于某一固定点的识别过程类似于解析树,从这一点出发,论文应用了前人提出的Capsule。

  例如,对于下面这幅图的识别过程:
  一个简单的CNN模型可以正确地提取鼻子,眼睛和嘴巴的特征,但是提取出来的特征会错误地激活神经元,得出脸部检测成功的结果。
  如果我们**将每个特征的概率标量表示替换成一个代表很多信息的向量,如,输出的不再是标量x,而是一个包含[可能性,方向,大小]的向量,那么我们就可以检测鼻子,眼睛和耳朵特征之间的方向和大小的一致性**, 得出最后的结论。

Capsule理解

Capsule是一组捕获特定特征各种参数的神经元,包括输出特征的可能性,文章通过应用一个非线性保证矢量输出的长度不超过1,这个非线性保持矢量的方向不变。我们将胶囊的输出向量称为活动向量,向量的长度表示检测特征的概率,向量的方向方向代表其参数(属性)。
  比如,下面的第一行表示神经元检测数字“7”的概率。2-D Capsule通过组合2个神经元形成,该Capsule在检测数字“7”时会输出一个2维向量。

  第二行中,输出的2维向量为v=(0, 0.9)和 v=(0, 0.3),大小表示为:√(0^2+0.9^2 )=0.9 和 :√(0^2+0.3^2 )=0.3;第三行中,输出的2维向量为v=(0.2, 0.87)和 v=(0.2, 0.19),向量的大小仍为0.9和0.3。在这里,我们随意给的0.2代表其向右旋转20度。当然,我们可以再添加两个神经元来捕捉特征的大小和笔画的粗细程度。

Capsule与传统neuron比较

参数更新

Capsule里面有两种参数,更新算法如下:

  • W_ij: 通过BP算法更新。
  • c_ij :通过routing-by-agreement更新,capsule论文中的方法是该原则的其中一种实现方法。
新颖的激活函数

使用一个非线性"squashing" 函数来将短矢量缩小到几乎为零,而长矢量缩小到略低于1的长度。

CapsNet网络结构

CapsNet是常规卷积层与capsule版全连接层的结合体,整体架构如下:

  第一层就是普通的CNN层,起像素级局部特征检测作用。原图像是28×28大小第一层采用256个9×9的卷积核,步长为1,得到输出矩阵大小为20×20×256。   第二层叫做PrimaryCaps层。PrimaryCaps层的计算过程具有多种理解方式,其中之一为,8个并行的常规卷积层的叠堆。
  矩阵的shape变换过程如图所示:
  第二层中每一步的详解如图所示:
  接下来,将第二层的输出转换成16×10维的向量组,得到第三层。在经过两个全连接和一个Sigmoid层,得到输出。

这篇关于CapsNet个人理解与总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718357

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念