【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

部署运行你感兴趣的模型镜像

 

大家好,今天小米粥在有三AI开设新专栏《GAN的优化》。在这个专栏中,我们会讲述GAN的相关背景、基本原理、优化等相关理论,尤其是侧重于GAN目标函数的优化。小米粥和有三将带领大家从零学起,深入探究GAN的点点滴滴。

本专栏将比较着重于理论,每周更新一次,欢迎大家和我一起学习。本人才学疏浅,有诸多不到之处还请各位包涵指正。

 

作者 | 小米粥

编辑 | 言有三

今天是第一期,在正式进入GAN之前,我们有必要先介绍一些GAN的背景知识,理一理各种生成模型的那些千丝万缕的联系,然后深入到GAN中去。

1 生成模型

在机器学习或者深度学习领域,生成模型具有非常广泛的应用,它可以用于测试模型的高维概率分布的表达能力,可以用于强化学习、半监督学习,可以用于处理多模输出问题,以及最常见的产生“真实”数据问题。

我们有必要先说明一个问题,本专栏所讲述的GAN包括的VAE、玻尔兹曼机等其他生成模型均属于无监督学习的范畴,这与李航老师的《统计学习方法(第一版)》里的有监督学习生成方法有所区别。简单而言,有监督学习与无监督学习的区别之处在于是否存在标签信息。


在有监督学习生成方法中,我们学得联合概率分布P(X,Y),然后求出生成模型P(Y|X),其重点在于学习联合分布。例如,在朴素贝叶斯方法中,我们通过数据集学习到先验概率分布P(Y)和条件概率分布P(X|Y),即可得到联合概率分布P(X,Y);在隐马尔可夫模型中,我们通过数据集学习到初始概率分布、状态转移概率矩阵和观测概率矩阵,即得到了一个可以表示状态序列和观测序列的联合分布的马尔可夫模型。而在GAN、VAE等无监督生成模型中,只存在关于X的数据集,我们的目标是近似得到P(X)的概率密度函数,或者直接产生符合X本质分布的样本。

2 极大似然估计

我们从最简单的生成模型开始说起。考虑这样一个问题,依概率P(X)在X中独立采样n次构建一个包含n样本的数据集,如何根据这个数据集来求得X的概率密度函数P(X)。其实这个问题并不容易解决,可是如果再额外提供一些关于X的先验知识,比如X服从正态分布,那这个问题便可以使用极大似然法轻松搞定。

如若X服从正态分布,则概率密度函数P(X)的表达式形式已知,只需要再确定均值、方差两个参数值便可以得到P(X)。接下来便是计算数据集的似然函数,对似然函数取负对数,然后最小化即可,即

640?wx_fmt=jpeg

其实,对随机变量X的概率密度函数的建模源于先验知识,极大似然估计只是一个参数估计的方法。容易证明,极大似然法本质上是在最小化数据集的经验性分布和模型分布之间的KL散度,而且当具备某些条件时,参数的极大似然估计值会趋近于真实值。

3 显式的概率密度函数

当不知道X的概率密度函数P(X)的表达形式,或者该表达式极其复杂的时候,我们如何对P(X)建模?这时,借用神经网络强大的函数拟合能力、表达能力,我们可以用来拟合相关函数来显式地构造P(X)。

例如在自回归网络中,我们将d维随机变量X的联合概率分布通过链式法则进行分解,

640?wx_fmt=jpeg

其中的条件概率分布由神经网络进行表示。

640?wx_fmt=jpeg

图3.1 神经自回归网络

另一类是以深度信念网络、深度玻尔兹曼机以及各种变体为代表的通过加入隐变量来建模P(X)的方法。它们的结构分为可见层和隐层,可见层用于接受输入,隐层单元用于特征表示。隐变量类似于多层感知器中的隐藏单元,用来模拟可见层的高阶交互,可提高网络的表达、拟合能力。训练目标均是使可见层节点的分布最大可能接近样本的真实分布。其区别之处在于深度玻尔兹曼机是一个完全无向模型,而深度信念网络的是有向图和无向图的混合模型,是受限玻尔兹曼机的堆叠。

640?wx_fmt=jpeg

图3.2 深度信念网络

640?wx_fmt=jpeg

图3.3 深度玻尔兹曼机

以深度玻尔兹曼机为例,使用能量函数定义联合概率分布,其中Z为朴素的归一化配分函数。

640?wx_fmt=png

我们仍然可以使用极大似然法进行训练,但是需要解决两个困难的计算问题,一个是边缘化隐变量时的推断问题,一个是配分函数的梯度求解问题。

再一种是基于可微生成器网络,使用可微函数g(z)将隐变量z的样本变换为样本x上的分布。其典型代表便是VAE,其将x显式建模为

640?wx_fmt=gif

VAE中也需要使用变分法近似最大似然函数。

无论如何显式地定义概率密度函数P(X),其基本思路都是极大化样本集的似然函数,最终求解出P(X)中的参数,某些模型需要加一个边缘化隐变量的操作。在自回归网络中,计算难度不算太大,但是在深度玻耳兹曼机、深度信念网络中涉及到图模型和隐变量时,不可避免要使用马尔可夫链近似、变分推断等技术。

4 GAN

再思考一个问题,依概率P(X)在X中独立采样n次构建一个包含n样本的数据集,如何根据这个数据集来训练一个模型,使得模型能源源不断产生符合X概率分布的样本?

如若只是产生样本,生成模型不必非要去显式定义概率密度函数,然后近似求解P(X),就比如在深度玻尔兹曼机中,不仅训练时运算复杂,采样产生样本时还需要Gibbs采样技术。

还是在可微生成器网络中,不同于VAE,我们使用可微函数g(z)将潜变量z变化为样本x,全程没有任何显式地出现过概率密度函数,直接做一个end-to-end的模型。g(z)的本质是一个参数化计算过程,它能很好地学习到z排布情况以及从z到x的映射。我们所做的就是根据训练数据来推断参数,然后选择合适的g,其代表便是GAN。

GAN(对抗生成网络)是一种深度生成模型,由Gooldfellow于2014年首次提出,现已发展成时下最火热的模型之一。其设计灵感来自于博弈论,一般由生成器和判别器两个神经网络构成,通过对抗方式进行训练,最后得到一个性能优异的生成器。

640?wx_fmt=jpeg

图4.1 GAN结构

GAN的核心任务是:使生成器G产生的样本的概率分布尽量接近训练集的概率分布。判别器D的功能类似于逻辑回归,对于一个样本x,判别器D(x)将给出该样本来源于训练集的概率,所以一个“完美”的判别器应该对来自于训练集的样本输出概率1,对来自于生成器的生成样本输出概率0;对于生成器G,它试图捕捉到训练集的本质模式,生成样本并将样本送至判别器D,最好能使该样本“欺骗”判别器,使判别器误认为该样本来源于训练集而输出概率1。通过这个对抗生成过程,GAN没有显式地建模P(x),也可以得到满足P(x)分布的样本。

4.1 判别器

训练判别器,就是在做类似于有监督学习中的逻辑回归的问题。用于训练的样本包括两部分,原始训练集(其标签为1)、生成样本集(其标签为0),还是使用极大似然方法便可以得到其目标函数。

640?wx_fmt=jpeg

图4.2 判别器

接下来,我们看下最优判别器。我们训练判别器,理论上存在一个最优解,我们来求解一下这个解。

640?wx_fmt=gif

理想状态下的最优判别器的数学表达式还是非常“简单而务实”的,也非常符合我们的直觉。

4.2 生成器

论文最开始提出的生成器是全连接网络,它不断优化,使产生的样本尽量欺骗判别器(即使判别器输出值尽量大)。

640?wx_fmt=jpeg

图4.3 生成器

我们来看一下,生成器的目标函数到底是什么。将最优判别器代入,可有

640?wx_fmt=gif

其实真正在指导生成器进行训练的是隐式定义的分布和数据集真实分布的JS散度。当两个分布完全重合时,生成器的目标函数值达到最小-lg4,且此时的判别器也为最优,对任意输入,均给出D(x)=0.5。理论上可证明,只要有足够的精度,模型一定能收敛到最优解。

另外,在训练生成器时,可使用另一个目标函数trick,我们来看看这个目标函数的本质。

640?wx_fmt=gif

单纯从数学的角度来看,这个目标函数是自相矛盾的,最大JS散度的同时减少KL散度,这样的训练可以认为是没有什么意义的。

5 作者介绍

小米粥,本科就读于吉林大学物理学院、经济学院,现为中科院二年级直博生,主要研究方向为机器学习、GAN。

总结

今天向大家讲了讲一部分关于的生成模型的内容,从极大似然法到显式的定义概率密度函数到隐式定义概率密度函数的GAN。在GAN中,我们介绍了基本结构,推导了几个基本结论,内容比较简单。

下期预告:度量与fGAN

微信群推荐

640?wx_fmt=jpeg

欢迎大家加入有三AI GAN交流群,限前100人免费噢,超过100人需添加有三微信Longlongtogo。


另外有三AI夏季划出炉了,助你成长为中级CV算法工程师,感兴趣可以了解:

640?wx_fmt=png

转载文章请后台联系

侵权必究

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

往期精选

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

CycleGAN的主要思想是训练四个网络并形成一个循环,输入一幅图像生成另一个风格图像,再让生成图像生成回原来的图像风格,训练的四个网络包括两个生成器和两个判别器[^3]。其应用场景包括风格迁移,如在风格迁移相关专栏中有涉及CycleGAN的原理及魔改内容,还适用于超分辨率重建任务中的风格迁移场景,实例归一化低应用于CycleGAN时风格迁移效果好,但依赖足够数据多样性,同时在解剖结构约束严格、语义一致性要求高的挑战场景中,可采用CycleGAN加解剖学损失的解决方案[^1][^3][^4][^5]。 WGAN - GP是在WGAN基础上改进的算法,在梯度惩罚方面,它的计算开销高,无需调整超参数,但训练速度较慢,在损失函数优化中无需修改网络结构,但需要精心设计损失权重,适用于WGAN - GP模型[^4]。 两者的区别在于原理上,CycleGAN侧重于形成循环的图像风格转换,而WGAN - GP主要是在WGAN基础上引入梯度惩罚来解决训练问题;应用方面,CycleGAN多用于风格迁移和特定挑战场景修复,WGAN - GP主要用于解决GAN训练中的一些问题;在计算开销和特点上,CycleGAN在实例归一化时计算开销低,风格迁移效果好但依赖数据多样性,WGAN - GP计算开销高,训练速度慢但无需调整超参数[^3][^4]。 ```python # 这里只是示意CycleGAN和WGAN - GP可能涉及的代码片段 # 假设这是CycleGAN的一个简单示意 # 定义生成器和判别器网络结构(此处仅为示例) class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() # 网络层定义 pass def forward(self, x): # 前向传播 return x class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() # 网络层定义 pass def forward(self, x): # 前向传播 return x # 假设这是WGAN - GP的梯度惩罚计算示意 def gradient_penalty(D, real_data, fake_data): alpha = torch.rand(real_data.size(0), 1, 1, 1) alpha = alpha.expand(real_data.size()) alpha = alpha.to(real_data.device) interpolates = alpha * real_data + ((1 - alpha) * fake_data) interpolates = interpolates.requires_grad_(True) disc_interpolates = D(interpolates) gradients = autograd.grad( outputs=disc_interpolates, inputs=interpolates, grad_outputs=torch.ones(disc_interpolates.size()).to(real_data.device), create_graph=True, retain_graph=True, only_inputs=True )[0] gradients = gradients.view(gradients.size(0), -1) gradient_penalty = ((gradients.norm(2, dim=1) - 1) ** 2).mean() return gradient_penalty ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值