ResNext、ShuffleNet——与六度分离理论

resnext相对于其前辈,采用了分组卷积的思想,最初这一思想在AlexNet被提出,是为了分担计算压力,然而后来发现,它还可以提升网络性能,简直是一举两得。

不过,resnext并不完全等价于原有的resnet,很显然,在分组之后,虽然参数和计算量更少了,但各个group之间失去了信息联系。如果能让group之间重新恢复信息流通,resnext的性能是否能够进一步上升呢?Shufflenet证明了这一点。

那么,为何shufflenet会被设计成这个样子呢?我们来对比一下普通卷积和channel shuffle卷积的区别。在普通卷积中,对每一个小窗口来说,输入是一个w*h*Cin的立方体,而输出则是1*1*Cout ,其计算本质上是一个全连接网络,只不过相对于整个图像来说,这个全连接在空间上是局部的。而Shufflenet,就是对这个局部的全连接的优化。

让我们从另一个角度重新理解一下shufflenet: 对于一个单层全连接,假设其输入神经元为128个,输出神经元也是128个,那么矩阵乘法其实是在做这样一件事情:让128个输出神经元每一个都融合到来自所有128个输入神经元的所有信息。最直接,最简单,也最原始的做法是,让每一个输出神经元都直接和每一个输入神经元连接。于是我们需要128*128 = 16384个参数。有没有更加“经济”的方法呢?这时候,我想到了六度分离理论。

六度分离(六度区隔)理论(Six Degrees of Separation):“你和任何一个陌生人之间所间隔的人不会超过五个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”根据这个理论,你和世界上的任何一个人之间只隔着五个人,不管对方在哪个国家,属哪类人种,是哪种肤色。

深度神经网络,本质上也是一个信息传输的过程。对输入神经元来说,我们并不需要把信息“告诉”每一个输出神经元,而需要告诉其中一部分输出神经元就够了,然后让输出神经元之间再互相“转告”。比如对上面的例子来说,我们可以这样操作:

  1. 第一步,把输出分成16组,每一组8个神经元。
  2. 第二步,我们只需要128*16=2048个参数,就可以让每一组输出神经元得知输入神经元的信息。(详细解释一下,输入神经元128个,输出到16个组,所以每个输入神经元只需要16个连接,连接到对应输出组里,所以总参数是128*16。输出神经元每个组有8个神经元,平均分配给128个输入神经元,反过来相当于输入神经元被分成了16个组。)
  3. 第三步,在输出神经元每一组内部的8个神经元之间完成一次信息交流。看到这里,你会发现这个操作有点类似于卷积之于全连接,不过和空间卷积不同的是,对输出神经元来说,每个神经元代表了完全不同的特征,这也就意味着并不能重用参数。所以,因为我们有16组,就需要16组独立的参数:16*8*8 = 1024

于是我们在总的参数为 2048+1024 =3072个的情况下,完成了和之前同样的操作。相比16384个参数,只占3072/16384 = 0.1875,不到五分之一。

上述分组方法并非唯一的分组方法,比如第一层参数改为128*32,而第二层仍然分为16组,这样输出层每一组就有两个神经元来自输入的同一组。

对于具体实现来说,在分组参数网上的情况下,上述操作有各种不同的实现方式,都是相互完全等价的,shufflenet中采取的做法是最容易实现的一种方式。在shufflenet中,首先对输入做了分组,比如分成8组,每组16个神经元,先进行一次分组卷积,需要8*16*16 = 2048个参数,随后,8组之间进行channel shuffle,重新得到16个组,每一组的8个神经元,分别来自原来的8个组里,再次进行分组卷积,需要16*8*8 = 1024个参数。

另外,虽然我用六度分离理论来类比,其实这里相当于只是“二度分离”。

那么,总参数减少了这么多,有没有弊病呢?其实并没有,或者说可以忽略:对于全连接来说,每一个输出神经元直接接受了来自所有输入神经元的信息。而使用了channel shuffle操作之后,每个输出神经元接收到的输入的信息来自同一组所有神经元的融合——而融合之前,只拥有直接来自于输入层的部分信息。从另一个角度讲,对于每一个输入神经元,它把信息分布式表示成了一个16维的向量,分别分配给16组输出的每组8个神经元,理论上这样是完全可行的。

根据前面的分析可以发现,shufflenet中的思想并不局限于优化resnext,它可以应用在任何 Y = W*X的映射。并且前面说了,shufflenet其实只用到了二度分离,并非六度分离,我们还有没有更加经济高效的做法呢?我们的大脑如此节能,又是采用了什么样的结构?也许,下一个设计离我们的大脑已经不远了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值