T
traeai
登录
返回首页
科学空间

直接以FID为Loss:从梯度计算到流式训练

8.5Score
直接以FID为Loss:从梯度计算到流式训练

TL;DR · AI 摘要

文章探讨了如何将FID作为损失函数应用于生成模型训练,解决了计算难题,并提出了新的训练方法。

核心要点

  • FID作为Loss理论上可行,但实践中需克服计算困难。
  • 论文《Representation Fréchet Loss for Visual Generation》成功将FID用于生成模型微调。
  • FD Loss通过增加Batch Size缓解计算偏差问题。

结构提纲

按章节快速跳转。

  1. 探讨直接以FID为Loss进行生成模型训练的可能性。

  2. 介绍FID的定义及其计算公式。

  3. 回顾将FID作为Loss的历史尝试及存在的问题。

  4. 详细推导FID作为Loss时的梯度计算过程。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 直接以FID为Loss

金句 / Highlights

值得收藏与分享的关键句。

  • FID实际上是可导的,它作为Loss理论上没有问题,但实践中会遇到计算困难。

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 论文《Representation Fréchet Loss for Visual Generation》成功将FID用于生成模型微调,并明显改进了单步生成的效果。

    第 3 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • FID作为Loss的一个主要问题是需要大Batch Size来减少计算偏差。

    第 5 段

    ⬇︎ 下载 PNG𝕏 分享到 X
#FID#生成模型#深度学习#训练方法
打开原文

关注视觉生成模型的读者都知道,FID一直是其关键的评价指标之一,它越小往往意味着生成效果越真实。那么一个自然的问题是:为什么不干脆直接以FID为损失函数来训练生成模型呢?难道是因为FID不可导?非也,FID实际上是可导的,它作为Loss理论上没有问题,但实践中会遇到计算困难。

近日,论文《Representation Fréchet Loss for Visual Generation》做了一些克服困难的尝试,成功将FID用于生成模型的微调,并明显改进了单步生成的效果。本文将简要探讨一下其中的数学原理与实现技巧。

生成指标[#](https://spaces.ac.cn/archives/11738#%E7%94%9F%E6%88%90%E6%8C%87%E6%A0%87)

FID,全称是“Fréchet Inception Distance”,我们可以分“Fréchet Distance(FD)”和“Inception(I)”两部分来理解。

假设有两个分布$p$和$q$,它们分别代表真实样本、生成样本,我们将各自的样本$\mathbf{\mathit{x}}$通过某个预训练好的编码器$\phi$编码成特征向量$\mathbf{\mathit{z}} = \phi \left(\right. \mathbf{\mathit{x}} \left.\right) \in \mathbb{R}^{d}$,并估计各自的均值向量$\mathbf{\mathit{\mu}}_{p} , \mathbf{\mathit{\mu}}_{q}$和协方差矩阵$\mathbf{\Sigma}_{p} , \mathbf{\Sigma}_{q}$。然后,假设编码结果服从多元正态分布,那么我们就可以用正态分布的差异函数来度量它们的差距。Fréchet Distance(FD)选择的是W距离:

$$ (\text{1}) \begin{matrix}\mathcal{F} \triangleq \mathcal{W}_{2}^{2} \left[\right. p , q \left]\right. = & \parallel \mathbf{\mathit{\mu}}_{p} - \mathbf{\mathit{\mu}}_{q} \parallel^{2} + \text{tr} ⁡ \left(\right. \mathbf{\Sigma}_{p} + \mathbf{\Sigma}_{q} - 2 \left(\right. \mathbf{\Sigma}_{p} \mathbf{\Sigma}_{q} \left.\right)^{1 / 2} \left.\right) \\ = & \parallel \mathbf{\mathit{\mu}}_{p} - \mathbf{\mathit{\mu}}_{q} \parallel^{2} + \text{tr} ⁡ \left(\right. \mathbf{\Sigma}_{p} + \mathbf{\Sigma}_{q} - 2 \left(\right. \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2} \left.\right)^{1 / 2} \left.\right)\end{matrix} $$

将各自编码结果的均值向量和协方差矩阵代入上式,所得结果便称为“Fréchet Distance(FD)”。至于上式的推导过程,有兴趣的读者可以参考《两个多元正态分布的KL散度、巴氏距离和W距离》。 如果将编码器$\phi$选取为InceptionV3(I),那么对应的结果就称为“Fréchet Inception Distance”,即FID,这个评测指标首次提出自2017年论文《GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium》,某种意义上已经属于“上古时代”的产物了。

当然,不管是训练和评测,现在都不一定非要用InceptionV3了,可以用其他更先进的特征模型,比如SigLIP,或者多个不同的编码器各算一次Fréchet Distance然后加起来,等等。我们将这些做法统一称为“FD Loss”。

相关文献[#](https://spaces.ac.cn/archives/11738#%E7%9B%B8%E5%85%B3%E6%96%87%E7%8C%AE)

FID虽然看上去复杂,但它并没有什么不可导的运算,所以将它作为Loss是一个很自然的想法。早在几年前,就已经有这方面的尝试,如《Image Generation Via Minimizing Fréchet Distance in Discriminator Feature Space》《Backpropagating through Fréchet Inception Distance》

然而,早年的尝试并没有跑出很惊艳的结果,本质原因是Batch Size。一般的损失函数是单个样本算单个损失,然后全体样本平均,而FID是全体样本先算出均值、协方差,然后再代入式$(\text{1})$做非线性计算。这就导致用小Batch估计出来的FID是有偏的,且无法通过持续训练消除偏差,只能增加Batch Size缓解,导致训练成本比较难受。

“需要跨样本做非线性运算”、“需要大Batch Size”,有没有觉得这些字眼有点熟悉?事实上,视觉中“对比学习”通常也具有这两个特点,由于样本间的非线性运算,我们也不能通过梯度累积来实现增大Batch Size的效果,但这并非完全无法解决,比如《对比学习可以使用梯度累积吗?》。后面我们会看到,其实FID解决Batch Size问题的方法也是类似的。

此外,从“用预训练好的模型去抽取特征来构建损失函数”这个角度看,还有一个相关工作是Perceptual Loss,但这个是作为样本的重构Loss使用的,通常用于VAE等模型的训练,不涉及到跨样本的统计运算,因此没什么计算上的困难。

梯度计算[#](https://spaces.ac.cn/archives/11738#%E6%A2%AF%E5%BA%A6%E8%AE%A1%E7%AE%97)

现在让我们一步步推导,看FD作为Loss究竟会遇到什么困难。首先要解决的是梯度的计算问题。$p$代表真实分布,它的$\mathbf{\mathit{\mu}}_{p} , \mathbf{\Sigma}_{p}$是固定的,我们只需要对$\mathbf{\mathit{\mu}}_{q} , \mathbf{\Sigma}_{q}$求梯度。$\mathbf{\mathit{\mu}}_{q}$的梯度比较简单:

$$ (\text{2}) \nabla_{\mathbf{\mathit{\mu}}_{q}} \mathcal{F} = \nabla_{\mathbf{\mathit{\mu}}_{q}} \parallel \mathbf{\mathit{\mu}}_{p} - \mathbf{\mathit{\mu}}_{q} \parallel^{2} = 2 \left(\right. \mathbf{\mathit{\mu}}_{q} - \mathbf{\mathit{\mu}}_{p} \left.\right) $$

而$\mathbf{\Sigma}_{q}$的梯度则是

$$ (\text{3}) \nabla_{\mathbf{\Sigma}_{q}} \mathcal{F} = \nabla_{\mathbf{\Sigma}_{q}} \text{tr} ⁡ \left(\right. \mathbf{\Sigma}_{p} + \mathbf{\Sigma}_{q} - 2 \left(\right. \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2} \left.\right)^{1 / 2} \left.\right) = \mathbf{\mathit{I}} - 2 \nabla_{\mathbf{\Sigma}_{q}} \text{tr} ⁡ \left(\right. \left(\right. \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2} \left.\right)^{1 / 2} \left.\right) $$

这里我们用的是式$(\text{1})$的第二行,它看上去更复杂,但它有一个好处:矩阵$\mathbf{\mathit{S}} = \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2}$是正定对称的,这一点可以用来简化计算。设$\mathbf{\mathit{S}}$的奇异值分解也就是特征值分解为$\mathbf{\mathit{U}} \mathbf{\Lambda} \mathbf{\mathit{U}}^{\top}$,那么$\mathbf{\mathit{S}}^{1 / 2} = \mathbf{\mathit{U}} \mathbf{\Lambda}^{1 / 2} \mathbf{\mathit{U}}^{\top}$,于是

$$ (\text{4}) \text{tr} ⁡ \left(\right. \mathbf{\mathit{S}}^{1 / 2} \left.\right) = \text{tr} ⁡ \left(\right. \mathbf{\Lambda}^{1 / 2} \left.\right) = \sqrt{\lambda_{1}} + \sqrt{\lambda_{2}} + \hdots + \sqrt{\lambda_{d}} \\ (\text{5}) \nabla_{\mathbf{\mathit{S}}} \text{tr} ⁡ \left(\right. \mathbf{\mathit{S}}^{1 / 2} \left.\right) = \frac{1}{2} \sum_{i = 1}^{d} \frac{\nabla_{\mathbf{\mathit{S}}} \lambda_{i}}{\sqrt{\lambda_{i}}} = \frac{1}{2} \sum_{i = 1}^{d} \frac{\mathbf{\mathit{u}}_{i} \mathbf{\mathit{u}}_{i}^{\top}}{\sqrt{\lambda_{i}}} = \frac{1}{2} \mathbf{\mathit{U}} \mathbf{\Lambda}^{- 1 / 2} \mathbf{\mathit{U}}^{\top} = \frac{1}{2} \mathbf{\mathit{S}}^{- 1 / 2} $$

其中特征值的求导,可以参考《SVD的导数》。最后的结果跟$\sqrt{x}$的导数是$\frac{1}{2 \sqrt{x}}$类似,看上去很符合直觉,但它不是平凡的,如果$\mathbf{\mathit{S}}$不是正定对称矩阵,那么通常不成立。最后,由链式法则,我们有

$$ (\text{6}) \nabla_{\mathbf{\Sigma}_{q}} \text{tr} ⁡ \left(\right. \mathbf{\mathit{S}}^{1 / 2} \left.\right) = \mathbf{\Sigma}_{p}^{1 / 2} \left[\right. \nabla_{\mathbf{\mathit{S}}} \text{tr} ⁡ \left(\right. \mathbf{\mathit{S}}^{1 / 2} \left.\right) \left]\right. \mathbf{\Sigma}_{p}^{1 / 2} = \frac{1}{2} \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\mathit{S}}^{- 1 / 2} \mathbf{\Sigma}_{p}^{1 / 2} $$

合并起来得到

$$ (\text{7}) \nabla_{\mathbf{\Sigma}_{q}} \mathcal{W}_{2}^{2} \left[\right. p , q \left]\right. = \mathbf{\mathit{I}} - \mathbf{\Sigma}_{p}^{1 / 2} \left(\right. \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2} \left.\right)^{- 1 / 2} \mathbf{\Sigma}_{p}^{1 / 2} $$

这个形式看似复杂,但$\mathbf{\Sigma}_{p}^{1 / 2}$可以提前计算好,我们只需对正定对称矩阵$\mathbf{\mathit{S}} = \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2}$求平方根和逆平方根,就可以计算FID及其梯度了,这可以通过eigh函数完成,或者用《矩阵平方根和逆平方根的高效计算》《矩阵r次方根和逆r次方根的高效计算》介绍的Newton-Schulz迭代方案。

超大批次[#](https://spaces.ac.cn/archives/11738#%E8%B6%85%E5%A4%A7%E6%89%B9%E6%AC%A1)

引入记号

$$ (\text{8}) \begin{matrix}\mathbf{\mathit{\mu}}_{p} = \mathbb{E} \left[\right. \mathbf{\mathit{z}}_{p} \left]\right. , \mathbf{\mathit{V}}_{p} = \mathbb{E} \left[\right. \mathbf{\mathit{z}}_{p} \mathbf{\mathit{z}}_{p}^{\top} \left]\right. , \mathbf{\mathit{z}}_{p} = \phi \left(\right. \mathbf{\mathit{x}}_{p} \left.\right) , \mathbf{\mathit{x}}_{p} sim p \\ \mathbf{\mathit{\mu}}_{q} = \mathbb{E} \left[\right. \mathbf{\mathit{z}}_{q} \left]\right. , \mathbf{\mathit{V}}_{q} = \mathbb{E} \left[\right. \mathbf{\mathit{z}}_{q} \mathbf{\mathit{z}}_{q}^{\top} \left]\right. , \mathbf{\mathit{z}}_{q} = \phi \left(\right. \mathbf{\mathit{x}}_{q} \left.\right) , \mathbf{\mathit{x}}_{q} sim q\end{matrix} $$

那么

$$ (\text{9}) \mathbf{\Sigma}_{p} = \mathbf{\mathit{V}}_{p} - \mathbf{\mathit{\mu}}_{p} \mathbf{\mathit{\mu}}_{p}^{\top} , \mathbf{\Sigma}_{q} = \mathbf{\mathit{V}}_{q} - \mathbf{\mathit{\mu}}_{q} \mathbf{\mathit{\mu}}_{q}^{\top} $$

注意$\mathbf{\mathit{z}} = \phi \left(\right. \mathbf{\mathit{x}} \left.\right)$通常都有数千维度(InceptionV3是2048),所以为了使得估计准确,通常需要数万样本。真实分布是固定的,它的$\mathbf{\mathit{\mu}}_{p} , \mathbf{\Sigma}_{p}$可以提前算好,问题不大;但生成分布是实时变化的,如果每步都用数万样本算,那么意味着Batch Size要达到数万,这在很多情况下都是相当昂贵的。 另一方面,从梯度公式$(\text{7})$我们也可以看出大Batch的必要性,如果Batch Size很小,那么估算出来的$\mathbf{\mathit{V}}_{q}$都还不满秩,从而$\mathbf{\Sigma}_{q}$也不满秩,这时候$\left(\right. \mathbf{\Sigma}_{p}^{1 / 2} \mathbf{\Sigma}_{q} \mathbf{\Sigma}_{p}^{1 / 2} \left.\right)^{- 1 / 2}$的求逆便无从说起(会面临$0^{- 1 / 2}$)。因此,FD作为Loss,对训练的Batch Size提出了要求,这应该是实践中最核心的困难。

受限于算力,我们只能设法用小Batch Size模拟出大Batch Size的效果,这跟“对比学习+梯度累积”的需求类似。

等效损失[#](https://spaces.ac.cn/archives/11738#%E7%AD%89%E6%95%88%E6%8D%9F%E5%A4%B1)

假设Batch Size为$B$时,对应的$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$才是足够准确的,但我们每次只能跑一个小Batch Size $b$,所以一共需要跑$k = B / b$次来模拟大Batch Size的效果,每次产生的结果为$\overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. 1 \left.\right)} , \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. 1 \left.\right)}$、$\overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. 2 \left.\right)} , \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. 2 \left.\right)}$、...、$\overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. k \left.\right)} , \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. k \left.\right)}$,那么有关系

$$ (\text{10}) \mathbf{\mathit{\mu}}_{q} = \frac{1}{k} \sum_{i = 1}^{k} \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} , \mathbf{\mathit{V}}_{q} = \frac{1}{k} \sum_{i = 1}^{k} \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} $$

我们想要寻找一个理想的等效损失,使得总梯度等效于每个小Batch梯度的和,这就达到了无偏估计的效果。为此,对式$(\text{1})$两端求微分得

$$ (\text{11}) \begin{matrix}d \mathcal{F} \left(\right. \mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q} \left.\right) = & \langle \nabla_{\mathbf{\mathit{\mu}}_{q}} \mathcal{F} , d \mathbf{\mathit{\mu}}_{q} \rangle + \langle \nabla_{\mathbf{\mathit{V}}_{q}} \mathcal{F} , d \mathbf{\mathit{V}}_{q} \rangle_{F} \\ = & \sum_{i = 1}^{k} \left[\right. \langle \nabla_{\mathbf{\mathit{\mu}}_{q}} \mathcal{F} , d \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} / k \rangle + \langle \nabla_{\mathbf{\mathit{V}}_{q}} \mathcal{F} , d \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} / k \rangle_{F} \left]\right. \\ = & d \sum_{i = 1}^{k} \mathcal{F} \left(\right. \left[\right. \mathbf{\mathit{\mu}}_{q} - \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} / k \left]\right._{s g} + \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} / k , \left[\right. \mathbf{\mathit{V}}_{q} - \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} / k \left]\right._{s g} + \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} / k \left.\right)\end{matrix} $$

这个等式的意思是,我们可以逐次小批量地前向计算得到$\overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} , \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)}$,将它们平均得到足够准确的$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$,然后我们再逐个批次按照损失

$$ (\text{12}) \mathcal{F}_{i} = \mathcal{F} \left(\right. \left[\right. \mathbf{\mathit{\mu}}_{q} - \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} / k \left]\right._{s g} + \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. i \left.\right)} / k , \left[\right. \mathbf{\mathit{V}}_{q} - \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} / k \left]\right._{s g} + \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. i \left.\right)} / k \left.\right) $$

来正常求梯度,最后将它们的梯度累加起来,这个梯度就是等效于Batch Size $B$的梯度,其中$\left[\right. \cdot \left]\right._{s g}$是stop gradient算子。当然我们也可以考虑不累加梯度,而是每一步梯度都执行一次更新,并相应地调小一点学习率,那么效果是类似的。

历史来凑[#](https://spaces.ac.cn/archives/11738#%E5%8E%86%E5%8F%B2%E6%9D%A5%E5%87%91)

上述的方案虽然理论上可行,但由于要$k$步前向才能算出一个准确的$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$,然后才反过来算每一步的梯度,整个流程显得不大“流畅”。这里的瓶颈,就是我们必须要知道全局的$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$,才能设法求一个无偏的局部梯度。

一个自然的想法是,$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$能否搞点近似呢?考虑到学习率比较小,参数的更新是缓慢的,那么$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$的变化应该也是缓慢的,引入当前批数据后,新的$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$应当只是在旧的基础上做一些微调,我们考虑用滑动平均(EMA)来近似这个操作

$$ (\text{13}) \mathbf{\mathit{\mu}}_{q}^{\left(\right. t \left.\right)} = \beta \mathbf{\mathit{\mu}}_{q}^{\left(\right. t - 1 \left.\right)} + \left(\right. 1 - \beta \left.\right) \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. t \left.\right)} , \mathbf{\mathit{V}}_{q}^{\left(\right. t \left.\right)} = \beta \mathbf{\mathit{V}}_{q}^{\left(\right. t - 1 \left.\right)} + \left(\right. 1 - \beta \left.\right) \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. t \left.\right)} $$

这大致上维护了一个$\mathcal{O} \left(\right. 1 / \left(\right. 1 - \beta \left.\right) \left.\right)$大小的平均窗口,约等于将$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$的统计Batch Size扩大到了$\mathcal{O} \left(\right. 1 / \left(\right. 1 - \beta \left.\right) \left.\right)$倍。这样一来,每一步我们就可以按照如下损失求梯度来更新

$$ (\text{14}) \mathcal{F}_{t} = \mathcal{F} \left(\right. \underset{\mathbf{\mathit{\mu}}_{q}^{\left(\right. t \left.\right)}}{\underbrace{\beta \left[\right. \mathbf{\mathit{\mu}}_{q}^{\left(\right. t - 1 \left.\right)} \left]\right._{s g} + \left(\right. 1 - \beta \left.\right) \overset{\sim}{\mathbf{\mathit{\mu}}}_{q}^{\left(\right. t \left.\right)}}} , \underset{\mathbf{\mathit{V}}_{q}^{\left(\right. t \left.\right)}}{\underbrace{\beta \left[\right. \mathbf{\mathit{V}}_{q}^{\left(\right. t - 1 \left.\right)} \left]\right._{s g} + \left(\right. 1 - \beta \left.\right) \overset{\sim}{\mathbf{\mathit{V}}}_{q}^{\left(\right. t \left.\right)}}} \left.\right) $$

额外代价是要缓存$\mathbf{\mathit{\mu}}_{q} , \mathbf{\mathit{V}}_{q}$,成本很小。这种“Batch Size不够,历史来凑”的操作,其实也是“流式幂迭代”的“流式”思想的体现。此外,论文还讨论了队列做法,它维护$k$个历史Batch的队列,按式$(\text{12})$融入当前Batch来计算梯度,并剔除最久远的Batch,这个做法其实比较朴素,占用空间也远比EMA大,实测效果还没有EMA好。

实验赏析[#](https://spaces.ac.cn/archives/11738#%E5%AE%9E%E9%AA%8C%E8%B5%8F%E6%9E%90)

论文的实验主要集中在生成模型的后训练,旨在通过FD Loss训练,改良原本的单步生成模型的效果,或者将原本的多步生成模型微调成单步生成模型。当混合使用多个不同的编码器去计算FD Loss时,论文使用了损失归一化技巧来平衡不同量级的损失:

$$ (\text{15}) \mathcal{L} = \underset{i}{\sum} \frac{\mathcal{F} \left[\right. \phi_{i} \left]\right.}{\left[\right. \mathcal{F} \left[\right. \phi_{i} \left]\right. \left]\right._{s g} + \epsilon} $$

这个技巧我们在《多任务学习漫谈(一):以损失之名》也讨论过。 论文的核心战绩,就是将单步生成的效果(FID)推向了一个全新的高度,并且超越了所有其他的单步和多步生成模型,这一结果看来已经到了天花板。部分图表如下所示:

![Image 1: FD loss 改进单步生成效果](https://spaces.ac.cn/usr/uploads/2026/05/3014248186.png "点击查看原图")

FD loss 改进单步生成效果

![Image 2: FD loss 的综合比较](https://spaces.ac.cn/usr/uploads/2026/05/3462357209.png "点击查看原图")

FD loss 的综合比较

文章小结[#](https://spaces.ac.cn/archives/11738#%E6%96%87%E7%AB%A0%E5%B0%8F%E7%BB%93)

这篇文章主要从理论上分析了将FID作为生成模型损失函数所面临的困难,以及如何从推导过程中引出对应的克服困难的技巧。

_转载到请包括本文地址:[https://spaces.ac.cn/archives/11738](https://spaces.ac.cn/archives/11738 "直接以FID为Loss:从梯度计算到流式训练")_

_更详细的转载事宜请参考:_[《科学空间FAQ》](https://spaces.ac.cn/archives/6508#%E6%96%87%E7%AB%A0%E5%A6%82%E4%BD%95%E8%BD%AC%E8%BD%BD/%E5%BC%95%E7%94%A8 "《科学空间FAQ》")

AI 可能会生成不准确的信息,请核实重要内容

直接以FID为Loss:从梯度计算到流式训练 | 科学空间 | traeai