【无标题】

生成式对抗网络(GAN)

把network当作gengrator,输入一个随机的z,希望输出是有几率的分布

在这里插入图片描述

generator(nn)

输入一个normal distribution ,输出一个image(长向量)

discriminator(nn)

输入一个image,输出一个图片的置信度

总的来说,discriminator扮演generator天敌的角色,不断筛选出符合ground truth的image,共同进化

Algorithm

  1. fix generator G, and update discriminator D
  2. fix discriminator D,and update generator G

在这里插入图片描述

styleGan、Progressive Gan、

theory behind GAN

G ∗ = arg ⁡ min ⁡ G D i v ( P G , P d a t a ) G^*=\arg\min_G Div(P_G,P_{data}) G=argGminDiv(PG,Pdata)

找一组 参数,使得距离divergence最小

在这里插入图片描述

objective function和discriminator有关

在这里插入图片描述

no pain, no GAN

tips for GAN

JS divergence
  • in most cases, P G P_G PG and P d a t a P_{data} Pdata are not overlapped.

没有重叠的 P G P_G PG and P d a t a P_{data} Pdata算出来都是log2。

WGAN(Wasserstein GAN)

tips: BN

BN步骤主要分为4步:
1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用求得的均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。其中ε是为了避免除数为0时所使用的微小正数。
4.尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。在这里插入图片描述

参考博客:WGAN基本原理及Pytorch实现WGAN_Keep_Trying_Go的博客-CSDN博客

  1. 彻底解决了GAN训练不稳定,超参数敏感的问题,不再需要小心平衡生成器和判别器的训练程度
  2. 基本解决了collapse mode(模型生成样本单一,多样性很差)的问题,确保了生成样本的多样性
  3. 训练过程中有一个向交叉熵、准确率这样的数值来指示训练的过程,数值越小代表训练越好
  4. 不需要精心设计网络架构,最简单的多层全连接即可
距离度量方式
  • EM距离:
    W ( P r , P g ) = inf ⁡ γ ∈ ∏ ( P r , P g ) E ( x , y )   γ [ ∣ ∣ x − y ∣ ∣ ] W(P_r,P_g)=\inf_{\gamma\in\prod(P_r,P_g)}E_{(x,y) ~ \gamma}[||x-y||] W(Pr,Pg)=γ(Pr,Pg)infE(x,y) γ[∣∣xy∣∣]
    其中 ∏ ( P r , P g ) \prod(P_r,P_g) (Pr,Pg)是分布p和q组合起来的所有可能的联合分布的集合。对于每个分布可能的联合分布 γ \gamma γ~ ∏ ( P r , P g ) \prod(P_r,P_g) (Pr,Pg),计算距离||x-y||的期望 E ( x , y )   γ [ ∣ ∣ x − y ∣ ∣ ] E_{(x,y) ~ \gamma}[||x-y||] E(x,y) γ[∣∣xy∣∣],其中(x,y)采样自联合分布 γ \gamma γ。不同联合分布 γ \gamma γ由不同的期望,这些期望中的下确界即定义为分布p和q的Wasserstein距离,其中的inf{·}表示集合的下确界。

lipschitz条件:K对于在实数集的子集的函数f,若存在常数K,使得 ∣ f ( a ) − f ( b ) ∣ ≤ K ∣ a − b ∣ |f(a)-f(b)|\leq K|a-b| f(a)f(b)Kab, 则称f符合利普西茨条件,对于f最小的常数K称为f的利普西茨常数。若K<1,f称为收缩映射。

由于几乎不能遍历所有的联合分布去计算距离||x-y||的期望,所以直接计算W不可行,WGAN基于对偶性将上面计算距离转换为
W ( P r , P g ) = 1 K sup ⁡ ∣ ∣ f ∣ ∣ L ≤ K E x ∼ P r [ f ( x ) ] − E x ∼ P θ [ f ( x ) ] W(P_r,P_g)=\frac{1}{K}\sup_{||f||_L\leq K}E_{x\sim P_r}[f(x)]-E_{x\sim P_\theta}[f(x)] W(Pr,Pg)=K1∣∣fLKsupExPr[f(x)]ExPθ[f(x)]
于是在 D θ D_\theta Dθ满足1-Lipschiz约束的条件下,上述式子变为
W ( P r , P g ) = sup ⁡ ∣ ∣ D θ ∣ ∣ L ≤ 1 E x ∼ P r [ D θ ( x ) ] − E x ∼ P θ [ D θ ( x ) ] W(P_r,P_g)=\sup_{||D_\theta||_L\leq 1}E_{x\sim P_r}[D_\theta(x)]-E_{x\sim P_\theta}[D_\theta(x)] W(Pr,Pg)=∣∣DθL1supExPr[Dθ(x)]ExPθ[Dθ(x)]
所以求解W的问题转换为
max ⁡ E x ∼ P r [ D θ ( x ) ] − E x ∼ P θ [ D θ ( x ) ] \max{E_{x\sim P_r}[D_\theta(x)]-E_{x\sim P_\theta}[D_\theta(x)]} maxExPr[Dθ(x)]ExPθ[Dθ(x)]

optimization objective

判别器优化目标:
L o s s ( G , D ) = max ⁡ D E x r ∼ P r [ D ( x r ) ] − E x f ∼ P g [ D ( x f ) ] Loss(G,D)=\max_D{E_{x_r\sim P_r}[D(x_r)]-E_{x_f\sim P_g}[D(x_f)]} Loss(G,D)=DmaxExrPr[D(xr)]ExfPg[D(xf)]
解释:判别器是尽可能的判别真实样本的概率值越大越好,判别生成器生成的样本越小越好,所以对于判别器是最大化上述目标。

生成器优化目标:
L o s s ( G , D ) = min ⁡ G [ − E x f ∼ P g [ D ( x f ) ] ] 反卷积 Loss(G,D)=\min_G{[-E_{x_f\sim P_g}[D(x_f)]]}反卷积 Loss(G,D)=Gmin[ExfPg[D(xf)]]反卷积

反卷积:

  1. 反卷积的作用是将原始图像扩大

  2. 反卷积与产痛卷积区别不大,主要有:

    1. padding的对应关系变了,反卷积的padding参数 p ′ = k − 1 − p p'=k-1-p p=k1p,其中k是kernel_size,P为传统的padding值
    2. stride参数的含义不一样,在反卷积中stride表示在输入图像中间填充0(空洞卷积)
    3. 如果卷积和反卷积的参数一致,卷积会让AA尺寸变为BB尺寸,那么反卷积就会把BB尺寸变为AA尺寸

    参考资料 :反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释_iioSnail的博客-CSDN博客

代码参考:GitHub - KeepTryingTo/Pytorch-GAN: 使用Pytorch实现GAN 的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值