GAN系列文献笔记

                                                                                                             GAN(生成对抗网络)   

参考文献:[1] Goodfellow Ian, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]//Advances in Neural Information Processing Systems. 2014: 2672-2680. 

文献中的代码链接:http://www.github.com/goodfeli/adversarial

                生成对抗网络从模型区分来看是属于生成模型,其实我们对于生成模型并不陌生,最典型的就是DBN,基于受限玻尔兹曼及叠加而成,其应用到马尔科夫链和MCMC的思想来生成与原始输入数据近似的分布模型。与生成模型对应的就是判别模型。这里对这两个模型先做一个简单的介绍:

生成模型的一般步骤:样本足够多——概率密度模型——产生与样本数据类似分布的模型——作预测;

   判别模型的一般步骤:有限样本——长生判别函数—— 预测模型——作预测。

          其实无监督生成模型就是通过学习真实数据的本质特征,从而描述出样本数据的分布特征,生成与训练样本数据类似的数据。这里主要讲GAN框架,在深度学习领域,大牛们都极力看好这种生成模型,具有里程碑的意义。这一段时间也在阅读相关文献和资料,浅显地谈一谈自己的认识。希望与大家交流,相互促进学习。

其中GAN的原始框架: 

        GAN的模型框架都使用了多层感知器,但最主要的是该生成模型舍弃了马尔科夫链的生成方法,只用到了前向传播算法和BP算法。我觉得该模型令人印象深刻以及给人启发的是其网络的训练的方法。从上面的模型框架可以看出,不同于以往的模型训练方法,它涉及到两个模型,生成式模型和判别式模型;这两种模型组成博弈双方,前者主要是为了捕获训练样本的分布,并通过所捕获的分布Pg来产生数据以达到让后者误认为是来自真实样本的数据。当然最终期望的结果是Pg=Px(样本的真实分布。这好比一个书法临摹高手企图让自己临摹的作品瞒过书法鉴别专家的眼睛。其在训练的过程,分布如下:

 

黑点表示样本真实分布,即Px;绿线表示生成模型通过噪声Z产生赝品(姑且叫赝品,我们还是支持打假的)的分布;蓝色线表示文献中所说的D*(x),当其等于1/2时,认为达到了博弈论中的纳什均衡。即目标函数为:

 

 

        纳什均衡:  纳什均衡的核心要素在于,我们做出决策的时候总是要基于他人的决策,把他的决策看成一个常数,选择策略最大化自己的收益。当每一个人都这么做的时候,纳什均衡就产生了。判断纳什均衡的标准是,给定其他人的最优策略,如果每一个参与者都没有意愿改变自己的策略,那种这些策略组合就是纳什均衡。

接下来,讨论一下训练所涉及到的算法:小批量随机梯度下降法;其实这种训练方法的思想是比较常见的,比如在基于DBN的MNIST手写体识别中也应用到这种训练策略。这里训练的关键点是选取K值,如何协调生成器与识别器的更新次数,因为文献中提到可能引起网络训练崩溃。通过参数更新慢慢改变生成器生成数据的分布,最终期望达到与真实样本分布重合。

 

文献中还涉及到相对熵和Jenen Shanno散度来作为Pg向Px逼近程度的衡量标准。中间还是由很多具体问题自己也不是很理解,后面的学习中再慢慢加深认识。希望对大家理解有点帮助,自己也留一个学习笔记。

 

### 基于 GAN 的图像风格迁移 #### CycleGAN 和 Pix2Pix 概述 CycleGAN 支持非成对图像之间的风格迁移,这解决了现实世界中获取大量配对训练样本困难的问题[^3]。相比之下,Pix2Pix 使用的是成对的数据集来进行监督学习,这意味着对于每一张源域中的图片,在目标域中有对应的匹配图片[^2]。 #### 实现方法 为了实现基于 GAN 的图像风格迁移,通常采用以下几种方式: - **对抗损失**:这是核心部分,通过两个网络(生成器G和判别器D)相互博弈来优化模型性能。 - **循环一致性损失 (仅适用于 CycleGAN)** :引入额外的约束条件以保持转换前后的内容相似度,从而提高迁移效果的质量。具体来说就是让 A -> B 转换后再转回A' 应该尽可能接近原始图A[^1]。 #### 论文推荐 关于这一主题的重要文献包括但不限于《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》这篇介绍 CycleGAN 的开创性工作以及《Image-to-Image Translation with Conditional Adversarial Networks》,后者提出了经典的 Pix2Pix 方法。 #### 教程资源链接 可以参考如下教程深入了解并实践这些算法: - 对于想要快速上手的人来说,《【毕设】基于CycleGAN的风格迁移【一】环境搭建及运行代码 【深度学习】CycleGAN开源项目学习笔记 | 完整流程 | 报错总结 | pytorch》提供了详细的安装指南与常见错误解决方案; - 如果更倾向于理论分析,则可以从官方 GitHub 页面找到更多文档和支持材料[^4]; #### 代码实例 以下是简单的 PyTorch 版本 CycleGAN 中定义生成器的部分代码片段作为例子: ```python import torch.nn as nn class Generator(nn.Module): def __init__(self, input_nc=3, output_nc=3, ngf=64, norm_layer=nn.BatchNorm2d, use_dropout=False, n_blocks=9): super(Generator, self).__init__() model = [nn.ReflectionPad2d(3), nn.Conv2d(input_nc, ngf, kernel_size=7, padding=0, bias=True), norm_layer(ngf), nn.ReLU(True)] # 下采样层... for i in range(n_downsampling): # add downsampling layers mult = 2 ** i model += [nn.Conv2d(ngf * mult, ngf * mult * 2, kernel_size=3, stride=2, padding=1, bias=True), norm_layer(ngf * mult * 2), nn.ReLU(True)] # ResNet 层... # 上采样层... for i in range(n_downsampling): # add upsampling layers mult = 2**(n_downsampling - i) model += [nn.ConvTranspose2d(ngf * mult, int(ngf * mult / 2), kernel_size=3, stride=2, padding=1, output_padding=1, bias=True), norm_layer(int(ngf * mult / 2)), nn.ReLU(True)] model += [nn.ReflectionPad2d(3)] model += [nn.Conv2d(ngf, output_nc, kernel_size=7, padding=0)] model += [nn.Tanh()] self.model = nn.Sequential(*model) def forward(self, x): """Standard forward""" return self.model(x) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值