噪声学习方法

本文介绍三篇有关噪声学习的论文。导航:

知识蒸馏与知识图谱

论文:Learning from Nosiy Labels with Distillation

论文受到“知识蒸馏”(Knowledge Distillation)模型的启发,通过对少量干净的训练集训练一个辅助模型, 将此模型作为在带噪声的训练集中训练的一部分损失,来帮助在有噪声的数据集上学习更好的模型。除此之外,通过知识图谱来引导辅助模型的训练过程。

考虑一个 $L$ 分类的数据集

$$D :\left\{\left(x_{i}, y_{i}\right) | i=1, \ldots, N\right\}$$

%%x_i in R^(wxxh)%% 指第 %%i%% 张图片,%%y_i in {0,1}^L%% 是带噪声的标签向量,%%y_i^** in {0,1}^L%% 指真实标签 。用 %%D_c%%、%%D_n%% 分别表示干净的和有噪声的数据集,且有 %%D=D_c cup D_n%%。目标是在整个数据集 %%D%% 上训练一个最优的分类器。也可以说分类器在测试集 %%D_t%% 上也是最优的。

%%{:({:f^**:},=arg underset(f)(min)R_(D_t)(f)),(,=arg underset(f)(min)E_(D_t){l[y^**,f(x)]}):}%%

损失函数

%%L_D(y_i,f(x_i))=lamdal(y_i,delta(f(x_i))+(1-lamda)l(s_i, delta(f(x_i)))%%

%%l%% 是交叉熵损失函数,%%y_i%% 是样本 %%i%% 的标签向量,%%f(x_i)%% 是分类器的输出向量,%%delta%% 是 %%sigmoi\d%% 激活函数。损失函数由两项组成,%%lamda%% 是这两项损失的权重。%%s_i=delta(f_(D_c)(x_i)/T)%%,%%f_(D_c)%% 是在干净数据集上训练的辅助模型,%%T%% 指“temperature”,通常取值为 %%1%%。

交叉熵函数是线性求和的形式,损失函数可以整理为

%%L(y_i,f(x_i))=l(lamda y_i+(1-lamda)s_i,delta(f(x_i))%%

由于辅助模型是在少量的数据集上训练的,为了避免过拟合的问题,引入知识图谱矩阵 %%Gin R_+^(LxxL)%%,%%G(i,j)%% 代表标签 %%i,j%% 之间的相关性,同时对 %%G%% 进行归一化处理保证矩阵每一的行和等于%%1%%。于是,将 %%s_i%% 替换为 %%hat s_i:=Gs_i%%,得到最终的损失函数

%%L(y_i,f(x_i))=l(lamda y_i+(1-lamda)hat s_i,delta(f(x_i))%%

数据集的构建

作者指出,现有的带噪声训练集是人工通过某种已知方法将真实的标签修改为带噪声的标签,与此相反,作者将从现实生活中收集包含噪声的数据集。这个数据集来源于共享的图片网站,它包含着现实世界中的噪声。图片有多个来源,噪声水平也不同,例如用户在照片上做的标记、一词多义等产生的模糊文本。同时,背景图像也被包含进验证集中。

作者从 YFCC100M 中收集数据,从图片对应的文本描述中,运用基于文本的实体连接方法(DBpedia Spotlihgt)提取出维基百科中的实体,作为带噪声的标签,构建数据集 %%D%%。按照 6:3:1 的比例将数据集分为 train、test、dev 三部分,dev 数据集用于进行超参数 %%lamda%% 的选择。

参数 %%lamda%% 的选择

根据论文中命题 1,%%lamda%% 的选择可以通过启发式方法

%%lamda=(mAP_(D_c))/(mAP_D+mAP_(D_c))%%

其中 %%mAP=1/L sum_(i=1)^L AP_i%%,%%AP_i%% 是类别 %%i%% 的平均精度得分。

[Receiver_operating_characteristic]

知识图谱的构建

知识图谱是一个有向图,定义为

%%ccG:(V,E)%%

其中,%%V%% 是实体集合,三元组 %%(u in V, v in V, r in R)in E%% 是实体之间的关系。%%R%% 是实体之间关系的类型。例如,在物种领域的关系有门、纲、目等等,有向边 %%(u,v,r)%% 的含义是实体 %%u%% 是 %%v%% 的关系 %%r%%。例如三元组(“哺乳动物”,“兔子”,“纲”)的含义是哺乳动物是兔子的纲。有了知识图谱 %%ccG%%,定义标签关系矩阵 %%G%%为

%%G(m,n)prop{{:(1,m=n),(beta/(|N(n)|),if m in N(n)),(0,if(m,n) !in E):}%%

%%N(n)%% 是实体 %%n%% 兄弟关系实体的集合,%%beta%% 是一个取决于数据集的常量,论文中 %%beta=0.4%%。

重要性重加权分类(二分类)

论文:[Classification with Noisy Labels by Importance Reweighting]

最优分类器

%%{:(hat f_n,=arg underset(f in F)(min) hat R_(beta,l,D_rho)),(,=arg underset(f in F)(min) 1/n sum_(i=1)^n beta(x_i,hat y_i)l(f(x_i),haty_i)):}%%

%%hat R%% 是经验风险,%%l%% 是代理损失函数(surrogate loss),其中

%%beta(x_i,hat y_i)=(P_(D_rho)(hat y_i|x_i)-rho_(-hat y_i))/((1-rho_(+1)-rho_(-1))P_(D_rho)(hat y_i|x_i))%%

%%rho%% 称为噪声率,定义为

%%{:(rho_(+1)=P(hat Y=-1|Y=+1)),(rho_(-1)=P(hat Y=+1|Y=-1)):}%%

%%y%% 表示真实的标签,%%hat y%% 表示有噪声的标签。

%%P_(D_rho)(hat y_i|x_i)%% 的估计有三种方法,分别是概率分类法、核密度估计法、密度比估计法。

论文中选择KLIEP算法来进行密度比的估计。根据贝叶斯公式可得

%%P_(D_rho)(hat Y|X)=(P_(D_rho)(X|hat Y)P_(D_rho)(hat Y))/(P_(D_rho)(X))%%

根据KLIEP算法可估计出 %% (P_(D_rho)(X|hat Y))/(P_(D_rho)(X))%%,而

%%P_(D_rho)(hat Y)=1/n sum_(i=1)^(n) 1_(hat y_i=hat Y)%%

噪声率 %%rho%% 的估计

%%hat rho_(-hat y)= underset(x in {x_1,…,x_n})min hat P_(D_rho)(hat y|x)%%

重要性重加权多分类学习

论文:[Multiclass Learning With Partially Corrupted Labels]

设训练样本 %%(X,Y) in {(X_1,Y_1,),…,(X_n,Y_n)}%% 服从于无噪声的分布 %%D%%,且随机变量 %%(X,Y)%%是独立同分布的,%%Y=[Y^1,Y^2,…,Y^m]^T%%,%%m%% 是分类数,%%Y%%只有一个维度为 %%1%%,其余为 %%0%%,元素 %%1%% 的维度对应着所属的分类 。

论文中将多分类问题转换为二分类子问题,有 one-vs-rest 和 one-vs-one 两种方式。

在 one-vs-rest 模型中,需要训练 %%m%% 个分类器 %%{f_k}_(k=1)^m%%,%%f_k%%对第 %%k%% 类和其它所有类别的分类,期望风险是

%%R_(l,D) (f)=sum_(k=1)^m bbbE_{(X,Y)~D}[l(f_k(X),Y)]%%

在 one-vs-one 模型中,需要训练 %%C_m^2%% 个分类器,期望风险为

%%R_{l,D}({f_(tk)})sum_(t=1)^(m-1)sum_(k=t+1)^m bbbE_{(X,Y)~D^(tk)}[l(f_(tk)(X),Y)]%%

%%D^(tk)%% 是产生第 %%t%% 类和第 %%k%% 类样本的分布。

重要性加权

现在考虑包含噪声的训练样本 %%(X,hat Y) in {(X_1,hat Y_1),…,X_n,hat Y_n) }%%服从于分布 %%D_gamma%%。

记 %%P_D (X,Y), P_(D_gamma)(X,Y)%% 分别为无噪声的训练样本%%(X,Y)%% 在分布 %%D%% 和 %%D_gamma%%分布下的联合概率。由 %%P_D(X)=P_(D_gamma)(X)%%,可以得到

%%P_D(Y|X)=(P_D(X,Y))/(P_(D_gamma)(X,Y))P_(D_gamma)(Y|X)%%

定义 %%beta(X,Y)=(P_D(X,Y))/(P_(D_gamma)(X,Y)%%,由上式可以推断出在分布 %%D_gamma%% 下的期望风险

%%{:(R_(l,D) (f),=sum_(k=1)^m bbbE_{(X,Y)~D}[l(f_k(x),Y)]), (,=sum_(k=1)^m bbbE_{(X,Y)~D_gamma}[(P_D(X,Y))/(P_(D_gamma)(X,Y))l(f_k(X),Y)]),(,=sum_(k=1)^m bbbE_{(X,Y)~D_gamma}[beta(X,Y)l(f_k(X),Y)]),(,=R_(betal,D_gamma)(f)):}%%

由于%%(X,Y)%% 服从于 %%D_gamma%% 分布,所以 %%beta(X,Y)%% 可以等价地改写为 %%beta(X,hat Y)%%。

由于分布 %%D%% 是未知的,%%beta(X,hat Y)%%的估计只能依赖于有噪声的数据,对于每一个类别 %%k in {1,…,m}%%, %%beta(X,hat Y^k)%% 可以被独立地估计出来。根据引理 1,有

%%beta(X,hat Y^k)=(P(hat Y^k | X) – hat Y^k*gamma/m -(1 – hat Y^k)*gamma(1-1/m)) / ((1- gamma)P(hat Y^k | X))%%

并且 %%beta(X,hat Y^k)%% 是非负的。如果 %%P(hat Y^k|X)=0%%,则令 %%beta(X,hat Y^k)=0%%。

每一个分类,%%beta(X,hat Y^k)%% 的值是不同的,可以具体地将 one-vs-rest、one-vs-one 的期望风险改写为

%%{:(R_(betal,D_gamma)(f),=sum_(k=1)^m bbbE_(D_gamma)[beta(X,Y^k)l(f_k(X),Y^k)]),(R_(betal,D_gamma)({f_(tk)}),=sum_(k=1)^(m-1) sum_(k=t+1)^m bbbE_(D_gamma^(tk))[beta(X,Y^(tk))l(f_(tk)(X),Y^(tk))]):}%%

%%P(hat Y^k|X)%% 的估计

%%P(hat Y^k|X)%% 的估计方法有三种,概率分类法、核密度估计法、密度比估计法。 概率分类法高度依赖分类模型,当模型不确定的时候,这种方法可能会产生很大的估计误差。核密度估计法需要大量的训练样本,并且收敛速度比较慢。因此选择密度比估计法,这种方法还可以有效地应对高维数据。 密度比估计法也有三种方法来实现,文中选择 KLIEP 算法来估计 %%P(hat Y^k|X)%% 。

%%gamma%% 的估计

根据文中定理 1,令

%%{:(A_x,=m*min_k P_(D_gamma)(Y^k=1|X)),(B_x,=m/(m-1)*min_k P_(D_gamma)(Y^k=0|X)):}%%

%%gamma<=min{A_x,B_x}.%%

因此,%%gamma%% 的估计值为

%%gamma=min{underset(X in chi)(min)A_X,underset(X in chi)(min)B_X}%%