恒源云(GPUSHARE)_社区产出大拿的论文小记(Flooding-X)

Posted AI酱油君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恒源云(GPUSHARE)_社区产出大拿的论文小记(Flooding-X)相关的知识,希望对你有一定的参考价值。

文章来源 | 恒源云社区

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

原文作者 | Mathor


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

正文开始:

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

其中, b b b是预先设定的阈值,当 L ( θ ) \\mathcalL(\\boldsymbol\\theta) L(θ) > b b b L ~ ( θ ) = L ( θ ) \\tilde\\mathcalL(\\boldsymbol\\theta)=\\mathcalL(\\boldsymbol\\theta) L~(θ)=L(θ),这时就是执行普通的梯度下降;而 L ( θ ) \\mathcalL(\\boldsymbol\\theta) L(θ)< b b b L ~ ( θ ) \\tilde\\mathcalL(\\boldsymbol\\theta) L~(θ)=2 b b b- L ( θ ) \\mathcalL(\\boldsymbol\\theta) L(θ),注意到损失函数变号了,所以这时候是梯度上升。因此,总的来说就是以 b b b为阈值,低于阈值时反而希望损失函数变大。论文把这个改动称为Flooding

这样做有什么效果呢?论文显示,在某些任务中,训练集的损失函数经过这样处理后,验证集的损失能出现 “二次下降(Double Descent)”,如下图

我们可以假设梯度先下降一步后上升一步,学习率为 ε \\varepsilon ε,通过泰勒展开可以得到

其中, θ n \\boldsymbol\\theta_n θn表示第 n n n次迭代的参数, g ( θ n − 1 ) = ∇ θ L ( θ n − 1 ) g(\\boldsymbol\\theta_n-1)=\\nabla_\\boldsymbol\\theta\\mathcalL(\\boldsymbol\\theta_n-1) g(θn1)=θL(θn1)表示损失对参数 θ n − 1 \\boldsymbol\\theta_n-1 θn1的梯度。式(2)的结果相当于以 ε 2 2 \\frac\\varepsilon^22 2ε2为学习率、损失函数为梯度惩罚 ∣ g ( θ ) ∣ ∣ 2 = ∣ ∣ ∇ θ L ( θ ) ∣ ∣ 2 ∣ |g(\\boldsymbol\\theta)||^2=||\\nabla_\\boldsymbol\\theta\\mathcalL(\\boldsymbol\\theta)||^2∣ g(θ)2=θL(θ)2 的梯度下降

详细的推导过程见《我们真的需要把训练集的损失降到零吗?》

ACHILLES’ HEEL OF FLOODING

Flooding的阿喀琉斯之踵在于超参数 b b b,我们需要花非常多的时间寻找最佳的阈值 b b b,这并不是一件容易的事

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

下图展示了使用BERT在SST-2数据集上不同的阈值 b b b对结果的影响(黄色区域是最佳结果)。可以看出, b b b的设置对结果的影响非常大

GRADIENT ACCORDANCE

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

其中,式(3)的负值就是参数 θ \\boldsymbol\\theta θ更新的方向。现在我们考虑两个样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1), (x_2,y_2) (x1,y1),(x2,y2)的情况,根据上述定义,样本1的梯度为

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

f ( θ , x 1 ) f(\\boldsymbol\\theta, x_1) f(θ,x1)通过泰勒展开变形得

f ( θ − ε g 1 ​ , x 1 ​ ) − f ( θ , x 1 ​ ) ​ ε g 1 ​ = ∂ f ∂ θ \\fracf(θ−εg 1​ ,x 1​ )−f(θ,x 1​ )​εg 1​ = \\frac∂f∂θ εg1f(θεg1,x1)f(θ,x1)=θf

我们将 ε g 1 ∂ f ∂ θ \\varepsilon \\boldsymbolg_1\\frac\\partial f\\partial \\boldsymbol\\theta εg1θf记作 T ( x 1 ) T(x_1) T(x1),并对 L ( f ( θ , x 1 ) , y 1 ) \\mathcalL(f(\\boldsymbol\\theta, x_1), y_1) L(f(θ,x1),y1)做类似的泰勒展开得

根据式(6)可以推出第一个等号,约等于是从泰勒展开推导的,具体来说
L ( A + T ( x 1 ​ ) , y 1 ​ ) − L ( A , y 1 ​ ) ​ T ( x 1 ​ ) = L ′ \\fracL(A+T(x 1​ ),y 1​ )−L(A,y 1​ )​T(x 1​ ) =L ′ T(x1)L(A+T(x1),y1)L(A,y1)=L

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

类似的,参数根据样本 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)更新后,在样本 ( x 2 , y 2 ) (x_2, y_2) (x2,y2)上的损失差为 Δ L 2 = − ε g 1 ⋅ g 2 \\Delta\\mathcalL_2 = -\\varepsilon \\boldsymbolg_1\\cdot \\boldsymbolg_2 ΔL2=εg1g2

值得注意的是,根据定义, Δ L 1 \\Delta \\mathcalL_1 ΔL1是负的,因为模型是对于 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)更新的,自然就会导致其损失的降低。如果 Δ L 2 \\Delta \\mathcalL_2 ΔL2也是负的,那么在 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)上更新的模型被认为对 ( x 2 , y 2 ) (x_2, y_2) (x2,y2)有积极的影响。上面的等式表明,这种共同关系相当于两个样本的梯度 g 1 , g 2 \\boldsymbolg_1,\\boldsymbolg_2 g以上是关于恒源云(GPUSHARE)_社区产出大拿的论文小记(Flooding-X)的主要内容,如果未能解决你的问题,请参考以下文章

恒源云(GpuShare)_表序编码器的联合实体和关系提取(论文浅谈)

恒源云(GpuShare)_表序编码器的联合实体和关系提取(论文浅谈)

恒源云(GpuShare)_表序编码器的联合实体和关系提取(论文浅谈)

恒源云(GpuShare)_MaskFormer:语义分割可以不全是像素级分类

恒源云(GpuShare)_MaskFormer:语义分割可以不全是像素级分类

恒源云(GPUSHARE)_超越预训练 NLP 的模型来喽