在训练一个模型的过程中,每个epoch不仅会跑训练集,还要跑一下验证集或者说测试集(有的训练只有训练集和测试集,有的会加上一个验证集)。在考虑评价指标时,一般是以最后一个epoch的结果计算评价指标。但在最后一个epoch被错误分类的样本很有可能在之前被正确的分类过,作者边开始思考,如何让模型在更新参数时不要把已经正确分类的样本给弄错了。
作者的灵感是针对测试集,但做法是针对训练集。在第k个epoch时,针对一个训练集样本,假设其在前面的k-1轮epoch中被正确地预测了j次,0<=j<=k-1,那么就综合这j次预测模型的输出,计算出一个向量,让模型在第k个epoch的输出尽可能逼近这个向量。
为了计算这个向量,作者首先定义了模型对于某个样本的动作:
f(x)为模型的输出,t为超参数,为sigmoid。也就是说,所谓的动作就是把模型的输出先全部除以某个数再sigmoid。
然后假设那j次正确的预测时,模型的动作为b1(x),b2(x)...bj(x),则根据这些动作计算出所需要的那个向量,公式为:
cj为bj(x)的置信度,即σ(f(x))[y],[y]为下标。μ为系数,控制cj对结果的影响幅度。
最后,在计算损失函数时,利用这个向量,即可让模型在针对一个样本更新参数时,尽可能接近之前正确的分类动作