14.胶囊网络(Capsule Network)

接下来,我们来讲一下胶囊网络(Capsule)。Capsule是Hilton的paper,他发表在NIPS2017。

Capsule的定义

Capsule是什么呢?Capsule是一个你可以想成他想要取代neuron,原来neuron是output一个值, 而Capsule是output一个vector,在其余的部分它的用法你就把它想成是一个一般的neuron。

所以如下图所示:有个Capsule,Capsule的output就是一个vector,这边的写成v,那Capsule的input是什么?Capsule的input就是其它的Capsule,我这边有一个黄色的Capsule,他会输出v^1,这边有一个绿色的Capsule它会输出v^2,这两个vector会当做蓝色的Capsule的input,蓝色Capsule的output也可以变成其他Capsule的input

Capsule的内部运算原理

1. 通过鸟嘴侦测引入Capsule原理

我们知道在一个network里面,每一个neuron的工作就是负责底dectect一个specific pattern

举例来说有一个neuron,假设你做影像辨识,有一个neuron的工作只是detect往左的鸟嘴,另外一个neuron的工作只是detect向右的鸟嘴;其实不太可能有一个neuron,它可以同时做两件事情,一个neuron它其实就是侦测一种鸟嘴而已,所以你很难说有一个neuron,它就是看说有向左边的鸟嘴,他被activate;向右边的鸟嘴,它也这被activate。


今天Capsule有不一样的地方Capsule是侦测某一个种类的pattern,它不是只侦测一个pattern,它是侦测某一个种类的pattern。 而output
vector
v
的每一个dimension就代表了pattern的特性。而这一个output
vector
v
的norm,他的长度,你对
v
取长度,他的norm就代表了pattern是否存在,即:Capsule是用她output的vector的长度就代表某一个种类的pattern是否存在,然后再用这个vector内部的细节,比如说它的方向,它的方向来决定现在这个pattern有什么样的特征

举例来说同样是鸟嘴的pattern,也许看向左看的鸟嘴,他output的vector的第一维就是1.0,向右看的鸟嘴,它output的vector,它第一维就是-1.0,但这两个vector可能长度是一样的,因为都出现鸟嘴,但是他们内部的值是不一样的,代表说现在输入的pattern有不同的特性。

2. 正式讲一下整个Capsule是怎么运作

输入两个vector v^1,v^2v^1,v^2分别乘上另外两个matrix W^1,W^2,得到u^1,u^2。所以u^1=v^1×W^1, u^2=v^2×W^2,接下来把u^1u^2weighted sumu^1×c^1+u^2×c^2得到s,接下来把s通过一个叫做挤压的方式得到v,这个挤压是怎么回事?挤压这件事,它只会改变s的长度,它不会改变s的方向。怎么改变它?把s先除以它的长度,让它变成是一个长度为1vector,变成长度为1vector以后,前面再乘上一个值,这个值是什么意思?如果今天s的长度非常长,这个值会趋近于1v的长度就趋近于1。 如果今天s非常短,今天前面这个值就会很小,v的长度就会趋近于0
总而言之,反正就是输入v^1,v^2,然后经过一连串的运算,得到v;在这一连串的运算里面有W^1W^2Squashing这个挤压是固定的,其实你就可以把它当做是一个激活函数一样,W^1W^2是参数,这个参数要通过backpropagation learn出来的。

今天的特别地方是这边 c^1c^2,他们不是通过backpropagation learn出来的。 c^1c^2叫做coupling coefficients,他们是在testing的时候在使用这个Capsule的时候动态去决定的。这个决定的process叫做dynamic routing

所以c^1c^2你可以想成就好像是pooling一样。Max pooling就是你有一组neuron,然后只选最大那个值出来,到底哪一个neuron的值会被选, 在training的时候我们不知道,在testing的时候才去dynamic决定的;它这个coupling coefficients跟max pooling是一样的,它也是online的时候决定的。max pooling你可以想成是要被max的那一个neuron,它的位置就是1,其它为的就是零。其实今天这个coupling coefficients,dynamic routing,你就想成是max pooling的一个进阶版,他不是1或者是0,这边可以是不一样的实数,但是我记得c^1c^2的和必须要是1,但它不一定要是1或0,他跟max pooling很像,他是在测试的时候动态决定的。

接下来讲c^1c^2又是怎么确定的?

我们先来看dynamic routing的演算法:一开始我们现在假设输入u^1,u^2,u^3,把u^1,u^2,u^3c^1,c^2,c^3weighted sum以后,我们得到ss再通过挤压就得到Capsule最后的output v

那么我们来看看c^1,c^2,c^3是怎么运作的,首先你要有一组参数bb的初始值都是0,而b_1^0,b_2^0,b_3^0就对应到c^1,c^2,c^3;假设今天就跑T个iteration,T是一个Hyper-parameter,你要事先定好的。

接下来我们把b_1^{r-1},b_2^{r-1},b_3^{r-1}softmax得到c_1^{r},c_2^{r},c_3^{r},所以我刚才讲说c^1,c^2,c^3的和必须是1。有了c_1^{r},c_2^{r},c_3^{r}以后你就可以做weighted sum,得到s^rs^r还不是最终的s,我们把得到的s^r做挤压得到a^r,这个a^r也不是最终的结果v,这是我们另外计算得到的s^ra^r;然后接下来我们用计算出来的a^r去update b的值,你就把a^r计算出来的结果去跟每一个u做内积,如果某个ua^r的内积结果特别大,即他们特别接近的话,对应到的input b的值就会增加。

如上图所示,我们举个例子:假设右下角红黄绿三个点是u^1,u^2,u^3,然后经过一番计算以后,你得到a^r是这边灰色的点,这个点跟红色的点、绿色的点比较像,红色点的跟绿色点它们的b就会上升,而他们的然后它的b上升,他们的c也就会跟着上升;然后接下来灰色的点就会往红色的点跟绿色的点更靠近。

所以今天dynamic routing这件事,他在决定这个c的时候有点像是排除离群点(outlier)的感觉,因为想想看,你把u^1,u^2,u^3weighted sum,然后再得到a;我们假设a就跟weighted sum的结果很像,如果今天有某一个人,比如说u^3跟其他人都很不像,今天算出来的a就会跟他很不像,他的weight就会比较小,再算出它的coupling coefficients c的时候,它算出来就有一点小。
总结一下就是:今天在input的这一组vector里面,如果有某些人跟其他人都比较不像,它的weight就会越来越小。

现在假设跑了T个iteration以后,我们就得到了T个iteration的c_1^T,c_2^T,c_3^T,这个就是我们最后要拿来计算svcoupling coefficients,或者是如果我们用图示来展开的话,看起来像是这个样子:

我们有v^1,v^2然后分别乘上W^1,W^2得到u^1,u^2,然后我们初始值b_1^0,b_2^0都是0
接下来根据b_1^0,b_2^0我们可以得到c_1^1,c_2^1,有了c_1^1,c_2^1以后,我们可以计算出一个s^1,然后得到a^1,根据a^1我们可以决定下一轮的c_1^2,c_2^2,怎么决定下一轮的c_1^2,c_2^2呢?你要透过这个式子:b_i^r=b_i^{r-1}+a^r .u^i,去计算a^1u^1u^2的相似的程度,如果a^1u^1比较像,之后c_1^1就会增加,如果a^1u^2比较像,之后c_2^1就会增加;看a^1跟谁像谁的weight就会增加,好,所以有了a^1以后你就会去update你的c_1^2,c_2^2;有了新的c_1^2,c_2^2以后,你就计算出新的s^2,然后你就得到a^2,根据a^2你就可以得到新的weightc_1^3,c_2^3……以此类推,就可以得到a^3,就是最终的输出v了。

而这整个process其实它就跟 rnn 是一样的。你outputc_1,c_2,会再下一个时间点被使用;这个在 rnn 里面就好像是hidden layer的memory里面的值一样,在前一个时间点的输出会在下一个时间点使用。

所以在training 的时候,实际上你train的时候你还是用backpropagation,很多农场文都说Hilton他要推翻backpropagation,其实我看也好像不是这样的,你刚刚看农场再下到吃手,其实也好像也不是这个样子,最后train的时候还是用backpropagation,怎么用呢?这个training就跟RNN很像,就是说这个dynamic routing你就可以想成是一个RNN,然后train下去就像train RNN一样,train下去你就得到那个结果。

实际上这个Capsule怎么train?

首先Capsule可以是convolution的。我们知道说在做卷积的时候,我们会有一堆filter,然后扫过那个图片,Capsule可以取代filter,filter就是input一幅图片的一小块区域得到output的value;那么Capsule就是input一幅图片的一小块区域得到一个vector,就这样的差别而已。Capsule最后的output长什么样子?
假设我们现在要做的是手写数字辨识,辨识一张image,原来如果是一般的neuron network,你 output就是十个neuron,每个neuron对应到一个可能的数字,如果是Capsule,你output 就是十个Capsule,每一个Capsule就对应到一个数字。
可是你说Capsule的输出是一个vector,我们怎么知道说在这个vector里面这个数字有没有出现呢?我们刚才讲过说vector的norm就代表了pattern出现的confidence。所以今天如果你要知道数字1有没有出现,你就把对照数字1的Capsule,取他的对应1的vector那个norm,那也就是得到了数字1的confidence。同理其他数字;
那么在training的时候,输入数字1你当然希望输出数字1的confidence越大越好,所以今天如果输入是数字1,你就希望说v^1的norm越大越好,你希望v^2的norm被压小,细节的式子我们就不列出来,精神就是这个样子的:

而在Hilton 的paper里面,它还加了一个reconstruction的network,是说他把Capsule的output吃进去,然后output reconstruct出原来的image。这个CapsNet的output他其实是一排vector,如果是手写数字辨识,它的output就是十个vector。那如上图绿色方框NN这个neuron network就把这十个vector的串接吃进去,然后希望可以做reconstruction。在实作上的时候,如果今天知道input的数字是1,那么就会把对应到1的Capsule的output乘1,其他数字统统都会乘0。如果今天对应的数字输入的数字是2,那就是就会把对应到2的Capsule的output乘1,其他数字统统都会乘0。得到neuron network,希望可以reconstruct回原来的输入。

实验结果

实验1

如下图所示,接下来我们先来看一下Capsule的实验结果,这个实验结果baseline应该是一个CNN的network,在MNIST上错误率其实很低,0.39%的错误率。接下来四行分别是Capsule的结果,routing 1次或者是routing 3次,没有reconstruction和有reconstruction,这边很明显的有reconstruction 的performance有比较好,至于routing 1次或者是routing 3次谁比较好就有点难说,在没有reconstruction的时候,然后routing 1次比较好,有reconstruction的时候,routing 3次比较好。
这边有另外一个实验是想要展示CapsNet它对抗noise的能力,他的robust的能力,所以今天这个实验把MNIST的CapsNet做一个affine transformation,但注意一下training没有affine transformation,所以training 跟testing是有点mismatch。 把testing故意作为一个affine以后,因为training 跟testing是mismatch的,所以当然理论上你的network performance是会变差,所以CapsNet的正确率掉到79%。但是traditional convolutional neuron networkmodel掉的更多,他是66%的正确率,这显示说CapsNet它比较Robust,你有做一下affine transformation, CapsNet的performance掉的量是比较少的。

实验2

我们刚才有说每一个Capsule的output vector v每一个dimension就代表了现在pattern的某种特征。怎么验证这一件事呢?
我刚不是说有一个会做reconstruction的network嘛,用它吃Capsule的output就可以变回image。好,我们就让他吃某一个Capsule的output,然后故意调整这个Capsule的output某一个dimension,就可以知道说这个Capsule的output的dimension,他代表了什么样的特征。举例来说在Hilton的paper的实验上看到说有某些dimension,他代表了笔画的粗细,有某些dimension代表了旋转等等,就每一个dimension都是代表了今天你要侦测的pattern的某一种特征。
如下图所示,为实验结果:

实验3

最后这个实验是想要显示Capsule的reconstruction的能力,这个实验是这样,他是把network train在MultiMNIST上面,也就network在train的时候她看到的image本来就是有重叠,我觉得这个实验其实如果有另外一个版本是:training的时候是没有重叠的一般数字,testing的时候有重叠还可以辨识出来,我就真的觉得我钦佩的五体投地,但这个不是这样,这个应该是training和testing都是有重叠的数字的。

好,今天是training和testing都有重叠的数字,比如说长得像这个样子:

那么machine需要做的工作是把这两个数字辨识出来。做法是:给machine看着这一张数字,不知道是哪两个数字的叠合,然后machine它辨识出来是7跟1的结合的可能性比较大。接下来再分别把7跟1丢到reconstruction里面,你就可以分别把7跟1 reconstruct回来,所以这边就显示一下reconstruct的结果,我们看第一排第一张图:看起来是4,其实是2跟7叠在一起,然后她被reconstruct以后,它就可以看出来说红色部分是2,绿色的部分是7。再看第一排第五张图,如果它辨识出来是5跟0,但是你要求他reconstruct 5和7,你把7的那个vector 即:对应到7的Capsule的output丢到reconstruct network里面叫他reconstruct,明明没有看到7,所以7的部分就会消失。好,这个是CapsNet的一些实验。好,为什么CapsNet会work呢?接下来,我们就来看看这个结构的特色。

3. CapsNet的特性

有两个特性,一个叫Invariance,一个叫Equivariance。
Invariance是什么意思?input一张image,得到这样的output;我input另外一张image,也得到这个output;他们都是1,虽然有点不一样,network学会无视这个差别得到一样的输出。如下图左边所示;
所谓的Equivariance意思是说我们并不是希望network input不一样的东西就输出一样东西,我们希望network输出完全地反映了现在看到的输入,比如说你输入这张1,得到结果是这样,你输另外一张1,其实这个1是左边这张1的翻转,那它的输出就是左边的vector的翻转。如下图右边所示;

那CNN的max pooling的机制,只能做到Invariance,不能够真的做到Equivariance。为什么?CNN就是一组neuron里面选最大的出来,现在input是3,-1,-3,1,max pooling选3,-3,-1,0,3,max pooling选3。 input不一样的东西,output一样的东西,它只做到Invariance;

但CapsNet可以做到Equivariance这件事情,怎么做到呢?现在input这个1出来,1进去,然后让Capsule的output要说看到1的confidence很高,input另外一张1,CapsNet要说我看到1的confidence也很高,今天它在对应到1的Capsule的output的vector v,他们的norm都要是大的;在输入这两张image的时候,但是他们在取norm之前的vector里面的值可以是不一样,而这个不一样可以反映的这两个1之间的差异。

所以如果要打个比方的话,你就可以想成说Invariance其实是说这个network很迟钝,他是个特别迟钝的人,人家赞美他或批评他对他来说是没差的,因为它看起来就是没差别。但是Capsule不一样,他知道差别,但是他选择不去理会,就是输入的差别在Capsule的output有被呈现,只是取norm的时候,最后没有用到差别。

至于Dynamic Routing,为什么会work呢?我直觉觉得Dynamic Routing非常像Attention-based model加multi-hop,我们之前已经讲过memory network嘛,我们说里面有attention的机制,然后有multi-hop的机制。
Dynamic Routing其实很像这个,你可以把input的u^1,u^2就想成是这边的document。然后这边的c^1,c^2你就想成是attention的weight,你先得到一组attention的weight,抽出一个vector,然后再回头再去做attention,再抽出一个vector再回头去做attention,跟memory network里面的attention加multi-hop的机制是一样,是非常类似的,至于他为什么会work,其实我没有很确定,我觉得这边其实需要一个实验,这个实验是什么?你敢不敢让那些c的值也跟着backpropagation一起被learn出来这样子,因为今天我们并没有验证说如果c的值用别的方法取得performance会不会比较好,如果今天c的值也跟着backpropagation一起被learn出来,但他的performance比capsule还要差的话,我就会觉得说Dynamic Routing提这件事情是真的有用。

这边就是一些reference给大家参考,


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,540评论 1 302
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,539评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,005评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,159评论 0 180
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,946评论 1 258
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,864评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,468评论 2 273
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,218评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,070评论 6 234
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,574评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,353评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,683评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,270评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,168评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,591评论 3 210
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,638评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,035评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,590评论 2 232
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,685评论 2 233

推荐阅读更多精彩内容

  • review: academic hyp research gap 特别明确的文献 聚焦direct 快速过渡到核...
    真猪宝贝阅读 127评论 0 1
  • 生活中,大家骂你冷漠。在别人放肆开怀的时候,你总是适时给他们泼一杯冷水。大家都说你很自私。别人有困难的时候,你总是...
    Zzaccheus阅读 2,739评论 0 2
  • 如果在使用树莓派的过程中发现系统时间不正确,使用以下步骤进行系统时间的校对。 1.未安装ntpdate的首先安装n...
    满福阅读 1,864评论 0 1
  • 读书 《阿特拉斯耸耸肩》震聋发聩的价值观,我多么希望可以成为阿特拉斯中的一个 “假如我不是把尽自己最大努力和最大限...
    子茵Lynn阅读 485评论 0 0