这篇论文的工作是将 Deep Supervision 的思路引入到训练 Deeper Convolutional Networks,即在训练深层网络过程中,在某些隐层后面接入 auxiliary supervision branch,提供了一个训练深层网络的trick。
deep network 效果好是毋庸置疑的,但同时也是存在很多问题。随着网络层数的增加,训练的难度和过拟合的问题也随之而来。在 googLeNet中,就提出了将 auxiliary supervision classifiers 加入到中间层,而它并没有解决一个问题就是,在哪里(where)加入以及如何(how)加入这些 classfiers能得到效果的提升;而在 deeply supervisied networks [1] 中则是每一个隐层都加入分类器。对于整个模型的目标函数,加入每个隐层后接分类器的 "companion losses"作为正则项,一起做优化。这种形式一定程度上加快了收敛的速度,但另一方面只适用于不太深的网络。
Method
作者提出的方法区别于 DSN的地方在于,并没有在每个中间层后面都接上 auxiliary supervision classifiers,而是采用一种基于梯度的启发式方法来确定哪一层后面需要加上 supervision。首先,训练一个深层的网络(只有输出层有supervision),只是迭代10-50次,画出迭代过程中中间层的平均梯度,如下图(a)中,8层卷积层(这里的卷积层中是一个block,里面包含ReLU, Conv)。
由上图可以看出,从第四层开始(这里的方向是沿着反向传播的方向),梯度开始出现消失的现象(这里少于10?710^{-7}10?7就意味着梯度消失)。因此在第四层的后面接上 auxiliary supervision,模型结构如下图:
这里的auxiliary supervision 区别于DSN中采用SVM作为分类器,而是引入一个由卷积层、全连接层、softmax层组成的小型网络。对于整体模型的目标函数,并没有太多变化,依旧还是由最后层目标函数 L(W,Ws)\mathcal{L}(W, W_s)L(W,Ws?) 和局部的目标函数 Ls(W,Ws)\mathcal{L_s}(W,W_s)Ls?(W,Ws?) 组成。不难发现,如上图(b)-(d),在加入 supervision之后,第四层开始的梯度得到了放大,梯度消失的问题得到了一定程度的缓解。
在作者的实验中,采用八层卷积层的深层模型,其效果和采用很多层的GoogleNet相近,但是抽取特征更快。
总结
这篇论文主要的工作还是讨论了如何将 deep supervision 引入到训练深层网络中,以此来加快模型收敛和加快计算。工作虽简单,但也是一个训练深层模型的 trick。
参考文献
[1] Lee, C. Y., Xie, S., Gallagher, P., Zhang, Z., & Tu, Z. (2015, February). Deeply-supervised nets. In Artificial intelligence and statistics (pp. 562-570).