[Paper Note] Learning to Reweight Examples for Robust Deep Learning
Learning to Reweight Examples for Robust Deep LearningPAPERCODEAbstract面对样本不平衡问题和标签噪声等问题,之前是通过regularizers或者reweight算法,但是需要不断调整超参取得较好的效果。本文提出了meta-learning的算法,基于梯度方向调整权重。具体做法是需要保证获得一个足够干净的小样本数据集,每...
Learning to Reweight Examples for Robust Deep Learning
Abstract
面对样本不平衡问题和标签噪声等问题,之前是通过regularizers或者reweight算法,但是需要不断调整超参取得较好的效果。本文提出了meta-learning的算法,基于梯度方向调整权重。具体做法是需要保证获得一个足够干净的小样本数据集,每经过一轮batch大小的训练就基于当前更新的权重,执行meta gradient descent step来最小化在这个干净无偏差的验证集上的loss。这个方法避免了额外的超参调整,在样本不平衡和标签噪声等问题上可以有很好的效果,所需要的仅仅是一个很小数量的干净的验证集。
Related Work
在解决样本问题上的工作:
-
训练集样本权重分配:
AdaBoost:寻找难例来训练分类器。
难例挖掘: 下采样多数样本,挖掘最难的样本
Focal Loss:不同样本添加不同权重,困难样本权重更大 -
outliers和noise processes:
有些方法是先学习简单样本在学习困难样本
部分工作是去研究如何更好地初始化网络参数 -
直接对样本数据集下手,re-sample之类的
在最近的meta-learning中,很多都在探索使用validation loss作为meta-objective,本文算法的区别是没有额外的超参,并且避免了成本较高的离线训练。
Learning to Reweight Examples
本文的模型看做online approximation而不是meta-learning objective,这样就可以处理任何常规的监督学习。
文章给出了具体实现并且有理论保证,收敛率为
O
(
1
/
ϵ
2
)
O\left(1 / \epsilon^{2}\right)
O(1/ϵ2)
3.1 From a meta-learning objective to online approximation
( x , y ) (x,y) (x,y)为输入-标签对, { ( x i , y i ) , 1 ≤ i ≤ N } \left\{\left(x_{i}, y_{i}\right), 1 \leq i \leq N\right\} {(xi,yi),1≤i≤N}为训练集,假设 { ( x i v , y i v ) , 1 ≤ i ≤ M } \left\{\left(x_{i}^{v}, y_{i}^{v}\right), 1 \leq i \leq M\right\} {(xiv,yiv),1≤i≤M}为一个很小的干净无偏差的验证集,其中 M ≪ N M \ll N M≪N. v v v表示验证集, i i i表示第 i t h i^{th} ith个数据;同时假设训练集是包含验证集的,如果不包含,就把验证集加入到训练集中,从而使得训练过程中能够利用更多信息。
用 Φ ( x , θ ) \Phi(x, \theta) Φ(x,θ)表示网络模型, θ \theta θ为模型参数,定义 C ( y ^ , y ) C(\hat{y}, y) C(y^,y)为loss函数,其中 y ^ = Φ ( x , θ ) \hat{y}=\Phi(x, \theta) y^=Φ(x,θ)。
在一般的训练中,我们希望最小化训练集上的期望loss,也就是
1
N
∑
i
=
1
N
C
(
y
^
i
,
y
i
)
=
1
N
∑
i
=
1
N
f
i
(
θ
)
\frac{1}{N} \sum_{i=1}^{N} C\left(\hat{y}_{i}, y_{i}\right)=\frac{1}{N} \sum_{i=1}^{N} f_{i}(\theta)
N1∑i=1NC(y^i,yi)=N1∑i=1Nfi(θ),其中每一个输入样本权重相等,
f
i
(
θ
)
f_{i}(\theta)
fi(θ)表示输入数据
x
i
x_i
xi对应的loss。本文希望通过最小化weighted loss来学习去re-weight 输入。weighted loss如下:
θ
∗
(
w
)
=
arg
min
θ
∑
i
=
1
N
w
i
f
i
(
θ
)
(1)
\theta^{*}(w)=\arg \min _{\theta} \sum_{i=1}^{N} w_{i} f_{i}(\theta) \tag{1}
θ∗(w)=argθmini=1∑Nwifi(θ)(1)
其中
w
i
w_i
wi一开始未知,
{
w
i
}
i
=
1
N
\left\{w_{i}\right\}_{i=1}^{N}
{wi}i=1N可以被理解成训练超参数,基于
w
w
w在验证集上的表现来最优化
w
w
w:
w
∗
=
arg
min
w
,
w
≥
0
1
M
∑
i
=
1
M
f
i
v
(
θ
∗
(
w
)
)
(2)
w^{*}=\arg \min _{w, w \geq 0} \frac{1}{M} \sum_{i=1}^{M} f_{i}^{v}\left(\theta^{*}(w)\right) \tag{2}
w∗=argw,w≥0minM1i=1∑Mfiv(θ∗(w))(2)
这里需要保证
w
i
≥
0
w_i \geq 0
wi≥0 对所有的
i
i
i,因为最小化负的training loss可能会导致一些不稳定的情况。
Note:公式(1)(2)实际上就是最小化training loss同时还得保证这时候的权重在验证集的loss也最小。
Online Approximation 计算最优的 w i w_i wi需要两层嵌套的最优化循环,并且单个循环成本很高。本文方法的目的是通过一层优化循环来在线调整 w w w。每一个training iteration中,首先只在training loss平面上检查部分训练样本的下降方向,然后根据和validation loss平面下降方向的相似性对样本进行reweighting。
大多数深度网络都有用SGD或者改进版来优化loss。对于training过程的每一步
t
t
t,采样出mini-batch个训练样本
{
(
x
i
,
y
i
)
,
1
≤
i
≤
n
}
\left\{\left(x_{i}, y_{i}\right), 1 \leq i \leq n\right\}
{(xi,yi),1≤i≤n},
n
n
n是mini-batch size 且
n
≪
N
n \ll N
n≪N。然后根据mini-batch上期望loss的下降方向来更新参数。
最普通的SGD如下:
θ
t
+
1
=
θ
t
−
α
∇
(
1
n
∑
i
=
1
n
f
i
(
θ
t
)
)
(3)
\theta_{t+1}=\theta_{t}-\alpha \nabla\left(\frac{1}{n} \sum_{i=1}^{n} f_{i}\left(\theta_{t}\right)\right) \tag{3}
θt+1=θt−α∇(n1i=1∑nfi(θt))(3)
其中
α
\alpha
α是step size。
本文想要探究在第
t
t
t个training step,什么因素影响了训练样本
i
i
i在validation set上的性能。
于是对mini-batch 中的每个样本,加上一个权重扰动
ϵ
i
\epsilon_{i}
ϵi
f
i
,
ϵ
(
θ
)
=
ϵ
i
f
i
(
θ
)
(4)
f_{i, \epsilon}(\theta)=\epsilon_{i} f_{i}(\theta) \tag{4}
fi,ϵ(θ)=ϵifi(θ)(4)
Note: 目前这样和weighted loss看起来没什么区别
θ
^
t
+
1
(
ϵ
)
=
θ
t
−
α
∇
∑
i
=
1
n
f
i
,
ϵ
(
θ
)
∣
θ
=
θ
t
(5)
\hat{\theta}_{t+1}(\epsilon)=\theta_{t}-\left.\alpha \nabla \sum_{i=1}^{n} f_{i, \epsilon} (\theta)\right|_{\theta=\theta_{t}} \tag{5}
θ^t+1(ϵ)=θt−α∇i=1∑nfi,ϵ(θ)∣∣∣∣∣θ=θt(5)
然后寻找在第
t
t
t步能够最小化验证集loss
f
v
f^{v}
fv的最优的
ϵ
∗
\epsilon^*
ϵ∗
ϵ
t
∗
=
arg
min
ϵ
1
M
∑
i
=
1
M
f
i
v
(
θ
t
+
1
(
ϵ
)
)
(6)
\epsilon_{t}^{*}=\arg \min _{\epsilon} \frac{1}{M} \sum_{i=1}^{M} f_{i}^{v}\left(\theta_{t+1}(\epsilon)\right) \tag{6}
ϵt∗=argϵminM1i=1∑Mfiv(θt+1(ϵ))(6)
这样计算依然成本很高,为了更容易的在第
t
t
t步估计
w
i
w_i
wi,本文在mini-batch大小的验证集(
ϵ
t
\epsilon_t
ϵt)上采用一步梯度下降(single gradient descent step),并对输出进行矫正保证权重均非负。
u
i
,
t
=
−
η
∂
∂
ϵ
i
,
t
1
m
∑
j
=
1
m
f
j
v
(
θ
t
+
1
(
ϵ
)
)
∣
ϵ
i
,
t
=
0
(7)
u_{i, t}=-\left.\eta \frac{\partial}{\partial \epsilon_{i, t}} \frac{1}{m} \sum_{j=1}^{m} f_{j}^{v}\left(\theta_{t+1}(\epsilon)\right)\right|_{\epsilon_{i, t}=0} \tag{7}
ui,t=−η∂ϵi,t∂m1j=1∑mfjv(θt+1(ϵ))∣∣∣∣∣ϵi,t=0(7)
w
~
i
,
t
=
max
(
u
i
,
t
,
0
)
(8)
\tilde{w}_{i, t}=\max \left(u_{i, t}, 0\right) \tag{8}
w~i,t=max(ui,t,0)(8)
其中
η
\eta
η是在
ϵ
\epsilon
ϵ上的下降步长。
为了匹配原本的训练步长,实际上,我们可以考虑在一个batch中把所有样本的权重标准化,使他们的和为1.
也就是对集合加一个强限制,使其满足
{
w
:
∥
w
∥
1
=
1
}
∪
{
0
}
\{w:\|w\|_{1}=1 \} \cup \{0\}
{w:∥w∥1=1}∪{0}
w
i
,
t
=
w
~
i
,
t
(
∑
j
w
~
j
,
t
)
+
δ
(
∑
j
w
~
j
,
t
)
(9)
w_{i, t}=\frac{\tilde{w}_{i, t}}{\left(\sum_{j} \tilde{w}_{j, t}\right)+\delta\left(\sum_{j} \tilde{w}_{j, t}\right)} \tag{9}
wi,t=(∑jw~j,t)+δ(∑jw~j,t)w~i,t(9)
其中
δ
(
⋅
)
\delta(\cdot)
δ(⋅)是为了防止出现在mini-batch中所有的
w
i
w_i
wi都是0的情况,也就是如果
a
=
0
a=0
a=0那么有
δ
(
a
)
=
1
\delta(a)=1
δ(a)=1,其他情况下都是
δ
(
a
)
=
0
\delta(a)=0
δ(a)=0。如果没有批归一化步骤,该算法可能朝着最高效的学习率的方向修改,本文的one-step方法在学习率的选择上可能会更保守。此外,通过批归一化,有效地取消了元学习速率参数
η
\eta
η。
3.2 Example on MLP
给了一个多层感知器的数学公式推导,感兴趣可以阅读原文
3.3 Implementation using automatic differentiation
Note:图的流程描述下来就是首先正常前向计算,获得loss,然后backward,依据样本权重更新参数,获得新的参数
θ
^
\hat{\theta}
θ^,然后放入验证集forward,backward,根据validation loss 获得样本权重并更新。然后继续步骤1.
详细算法步骤如下:
使用这个reweight策略的训练时间是正常训练网络的三倍(因为有两次forward-backward,还有一个backward-on-backward),如果想缩减时间,可以减少验证集的batch size。
作者认为多花时间训练来避免不断的调参之类的操作是值得的。
3.4 reweighted training的收敛证明
有空在补,公式太多不想看了
4 Experiments
作者做了两个实验,一个是在MNIST上的imbalance问题,一个是CIFAR上的noisy label问题。
作者说适用于任何深度网络,已经有了开源的pytorch代码,后续加到自己的工作中试一下看看效果。
更多推荐
所有评论(0)