579 字
3 分钟
次浏览
GAN Loss Derivation

0. 前言#

GAN 原始 paper 中的损失很优美:

LGAN=minG maxD Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\mathcal{L}_{\text{GAN}} = min_{G} \ max_{D} \ \mathbb{E}_{x \sim p_{\text{data}}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]

不过有的同学可能看的一头雾水, 我们来推导一下怎么来的.

1. 推导#

为方便推导 , 记 GeneratorG , DiscriminatorD.

1.1 Generator#

Generator 要做的事情呢 , 可以划分为以下几步:

[1] 首先, 从一个 noise 分布 sample 一笔数据 , 不妨假设 zpz(z)z \sim p_z(z)

[2] 然后 Generator 一顿操作, 输出 G(z)G(z)

[3] 目标: 尽可能的欺骗 Discriminator , 让其认为 G(Z)G(Z) 是真的 , 具体表现为 D(G(Z))D(G(Z)) 越接近 11 越好

因此, 用交叉熵表示 Generator 要优化的目标是:

L(G)=minimize 11log(D(G(z)))+01log(1D(G(z)))=minimize 11log(D(G(z)))=minimize log(D(G(z)))=minimize log(1D(G(z)))\begin{align*} L(G) &= minimize \ \sum 1 * \frac {1} {log(D(G(z)))} + 0 * \frac {1} {log(1 - D(G(z)))} \\ &= minimize \ \sum 1 * \frac {1} {log(D(G(z)))} \\ &= minimize \ - \sum log(D(G(z))) \\ &= minimize \ \sum log(1 - D(G(z))) \\ \end{align*}

这里有个小trick , 当我们 update Generator 时 , Discriminator 是固定的 , 而 xpdata(x)x \sim p_{\text{data}}(x) 也是固定的 (就是我们真实样本训练集), 于是 Generator 有以下等价优化目标(当然可以加个 Expectation ~ ).

LG=minG Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\begin{align*} \mathcal{L}_{\text{G}} = min_{G}\ \mathbb{E}_{x \sim p_{\text{data}}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] \end{align*}

1.2 Discriminator#

Discriminator 要做的事情呢 , 可以划分为以下几步:

[1] 首先, 从一个 真实 分布 sample 一笔数据 , 不妨假设 xpx(x)x \sim p_x(x)

[2] 然后, 接受来自 Generator 的输出 G(Z)G(Z)

[3] 将 xxG(Z)G(Z) 都扔给 Discriminator

[4] 目标: 尽力分辨出 xx 为真, G(Z)G(Z) 为假.

因此, 用交叉熵表示 Discriminator 要优化的目标是:

L(D)=minimize {11log(D(x))+01log(1D(x))}x for true + {01log(D(G(z)))+11log(1D(G(z)))}G(z) for false=minimize 11log(D(x)) + 11log(1D(G(z)))=minimize log(D(x))log(1D(G(z))=maximize log(D(x)) + log(1D(G(z))\begin{align*} L(D) &= minimize \ \sum \{ 1 * \frac {1} {log(D(x))} + 0 * \frac {1} {log(1 - D(x))} \}_{x\ for\ true} \ \\ &+ \ \sum \{0 * \frac {1} {log(D(G(z)))} + 1 * \frac {1} {log(1 - D(G(z)))} \}_{G(z)\ for \ false} \\ &= minimize \ \sum 1 * \frac {1} {log(D(x))} \ + \ \sum 1 * \frac {1} {log(1 - D(G(z)))} \\ &= minimize \ - \sum log(D(x)) - \sum log(1 - D(G(z)) \\ &= maximize \ \sum log(D(x)) \ + \ \sum log(1 - D(G(z)) \\ \end{align*}

啊, 美化一下, 加个 Expectation~ , 美滋滋

LD=maxD Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\begin{align*} \mathcal{L}_{\text{D}} = max_{D}\ \mathbb{E}_{x \sim p_{\text{data}}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] \end{align*}

1.3 大一统#

GeneratorGeneratorminimizeminimize 下边这个式子, DiscriminatorDiscriminatormaximizemaximize 下边这个式子 . 叮~ 任务完成~

LGAN=minG maxD Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\mathcal{L}_{\text{GAN}} = min_{G} \ max_{D} \ \mathbb{E}_{x \sim p_{\text{data}}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]

2. 算法步骤#

贴一个原始paper中的算法步骤, 不过可以看到 , 上边式子那个只是为了美观 , 实际更新的时候, 还是用原始的,

image.png

Reference#

GAN Loss Derivation
https://xuchenhui.cc/posts/2024-04-11-gan-loss-derivation/
作者
CHENHUI
发布于
2024-04-11
许可协议
CC BY-NC-SA 4.0
📖 目录