举个卡戴珊的例子,讲讲Hinton的Capsule是怎么回事 | 教程+代码

简介:
本文来自AI新媒体量子位(QbitAI)

533ba95b57222e8ad2d440eba35a465f193d9556

Capsule Networks,或者说CapsNet,这个名字你应该已经听过好几次了。

这是“深度学习之父”的Geoffrey Hinton近几年一直在探索的领域,被视为突破性的新概念。最近,关于Capsule的论文终于公布了。

一篇即将发表于NIPS 2017:

Dynamic Routing Between Capsules

作者:Sara Sabour, Nicholas Frosst, Geoffrey E Hinton

https://arxiv.org/abs/1710.09829v2

另一篇是ICLR 2018正在匿名评审的:

Matrix capsules with EM routing

作者目前未知

https://openreview.net/pdf?id=HJWLfGWRb

要理解Capsule Networks,还得从卷积神经网络(CNN)的特性说起。

传统神经网络的问题

到目前为止,图像分类问题上最先进的方法是CNN。

而CNN的工作原理,是将每一层对应的特征累积起来,从寻找边缘开始,然后是形状、再识别实际的对象。

然而,在这个过程中,所有这些特征的空间关系信息丢失了

虽然可能有点过度简化了,不过我们可以把CNN看做这样一个程序:

if (2 eyes && 1 nose && 1 mouth) {
  It's a face!
}

翻译成人话就是:如果有两只眼睛、一个鼻子、一张嘴,它就是一张脸!

一般人看见这个表述,第一反应大概是挺好的啊,有道理,没毛病~

对,有道理,不过我们需要转念想一想:这个表述还是有问题的。不信?看一张略恐怖的卡戴珊姐姐照片:

3fd84586d26144bb8f4ff875c3deb51f708bffb0

确实是两只眼睛一个鼻子一张嘴吧?

但我等人类都一眼就能看出来,这张照片不对劲啊!眼睛和嘴错位了啊!人不应该长这样!识别成鬼还差不多……

可是呢,CNN会认为,眼睛和嘴的位置不管在哪,都没什么区别,会很宽容地,把这张照片归类成“人”:

1c61cb60ee4775a0b4fc41e4ee7680c702fe4f27

除了对人类五官的位置过于宽容之外,CNN还有还有一个毛病,就是对图片的角度要求有点苛刻,它能容忍照片稍微旋转一些,但要是旋转太多,它就不认得了。

我们把卡戴珊姐姐旋转180°:

280dae60727413583f92b7939e322309abb9a85f

出现这个问题的原因,用行话来说是旋转的程度超出了最大池化(maxpooling)所带来的旋转不变性(invariance)的限度。这其实有办法解决,就是在训练中用上各种可能角度的图片,行话叫做data augmentation。不过,这种做法实在是耗时费力。

另外,CNN还很容易受到白盒对抗性攻击(adversarial attacks)的影响,在图片上悄悄藏一些图案,就能让CNN把它误认作别的东西。

谷歌的神经网络把海龟误认成步枪,就是这个毛病:

所以Hinton老爷子才会觉得CNN不行。(Hinton真的很严格)

Capsule Networks前来救援!

90d4435fbb3bca6343733fcc28ad19ba7789ca7e

 CapsNet架构

Capsule Networks就能让我们充分利用空间关系,看到更多东西。在认人脸这件事上,可以这么表示:

if (2 adjacent eyes && nose under eyes && mouth under nose) {
  It's a face!
}

翻译成人话:如果有两只相邻的眼睛、眼睛下有一个鼻子、鼻子下有一张嘴,它就是一张脸。

你应该能看出来,这样来定义,神经网络就不会把畸形版卡戴珊姐姐也认作人脸了。

这种新架构还更善于从不同角度来识别形状,它在下面这个数据集上,可以获得更高的精度。这个精心设计的数据集就是用来进行单纯的形状识别,甚至是从不同的角度识别的。Capsule Networks击败了最先进的CNN,将错误数量减少了45%。

3e2f681179c0c9c09f86591c3548610cb3e7917b

 CapsNet把第二行图片识别为第一行同类图片的能力远超CNN

此外,最近发布的论文表明,与卷积神经网络相比,Capsules对白盒对抗性攻击显示出更大的抵抗力。

训练CapsNet

重点来了:要想理解一篇论文,最好的方法是把它实现出来。

Bourdakos基于Hinton的论文,写出了一份CapsNet的TensorFlow实现

代码:https://github.com/bourdakos1/capsule-networks

接下来的内容,就是要介绍如何训练它。

下面以如何在MNIST数据集上训练模型为例。这是一个著名的手写数字的数据集,是测试机器学习算法的良好基准。

首先从克隆repo开始:

git clone https://github.com/bourdakos1/capsule-networks.git

然后安装需求。

pip install -r requirements.txt

开始训练!

python main.py

MNIST数据集有6万个训练图像。默认情况下,模型将以128的batch size训练50个epoch周期。一个epoch代表训练集的一次完整运行。由于batch size是128,所以每个epoch大约有468个batch。

注意:如果你没有GPU,训练可能需要很长的时间。

推理

一旦模型完整训练过,就可以通过以下命令来测试:

python main.py --is_training False

结论

Capsule Networks似乎很棒,但仍在婴儿期,在训练大型数据集时可能遇到一些问题,但信心还是要有的。

P.S.下面是一个很棒的视频,建议大家花时间看看。(这是Hinton在2012年的一次演讲,主题是《Does the Brain do Inverse Graphics?》,大脑做逆向图么?)


5c2147296e04ec44e4638bc4540dc96c0fa46676

想要获得这个视频中的ppt,可以在量子位微信公众号(QbitAI)的对话界面,回复:“ipam”几个字母即可。

感谢阅读,如果有问题可以与作者联系,邮箱:bourdakos1@gmail.com。点击左下角『阅读原文』可以查看更多。

本文作者:李林 若朴 
原文发布时间:2017-11-12
相关文章
|
Ubuntu Linux 数据安全/隐私保护
百度搜索:蓝易云【ubuntu系统安装gcc-7、g++-7教程】
请注意,以上步骤是针对Ubuntu系统的。如果你使用的是其他Linux发行版,请相应地调整命令。
476 6
|
Web App开发 Rust 应用服务中间件
在Nginx当中支持QUIC协议
Quick UDP Internet Connection(QUIC)协议是Google公司提出的基于UDP的高效可靠协议。有关协议的主要内容就不在本文过多描述了,本文主要是来讲一下,在Nginx当中如何去支持QUIC协议。 由于个人水平有限,如果哪里写的不对的地方,还请各位大佬们指正。
2552 0
在Nginx当中支持QUIC协议
|
6月前
|
数据采集 机器学习/深度学习 运维
从数据感知到决策优化:MyEMS 开源能源管理系统的技术架构与实践效能解析
MyEMS 是一款开源能源管理系统,采用分层解耦与模块化设计,支持多能源协同监测与智能优化调度。系统具备数据采集、分析、预警、碳核算等功能,助力企业实现节能降耗、安全管控与低碳转型,已在百余家全球企业落地应用,具备自主可控、成本低、安全性强等优势,面向虚拟电厂、数字孪生等未来场景持续演进。
339 0
|
7月前
|
存储 文件存储 Docker
威联通 Docker 国内镜像源加速配置全攻略
本文介绍了如何在威联通NAS上配置轩辕镜像仓库以加速Docker镜像拉取。内容包括:获取免登录镜像仓库地址、配置自定义存储库、测试镜像拉取及日常使用优化建议。通过简单几步即可提升镜像下载速度与稳定性,适用于个人及企业用户。
2726 1
|
Docker 容器
|
11月前
|
开发者 异构计算
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!
通义万相Wan2.1开源不到一周,已登顶HuggingFace Model 和 Space 榜双榜首,在HuggingFace和ModelScope平台的累计下载量突破100万次,社区热度持续攀升!为响应小伙伴们对ComfyUI工作流运行Wan2.1的强烈需求,社区开发者整理了实战教程👇
8336 23
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!
|
JavaScript 前端开发 开发者
React 的正确使用方法:ref 篇
你真的用对了 useRef 吗?在与 TypeScript 一起使用、以及撰写组件库的情况下,你的写法能够避开以下所有场景的坑吗?
|
算法 C++
F : 吃奶酪(深搜)
这篇文章提供了一个使用深度优先搜索(DFS)解决的算法问题,即“吃奶酪”问题,其中包含C++代码实现,目标是计算一只小老鼠吃掉所有奶酪的最少距离,通过预处理奶酪间的距离和使用剪枝技术来优化搜索过程。
|
11月前
|
人工智能 安全 UED
【Gemini怎么使用】:Gemini 2.5 PRO flash 国内使用教程来了
超新星——Gemini 2.0!这不仅仅是一次简单的迭代更新,而是一场彻底的、颠覆性的技术革命!
2810 1

热门文章

最新文章