CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
DenseNet:Densely Connected Convolutional Network
https://openaccess.thecvf.com/content_cvpr_2017/papers/Huang_Densely_Connected_Convolutional_CVPR_2017_paper.pdf
最近的工作表明,如果卷积网络在靠近输入的层和靠近输出的层之间包含较短的连接,那么卷积网络可以更深入、更精确、更高效地进行训练。在本文中,我们介绍了密集卷积网络(DenseNet),它以前馈方式将每一层与每一层连接起来。传统的L层卷积网络在每层及其后续层之间有L个连接,而我们的网络有L(L+1)/2个直接连接。对于每个层,前面所有层的特征图用作输入,而其自身的特征图则用作所有后续层的输入。DenseNets有几个引人注目的优点:它们可以缓解消失梯度问题,加强特征传播,鼓励特征重用,并大大减少参数的数量。在四个竞争激烈的对象识别基准任务(CIFAR-10、CIFAR-100、SVHN和ImageNet)上评估了我们提出的架构。DenseNets在大多数方面都比最先进的技术有了显著的改进,同时需要更少的计算来实现高性能。
卷积神经网络(CNN)已成为视觉对象识别的主要机器学习方法。最初的LeNet5[19]由5层组成,VGG的特点由19层组成[28],只有Highway Networks[33]和残差网络(ResNets)[11]才超过了100层的屏障。
当CNN变得越来越深入,一个新的研究问题出现了:当输入或梯度信息通过许多层时,当它到达网络的末端(或起点)时,它可能会消失。ResNets[11]和Highway Networks[33]通过identity连接将信号从一层绕过到下一层。Stochastic depth [13]通过在训练过程中随机丢弃层来缩短ResNets,以获得更好的信息和梯度流。FractalNets[17]反复将多个并行层序列与不同数量的卷积块组合,以获得较大的标称深度,同时在网络中保持许多短路径。尽管这些不同的方法在网络拓扑和训练过程中有所不同,但它们都有一个关键特征:它们创建了从早期层到后期层的短路径。
在本文中,我们提出了一种架构,将这种洞察力提取为一种简单的连接模式:为了确保网络中各层之间的信息流最大化,我们将所有层(具有匹配的特征图大小)直接相互连接。为了保持前馈性质,每个层都从所有前面的层获得额外的输入,并将其自身的特征映射传递给所有后面的层。与ResNets相比,我们从不在将特征传递到层之前通过求和来组合特征;相反,我们通过连接功能来组合它们。因此第ℓth层具有ℓ 输入,由所有先前卷积块的特征映射组成。它自己的特征图被传递给所有L−ℓ 后续层。这在L层网络中引入了L(L+1)/2连接,而不是传统架构中的L连接。由于其密集连接模式,我们将其称为密集卷积网络(DenseNet)。
这种密集连接模式它比传统的卷积网络需要更少的参数,因为不需要重新学习冗余特征图。传统的前馈体系结构可以被视为具有状态的算法,状态在层与层之间传递。每个层从其前一层读取状态并写入下一层。它改变了状态,但也传递了需要保留的信息。我们提出的DenseNet体系结构明确区分了添加到网络中的信息和保留的信息。DenseNet层非常窄,仅在网络的“集体知识”中添加一小组特征图,并保持其余特征图不变,最终分类器根据网络中的所有特征地图做出决策。
除了更好的参数效率外,DenseNets的一大优势是改进了整个网络中的信息流和梯度,使其易于训练。每一层都可以从损失函数和原始输入信号直接访问梯度,从而实现隐式深层监督[20]。这有助于培训更深入的网络架构。密集连接具有正则化效果,这可以减少训练集规模较小的任务的过拟合。我们在四个极具竞争力的基准数据集(CIFAR-10、CIFAR-100、SVHN和ImageNet)上评估了DenseNets。我们的模型往往需要比现有算法更少的参数,精度相当。此外,在大多数基准任务中,我们的表现明显优于当前最先进的结果。
最近,提出了用批梯度下降法训练全连接级联网络[39]。尽管这种方法对小数据集有效,但它只能扩展到几百个参数的网络。在[9,23,30,40]中,通过跳跃连接利用CNN中的多级特征已被发现对各种视觉任务有效。与我们的工作类似,[1]推导出了与我们类似的跨层连接网络的纯理论框架。
Highway Networks[33]是首批提供有效训练100层以上端到端网络的架构之一。使用旁路路径和选通单元,可以轻松优化具有数百层的公路网络。旁路路径被认为是简化这些深度网络训练的关键因素。ResNets[11]进一步支持了这一点,其中纯身份映射(identity)被用作旁路路径。最近,Stochastic depth被提出作为一种成功训练1202层ResNet的方法[13]。Stochastic depth通过在训练过程中随机丢弃层来改进深度剩余网络的训练。这表明并非所有层都是必需的,并强调了深层(剩余)网络中存在大量冗余。论文部分受到了这一观察的启发,具有预激活功能的ResNets也有助于培训超过1000层的一流网络[12]。
GoogLeNet[35,36]使用了一个“Inception模块”,它将不同大小的过滤器生成的特征映射连接起来。在[37]中,提出了一种具有广义残差块的ResNets变体。事实上,只要增加ResNets每层中过滤器的数量,只要深度足够就可以提高其性能。FractalNets还使用广泛的网络结构在多个数据集上取得了竞争结果[17]。Network in Network(NIN)[22]结构将微多层感知器包含在卷积层的滤波器中,以提取更复杂的特征。在Deeply Supervised Network(DSN)[20]中,内部层由辅助分类器直接监督,可以加强早期层接收到的梯度。Ladder Networks梯形网络[26,25]将横向连接引入自动编码器,在半监督学习任务中产生令人印象深刻的精度。在[38]中,提出了深度融合网络(DFN),通过结合不同基础网络的中间层来改善信息流。通过将重建损失降至最低的路径增强网络,也可以改善图像分类模型[42]。
DenseNets没有从极深或极广的体系结构中汲取具有代表性的力量,而是通过功能重新挖掘网络的潜力,从而生成易于训练且参数效率高的浓缩模型。将不同层学习的特征地图串联起来会增加后续层输入的变化,并提高效率。这是DenseNets和ResNets之间的主要区别。与Inception网络[35,36]相比,DenseNets更简单、更高效,后者还连接了不同层的特征。
通过卷积网络的单个图像x0。网络由L层组成,每个层实现非线性转换Hℓ(·)。Hℓ(·)可以是操作的复合函数,例如批量归一化(BN)[14]、校正线性单元(ReLU)[6]、Pooling[19]或卷积(Convolution)。我们将第ℓth层的输出表示为xℓ。
ResNets: 传统的卷积前馈网络将ℓth层的输出变为(ℓ+1)th层的输入,引起以下层转换:xℓ = Hℓ(xℓ −1)。ResNets[11]添加了一个跳过连接,该连接使用identity函数绕过非线性变换:xℓ = Hℓ(xℓ-1) + xℓ−1。 ResNets的优点是梯度可以直接通过identity函数从后面的层流向前面的层。然而,恒等函数和H的输出ℓ 通过求和组合,这可能会阻碍网络中的信息流动。
Dense connectivity:为了进一步改善层之间的信息流,我们提出了一种不同的连接模式:我们引入了从任何层到所有后续层的直接连接。前图展示列DenseNet的布局。因此第ℓth层接收所有前一层的特征图,x0,…,xℓ−1,作为输入:xℓ = Hℓ([x0, x1, . . . , xℓ−1]) 由于其密集连接,我们将此网络架构称为密集卷积网络(DenseNet)。为了便于实现,我们将Hℓ(·)的多个输入连接起来转化成单个张量。
Composite function:受[12]的启发,我们定义了Hℓ(·)作为三个连续操作的复合函数:批次归一化(BN)[14],然后是校正线性单元(ReLU)[6]和3×3卷积(Conv)
Pooling layers:当特征图的大小发生变化时,Hℓ(·)中使用的串联操作是不可行的。然而,卷积网络的一个重要部分是向下采样层,这会改变特征图的大小。为了便于在我们的架构中进行向下采样,我们将网络划分为多个密集连接的密集块。我们将块之间的层称为过渡层,它执行卷积和池化层。使用的过渡层包括一个批处理归一化层(BN层)和一个1×1卷积层,然后是一个2×2平均池层(Avg Pooling)。
Growth rate:如果每个功能Hℓ生成k个特征映射,因此第ℓth层具有k0+k×(ℓ − 1)输入特征映射,其中k0是输入层中的通道数。DenseNet与现有网络架构之间的一个重要区别是,DenseNet可以具有非常窄的层,例如k=12。我们将超参数k称为网络的增长率。相对较小的增长率足以在我们测试的数据集上获得最先进的结果。
Bottleneck layers:每个层仅生成k个输出特征图,但它通常有更多的输入。在[36,11]中已经注意到,可以在每个3×3卷积之前引入1×1卷积作为瓶颈层,以减少输入特征映射的数量,从而提高计算效率,我们发现这种设计对DenseNet特别有效。BN ReLU Conv(1×1)-BN ReLU Conv(3×3)版本的Hℓ 作为DenseNet-B。在我们的实验中,我们让每个1×1卷积产生4k个特征映射。
Compression:为了进一步提高模型的紧凑性,我们可以减少过渡层的特征图数量。如果稠密块包含m个特征图,我们将生成以下过渡层[θm] 输出特征点,其中0<θ≤1被称为压缩系数。当θ=1时,跨过渡层的要素图数量保持不变。我们将θ<1的DenseNet称为DenseNet-C,并在实验中设置θ=0.5。当同时使用θ<1的瓶颈层和过渡层时,将我们的模型称为DenseNet BC。
Implementation Details:在除ImageNet之外的所有数据集上,我们实验中使用的DenseNet有三个密集块,每个块都有相等数量的层。在进入第一个密集块之前,对输入图像执行16个(或DenseNet BC增长率的两倍)输出通道的卷积。对于内核大小为3×3的卷积层,输入的每一侧都用一个像素进行零填充,以保持特征图大小不变。我们使用1×1卷积和2×2平均池作为两个相邻致密块体之间的过渡层。在最后一个密集块的末尾,执行全局平均池,然后附加一个softmax分类器。三个密集区块的特征图大小分别为32×32、16×16和8×8。我们用基本的DenseNet结构进行实验,其配置为{L=40,k=12},{L=100,k=12]和{L=100,k=24}。对于DenseNet-BC,评估配置为{L=100,k=12},{L=250,k=24}和{L=190,k=40}的网络。在ImageNet上的实验中,我们使用了一个DenseNet-BC结构,在224×224个输入图像上有4个密集块。初始卷积层包括2k个卷积,大小为7×7,步长为2;所有其他层中的特征地图数量也取决于设置k。我们在ImageNet上使用的确切网络配置如表。
证明了DenseNet在几个基准数据集上的有效性,并与最先进的体系结构进行了比较,特别是与ResNet及其变体。
CIFAR:两个CIFAR数据集[15]由32×32像素的彩色自然图像组成。CIFAR-10(C10)由从10类中提取的图像和从100个类中提取的CIFAR-100(C100)组成。训练集和测试集分别包含50000和10000张图像,我们提供5000张训练图像作为验证集。采用了一种广泛用于这两个数据集的标准数据增强方案(镜像/移位)[11,13,17,22,27,20,31,33]。我们在数据集名称的末尾(例如C10+)用“+”标记来表示此数据增强方案。对于预处理,我们使用通道平均值和标准偏差来归一化数据。对于最终运行,我们使用所有50000张培训图像,并在培训结束时报告最终测试错误。
SVHN:包含32×32个彩色数字图像。训练集中有73257幅图像,测试集中有26032幅图像,还有531131幅图像用于其他训练。按照常见做法[7、13、20、22、29],我们使用所有训练数据,而不进行任何数据扩充,从训练集中分割出一个包含6000张图像的验证集。我们在培训期间选择验证误差最小的模型,并报告测试误差。我们遵循[41],将像素值除以255,使其在[0,1]范围内。
ImageNet:ILSVRC 2012分类数据集[2]包含120万张用于训练的图像,以及50000张用于验证的图像,这些图像来自1000个类。我们对训练图像采用与[8,11,12]相同的数据增强方案,并在测试时应用大小为224×224的单个或10个crops。在[11,12,13]之后,我们报告了验证集的分类错误。
所有网络都使用随机梯度下降(SGD)进行训练。
在CIFAR和SVHN上,我们分别使用批次大小64进行300和40个周期的培训。初始学习率设置为0.1,并在培训总学时数的50%和75%时除以10。
在ImageNet上,我们对批次大小为256的90个epoch的模型进行训练。最初,学习率设置为0.1,在epoch 30和60时降低了10倍。由于GPU内存限制,我们对最大的模型(DenseNet-161)进行了小批次大小128的训练。为了补偿较小的批次大小,我们对该模型进行了100个epochs的训练,并在epoch 90时将学习率除以10。
我们使用10−4的权重衰减,Nesterov动量[34]为0.9,无dampening。我们采用了[10]介绍的权重初始化。对于三个没有数据增强的数据集,即C10、C100和SVHN,我们在每个卷积层(第一个除外)之后添加一个dropout层[32],并将dropout率设置为0.2。对于每个任务和模型设置,测试错误仅评估一次。
对DenseNets进行了不同深度L和增长率k的培训。下表显示了CIFAR和SVHN的主要结果。为了突出总体趋势,我们用粗体标记了所有优于现有最先进水平的结果,用蓝色标记了总体最佳结果。
Accuracy:最明显的趋势可能来自表的最下面一行,这表明L=190和k=40的DenseNet BC在所有CIFAR数据集上都始终优于现有的最先进技术。其在C10+上的错误率为3.46%,在C100+上为17.18%,大大低于宽ResNet架构实现的错误率[41]。两者都比经过dropout path正则化的FractalNet低近30%。在SVHN上,由于dropout正则化,L=100和k=24的DenseNet也超过了宽ResNet目前取得的最佳结果。在250层DenseNet-BC与较短的同类产品相比,性能没有进一步提高。这可以解释为SVHN是一项相对简单的任务,而非常深入的模型可能会超出训练集。
Capacity:在没有压缩层或瓶颈层的情况下,随着L和k的增加,DenseNets的性能通常会更好。我们将这主要归因于模型容量的相应增长,C10+和C100+列最能说明这一点。在C10+上,随着参数数量从1.0M增加到27.2M,误差从5.24%下降到4.10%,最后下降到3.74%。在C100+上,我们观察到类似的趋势。这表明,DenseNets可以利用更大和更深模型的更强代表力。它还表明,它们没有受到过拟合或残差网络优化困难的影响[11]。
Parameter Efficiency:DenseNets比其他架构(尤其是ResNets)更有效地利用参数。具有瓶颈结构和过渡层降维的DenseNetBC的参数效率特别高。例如,我们的250层模型只有15.3M个参数,但它始终优于其他参数超过30M的模型,如FractalNet和Wide ResNets。我们还强调,L=100和k=12的DenseNet BC与使用较少90%参数的1001层预激活ResNet相比,具有可比的性能(例如,C10+上4.51%对4.62%的误差,C100+上22.27%对22.71%的误差)图右侧面板显示了C10+上这两个网络的训练loss和测试error。1001层深的ResNet收敛到较低的训练损失值,但测试错误类似。只有0.8M可训练参数的DenseNet BC能够达到与具有10.2M参数的1001层(预激活)ResNet[12]相当的精度。
Overfitting:更有效地使用参数的一个积极副作用是,DenseNets不太容易出现过拟合。在未进行数据增强的数据集上,DenseNet体系结构相对于先前工作的改进尤为显著。在C10上,改进表明误差相对减少29%,从7.33%降至5.19%。在C100上,降幅约为30%,从28.20%降至19.64%。在C10上,通过将k=12增加到k=24而产生的参数增长了4倍,导致误差从5.77%适度增加到5.83%。DenseNet BC瓶颈和压缩层似乎是应对这一趋势的有效方法(从5.92%到5.19%)。
在ImageNet分类任务中评估具有不同深度和增长率的DenseNet BC,并将其与最先进的ResNet架构进行比较。为了确保两种架构之间的公平比较,我们通过[8]ResNet采用公开可用的Torch实现,消除了数据预处理和优化设置方面的差异等所有其他因素。我们只需将ResNet模型替换为DenseNet BC网络,并使所有实验设置与用于ResNet的设置完全相同。唯一的例外是,由于GPU内存限制,我们最大的DenseNet模型的训练最小批量为128;我们针对100个epoch对该模型进行训练,在epoch 90之后第三次学习速率下降,以补偿较小的批量大小。
上表报告了ImageNet上DenseNets的单次裁剪和10次裁剪验证错误。下图显示了DenseNetworks和ResNets的单个裁剪top-1验证错误,它是参数(左)和FLOP(右)数量的函数。图中显示的结果表明,DenseNets的性能与最先进的ResNets相当,同时需要更少的参数和计算来实现可比性能。具有20M参数的DenseNet-201模型产生的验证错误与具有40M以上参数的101层ResNet类似。从右侧图可以观察到类似的趋势,该图将验证误差绘制为FLOP数量的函数:DenseNet-201需要的计算量与ResNet-50相当,与ResNet-101相当,后者需要两倍的计算量。实验设置意味着我们使用针对ResNets而非DenseNets优化的超参数设置。可以想象,更广泛的超参数搜索可能会进一步提高DenseNet在ImageNet上的性能。
DenseNets与ResNets非常相似:xℓ = Hℓ([x0, x1, . . . , xℓ−1])与xℓ = Hℓ(xℓ-1) + xℓ−1的不同之处仅在于H的输入ℓ(·)是串联的,而不是求和的。然而,这一看似微不足道的修改所带来的影响导致了这两种网络体系结构的本质不同的行为。
模型紧凑度:作为输入串联的直接结果,任何DenseNet层学习的特征地图都可以被所有后续层访问。这鼓励了整个网络中的功能重用,并导致更紧凑的模型。
图中左边的两个图显示了一个实验的结果,该实验旨在比较DenseNets所有变体的参数效率(左)和一个可比较的ResNet架构(右)。我们在C10+上训练多个不同深度的小型网络,并将其测试精度绘制为网络参数的函数。与其他流行的网络架构(如AlexNet[16]或VGG net[28])相比,具有预激活功能的ResNets使用更少的参数,同时通常会获得更好的结果[12]。因此,我们将DenseNet(k=12)与此架构进行比较。DenseNet的训练设置与上一节中的相同。DenseNet BC始终是DenseNetwork的参数效率最高的变体。此外,为了达到相同的精度水平,DenseNet BC只需要ResNets(右图)大约1/3的参数。
隐性深度监督:密集卷积网络精度提高的一种解释可能是,通过较短的连接,各层从损耗函数中获得额外的监督。人们可以将DenseNets解释为执行一种“深度监督”。深度监督的好处以前已经在深度监督网络(DSN;[20])中显示出来,它将分类器连接到每个隐藏层,强制中间层学习区分特征。网络顶部的单个分类器最多通过两个或三个过渡层对所有层进行直接监督。然而,由于所有层之间共享相同的损耗函数,因此DenseNets的损耗函数和梯度基本上不那么复杂。
随机与确定性关系:密集卷积网络和随机深度残差网络的正则化之间有一个有趣的联系[13]。在随机深度中,残差网络中的层被随机丢弃,从而在周围层之间创建直接连接。由于从不丢弃池化层,因此网络会产生与DenseNet类似的连接模式:如果随机丢弃所有中间层,则相同池化层之间的任何两个层直接连接的可能性很小。尽管这些方法最终大不相同,但DenseNet对随机深度的解释可以为该正则化器的成功提供见解。
特征重用:在设计上,DenseNets允许图层从其之前的所有图层访问要素图(尽管有时通过过渡图层)我们进行了一项实验,以调查受过训练的网络是否利用了这个机会。我们首先在C10+上训练DenseNet,L=40,k=12。对于每个卷积层ℓ 在一个块内,我们计算分配给与层s连接的平均(绝对)权重。下图显示了所有三个密集块的热图。平均绝对权重作为卷积层对其前几层依赖性的替代。位置上有一个红点(ℓ, s) 图层ℓ分利用了之前生成的s层特征图。从图中可以观察到以下几点:
1、 所有层都将其权重分布在同一块中的许多输入上。这表明早期地层提取的特征确实被同一密集块体的深层直接使用。
2、 过渡层的权重也将其权重分布在前面密集块内的所有层上,表明信息通过几个间接方向从DenseNet的第一层流向最后一层。
3、 第二和第三密集块内的层始终为过渡层的输出(三角形的顶行)分配最小权重,这表明过渡层输出了许多冗余特征(平均权重较低)。这与DenseNet BC的强大结果是一致的,正是这些输出被压缩了。
4、 虽然最后的分类层(如右图所示)也在整个密集区块中使用权重,但似乎集中在最终特征图上,这表明网络后期可能会产生一些更高层次的特征。
提出了一种新的卷积网络结构,我们称之为密集卷积网络(DenseNet)。它引入了具有相同要素图大小的任意两个图层之间的直接连接。我们表明,DenseNets可以自然扩展到数百层,而不会出现优化困难。在我们的实验中,随着参数数量的增加,DenseNets趋向于在精度上持续改进,而没有任何性能下降或过拟合的迹象。在多种设置下,它在几个竞争激烈的数据集上取得了最先进的结果。DenseNets需要更少的参数和更少的计算来实现最先进的性能。因为我们在研究中采用了针对残差网络优化的超参数设置,通过更详细地调整超参数和学习速率计划,可以进一步提高DenseNets的精度。在遵循简单的连接规则的同时,DenseNets自然地集成了identity映射、深度监控和多样化深度的属性。它们允许在整个网络中重用特征,因此可以学习更紧凑的模型,根据我们的实验,也可以学习更精确的模型。由于其紧凑的内部表示和减少的特征冗余,对于基于卷积特征的各种计算机视觉任务,例如[4,5] DenseNets可能是很好的特征提取器。我们计划在未来的工作中使用DenseNets研究此类特征转移。