首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DiracNets:无需跳层连接,训练更深神经网络,结构参数化与Dirac参数化的ResNet

雷锋网 AI 科技评论按:本文作者 David 9,首发于作者的个人博客,AI 科技评论获其授权转载。

虚拟化技术牺牲硬件开销和性能,换来软件功能的灵活性;深度模型也类似,如果把网络结构参数化,得到的模型更灵活易控,但是计算效率并不高。 — David 9

近年来深度网络结构的创新层出不穷:残差网络,Inception 系列,Unet?等等...微软的残差网络 ResNet就是经典的跳层连接(skip-connection):

来自:https://arxiv.org/pdf/1512.03385.pdf

上一层的特征图 x直接与卷积后的F(x)对齐加和,变为F(x)+x(特征图数量不够可用 0 特征补齐,特征图大小不一可用带步长卷积做下采样)。这样在每层特征图中添加上一层的特征信息,可使网络更深,加快反馈与收敛。

但是 ResNet 也有明显的缺陷:我们无法证明把每一层特征图硬连接到下一层都是有用的;另外实验证明把 ResNet 变「」,不如把 ResNet 变「」, 即,到了一定深度,加深网络已经无法使 ResNet 准确度提升了(还不如把网络层像 Inception 那样变宽)。

于是,DiracNets试图去掉固定的跳层连接,试图用参数化的方法代替跳层连接:

那么问题来了,我们怎么参数化这个被删除的跳层连接?使得新增的参数像卷积核窗口参数一样是可训练的?

有一点是确定的,我们知道F(x)+x的对齐求和操作是线性的,卷积操作F也是线性的,所以,理论上F(x)+x 可以合并成一个卷积操作(或者一个线性变换):

其中?x?即输入特征图。其中就是合并后的卷积核窗口参数矩阵(这个参数已经蕴含了卷积操作跳层操作)。

其中代表卷积操作。

最后,让我们再把上式的参数拆分开来:

其中W 即代表 ResNet 中的卷积操作的参数,I 即代表 ResNet 中的跳层操作的参数

有没有觉得?I?和单位矩阵很像? 你猜对了 !?I?就是由卷积窗口导出的单位参数矩阵,也叫 Dirac delta 变换,任何输入 x 经过这个 I 矩阵 的变换,其输出还是 x 本身

diag (a)也是一个可训练的向量参数,用来控制需要跳层连接的程度(需要单位矩阵的程度)。

现在我们看看这种参数化的 ResNet 是不是更灵活了?

如果 diag(a)向量都是趋近于 0 的,那么?I?单位矩阵就基本起不到作用, 那么跳层连接就被削弱了。这时原始的卷积操作 W 就认为占主导作用

如果 diag(a)向量都是趋近于 1 的,并且 W 参数都非常小,那么卷积操作就被削弱了,输出和输入的特征图 x 很相似

通过训练 diag(a),我们可以控制ResNet 中的跳层操作和卷积操作两者的权重。而不是像传统 ResNet,不得不硬连接加上一个跳层连接(无论有用或没用)

上面代码把参数矩阵对于之前说的拆分成两部分:

alpha?*?dirac(W) +?beta?*?normalize(W)

幸运的是pytorch提供现成的计算dirac单位矩阵的函数:

最后我们看看实验结果.

在同等深度的情况下,DiracNets 普遍需要更多的参数才能达到和 ResNet 相当的准确率:

来自:https://arxiv.org/pdf/1706.00388.pdf

来自:https://arxiv.org/pdf/1706.00388.pdf

而如果不考虑参数数量,DiracNets 需要较少的深度,就能达到 ResNet 需要很深的深度才能达到的准确率:

来自:https://arxiv.org/pdf/1706.00388.pdf

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180227A0JXQS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com