意图识别算法:噪音处理之O2U-Net: A Simple Noisy Label Detection Approach for Deep Neural Networks

论文下载:O2U-Net: A Simple Noisy Label Detection Approach for Deep Neural Networks

问题描述

意图识别的数据往往来自人工标注,标注时不同人对意图标签定义的理解多少有些出入,如“忙”意图,有时看快了会将“有点忙,你说”也标注为忙,这也是情理之中,人非圣贤孰能无过,何况每天面对成千上万的数据呢?
这类问题在阿里图片分类中也遇到了,例如下图是外包对性感图任务打标结果的截图,对类似的图片标注结果完全相反,用这批带噪数据进行训练得到的模型精度无法达到上线要求。因此,对高质量数据的需求与低效率的人工标注,构成了广大算法攻城狮们在模型开发的初级阶段所要解决的主要矛盾。

图1.性感图任务打标结果不一致
图1.性感图任务打标结果不一致

解决思路

O2U启发自深度神经网络的训练过程:该过程一般是从欠拟合逐渐过渡到过拟合。

在训练的前期,网络收敛速度比较快,因为网络倾向于先学习简单样本(即容易训练的样本),这些简单样本被学习后,使得lose快速下降,即网络快速收敛。

而在训练的后期,网络才倾向于学习难样本(即不好训练的样本),噪声样本也作为难样本的一部分在后期才被训练。然而,由于网络有大量待学习参数,即学习能力很强,在训练的后期也会逐渐拟合每一个样本,这样会导致噪声样本也会被学习,即过拟合,从而导致网络的性能下降。

通过观察训练过程可以发现,在训练的前期,由于网络先很快地拟合clean样本,所以噪声样本的loss会比clean样本的loss大,loss差距比较明显。在训练的后期,网络逐渐拟合噪声样本,所以两者之间loss的差距不再那么明显。

因此,通过记录样本在上述不同时期的loss,经过统计之后(例如统计样本loss的均值或者方差),根据loss差异,在一定程度上能找出噪声样本。

然而,一般的训练过程从欠拟合过渡到过拟合只发生一次,直接用这样的训练过程会有两方面的问题,一方面是如果噪声样本被拟合了,loss会下降得很快,另一面是难以确定噪声样本在什么时候被拟合。
图2.稳定学习率时loss变化过程
图2.稳定学习率时loss变化过程

由于上述两方面,会使得统计的结果可信度并不是很大。因此,文中提出了Cyclical Training,即通过调整学习率,使得学习率从原始值(较大的学习率)线性下降然后再回到初始值,反复进行这个过程,使得网络在欠拟合和过拟合之间反复交替切换,如下图所示。
图3 周期性训练Cyclical Training
图3 周期性训练Cyclical Training

即当学习率随着训练进行,从大变小时,模型会先学习简单样本再学习难样本,这个过程简单样本从一开始loss就会下降很快,难样本只到后期才下降,而在这个时间学习率又加到很大,使得模型跳出过拟合,即又忘记了难样本的学习,这时简单样本loss又会先快速下降,而难样本loss先回到很大,后期才下降,总体过程中,难样本的loss平均值会大于简单样本。
图4.周期性学习率时loss变化过程
图4.周期性学习率时loss变化过程(c代表一个Cyclical Training,包含多个epoch)

具体过程

O2U-net 训练详细

整体输入:包含噪音数据的训练集D
整体输出:表征该样本是噪音样本的概率的排序R;一个完整的分类模型

训练过程:分三阶段完成

  1. 第一阶段在全量训练集D上预训练;
  2. 第二阶段是在D上CyclicalTraining,记录每个样本的loss,按loss统计结果从大到小排序,去除top k个样本,即噪音样本;
  3. 第三个阶段是在clean dataset上训练(clean dataset表示经去除的数据集)

预训练阶段

使用固定的学习率 𝜂 和较大的batch size 𝑏𝑙训练网络至收敛,即模型在验证集上loss稳定。使用较大的batch size是为了降低噪声样本对网络的消极影响。
在这里插入图片描述

Cyclical Training阶段

在预训练模型基础上使用较小的cyclical learning rate 和较小的batch size 𝑏𝑠 继续训练。目的是让网络能较为容易地在欠拟合和过拟合之间切换。学习率调整策略如下图。在这里插入图片描述
r1为最大学习率,r2为最小学习率。一个Cyclical Training共训练c个epoch,t表示第t个epoch,r(t)表示第t个epoch的学习率。mod c表示对c取余数。

如图4表示共训练了4个Cyclical Training,3c表示第三个Cyclical Training,每个Cyclical Training包含c个epoch,根据上面公式可知每个epoch的学习率r是固定的,但在整个Cyclical Training过程中,随着epoch 增大,学习率是由大变小的。如:

r1 = 0.005
r2 = 0.001
共训练4个Cyclical Training,在第一个Cyclical Training过程中,共有5个epoch,c=5;

在训练第1个epoch时,t=1,
s(t) = (1 + ((1 - 1) % 5)) / 5 = (1 + 0)/ 5 =1/5
r(t) = (1-s(t)) * r1 + s(t) * r2 = r1 + s(t) * (r2 - r1) = r1 - 1/5 * (r1 - r2) = 0.0042

在训练第2个epoch时,t=2,
s(t) = (1 + ((2 - 1) % 5)) / 5 = (1 + 1)/ 5 =2/5
r(t) = (1-s(t)) * r1 + s(t) * r2 = r1 + s(t) * (r2 - r1) = r1 - 2/5 * (r1 - r2) = 0.0034

在训练第3个epoch时,t=3,
s(t) = (1 + ((3 - 1) % 5)) / 5 = (1 + 2)/ 5 =3/5
r(t) = (1-s(t)) * r1 + s(t) * r2 = r1 + s(t) * (r2 - r1) = r1 - 2/5 * (r1 - r2) = 0.0026

在训练第4个epoch时,t=4,
s(t) = (1 + ((4 - 1) % 5)) / 5 = (1 + 1)/ 5 =4/5
r(t) = (1-s(t)) * r1 + s(t) * r2 = r1 + s(t) * (r2 - r1) = r1 - 2/5 * (r1 - r2) = 0.0016

在训练第5个epoch时,t=5,
s(t) = (1 + ((5 - 1) % 5)) / 5 = (1 + 1)/ 5 =5/5
r(t) = (1-s(t)) * r1 + s(t) * r2 = r1 + s(t) * (r2 - r1) = r1 - 2/5 * (r1 - r2) = 0.0008

在上面Cyclical Training的训练过程中,记录每个样本的平均loss 𝑙𝑛(,每一个epoch中,样本的loss需进行归一化操作,即除以总的loss),

对于一个训练epoch,我们从每个样本的损失中减去该epoch所有样本的平均损失,以归一化不同epoch的损失,记录该值。对多个peoch中的loss再求平均最后得到每个样本的loss ,并按大到小排序,去除靠前的top k个样本,即作为下一个阶段的clean dataset。k来自数据集的先验知识,即该数据集有多少比例的噪声样本,可人工选择一些样本进行统计得到。

在这里插入图片描述

clean dataset训练阶段

使用剔除噪音样本的数据集 D‘ 重新初始化网络参数,重新训练网络至收敛。和步骤一一样。

在这里插入图片描述

实验结果

在这里插入图片描述

在这里插入图片描述

参考文献
1.https://zhuanlan.zhihu.com/p/147737928
2.https://developer.aliyun.com/article/740988?spm=a2c6h.12873581.0.0.796336e66C8McW
3.https://openaccess.thecvf.com/content_ICCV_2019/papers/Huang_O2U-Net_A_Simple_Noisy_Label_Detection_Approach_for_Deep_Neural_ICCV_2019_paper.pdf

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值