大会 | DiracNets:无需跳层连接的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,不得不硬连接加上一个跳层连接(无论有用或没用)。

代码实现上,PyTorch 提供了许多灵活的方法,torch.nn.functional 接口允许你人工指定各个参数矩阵:

import torch.nn.functional as F

def dirac_conv2d(input, W, alpha, beta)

   return F.conv2d(input, alpha * dirac(W) + beta * normalize(W))

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

  1. alpha * dirac(W) + beta * normalize(W)

幸运的是pytorch提供现成的计算dirac单位矩阵的函数(http://pytorch.org/docs/0.1.12/nn.html#torch.nn.init.dirac):

  1. torch.nn.init.dirac(tensor)

如需深入研究,别错过源代码: https://github.com/szagoruyko/diracnets

最后我们看看实验结果.

在同等深度的情况下,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

参考文献:

  1. DiracNets: Training Very Deep Neural Networks Without Skip-Connections
  2. https://github.com/szagoruyko/diracnets
  3. Deep Residual Learning for Image Recognition
  4. https://zh.wikipedia.org/wiki/%E7%8B%84%E6%8B%89%E5%85%8B%CE%B4%E5%87%BD%E6%95%B0
  5. http://pytorch.org/docs/0.1.12/_modules/torch/nn/functional.html

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2018-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习自然语言处理

【干货】基于pytorch的CNN、LSTM神经网络模型调参小结

Demo 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN、LSTM、BiLSTM、GRU以及CNN与LSTM、BiLSTM...

5507
来自专栏ATYUN订阅号

TensorFlow团队:TensorFlow Probability的简单介绍

在2018年TensorFlow开发者峰会上,我们(TensorFlow团队)宣布发布TensorFlow Probability:一种使机器学习研究人员及相关...

885
来自专栏算法channel

@all: 新浪 机器学习算法岗 面试实录

二面面试官来了。是个算法大佬。是个专门做算法的。直接手出题,他说时间不多,就让我说思路。

872
来自专栏机器学习ML

UdaCity-机器学习工程师-项目2:为CharityML寻找捐献者

欢迎来到机器学习工程师纳米学位的第二个项目!在此文件中,有些示例代码已经提供给你,但你还需要实现更多的功能让项目成功运行。除非有明确要求,你无须修改任何已给出的...

995
来自专栏ATYUN订阅号

使用TensorFlow和DLTK进行生物医学图像分析的介绍

DLTK是用于医学图像的深度学习工具包,它扩展了TensorFlow, 以实现生物医学图像的深度学习。它为经典的应用程序提供特殊的操作和功能、模型的实现、教程(...

1104
来自专栏PPV课数据科学社区

【V课堂】数据挖掘知识脉络与资源整理(五)–缺失值处理

简介: 缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类,分组,删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。数据挖掘所面对的数据不是特地为某...

2778
来自专栏FreeBuf

基于机器学习的web异常检测

Web防火墙是信息安全的第一道防线。随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战。传统web入侵检测技术通过维护规则集对入侵访问进...

3995
来自专栏AI研习社

Inception Network 各版本演进史

Inception 网络是卷积神经网络 (CNN) 分类器发展中的一个重要里程碑。在 inception 之前, 大多数流行的 CNN 只是将卷积层堆叠得越来越...

923
来自专栏ATYUN订阅号

如何使用Faster R-CNN来计算对象个数

准确地在给定的图像或视频帧中计算对象个数的实例是机器学习中很难解决的问题。尽管许多解决方案已经被开发出来,用来计算人、汽车和其他物体的数量,但是没有一个是完美的...

2914
来自专栏AI研习社

禅与奶罩识别艺术(下)

编者按:本文接上期禅与奶罩识别艺术(上),作者 Kaiser,景略集智总经理,原文载于集智网专栏,雷锋网 AI 研习社已获授权。 过拟合/欠拟合 之前介绍了...

4017

扫描关注云+社区