ResNets、HighwayNets、DenseNets:用 TensorFlow 实现超深度神经网络

【新智元导读】在许多任务中,神经网络越深,性能就越好。最近几年神经网络的趋势是越来越深。几年前最先进的神经网络还仅有12层深,现在几百层深的神经网络已经不是稀奇事了。本文中作者介绍了三个非常深的神经网络,分别是ResNet、HighwayNet和DenseNet,以及它们在Tensorflow上的实现。作者用CIFAR10数据集训练这些网络进行图像分类,在一小时左右的训练之后均实现了90%以上的精度。

神经网络设计的趋势:Deeper

谈到神经网络设计,最近几年的趋势都指向一个方向:更深。几年前最先进的神经网络还仅有12层深,现在几百层深的神经网络已经不是稀奇事了。对许多应用来说,神经网络越深,性能就越好,这在物体分类任务中影响最显著。当然,前提是它们能被恰当地训练。本文中我将介绍三个最近的深度学习网络背后的逻辑,分别是ResNet、HighwayNet和DenseNet。它们都能克服传统网络设计上的限制,使深度网络更容易训练。我也会提供在Tensorflow上实现这些网络的代码。

ImageNet竞赛胜出者的网络层数。网络越来越深的趋势非常明显。

为什么简单地加深网络并不管用?

设计深度网络的第一直觉可能是简单地把许多基本构建块(例如卷积层或全连接层)堆叠在一起。某种程度上这可以管用,但随着传统网络变得更深,网络性能会迅速下降。这是由于神经网络用反向传播的方式训练。训练时,梯度信号必须从网络最顶层反向传播到最底层,以确保网络本身能够正确更新。在传统网络中,当梯度信号通过网络的每一层,梯度会略微减小。对于只有几层的网络来说,这不成问题。但是对于有几十层的网络来说,当信号终于到达网络的最底层时,梯度信号已经差不多消失了。

因此,问题是设计一个神经网络,其中梯度信号可以更容易通过有着几十、甚至几百层深的网络的所有层。这是本文中讨论的当前最先进的网络(ResNets,HighwayNets和DenseNets)背后的目标。

残差网络(Residual Networks)

残差网络(Residual Network),或ResNet,是一种可以用最简单的方式解决梯度消失(vanishing gradient)问题的网络结构。如果在梯度信号的反向传播中出现问题,为什么不为网络的每一层设置一个短路通道(shortcut),使信号的通过更顺畅呢?在传统网络中,层的激活定义如下:y=f(x) 其中f(x)可以是卷积(convolution)、矩阵乘法(matrix multiplication)或批规范化(batchnormalization),等等。当信号反向传播时,梯度必须通过f(x),由于其中包含非线性而可能导致麻烦。反之,在ResNet中每层的实现如下:y=f(x)+x 后面的“+ x”即是短路(直连)通道,它允许梯度信号直接向后传递。通过这些层的stack,理论上梯度传递可以“跳过”所有中间层,直接到达最底层,而且不会发生梯度消减。

虽然理论上是这样,但实际的实现会更复杂。最新的ResNet中, f(x) + x采用的形式如下:

ResNet单元结构。BN指批规范化,Weight可以指全连接层或卷积层

在Tensorflow中可以像下面这样组合这些残差单元实现ResNet:

HighwayNetworks

我想介绍的第二个非常深的神经网络结构是Highway Network。它以一种非常直观的方式建于ResNet上。Highway Network保留了ResNet中的短路通道,但是可以通过可学习的参数来加强它们,以确定在哪层可以跳过,哪层需要非线性连接。Highway Network中的层定义如下:

在这个方程中,我们可以看出前面讨论的两种类型的层的轮廓:y = H (x, Wh) 和传统网络的层相似,y = H (x, Wh) + x和残差单元相似。新的T(x,Wt)函数是什么呢?它的作用像一个开关,决定哪些信息应该通过主路径,哪些信息可以跳过途径。在两条路径都使用T和(1-T),激活的和必须总为1。在Tensorflow中的实现如下:

DenseNetworks

我想介绍的最后一个是Dense Network,或称DenseNet。你可能会认为这是把“跳过连接”这种方式发挥到极致。这里的观点是,如果连接一个从前一层中跳过的连接可以提升性能,那为什么不把每一层和其他的每一层连接起来呢?这样,网络中的信息反向传播总是存在有直接的通路。

dense connection的原理。From: https://arxiv.org/abs/1608.06993

DenseNet不使用加法,而是依赖层的堆叠(stacking):

y = f(x,x-1,x-2…x-n)

这种结构在前馈和反馈设置中都有着直观的意义。在前馈设置中,除了高层特征激活外,任务还能从低层特征激活中受益。以物体分类为例,网络中较低的层可以确定图像的边缘,而较高的层可以确定图像中更大范围的特征,例如人的面部。使用有关边缘的信息有助于在复杂场景中正确地确定对象。在反馈设置中,使所有的层连接起来可以轻易地快速把梯度分别传递到各自的位置中。

但是在实现DenseNet时,不能只是把所有层连接起来。只能把具有相同高度和宽度的层堆叠在一起。因此,我们先是把一系列卷积层稠密堆叠到一起,然后应用跨层(striding)或池化层(pooling layer),再把另外一系列的卷积层稠密堆叠到一起,等等。在Tensorflow上的实现如下:

所有这些网络都可以用CIFAR10数据集训练来进行图像分类,并可以很好地实现几十层的网络,而传统的神经网络做不到。只需稍微调整参数,我能够使它们在一小时左右的训练之后实现超过90%的精度。训练每个模型的完整代码,以及与传统网络的比较已经发布在github(https://github.com/awjuliani/TF-Tutorials/blob/master/Deep%20Network%20Comparison.ipynb)。

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2016-10-30

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

李理:递归神经网络RNN扼要

19250
来自专栏ACM算法日常

第一篇:《机器学习之入门初探》

这是一篇帮助你了解和理解机器学习、神经网络、深度学习相关概念的文章,如果你对智能领域感兴趣并且想要未来投身AI方向的话,希望你可以耐下心来理解这些概念,以及我...

10610
来自专栏机器学习和数学

[高大上的DL] Deep Learning中常用loss function损失函数的小结

在前面我们分享的如何来训练CNN中,提到了BP算法,还记得BP算法是怎么更新参数w,b的吗?当我们给网络一个输入,乘以w的初值,然后经过激活函数得到一个输出。然...

5.1K80
来自专栏AI科技评论

图片里的人在干嘛?让深度学习来告诉你 |谷歌CVPR2016论文详解

明确对象描述的生成与解读 摘要 本文提出了一个可以生成针对图片中特定目标或区域明确描述(指代表达)的方法,这个方法也能理解或解释这一指代表达,进而推断出正确的被...

31360
来自专栏红色石头的机器学习之路

台湾大学林轩田机器学习技法课程学习笔记11 -- Gradient Boosted Decision Tree

上节课我们主要介绍了Random Forest算法模型。Random Forest就是通过bagging的方式将许多不同的decision tree组合起来。除...

23600
来自专栏目标检测和深度学习

入门 | 献给新手的深度学习综述

论文:Recent Advances in Deep Learning: An Overview

12820
来自专栏机器之心

入门 | 献给新手的深度学习综述

论文:Recent Advances in Deep Learning: An Overview

15730
来自专栏AI研习社

循环神经网络的介绍、代码及实现

该文主要目的是让大家体会循环神经网络在与前馈神经网络的不同之处。 大家貌似都叫Recurrent Neural Networks为循环神经网络。 我之前是查维基...

37480
来自专栏大数据挖掘DT机器学习

情感分析的新方法,使用word2vec对微博文本进行情感分析和分类

情感分析是一种常见的自然语言处理(NLP)方法的应用,特别是在以提取文本的情感内容为目标的分类方法中。通过这种方式,情感分析可以被视为利用一些情感得分指标来...

1.2K100
来自专栏大数据挖掘DT机器学习

挖掘算法&模型

原文:一只鸟的天空(http://blog.csdn.net/heyongluoyao8) 在进行数据挖掘时,首先要进行商业理解,即我们需要...

41570

扫码关注云+社区

领取腾讯云代金券