GAN Generative adversarial network

编辑 / deep learning / AI / 发布于2022-05-19 / 更新于2023-03-16 / 阅读 187

1. 论文

2. 视频

主要内容

概述

GAN由生成器和判别器 (D) 组成,生成器 (G) 负责生成样本,判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。

目标函数

minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p{data}(x)}}[\log D(x)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]

其中xpdata(x)x\sim{p{data}(x)} 代表真实数据,zPz(z)z\sim{P_z(z)} 表示 随机高斯分布

目标函数可以分成两个部分来看

  1. 让判别器能尽量的分辨真实样本和生成器生成的样本。其中真实样本值为1,生成样本为0,可以把G暂时看作常量,求V关于D(其中的参数)的最大值。判别器完美情况下 V=0 ,否则 V<0。

maxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p{data}(x)}}[\log D(x)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]

EE代表期望值(平均值)
2. 让判别器能尽量的分辨不出来生成器生成的假样本。

minGV(D,G)=Ezpz(z)[log(1D(G(z)))]\mathop {\min }\limits_G V(D,G) = {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]

训练步骤

  1. 先固定生成器,训练判别器。判别器的输入为真实数据和生成数据,训练判别器使它能分辨出真实数据和生成数据。
  2. 固定判别器,训练生成器,上一步训练出来的判别器能判别之前生成的数据,现在要训练生成器使判别器判断不出来生成器生成的数据。
  3. 反复进行上面两个步骤。

conditional GAN

需要成对的数据,判别器既要能判断生成的数据是否真实,又需要判断生成的数据和输入的条件是否匹配。

  • 其中(c,x)pdata(c,x)(c,x)\sim{p{data}(c,x)} 代表真实数据且其中(c,x)(c,x)是匹配的
  • (c,x)pdata(c,x)(c,x)\sim{p{data'}(c,x)} 也代表真实数据,但其中(c,x)(c,x)是不匹配的
  • zPz(z)z\sim{P_z(z)} 表示 随机高斯分布

训练判别器:

maxDV(D,G)=E(c,x)pdata(c,x)[logD(c,x)]+E(c)pdata(c),zpz(z)[log(1D(G(c,z)))]+E(c,x)pdata(c,x)[log(1D(c,x))]\mathop {\max }\limits_D V(D,G) = {\rm E}_{(c,x)\sim{p{data}(c,x)}}[\log D(c,x)] + {\rm E}_{(c)\sim{p{data}(c)},z\sim{p_z}(z)}[\log (1 - D(G(c,z)))] + {\rm E}_{(c,x)\sim{p{data‘}(c,x)}}[\log (1 - D(c,x))]

添加的第三项,就是为了使判别器能够分辨数据和标签是否匹配。就是为了判别器能够分辨生成器出来的数据和输入的标签是否匹配。

cycle GAN

XX是输入的图像,YY是需要转换的图像
DXD_XXX的判别器,DYD_YYY的判别器
GG是第一个生成器,将输入图像转化成需要转换类型的图像,FF是第二个生成器,将转换后的图像再转换成输入的图像
损失函数 Loss=Lossgan+LosscycleLoss = Loss_{gan}+ Loss_{cycle}

Lossgan=Lgan(G,DY,X,Y)+Lgan(F,DX,X,Y)Loss_{gan} = L_{gan}(G,D_Y,X,Y) + L_{gan}(F,D_X,X,Y)
= Eypdata(y)[logDY(y)]+Expdata(x)[log(1DY(G(x)))]+Expdata(x)[logDX(x)]+Eypdata(y)[log(1DY(F(y)))]{\rm E}_{y\sim{p{data}(y)}}[\log D_Y(y)] + {\rm E}_{x\sim{pdata}(x)}[\log (1 - D_Y(G(x)))] + {\rm E}_{x\sim{p{data}(x)}}[\log D_X(x)] + {\rm E}_{y\sim{pdata}(y)}[\log (1 - D_Y(F(y)))]
类似于两个GAN接起来,变成一个循环。
Losscycle=Expdata(x)[F(G(x))x1]+Eypdata(y)[F(G(y))y1]Loss_{cycle} = {\rm E}_{x\sim{p{data}(x)}}[||F(G(x)) - x||_1] + {\rm E}_{y\sim{p{data}(y)}}[||F(G(y)) -y||_1]