文章起源 | 恒源云社区

原文地址 | Flooding-X: 超参数无关的 Flooding 办法

原文作者 | Mathor


所谓大佬,就是只有你肯挖,总有你不晓得的知识点在某个中央等着你来学习!
往下看,这不就来了吗!

注释开始:

ICML2020的论文《Do We Need Zero Training Loss After Achieving Zero Training Error?》提出了一种Flooding办法,用于缓解模型过拟合,详情能够看我的文章《咱们真的须要把训练集的损失降到零吗?》。这里简略过一下,论文提出了一个超参数\( b \),并将损失函数改写为

其中,\( b \)是事后设定的阈值,当\( \mathcal{L}(\boldsymbol\theta) \) > \( b \)时\( \tilde{\mathcal{L}}(\boldsymbol\theta)=\mathcal{L}(\boldsymbol\theta) \),这时就是执行一般的梯度降落;而\( \mathcal{L}(\boldsymbol\theta) \)<\( b \)时\( \tilde{\mathcal{L}}{(\boldsymbol\theta)} \)=2\( b \)-\( \mathcal{L}(\boldsymbol\theta) \),留神到损失函数变号了,所以这时候是梯度回升。因而,总的来说就是以\( b \)为阈值,低于阈值时反而心愿损失函数变大。论文把这个改变称为Flooding

这样做有什么成果呢?论文显示,在某些工作中,训练集的损失函数通过这样解决后,验证集的损失能呈现 “二次降落(Double Descent)”,如下图

咱们能够假如梯度先降落一步后回升一步,学习率为\( \varepsilon \),通过泰勒开展能够失去

其中,\( \boldsymbol{\theta}_{n} \)示意第\( n \)次迭代的参数,\( g(\boldsymbol{\theta}_{n-1})=\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta}_{n-1}) \)示意损失对参数\( \boldsymbol{\theta}_{n-1} \)的梯度。式(2)的后果相当于以\( \frac{\varepsilon^2}{2} \)为学习率、损失函数为梯度惩办\( |g(\boldsymbol{\theta})||^2=||\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta})||^2∣ \) 的梯度降落

具体的推导过程见《咱们真的须要把训练集的损失降到零吗?》

ACHILLES’ HEEL OF FLOODING

Flooding的阿喀琉斯之踵在于超参数\( b \),咱们须要花十分多的工夫寻找最佳的阈值\( b \),这并不是一件容易的事

Achilles’ Heel(阿喀琉斯之踵)阿喀琉斯是古希腊神话故事中的英雄人物,刀枪不入,惟一的弱点是脚后跟(踵)。后用于来比喻某货色的致命缺点

下图展现了应用BERT在SST-2数据集上不同的阈值\( b \)对后果的影响(黄色区域是最佳后果)。能够看出,\( b \)的设置对后果的影响十分大

GRADIENT ACCORDANCE

ACL2022的投稿有一篇名为《Flooding-X: Improving BERT’s Resistance to Adversarial Attacks via Loss-Restricted Fine-Tuning》的文章,以"梯度一致性"作为开启Flooding的"阀门",而不再采纳超参数\( b \)。具体来说,咱们首先定义蕴含参数\( \boldsymbol{\theta} \)的模型\( f \),思考一个样本\( x \)以及实在标签\( y \),它们的损失为\( \mathcal{L}(f(\boldsymbol{\theta}, x), y) \),损失对于参数的梯度为

其中,式(3)的负值就是参数\( \boldsymbol{\theta} \)更新的方向。当初咱们思考两个样本\( (x_1,y_1), (x_2,y_2) \)的状况,根据上述定义,样本1的梯度为

对于样本1来说,参数更新所导致的损失变动为

将\( f(\boldsymbol{\theta}, x_1) \)通过泰勒开展变形得

\( \frac{f(−g 1 ,x 1 )−f(,x 1 )}{g 1} = \frac{∂f}{∂} \)

咱们将\( \varepsilon \boldsymbol{g_1}\frac{\partial f}{\partial \boldsymbol{\theta}} \)记作\( T(x_1) \),并对\( \mathcal{L}(f(\boldsymbol{\theta}, x_1), y_1) \)做相似的泰勒开展得

依据式(6)能够推出第一个等号,约等于是从泰勒开展推导的,具体来说
\( \frac{L(A+T(x 1 ),y 1 )−L(A,y 1 )}{T(x 1 )} =L ′ \)

将式(7)带入式(5)得

相似的,参数依据样本\( (x_1,y_1) \)更新后,在样本\( (x_2, y_2) \)上的损失差为\( \Delta\mathcal{L}_2 \)=\( -\varepsilon \boldsymbol{g_1}\cdot \boldsymbol{g_2} \)

值得注意的是,依据定义,\( \Delta \mathcal{L}_1 \)是负的,因为模型是对于\( (x_1,y_1) \)更新的,天然就会导致其损失的升高。如果\( \Delta \mathcal{L}_2 \)也是负的,那么在\( (x_1, y_1) \)上更新的模型被认为对\( (x_2, y_2) \)有踊跃的影响。下面的等式表明,这种独特关系相当于两个样本的梯度\( \boldsymbol{g_1},\boldsymbol{g_2} \)之间的乘积,咱们称其为梯度一致性(Gradient Accordance)

COARSE-GRAINED GRADIENT ACCORDANCE

下面提到的能够看作是样本级别的梯度一致性,因为其粒度太细,计算起来非常复杂,因而咱们将其利用到batch级别的粗粒度上进行计算

思考训练过程中蕴含\( n \)个样本的mini-batch \( B_0 \) ,其中样本\( \boldsymbol{X} = {x_1, x_2,…,x_n} \),标签\( \boldsymbol{y}={y_1, y_2,…,y_n} \),其中\( \in {c_1, c_2,…,c_k} \),即有\( k \)个类别。这些样本能够依据它们的标签拆分成\( k \)组(每组内的样本标签是一样的)

由此能够将\( B_0 \)拆分成多个子batch的并集,\( B_0 = B_0^1\cup B_0^2\cup \cdots B_0^k \)。咱们定义两个子batch \( B_0^1 \)和\( B_0^2 \)的类一致性分数为

其中,\( \boldsymbol{g}_1 \)是模型在样本集\( B_0^1 \)上的损失对参数的梯度,\( \cos(\boldsymbol{g_1}, \boldsymbol{g_2})=(\boldsymbol{g_1}/|\boldsymbol{g_1}|)\cdot (\boldsymbol{g_2}/|\boldsymbol{g_2}|) \)类一致性能够用于判断:对类别\( c_1 \)的样本集\( B_0^1 \)进行梯度降落是否也会缩小类别\( c_2 \)所对应的样本集\( B_0^2 \)的损失

假如一个Epoch中有\( N \)个batch,那么\( B_s \)与\( B_t \)的批一致性分数定义如下:

批一致性能够通过评估一个批次的参数更新对另一个批次的影响,量化两个批次的学习一致性。更具体地说,\( S_{\text{batch accd}} \)如果是正的,示意这两个批次处于雷同的学习节奏下,每个批次更新的模型对它们都有益处

任意一个Epoch的梯度一致性最终定义为

ANALYSIS AND DISCUSSION

试验后果这里就不放了,简略说一下就是作者应用了TextFooler、BERT-Attack、TextBugger三种攻打伎俩,以PGD、FreeLB、TAVAT等办法为Baseline进行比照,结果表明应用Flooding-X成果很好

从下图能够看出,当梯度一致性指标从正数变为负数时,测试集损失也开始回升,阐明梯度一致性这个指标能够很好的当作是过拟合的信号

集体总结

2020年提出的Flooding自身就是一个十分有意思的Trick,惋惜原论文作者也苦于超参数\( b \)的抉择,因而其利用不算宽泛。ACL2022这篇论文提出了梯度一致性的概念,让模型本人感知什么时候该进行Flooding,防止了超参数的抉择问题

REFERENCES

  • 咱们真的须要把训练集的损失降到零吗?
  • Flooding-X: Improving BERT’s Resistance to Adversarial Attacks via Loss-Restricted Fine-Tuning