三、DIVIDEMIX: LEARNING WITH NOISY LABEL AS SEMI-SUPERVISED LEARNING
1.思想:同时训练两个网络,首先通过聚类(GMM)将标签噪声数据分为两部分:有标签数据(labeled set, 认为其是clean samples)和无标签数据(unlabeled set, 认为其是 noisy samples),然后基于两数据集以半监督的方式训练模型。
2.算法:
3.参数详解:
θ(1), θ(2)
是DNN1和DNN2的参数。
τ 是clean概率阈值。超过该阈值,认为是有标签的(clean)。否则认为是无标签的(noisy)。
M是数据增强数量。MixMatch内容,详见后文。
T是锐化温度。MixMatch内容,详见后文。
λu是无监督损失权重。是超参数,控制clean和noisy两部分损失比例,代码中clean部分数据的权重为1。
α是Beta(α,α)
的参数。MixMatch内容,详见后文。
4.过程详解:
WarmUp(预热):
目的:为了算法的初始收敛,使GMM能够通过各sample的损失分得开clean和noisy。(通过warm_up次迭代,warm_up是超参数,是代码中的变量名。)
方法:这里是使用全部数据集!!!分别训练两个模型!!!(白话说就是这个阶段都是用全部数据集,各自玩各自的。各迭代wram_up次,当噪声不同的时候,使用了不同的损失函数而已。)
损失函数:
对称噪声: 交叉熵损失函数lθ。
lθ={li}i=1N={-c=1Cyiclog(pmodelcxi;θ)}i=1N
非对称噪声: 带惩罚项H(θ)的交叉熵损失函数lθ+ H(θ)
。
H(θ)={c=1Cpmodelcxi;θlog(pmodelcxi;θ)}i=1N
GMM(co-divide阶段):
目的:将原始数据划分为clean和noisy两个部分。
步骤:
在WarmUp后得到两个模型,分别计算所有数据的损失并归一化(max-min标准化),然后使用GMM模型(n_components=2),使用EM算法对归一化损失拟合及预测,找到每个样本数据具有最小均值的那个component,提取属于该component的预测概率prob。根据超参数τ将prob变为pred(>τ
的为True,反之为False)。
再根据pred找到True和False的索引,根据这些索引将数据集划分为clean和noisy。i.e., labeled和unlabled。再通过GMM1模型得到的clean和noisy训练DNN2,通过GMM2模型得到的clean和noisy训练DNN1。
M轮Augment:
疑惑: 代码中并没有M这个显式的超参数,不明白这里为什么有两个inputs_x、inputs_x2?通过debug,这两个是不一样的。猜测这是数据增强,应该在加载数据集的代码中,具体体现未知,难道是transform?
co-guessing: 使用两个DNN,分别对inputs_u和inputs_u2预测,得到4个预测的结果。求这4个预测结果进行softmax,再进行temperature sharpening得到ptu,然后再归一化(除以他们的和)得到target_u(这是小数?)。
co-refinement: 对于两个inputs_x、inputs_x2,使用训练中的DNN分别预测,得到两个输出,然后求平均,再使用另一个网络的clean prob进行计算。
然后再进行temperature sharpening,再归一化。
MixMatch:
通过Beta(α,α)获得随机数λ
,然后求λ=max(λ,1-λ)
,然后把获得的所有输入inputs_x, inputs_x2, inputs_u, inputs_u2拼接(dim=0)得到all_inputs,输出targets_x, targets_x, targets_u, targets_u拼接(dim=0)得到all_outputs。然后进行:
这里的算法: 将其打乱索引再创建一份,然后混合得到mixed_input和mixed_target。
然后把混合后的带入训练的网络DNN,计算Lx, Lu, Lreg, 相加得到总损失。这里的lamb采用了截断函数clip(current-warm_up,0,1),因为warm_up无Lu
。
更新参数: SGD