Navigation

    Gpushare.com

    • Register
    • Login
    • Search
    • Popular
    • Categories
    • Recent
    • Tags

    Flooding-X: 超参数无关的 Flooding 方法【ICML 2020】

    语音识别与语义处理领域
    1
    1
    200
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 155****7220
      155****7220 last edited by Alice_恒源云

      ICML2020的论文《Do We Need Zero Training Loss After Achieving Zero Training Error?》提出了一种Flooding方法,用于缓解模型过拟合,详情可以看我的文章《我们真的需要把训练集的损失降到零吗?》。这里简单过一下,论文提出了一个超参数bbb,并将损失函数改写为
      96e91984-7cc7-4c5c-b27f-687bf526019a-image.png
      其中,bbb是预先设定的阈值,当L(θ)\mathcal{L}(\boldsymbol{\theta})L(θ) > bbb时L~(θ)=L(θ)\tilde{\mathcal{L}}(\boldsymbol{\theta})=\mathcal{L}(\boldsymbol{\theta})L~(θ)=L(θ),这时就是执行普通的梯度下降;而L(θ)\mathcal{L}(\boldsymbol{\theta})L(θ)<bbb时L~(θ)=2b−L(θ)\tilde{\mathcal{L}}(\boldsymbol{\theta})=2b-\mathcal{L}(\boldsymbol{\theta})L~(θ)=2b−L(θ),注意到损失函数变号了,所以这时候是梯度上升。因此,总的来说就是以bbb为阈值,低于阈值时反而希望损失函数变大。论文把这个改动称为Flooding

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

      我们可以假设梯度先下降一步后上升一步,学习率为ε\varepsilonε,通过泰勒展开可以得到
      99e3a3d4-ba26-4e62-b8df-1fccd9dec208-image.png
      其中,θn\boldsymbol{\theta}_{n}θn​表示第nnn次迭代的参数,g(θn−1)=∇θL(θn−1)g(\boldsymbol{\theta}_{n-1})=\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta}_{n-1})g(θn−1​)=∇θ​L(θn−1​)表示损失对参数θn−1\boldsymbol{\theta}_{n-1}θn−1​的梯度。式(2)的结果相当于以ε22\frac{\varepsilon^2}{2}2ε2​为学习率、损失函数为梯度惩罚∣g(θ)∣∣2=∣∣∇θL(θ)∣∣2|g(\boldsymbol{\theta})||^2=||\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta})||^2∣g(θ)∣∣2=∣∣∇θ​L(θ)∣∣2的梯度下降

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

      Achilles’ Heel of Flooding

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

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

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

      Gradient Accordance

      ACL2022的投稿有一篇名为《Flooding-X: Improving BERT’s Resistance to Adversarial Attacks via Loss-Restricted Fine-Tuning》的文章,以"梯度一致性"作为开启Flooding的"阀门",而不再采用超参数bbb。具体来说,我们首先定义包含参数θ\boldsymbol{\theta}θ的模型fff,考虑一个样本xxx以及真实标签yyy,它们的损失为L(f(θ,x),y)\mathcal{L}(f(\boldsymbol{\theta}, x), y)L(f(θ,x),y),损失关于参数的梯度为
      6e12089a-046d-43f2-8efe-65f19406f9cc-image.png
      其中,式(3)的负值就是参数θ\boldsymbol{\theta}θ更新的方向。现在我们考虑两个样本(x1,y1),(x2,y2)(x_1,y_1), (x_2,y_2)(x1​,y1​),(x2​,y2​)的情况,根据上述定义,样本1的梯度为
      3ef63b8e-4f76-4b60-9b8e-d6bf4a79ded3-image.png
      对于样本1来说,参数更新所导致的损失变化为
      c6cbb15b-2d39-45e5-9a87-9225fc055f1b-image.png
      将f(θ,x1)f(\boldsymbol{\theta}, x_1)f(θ,x1​)通过泰勒展开变形得
      d9b66f6d-3fee-4f3e-a4cb-aafe6375911b-image.png

      f(θ−εg1,x1)−f(θ,x1)εg1=∂f∂θ\frac{f(\boldsymbol{\theta} - \varepsilon\boldsymbol{g_1}, x_1) -f(\boldsymbol{\theta}, x_1)}{\varepsilon \boldsymbol{g_1}}= \frac{\partial f}{\partial \boldsymbol{\theta}}εg1​f(θ−εg1​,x1​)−f(θ,x1​)​=∂θ∂f​

      我们将εg1∂f∂θ\varepsilon \boldsymbol{g_1}\frac{\partial f}{\partial \boldsymbol{\theta}}εg1​∂θ∂f​记作T(x1)T(x_1)T(x1​),并对L(f(θ,x1),y1)\mathcal{L}(f(\boldsymbol{\theta}, x_1), y_1)L(f(θ,x1​),y1​)做类似的泰勒展开得
      67f1a835-8ca5-48e6-9bf0-a90d9cf4ea76-image.png

      根据式(6)可以推出第一个等号,约等于是从泰勒展开推导的,具体来说

      L(A+T(x1),y1)−L(A,y1)T(x1)=L′\frac{\mathcal{L}(A + T(x_1), y_1) -\mathcal{L}(A, y_1)}{T(x_1)} = \mathcal{L}'T(x1​)L(A+T(x1​),y1​)−L(A,y1​)​=L′

      将式(7)带入式(5)得
      08861070-9639-4eca-b9fb-4db0d7ae540d-image.png
      类似的,参数根据样本(x1,y1)(x_1,y_1)(x1​,y1​)更新后,在样本(x2,y2)(x_2, y_2)(x2​,y2​)上的损失差为ΔL2=−εg1⋅g2\Delta \mathcal{L}_2 = -\varepsilon \boldsymbol{g_1}\cdot \boldsymbol{g_2}ΔL2​=−εg1​⋅g2​

      值得注意的是,根据定义,ΔL1\Delta \mathcal{L}_1ΔL1​是负的,因为模型是对于(x1,y1)(x_1,y_1)(x1​,y1​)更新的,自然就会导致其损失的降低。如果ΔL2\Delta \mathcal{L_2}ΔL2​也是负的,那么在(x1,y1)(x_1, y_1)(x1​,y1​)上更新的模型被认为对(x2,y2)(x_2, y_2)(x2​,y2​)有积极的影响。上面的等式表明,这种共同关系相当于两个样本的梯度g1,g2\boldsymbol{g_1},\boldsymbol{g_2}g1​,g2​之间的乘积,我们称其为梯度一致性(Gradient Accordance)

      Coarse-Grained Gradient Accordance

      上面提到的可以看作是样本级别的梯度一致性,由于其粒度太细,计算起来非常复杂,因此我们将其应用到batch级别的粗粒度上进行计算

      考虑训练过程中包含nnn个样本的mini-batch B0B_0B0​,其中样本X=x1,x2,…,xn\boldsymbol{X} = {x_1, x_2,…,x_n}X=x1​,x2​,…,xn​,标签y=y1,y2,…,yn\boldsymbol{y}={y_1, y_2,…,y_n}y=y1​,y2​,…,yn​,其中yi∈c1,c2,…,cky_i\in {c_1, c_2,…,c_k}yi​∈c1​,c2​,…,ck​,即有kkk个类别。这些样本可以根据它们的标签拆分成kkk组(每组内的样本标签是一样的)
      2681a51c-8e10-439b-8cf4-6645b43c2e46-image.png
      由此可以将B0B_0B0​拆分成多个子batch的并集,B0=B01∪B02∪⋯B0kB_0 = B_0^1\cup B_0^2\cup \cdots B_0^kB0​=B01​∪B02​∪⋯B0k​。我们定义两个子batch B01B_0^1B01​和B02B_0^2B02​的类一致性分数为
      6155cb2a-32e1-42ed-9d7c-8b991dbb5c4a-image.png
      其中,g1\boldsymbol{g}_1g1​是模型在样本集B01B_0^1B01​上的损失对参数的梯度,cos⁡(g1,g2)=(g1/∣g1∣)⋅(g2/∣g2∣)\cos(\boldsymbol{g_1}, \boldsymbol{g_2})=(\boldsymbol{g_1}/|\boldsymbol{g_1}|)\cdot (\boldsymbol{g_2}/|\boldsymbol{g_2}|)cos(g1​,g2​)=(g1​/∣g1​∣)⋅(g2​/∣g2​∣)

      类一致性可以用于判断:对类别c1c_1c1​的样本集B01B_0^1B01​进行梯度下降是否也会减少类别c2c_2c2​所对应的样本集B02B_0^2B02​的损失

      假设一个Epoch中有NNN个batch,那么BsB_sBs​与BtB_tBt​的批一致性分数定义如下:
      acd96062-153a-40ad-86dd-a9f67ff667a3-image.png
      批一致性可以通过评估一个批次的参数更新对另一个批次的影响,量化两个批次的学习一致性。更具体地说,Sbatch accdS_{\text{batch accd}}Sbatch accd​如果是正的,表示这两个批次处于相同的学习节奏下,每个批次更新的模型对它们都有好处

      任意一个Epoch的梯度一致性最终定义为
      afe3b532-9df2-4d68-bfc4-ab2deff60d88-image.png

      Analysis and Discussion

      实验结果这里就不放了,简单说一下就是作者使用了TextFooler、BERT-Attack、TextBugger三种攻击手段,以PGD、FreeLB、TAVAT等方法为Baseline进行对比,结果表明使用Flooding-X效果很好

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

      个人总结

      2020年提出的Flooding本身就是一个非常有意思的Trick,可惜原论文作者也苦于超参数bbb的选择,因此其应用不算广泛。ACL2022这篇论文提出了梯度一致性的概念,让模型自己感知什么时候该进行Flooding,避免了超参数的选择问题

      References

      • 我们真的需要把训练集的损失降到零吗?
      • Flooding-X: Improving BERT’s Resistance to Adversarial Attacks via Loss-Restricted Fine-Tuning
      1 Reply Last reply Reply Quote 5
      • Referenced by  Alice_恒源云 Alice_恒源云 
      • Referenced by  Alice_恒源云 Alice_恒源云 
      • Referenced by  Alice_恒源云 Alice_恒源云 
      • First post
        Last post