共计 3701 个字符,预计需要花费 10 分钟才能阅读完成。
文章起源 | 恒源云社区
原文地址 | 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