Pytorch的实现如下
class Mixup(nn.Module): def __init__(self, label_size, alpha): super(Mixup, self).__init__() self.label_size = label_size self.alpha = alpha def forward(self, input_x, input_y): if not self.training: return input_x, input_y batch_size = input_x.size()[0] input_y = F.one_hot(input_y, num_classes=self.label_size) # get mix ratio mix = np.random.beta(self.alpha, self.alpha) mix = np.max([mix, 1 - mix]) # get random shuffle sample index = torch.randperm(batch_size) random_x = input_x[index, :] random_y = input_y[index, :] xmix = input_x * mix + random_x * (1 - mix) ymix = input_y * mix + random_y * (1 - mix) return xmix, ymix迁移到NLP场景
mixup的方案是在CV中提出,那如何迁移到NLP呢?其实还是在哪一层进行差值的问题,在NLP中一般可以在两个位置进行融合,在过Encoder之前对词向量融合,过Encoder之后对句向量进行融合 。
- paper: Augmenting Data with mixup for Sentence Classification: An Empirical Study
文章插图
作者在文本分类任务上对比了二者的效果,并尝试了随机词vs预训练词向量 * 允许微调vs冻结词向量,总共4种不同的情况 。整体上不论是wordmixup还是sentmixup都对效果有一定提升,不过二者的差异并不如以上的CV实验中显著 。
文章插图
在[应用类别识别挑战赛](https://challenge.xfyun.cn/topic/info?type=scene-division)中,我分别尝试了FGM,Temporal半监督 , 文本增强,和mixup来提升文本分类模型的效果 。在我使用的词+字向量的TextCNN模型结构中,mixup的表现最好,单模型在初赛排到13名 。之后等Top3解决方案出来后,我们再来总结这个比赛~
Manifold Mixup
Manifold Mixup是在mixup基础上的改良 , 一言以蔽之就是把上面纠结的mixup在哪一层进行插值的问题,变成了每个step都随机选一层进行插值 。个人很喜欢这篇paper有两个原因 , 其一是因为觉得作者对mixup为何有效比原作解释的更加简单易懂;其二是它对插值位置的选择方案更适合BERT这类多层Encoder的模型 。而反观cv场景,优化点更多集中在cutmix这类对插值信息(对两个像素框内的信息进行融合)的选择上,核心也是因为图像输入的像素的信息量要远小于文本输入的字符所包含的信息量 。
- paper: Manifold Mixup: Better Representations by Interpolating Hidden States
- github: https://github.com/vikasverma1077/manifold_mixup
说回Manifold mixup,它的整体实现方案很简单:在个layer中任选一个layer K,这里包括输入层(layer=0), 然后向前传导到k层进行mixup就齐活了 。作者的代码实现也很简单一个randint做层数选择,加上一连串的if layer==i则进行mixup就搞定了~
关键我们来拜读下作者对于Manifold Mixup为何有效的解释,作者从空间表征上给出了3个观点
- 得到更平滑,且远离样本覆盖空间的决策边界,这个同mixup
- 展平分类的空间表征:啥叫展平这个我最初也木有看懂,不过作者的证明方式更加易懂 , 作者对比了不同的正则方案mixup,dropout , batchnorm和manifold对隐藏层奇异值的影响,发现manifold相较其他正则化可以有效降低隐藏层的整体奇异值 。降低奇异值有啥用嘞?简单说就是一个矩阵越奇异,则越少的奇异值蕴含了更多的矩阵信息,矩阵的信息熵越小 。所以这里作者认为mixup起到了降低预测置信度从而提高泛化的作用 。更详细对奇异值的解释可以去知乎膜拜各路大神的奇异值的物理意义是什么?
推荐阅读
- 2022支付宝小鸡今日答题答案
- 支付宝庄园小课堂9月9日正确答案
- 如何玩空当接龙小游戏(电脑游戏空当接龙技巧)
- iqoo8pro和小米11ultra拍照对比_哪款拍照更好
- 离谱的汉字消消乐经典小吃怎么过
- 支付宝庄园小课堂答案
- 第三方代开的微信小程序更换管理员
- 支付宝庄园小课堂今天答案
- 纯小数是什么 小数含义是
- 荣耀v40屏幕材质_荣耀v40屏幕多大