文章起源 | 恒源云社区(专一人工智能 / 深度学习云 GPU 服务器训练平台,官网体验网址:https://gpushare.com/center/)
原文地址 | https://bbs.gpushare.com/topi…
原文作者 | Mathor
三位韩国人在 EMNLP 2021 Findings 上发表了一篇论文,名为 Devil’s Advocate: Novel Boosting Ensemble Method from Psychological Findings for Text Classification,其中 Devil’s Advocate 有一部同名电影,翻译过去叫「魔鬼代言人」,他们次要挑战的是传统模型交融的办法,例如硬投票(Hard-Voting)、软投票(Soft Voting)、Bagging 等。源码在 HwiyeolJo/DevilsAdvocate
在群体决策过程中,大部分人会依据既定思维进行思考,而 Devil’s Advocate 是指那些提出的意见与大多数人不统一的那个人,Devil’s Advocate 的存在能够激发群体的头脑风暴,突破固化思维。以上内容参考维基百科恶魔的代言人
ENSEMBLES
在具体解说作者的办法前,先简略过一下常见的模型交融办法
Soft Voting
软投票是对不同模型的预测分数进行加权均匀,例如有一个三分类问题,第一个模型对某个样本的预测概率为 [0.2,0.1,0.7];第二个模型对该样本的预测概率为[0.2,0.6,0.2];第三个模型对该样本的预测概率为[0.1,0.7,0.2],假如三个模型的投票权重均为 \(\frac{1}{3}\) 则该样本最终的预测概率为
所以最终这个样本被预测为第 2 类。不过事实上很多时候模型有好有坏,所以咱们的权重不肯定是均匀的,对于模型比拟厉害的模型,咱们会给他比拟大的话语权(投票权重)
Hard Voting
硬投票能够看作是软投票的一个变种,还是以下面三个模型预测的概率分布为例。第一个模型预测样本为第 2 类,第二、三个模型都认为样本是第 2 类,依据多数遵从少数准则,该样本就被认为是第 2 类
Bagging
Bagging 办法的核心思想是「专制」。首先从训练集中有放回地随机采样一些样本,采样 n 次,训练出 n 个弱模型,利用这 n 个模型采纳投票的形式失去分类后果,如果是回归问题则是计算模型输入的均值作为最初的后果
Boosting
Boosting 的核心思想是「筛选精英」。Boosting 与 Bagging 最实质的区别在于它对弱模型不是统一看待的,而是通过不停的考验和筛选来挑出「精英」,而后给精英更多的投票权,体现不好的模型则给较少的投票权
PROPOSED METHOD: DEVIL’S ADVOCATE
Training Norm and DevAdv models
无论你是用什么办法做模型交融,至多都须要 2 个以上的模型。作者提出的办法至多须要 3 个模型,这些模型会被分成两个营垒:Normal models、Devil’s Advocate model (DevAdv)
首先咱们应用传统的 Cross Entropy Loss 训练 \(Norm _n \)模型
其中,\(Y_{Norm_n}\)是 \(Norm _n \)模型的预测值,\(\mathbf{Y}_{\text{true}}\)是实在标签。与训练模型相同的是,咱们须要随机生成与实在标签不相交的谬误标签来训练 DevAdv 模型(不相交指的是没有任何一个样本的谬误标签和实在标签雷同),生成的谬误标签为 \(Y_{false} \),DevAdv 模型的损失函数定义如下:
因为 DevAdv 模型是用谬误标签训练进去的,所以该模型充当了「魔鬼代言人」的角色,不批准其余模型的预测散布。特地地,咱们能够通过查看 \(arg\min(Y_{DevAdv}) \)是否为实在标签来评估 DevAdv 模型的性能
留神下面的函数是 \(\arg \min \),不是 \(\arg \max \),因为 \(\arg \max \)求很显著预测后果大部分是 \(Y_{false} \),但如果实在类别被预测的概率为最小,即通过 \(\arg \min \)取到,咱们就认为 DevAdv 十分会捣鬼
Group Discussion: Fine-tuning
我看到这个题目的时候感觉很奇怪,这又不是预训练模型,怎么会有 Fine-tuning 阶段?认真看了他们的代码之后才明确,他这个名字起的不好,不应该叫 Fine-tuning,应该叫为 Discussing 或者 Ensembles,即模型交融阶段。具体来说,之前咱们曾经把所有的模型都训练一遍了,接下来咱们须要把 DevAdv 引入进来再训练一遍 \(Norm _n \)模型。特地地,以后阶段只会更新 \(Norm _n \)模型的参数,DevAdv 模型的参数不会进行更新
给我一种感觉就像是:“DevAdv,你曾经学会如何抬杠了,快去烦扰 \(Norm _n \)他们的探讨吧”
对于 \(Norm _n \)模型来说,此时的损失函数比拟非凡
只有 DevAdv 模型的输入进行了归一化,\(Norm _n \)模型不进行归一化,目标是为了使得 \(Norm _n \)预测的散布值远大于归一化的 DevAdv 的值。在 CE Loss 中,DevAdv 模型阻止 \(Norm _n \)模型对实在标签进行正确拟合。但在「Discuss」过程中,即便有 DevAdv 模型的烦扰,\(Norm _n \)模型最终也能正确预测实在标签,次要有以下几个起因:
- DevAdv 模型在该阶段是不更新参数的,因而它相当于变成了一个固定的噪声生成器。\(Norm _n \)模型的参数是会随着损失进行调整的,所以必定成果会缓缓变好,这是能够预感的
- 十分特地的一点在于损失。\(Norm _n \)模型在「Discuss」的过程中会相互影响、学习其余 Norm models 的信息
最初,对测试集进行测试时,采纳软投票的机制组合 \(Norm _n \)模型的后果。而后…而后就完结了吗?咱们辛辛苦苦训练的 DevAdv 仅仅只是在「Discuss」阶段提供点噪声吗?来点作用啊 DevAdv。认真想一想,最开始在训练 DevAdv 模型的时候,咱们评估它的指标是
咱们将 \(Y_{DevAdv} \)内的值全副取正数,并将 \(\arg \min \)改为 \(\arg \max \),它的后果依然没变
但此时咱们就能够让 DevAdv 一起参加到 \(Norm _n \)模型的测试过程中了,其实就相当于三个模型独特进行软投票,此时预测后果为
RESULTS
这实质是一个模型交融的办法,实践上来说所有模型都是实用的。首先咱们看一下融化钻研
其中比拟重要的去掉了 DiscussLoss 的局部,何谓 DiscussLoss,其实就是 \(Norm _n \)模型相互讨论的阶段,即 \(\text{MSE} \)损失。去掉这部分后,除了 Yelp 数据集有些反常竟然回升了,其余的都有不同水平的降落。同时作者证实他们的办法能够应用超过 3 个模型的状况,例如最初一行,他们应用了 4 个模型,其中有 3 个失常模型,一个 DevAdv,成果尽管不如应用 3 个模型的状况(第一行),然而比惯例的软投票还是要好一些,特地地,此时他们应用 KL 散度来代替 MSE 损失
接着作者别离采纳 TextCNN 和基于 Transformers 的模型(论文里就没写到底用的是 BERT 还是 RoBERTa 等,如果间接用 transformer 不太可能,seq2seq 的模型如何做分类?)做了一组试验
基本上作者所提出的办法都要比软投票好一些,不过我特地好奇的是硬投票,以及其余的一些模型交融办法为什么不比照下呢?
集体总结
首先我要吐槽的是作者的美感,原论文中的数学公式写的十分丑,基本上感觉是间接用 \text{}框住而后乱写一通,这里截个图给大家感触下
其次是上图中我红框框进去的局部(上面没有用红框框住的公式也一样),我感觉它这个公式写错了,漏了个 \(Softmax \),能够比照我这篇文章里的公式和他论文中的公式。最初是我感觉比拟有意思的中央,因为单看「Discuss」的过程,DevAdv 在外面充当的只是捣鬼的角色,那为什么我不能够间接采样一个遵从 \(N(0,σ^2) \)的向量散布呢,用这个散布间接替换掉 \(Y_{DevAdv}\),直到我看到了公式(6),我才明确 DevAdv 不仅仅是充当一个噪声生成器,实际上在最初 Inference 阶段,它也能够一起参加进来,而这一点是单纯采样一个向量散布所无奈做到的。作者在他的文章中并没有做鲁棒性测试,实际上我感觉引入 Devil’s model 误导模型训练的过程是能够减少模型的鲁棒性的