ResNet残差网络

来源:互联网 发布:二手域名 编辑:程序博客网 时间:2024/04/24 19:46

       前面我们对常用的经典网络进行了介绍,可以查看前面文章:浅入浅出TensorFlow 6 - 实现经典网络

       随着网络越来越深,大家发现,仅仅靠 BN、ReLU、DropOut 等 Trick无法解决收敛问题,相反,网络的加深带来参数的增加。

       基于之前的实践经验,我们知道:网络并不是越深越好,一方面过多的参数容易导致过拟合(当然样本足够多可以一定程度上解决这个问题);另一方面,训练结果会在真值周围变化,导致网络震荡。

       借鉴之前的经验,我们在训练分类器的时候,用到的 GBDT 和 xgBoost 的思维,借助残差来解决 震荡问题

        

       ResNet 全称是 Residual Network,每一个节点学到的不再是参数本身,而是残差,这就决定了网络有可能无限加深,基线不变,后面的节点学到的是对前面节点的补充,虽然有震荡,但震荡范围越来越小,直到趋于0。

       ResNet 的网络结构借鉴了 HighWay,添加一条从 input到output的路径,也就是shortcut连接,这是关键之处。

        

       该模块用公式描述为:

        

       对于输入 x,通过中间函数 F(x,w) 进行参数学习,F也就是我们说的残差函数。

       模块中间对应两个Layer,每个 Layer 处理一个乘累加和一个 ReLU,F(x)+x 是在x的基础上实现快捷连接,连接后又实现了一个 ReLU。

       最早的 ResNet 是由 MSRA团队提出的一个 152 层的网络,在2015年的 ILSVRC2015 取得了冠军,来看效果对比:

       

       比14年的 VGG 和 GoogLeNet 好了不少,错误率 3.57 相当的惹眼,它的网络结构是什么样的呢?不用想,肯定是一大串(都馋了吧?)


       多个 Block单元 组成的一大串,目前几种常用的ResNet网络包括:ResNet-50/101/152,当然层数越多计算量越大,基于ResNet的改进我们也提前了解下,包括 Google的 Inception-ResNet-V2, Kaiming 的 ResNeXt等。

       ok,我们将在接下来的文章里介绍 ResNeXt。

2 0
原创粉丝点击