深度神经网络中基于提前退出的快速推理方法的研究与实现

BranchyNet_chainer

基于提前退出部分样本原理而实现的带分支网络(supported by chainer)1

文章目录

  • BranchyNet_chainer
    • 一、摘要
    • 二、实现过程
    • 三、损失函数设定
    • 四、退出算法设计
    • 五、实验环境
    • 六、实验结果
        • 1.普通网络与分支网络性能比较
        • 2.退出点阈值对分支网络的影响
        • 3.首分支卷积层数对网络的影响
    • 七、总结


一、摘要

  深度神经网络是具有一定复杂程度的神经网络,可以定义为具有输入层、输出层和至少一个隐藏层之间的网络。每个层在一个过程中执行特定类型的分类和排序,这些复杂的神经网络的一个关键用途是处理未标记或未结构化的数据。一般来说,随着网络深度的增大,网络的性能也将会提升。但是,网络模型在数据集训练以及测试的时间也将变得越来越长,并且对机器资源的消耗需求也会增大。因此,我们提出了一种新的深度网络架构,通过在主网络中添加一个或多个分支网络,对退出点的样本置信度进行判断,从而可以提前退出部分样本,减少后继网络层的样本量。
  本文我们使用几个比较常见的网络(LeNet, AlexNet, ResNet)和数据集(MNIST, CIFAR10)来研究该分支网络架构。首先我们在主网络上添加一个或多个分支网络,在数据集上进行训练,获取网络模型的总体准确率和损失函数值。然后在已经训练好的网络模型上进行测试,通过比较分析普通网络与添加分支后的网络测试效果,从而显示出该网络架构可以提高网络的准确性并且显著减少网络的推理时间。


二、实现过程

  我们所建立的网络架构主要通过求解关联着退出点的损失函数加权和的联合优化问题进行训练,一旦训练好网络,则可以利用退出点让部分符合要求的样本提前退出,从而降低推理成本。在每个退出点,我们会利用分类结果的信息熵作为对预测的置信度度量,并设定每一个退出点的退出阈值。如果当前测试样本的熵低于退出阈值,即分类器 对预测结果有信心,则该样本在这个退出点待着预测结果退出网络,不会被下一层的网络处理。如果当前测试样本的上不低于退出阈值,则认为分类器对此样本的预测结果不可信,样本继续到网络的下一个退出点进行处理。如果样本已经到达最后一个退出点,也就是网络的最后一层,则将其直接退出。

深度神经网络中基于提前退出的快速推理方法的研究与实现_第1张图片 深度神经网络中基于提前退出的快速推理方法的研究与实现_第2张图片


三、损失函数设定

  交叉熵(cross entropy)是香农信息论中的一个重要概念,主要用于度量两个概率分布间的差异性信息,也就是交叉熵的值越小,两个概率分布越接近。在分支网络训练过程中,我们先通过 softmax 函数对网络层的输出值进行归一化处理,再对其归一化处理后的值进行计算得到交叉熵值,作为神经网络的损失函数。

我们将 x x x定义为一个输入样本, y y y定义为该输入样本的真实标签, y ^ \hat{y} y^定义为该输入样本的预测输出, S S S定义为所有可能的样本标签集合, θ \theta θ定义为一个分支网络层从入口点到退出点的参数集合, f e x i t n f_{exit_n} fexitn定义为网络层第n个退出点的输出,我们将损失函数 loss 用公式进行如下表达:

L ( y ^ , y ; θ ) = c r o s s _ e n t r o p y ( y ^ , y ) = − 1 ∣ S ∣ ∑ s ϵ S y s l o g y s ^ L(\hat{y},y;\theta)=cross\_entropy(\hat{y},y)=-\frac{1}{\left|S\right|}\sum_{s \epsilon S}y_slog\hat{y_s} L(y^,y;θ)=cross_entropy(y^,y)=S1sϵSyslogys^
其中,预测输出 y ^ \hat{y} y^表达为:
y ^ = s o f t m a x ( z ) = e z ∑ s ϵ S e z s \hat{y}=softmax(z)=\frac{e^z}{\sum_{s \epsilon S}e^{z_s}} y^=softmax(z)=sϵSezsez
网络层输出z表达为:
z = f e x i t n ( x ; θ ) z=f_{exit_n}(x;\theta) z=fexitn(x;θ)
对于分支网络模型来说,需要 loss 损失函数值乘以其权重来进行联合优化,我们将 ??定义为每个分支模型的权重,N 为所有退出点的数量,因此其最终 loss 表达式为:
L b r a n c h ( y ^ , y ; θ ) = ∑ n = 1 N w n L n ( y ^ , y ; θ ) L_{branch}(\hat{y},y;\theta)=\sum_{n=1}^{N}w_nL_n(\hat{y},y;\theta) Lbranch(y^,y;θ)=n=1NwnLn(y^,y;θ)


四、退出算法设计

当测试样本在训练好的分支网络模型上进行测试时,最终会经过网络层的计算,在退出点产生一个输出结果 z,我们使用 softmax 函数对其输出进行归一化,生成一个 0~1 之间的所有类概率集,其中每个类标签的预测概率定义为 y s y_s ys,所有可能的类标签集合定 义为 S。则我们将该退出点的样本输出信息熵定义为:
E n t r o p y ( y ) = ∑ s ϵ S y s l o g y s Entropy(y)=\sum_{s \epsilon S}y_slogy_s Entropy(y)=sϵSyslogys
如果退出点的测试样本 x 输出信息熵越小,则说明该分支的退出点的分类器对于正确标记该测试样本x的预测结果置信度越高,该样本被提前退出网络的可能性也就越大。

退出算法代码:

	for n=1...N:
	    y=softmax(z)
	    e=entropy(y)
	    if e

五、实验环境

硬件环境 Colab 云服务器
CPU Intel® Xeon® CPU @2.30GHZ*2
GPU Nvidia Tesla K80
内存 12.72GB
软件环境 版本名称
操作系统 Ubuntu 16.04
深度学习框架 Chainer 5.3.0

六、实验结果

1.普通网络与分支网络性能比较

Network Acc.(%) Time(ms) Gain Thrshold Exit(%)
LeNet 98.85 1.93 - - -
B-LeNet 98.96 0.25 7.69x 0.5 98.25, 1.75
AlexNet 76.25 3.77 - - -
B-AlexNet 76.25 1.30 2.90x 0.05,1.0 51.65, 46.56, 1.79
ResNet110 80.06 54.97 - - -
B-ResNet110 74.96 54.05 1.02x 0.0001,0.0001 43.12, 29.83, 27.05

深度神经网络中基于提前退出的快速推理方法的研究与实现_第3张图片
深度神经网络中基于提前退出的快速推理方法的研究与实现_第4张图片
深度神经网络中基于提前退出的快速推理方法的研究与实现_第5张图片

2.退出点阈值对分支网络的影响

下图展示了退出阈值设置对分支网络第一个退出点退出样本数量的影响,在本实验中,所有在第一个分支没有退出的样本全部在最后一个退出点退出,我们可以设置其他退出点的阈值为 0 来对其行为进行影响,保证中间的分支没有样本提前退出。

深度神经网络中基于提前退出的快速推理方法的研究与实现_第6张图片
深度神经网络中基于提前退出的快速推理方法的研究与实现_第7张图片
深度神经网络中基于提前退出的快速推理方法的研究与实现_第8张图片

3.首分支卷积层数对网络的影响

下图显示了 B-AlexNet 网络的第一个侧分支中添加额外的卷积层数对最终网络精度 的影响。我们可以看到有一个最优的卷积层数对提高网络的准确性最好,而其他的卷积层数并不能有效提高网络的准确性,甚至更多的卷积层数会损害网络精度。因此,分支中的网络层数和分支结构的大小应该能够保证分支的总体网络深度小于在后面的退出 点退出所需的计算量,即较前的分支网络模型参数量应当小于靠后的分支网络模型参数量。通常,我们发现早期的退出点应当有更多的网络层,而后继的退出点应当有较少的网络层。

深度神经网络中基于提前退出的快速推理方法的研究与实现_第9张图片


七、总结

深度神经网络是一种判别式模型,可以使用反向传播算法来进行训练,常用于图像 分类、语音识别等研究项目中。一般来说,随着网络深度的增加,网络的准确率也会随 着有所提高,但可能存在很多问题,常见的两类问题是过拟合和过长的运算时间。我们提出了一种新的网络结构——通过在主网络上添加侧边分支提前退出部分样本来加快网络的推理进程。通过合理的分支结构和退出原则以及所有退出点的损失函数的联合优 化,整个网络结构可以允许较多的测试样本能被提前分类,而不需要被传递到靠后的网络层,减少了整个网络的推理时间,提高了网络的整体性能。我们对3个网络进行设计 改造,在不同位置上添加分支结构来进行提前退出,从实验结果上可以展示出分支网络的优越性。

本文针对普通网络在推理过程上的局限性和成本消耗性,利用样本提前退出的方法, 在网络的推理过程中逐个退出点减少测试样本,降低了大量样本对网络的逐层运算量。该分支网络结构在已有的主网络上合理添加分支网络结构,将样本提前退出的方法与深度学习的方法相结合,在相关数据集上得到了良好的实验结果。


  1. 源代码地址:BranchyNet_chainer ↩︎

你可能感兴趣的:(LeNet-5,ResNet,AlexNet,Chainer)