对比学习 RDrop: Regularized Dropout for Neural Networks

关注微|信|公|众|号 包包算法笔记

背景

今天给大家讲一点轻松又有用的:5行代码实现的对比学习,效果超好!

其实我特别喜欢这类方法,足够简单明了,背后的思想也足够深刻,效果立竿见影。

嗯,听起来都像彩虹屁。

对比学习,最近比较火的一个方向,属于自监督的一种,其基本的思想是,不引入额外的标注数据,利用数据本身,在学习中的一些其他角度的监督信号,进行神经网络学习。对比学习,侧重对比两字,即数据的利用是利用样本间的对比来实现的。

加上5行代码

看看今天的主角Rdrop吧。

实现特别简单。让我说,这篇论文,放这5行代码,让大家去背后猜他的思想,也足够了。

好了,现在揭晓这5行代码。

#训练过程上下文ce = CrossEntropyLoss(reduction='none')
kld = nn.KLDivLoss(reduction='none')
logits1 = model(input)
logits2 = model(input)
#下面是训练过程中对比学习的核心实现!!!!
kl_weight = 0.5 #对比loss权重ce_loss = (ce(logits1, target) + ce(logits2, target)) / 2
kl_1 = kld(F.log_softmax(logits1, dim=-1), F.softmax(logits2, dim=-1)).sum(-1)
kl_2 = kld(F.log_softmax(logits2, dim=-1), F.softmax(logits1, dim=-1)).sum(-1)
loss = ce_loss + kl_weight * (kl_1 + kl_2) / 2

原理讲解

仔细看看,他干了一件什么事呢?

大家都知道,在训练阶段。dropout是开启的,你多次推断dropout是有随机性的。

模型如果鲁棒的话,你同一个样本,即使推断时候,开着dropout,结果也应该差不多。好了,那么它的原理也呼之欲出了。用一张图来形容就是:

图片

随便你怎么踹(dropout),本AI稳如老狗。

KLD loss是衡量两个分布的距离的,所以说他就是在原始的loss上,加了一个loss,这个loss刻画了模型经过两次推断,抵抗因dropout造成扰动的能力。

后话

是不是特别简单!

Rdrop其实和美团发那个ConSERT有点像,但是,Rdrop更简单,更干净,效果也不分伯仲(其实略好。ConSERT的对其他制造扰动的实验更充分一点,虽然我觉得人家可能试过了,又去掉了,只留下这5行代码。

这种论文给人一种为什么我就没想到的感觉,是我最喜欢的一类论文。

最后,苏剑林的博客里补充了很多实验和想法。大家可以去观摩一下,在中文数据集上补充了实验验证了效果。

引用

  1. Yan Y, Li R, Wang S, et al. ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer[J]. arXiv preprint arXiv:2105.11741, 2021.

  2. Liang X, Wu L, Li J, et al. R-drop: regularized dropout for neural networks[J]. arXiv preprint arXiv:2106.14448, 2021.

  3. 苏剑林 https://spaces.ac.cn/archives/8496

图片

历史精彩文章:

【深度玄学】为何Bert三个Embedding可以相加

所有数据集上给神经网络刷分的通用方法

如何看顶会论文上关于泄露的乌龙

AutoX:一键打机器学习比赛的AutoML

算法工程师的术与道:从特征工程谈数据敏感性

工业界文本分类避坑指南

从一道数学题面试题到GBDT原理的推导

Kaggle GM qrfaction:数据竞赛方法论看这一篇就够了

Kaggle进阶:显著提分trick之指标优化

图片

你可能感兴趣的:(对比学习 RDrop: Regularized Dropout for Neural Networks)