文章来源 | 恒源云社区
原文地址 | Flooding-X: 超参数无关的 Flooding 方法
原文作者 | Mathor
所谓大佬,就是只要你肯挖,总有你不知道的知识点在某个地方等着你来学习!
往下看,这不就来了吗!
正文开始:
ICML2020的论文《Do We Need Zero Training Loss After Achieving Zero Training Error?》提出了一种Flooding方法,用于缓解模型过拟合,详情可以看我的文章《我们真的需要把训练集的损失降到零吗?》。这里简单过一下,论文提出了一个超参数 b b b,并将损失函数改写为
其中, b b b是预先设定的阈值,当 L ( θ ) \mathcal{L}(\boldsymbol\theta) L(θ) > b b b时 L ~ ( θ ) = L ( θ ) \tilde{\mathcal{L}}(\boldsymbol\theta)=\mathcal{L}(\boldsymbol\theta) L~(θ)=L(θ),这时就是执行普通的梯度下降;而 L ( θ ) \mathcal{L}(\boldsymbol\theta) L(θ)< b b b时 L ~ ( θ ) \tilde{\mathcal{L}}{(\boldsymbol\theta)} L~(θ)=2 b b b- L ( θ ) \mathcal{L}(\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}}\mathcal{L}(\boldsymbol{\theta}_{n-1}) g(θn−1)=∇θL(θn−1)表示损失对参数 θ n − 1 \boldsymbol{\theta}_{n-1} θn−1的梯度。式(2)的结果相当于以 ε 2 2 \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∣ 的梯度下降
详细的推导过程见《我们真的需要把训练集的损失降到零吗?》