Data Dropout: Optimizing Training Data for Convolutional Neural Networks
小孙研二的第一篇博客,不知不觉时间真快,要努力了哦~
一、总结
这篇文章是Understanding Black-box Predictions via Influence Functions这篇工作的简化版,利用influence functions模拟’leave one out’的思想,在给定的验证集上计算每个训练样本的影响值,进一步提出了data dropout的概念,通过删除一些样本从而提高模型的泛化精度。
贡献一
理论上,若删除样本x后的模型在验证集的效果变好了/loss下降了,那么该样本则可以丢弃。这种’leave one out’的思想计算量太高,则考虑用influence functions代替,计算 I l o s s ( x , x j ) = ▽ θ L ( f θ ( x j ) ) T H θ − 1 ▽ θ L ( f θ ( x ) ) I_{loss}(x,x_j)=\bigtriangledown_\theta L(f_{\theta}(x_j))^TH_\theta^{-1}\bigtriangledown_\theta L(f_{\theta}(x)) Iloss(x,xj)=▽θL(fθ(xj))THθ−1▽θL(fθ(x))然而计算量过大,则考虑用Stochastic estimation来简化计算(Understanding Black-box Predictions提出的简化方式)。这项工作即可以转化为 ∀ x , i f ∑ j I l o s s ( x , x j ) > \forall x, if \sum_j I_{loss}(x,x_j)> ∀x,if∑jIloss(x,xj)>,x将从训练集中删除,否则将被保留。
贡献二
提出了Two-Round Training的训练模式。先训练,定位需丢弃的样本;丢弃样本;再重新训练。实验证明重新训练后也会存在需丢弃的样本,但数量将会大大降低。
贡献三
降低计算复杂度,针对于计算 I l o s s ( x , x j ) = ▽ θ L ( f θ ( x j ) ) T H θ − 1 ▽ θ L ( f θ ( x ) ) I_{loss}(x,x_j)=\bigtriangledown_\theta L(f_{\theta}(x_j))^TH_\theta^{-1}\bigtriangledown_\theta L(f_{\theta}(x)) Iloss(x,xj)=▽θL(fθ(xj))THθ−1▽θL(fθ(x))时,可以针对于每个验证集先计算 s j = ▽ θ L ( f θ ( x j ) ) H θ − 1 s_j=\bigtriangledown_\theta L(f_{\theta}(x_j))H_\theta^{-1} sj=▽θL(fθ(xj))Hθ−1共j次计算海森矩阵,再针对训练集样本进行计算,可降低复杂度。。
二、翻译
Abstract
深度学习模型学习拟合训练数据,同时高度期望它们能很好地泛化到测试数据中。大多数工作旨在通过创造性地设计架构和微调参数来找到这样的模型。为了适应特定的任务,手工制作的信息,如图像先验也被纳入端到端学习。然而,在研究单个训练样本如何影响模型的泛化能力方面,研究进展甚微。换句话说,为了实现较高的泛化精度,我们真的需要训练数据集中的所有样本吗?在本文中,我们证明了卷积神经网络等深度学习模型可能并不有利于所有的训练样本,并且通过删除这些不利的样本可以进一步提高泛化精度。具体来说,去除训练样本的影响是可量化的,我们提出了一种两轮训练方法,旨在实现更高的泛化精度。我们在第一轮训练后定位不利的样本,然后在第二轮使用减少的训练数据集从头重新训练模型。由于我们的方法与微调或进一步的训练有本质上的不同,因此计算成本不应该被关注。我们广泛的实验结果表明,在相同的设置下,所提出的方法可以提高知名网络在高级计算机视觉问题上的性能,如图像分类,和低级视觉问题,如图像去噪。
Introduction
由AlexNe开创,卷积神经网络(CNNs)等深度学习模型在解决计算机视觉问题方面取得了显著的成功。一个主要的研究兴趣是设计强大的架构来从数据中提取更显著的特征。这些例子包括ResNet和DenseNet。此外,为了简化深度网络的训练和缓解过拟合问题,还提出了许多技术。典型的工作包括批处理归一化(BN)和dropout。为了增强cnn的表达能力,我们对先进的非线性激活功能进行了深入的研究,如ReLU、ELU和SELU。此外,我们还开发了许多特定领域的技术,以进一步微调特定应用领域的网络。对这些技术的详细讨论超出了本工作的范围。
深度学习的另一个大瓶颈是缺乏真实数据。CNN的训练必须依赖于大量的数据。不幸的是,这种情况在实际场景中并不总是得到满足的。因此,数据增强成为增加数据多样性的一种可行和不可或缺的方法。典型的图像旋转、翻转和转换等方法在数据预处理中被广泛应用。近年来,生成对抗网络(GAN)也被广泛用于生成合成数据,这些数据甚至无法通过模型或人类来区分。
然而,虽然在上述方面已经做了很多努力,但仍不清楚单个训练样本将如何影响网络的泛化准确性。为了澄清这个问题,让我们考虑一下两个问题。(1)给定一个网络及其训练数据集,我们是否可以删除几个训练样本,以提高泛化精度?(2)如果是,我们如何利用模型来拟合给定训练数据集的子集?我们的工作表明,存在这样的训练样本,我们称之为不利的训练样本。我们提出了一种两轮训练方法,通过删除这些样本来提高CNN的泛化精度,并将删除步骤命名为数据退出(data dropout),这是一种训练数据优化的方案。具体来说,我们在第一轮中使用一个给定的训练集来训练一个网络,然后对于每个训练样本,我们计算移除它对所有验证样本的损失的影响。如果影响值是正的,这意味着它的删除将减少整个验证错误,我们将删除该训练样本。因此,可以重建训练集。在第二轮测试中,我们使用重建的训练集从头开始重新训练网络,获得一个新的训练模型,用于测试。为了使我们的方法更普遍,我们基于验证集而不是测试集来衡量每个训练样本的影响,因为测试数据在测试阶段通常不可用。如果最初没有给出验证集,则可以从给定的训练集中随机分离一组样本作为验证样本。尽管由于去除不利的样本,网络将看到更少的训练样本,但大量的实验仍然表明,我们通过两轮训练方法实现的数据退出方案可以进一步提高最先进的网络的性能,如ResNet和DenseNet。尽管方法很简单,但我们的方法并不依赖于特定的网络和训练配置。唯一的先决条件是一个能够拟合特定任务的原始训练数据的网络模型。因此可以方便地将我们的方法应用于现有的CNN模型。值得注意的是,我们的方法与进一步的训练或微调有本质上的不同,因为我们在第二轮中从头开始重新训练模型。第一轮训练的模型仅用于计算训练数据优化的影响值。这项工作的主要贡献可以分为三类。首先,我们提出了通过去除不利样本来优化训练集。其次,我们设计了一种两轮训练方法来利用data dropout来提高泛化精度。第三,我们进行了大量的实验来证明我们的方法在提高现有CNN模型的性能方面的有效性和通用性,这些模型是针对不同的计算机视觉问题,如图像分类和图像去噪。
Proposed Method
为了简化讨论,我们从定义几个符号开始。设 x i ( i = 1 , . . . , n ) x_i (i=1,...,n) xi(i=1,...,n)表示一个训练样本。设 f θ ( x ) f_{\theta}(x) fθ(x)表示一个模型, L ( f θ ( x ) ) L(f_{\theta}(x)) L(fθ(x))表示损失, I l o s s ( x , x j ) I_{loss}(x,x_j) Iloss(x,xj)表示删除训练样本x对验证样本 x j x_j xj的损失的影响。训练的目标是学习一组参数 θ = arg min θ 1 n ∑ i = 1 n L ( f θ ( x i ) ) θ=\argmin_\theta \frac{1}{n}\sum_{i=1}^n L(f_{\theta}(x_i)) θ=θargminn1∑i=1nL(fθ(xi)),其中L可以是典型的损失函数,如softmax loss、均方误差(MSE)和L2损失等。
Influence Computation
根据[13]中讨论的近似理论,
I
l
o
s
s
(
x
,
x
j
)
I_{loss}(x,x_j)
Iloss(x,xj)可以定义如下
I
l
o
s
s
(
x
,
x
j
)
=
▽
θ
L
(
f
θ
(
x
j
)
)
T
H
θ
−
1
▽
θ
L
(
f
θ
(
x
)
)
I_{loss}(x,x_j)=\bigtriangledown_\theta L(f_{\theta}(x_j))^TH_\theta^{-1}\bigtriangledown_\theta L(f_{\theta}(x))
Iloss(x,xj)=▽θL(fθ(xj))THθ−1▽θL(fθ(x))其中,
H
θ
−
1
=
1
n
∑
i
=
1
n
▽
θ
2
L
(
f
θ
(
x
i
)
)
H_\theta^{-1}=\frac{1}{n}\sum_{i=1}^n\bigtriangledown_\theta^2 L(f_{\theta}(x_i))
Hθ−1=n1∑i=1n▽θ2L(fθ(xi))是海森矩阵,并假定为正定的。在我们的工作中,对于每个训练样本x,我们计算它对所有验证样本的损失值的影响,而不是测试样本,因为测试数据在测试阶段之前应该是不可见的。因此,总的影响范围为
∑
j
I
l
o
s
s
(
x
,
x
j
)
\sum_j I_{loss}(x,x_j)
∑jIloss(x,xj)。要计算
I
l
o
s
s
(
x
,
x
j
)
I_{loss}(x,x_j)
Iloss(x,xj),可以重写如下
I
l
o
s
s
(
x
,
x
j
)
=
−
s
j
⋅
▽
θ
L
(
f
θ
(
x
)
)
I_{loss}(x,x_j)=-s_j\cdot \bigtriangledown_\theta L(f_{\theta}(x))
Iloss(x,xj)=−sj⋅▽θL(fθ(x))其中
s
j
=
▽
θ
L
(
f
θ
(
x
j
)
)
H
θ
−
1
s_j=\bigtriangledown_\theta L(f_{\theta}(x_j))H_\theta^{-1}
sj=▽θL(fθ(xj))Hθ−1,我们使用隐式海森向量积来近似
s
j
s_j
sj。随机估计技术可以用来解决这种近似问题。更多细节可以参考[13]。在我们的实验中,我们注意到对于每个训练样本x,一次计算所有
x
j
s
x_js
xjs的
∑
j
I
l
o
s
s
(
x
,
x
j
)
\sum_j I_{loss}(x,x_j)
∑jIloss(x,xj)仍然是计算密集型的,因此我们稍微改变计算顺序,可以大大提高效率。我们将在第三节-D节中详细介绍实施技巧。
一旦能够计算出
I
l
o
s
s
(
x
,
x
j
)
I_{loss}(x,x_j)
Iloss(x,xj),我们将能够计算出所有验证样本的总影响
∑
j
I
l
o
s
s
(
x
,
x
j
)
\sum_jI_{loss}(x,x_j)
∑jIloss(x,xj),用于近似如下
∑
L
(
f
θ
(
x
j
)
)
−
L
(
f
θ
′
(
x
j
)
)
\sum L(f_{\theta}(x_j))-L(f_{\theta^{'}}(x_j))
∑L(fθ(xj))−L(fθ′(xj))其中
θ
′
\theta^{'}
θ′定义为
θ
′
=
arg min
θ
1
n
∑
x
i
≠
x
L
(
f
θ
(
x
i
)
)
\theta^{'}=\argmin_\theta \frac{1}{n}\sum_{x_i\neq x} L(f_{\theta}(x_i))
θ′=θargminn1∑xi=xL(fθ(xi))。在实践中,我们期望
∑
L
(
f
θ
(
x
j
)
)
−
L
(
f
θ
′
(
x
j
)
)
>
0
\sum L(f_{\theta}(x_j))-L(f_{\theta^{'}}(x_j))>0
∑L(fθ(xj))−L(fθ′(xj))>0,这意味着删除一个训练样本x可以减少总验证损失,因此它相当于有
∑
j
I
l
o
s
s
(
x
,
x
j
)
>
0
\sum_j I_{loss}(x,x_j)>0
∑jIloss(x,xj)>0。因此,我们设置data dropout的标准如下:
∀
x
,
i
f
∑
j
I
l
o
s
s
(
x
,
x
j
)
>
\forall x, if \sum_j I_{loss}(x,x_j)>
∀x,if∑jIloss(x,xj)>,x将从训练集中删除,否则将被保留。被丢弃的x被命名为不利的样本。
Two-Round Training
如上所述,对于单个训练样本x,我们可以计算
∑
j
I
l
o
s
s
(
x
,
x
j
)
\sum_j I_{loss}(x,x_j)
∑jIloss(x,xj),其中
x
j
x_j
xj是一个验证样本。因此,我们想要检查每个训练样本,以决定是放弃还是保留它。在传统的学习中,一旦训练完成,学习到的参数是固定的,因此不能改变测试错误率。因此,为了利用计算出的影响进一步降低测试错误率,我们提出了一种两轮训练方法。
在第一轮实验中,我们选择一个适合于给定任务的任意网络,并根据传统实践设置训练配置,如ResNet进行图像分类。我们训练模型,并在训练完成时获得
f
θ
(
⋅
)
f_\theta(\cdot)
fθ(⋅)。这里,θ表示学习到的网络参数。然后,对于每个训练样本
x
i
x_i
xi,我们计算
∑
j
I
l
o
s
s
(
x
,
x
j
)
\sum_j I_{loss}(x,x_j)
∑jIloss(x,xj),去除xi对所有验证样本损失的影响,并根据数据退出的标准去除不利的
x
i
s
x_is
xis。因此,可以重建一个新的训练集。在第二轮测试中,我们使用与第一轮测试相同的网络和初始配置,但将重建的训练集提供给模型,并对其进行重新训练。当这轮训练完成后,采用得到的模型
f
θ
′
(
⋅
)
f_{\theta^{'}}(\cdot)
fθ′(⋅)作为测试的最终模型。由于网络是在第二轮优化后的训练集上进行训练的,因此学习到的参数
θ
′
\theta^{'}
θ′与第一轮学习到的
θ
\theta
θ有很大的不同。我们在算法中推广了我们的方法。
在这里,我们简要讨论适当的训练回合次数。一般来说,经过第二轮训练后,我们仍然可以找到一些不利的样本。例如,在使用ResNet-20[5]的CIFAR-10分类中,我们在图1中显示了每一轮训练后定位的不利样本的数量。可以看出,该曲线几乎是单调的,而且在第一轮训练后剩下的不利训练样本要少得多。这一事实表明,没有必要进行更多一轮的训练来找到更多不利的样本。另一方面,更多的回合将是计算密集型的,这在深度学习中是不可取的。事实上,我们从经验上观察到,两轮训练就足以改进了泛化精度。因此,我们的方法是基于两轮的,同时考虑了准确性和效率。第一轮是训练一个用于定位不利样本的模型,第二轮是在优化后的训练集上从头开始训练同一网络以进行测试。
Implementation Tips
根据算法和III-C节的分析,对于每个训练样本 x i x_i xi,将固定 ▽ θ L ( f θ ( x i ) ) \bigtriangledown_\theta L(f_{\theta}(x_i)) ▽θL(fθ(xi)),需要在所有验证样本中多次计算 s j = ▽ θ L ( f θ ( x j ) ) T H θ − 1 s_j=\bigtriangledown_\theta L(f_{\theta}(x_j))^TH_\theta^{-1} sj=▽θL(fθ(xj))THθ−1。然而,近似 s j s_j sj比计算 ▽ θ L ( f θ ( x i ) ) \bigtriangledown_\theta L(f_{\theta}(x_i)) ▽θL(fθ(xi))更具有计算密集型。因此,在该算法的实现中,我们首先固定 s j s_j sj,并计算所有 ▽ θ L ( f θ ( x i ) ) \bigtriangledown_\theta L(f_{\theta}(x_i)) ▽θL(fθ(xi)),然后对所有 x j s x_js xjs重复这个问题。这样,我们只有k次( x j s x_js xjs的总数)近似 s j s_j sj。否则,对于所有的 x i s x_is xis,首先计算 ∑ j I l o s s ( x , x j ) \sum_j I_{loss}(x,x_j) ∑jIloss(x,xj)将需要 n × k n\times k n×k次的 s j s_j sj近似,其中n是 x i s x_is xis的数量。通过这种优化,每个训练样本 x i x_i xi最终将有k个值。然后,我们将这些值进行求和,以获得去除每个训练样本对所有验证样本损失的影响。虽然这种优化不会改变算法中的迭代次数,但它可以大大减少近似操作的数量。
Difference from ‘Leave-one-out’ retraining
值得注意的是,我们的方法本质上不同于“Leave-one-out”(LOO)再训练。对于每个训练样本 x i x_i xi,为了计算对验证损失的影响,LOO需要通过从训练集中移除 x i x_i xi来重新训练网络。因此,需要n次的再训练来调查所有的训练样本,这在深度学习中是不可行的。相反,我们的方法计算第一轮训练后所有 x i s x_is xis验证损失的影响。我们的训练方法看起来像是一种微调技术。然而,它在本质上与传统的微调技术不同。原因是在第二轮训练中,我们将网络恢复到其初始配置。事实上,当我们开始第二轮训练时,第一轮训练的结果将被完全丢弃,因为该结果只需要数据退出,这优化了训练数据。
Generality
尽管方法很简单,但我们的方法并不依赖于特定的模型或应用程序。用于解决特定领域问题的模型既可以是现有的模型,也可以是自定义的网络。对超参数设置也没有任何限制。人们只需要遵循训练-丢弃-训练的方式,就可以进一步提高其网络的测试精度。此外,我们的方法在没有验证数据时仍然适用,因为我们可以选择一些训练样本或使用另一个数据集进行验证目的。该方案在我们的实验中已被证明是有效的。
虽然我们的方法在性能增强方面是有效的,但如果所选的模型本身不在顶级模型中,它就不能保证最先进的结果。以CIFAR-10分类为例,如果我们使用一个只有两个隐藏层的浅层网络,即使使用所提出的方法,它也不能优于最佳结果。换句话说,我们的方法是一种改进基线而不是定义基线的方法。