阅读笔记-Least-Squares-Generative-Adversarial-Networks-ICCV-2016.11.07-paper.docVIP

阅读笔记-Least-Squares-Generative-Adversarial-Networks-ICCV-2016.11.07-paper.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Least Squares Generative Adversarial Networks 1.这篇文章主要介绍了什么 在这篇文章中,讲述了LSGAN,它用L2修改了原来的GAN损失而不是日志丢失。L 2的直觉损失可以帮助GAN学习数据的多样性。也看到了为什么GAN不能有效利用log损失的直觉。最后,本文在Pytorch中实现了LSGAN。发现LSGAN的实现比较简单。 2.这篇文章提出算法的过程 与basic GAN 唯一不同在判别器的最后输出不使用 sigmoid 激活,而是使用了线性函数(也即不使用激活)。不同于basic GAN, LSGAN的训练损失函数由交叉熵改为MSE(Mean Squared Error)。LSGAN的主要思想是使用在鉴别器D中提供平滑和非饱和梯度的损失函数。本文要D来“拉”由G产生的数据朝着实际数据流形Pdata(X),所以G生成与Pdata(X)相似的数据。 正如我们所知道的原始GAN,d使用日志丢失。决策边界是这样的: 作为D.使用sigmoid函数,因为它很快饱和,即使是有点小的数据点x也是如此,它会很快忽略x的距离到决策边界w。这意味着它基本上不会惩罚x那离w很远在歧管中。也就是说,只要x是正确的标签,我们很高兴。因此,作为x越来越大,D的梯度迅速下降到0因为日志丢失不在乎距离,只有标志。 为了学习Pdata(X )的流形。G使用D的梯度进行训练。如果D的梯度正饱和到0,那么G将不具有用于学习的必要信息Pdata(X )。 输入L2失利: 在L2损失中,离w很远的数据(在这种情况下,Pdata(X ))将受到与距离成正比的惩罚。因此,渐变只会变成0当w完美捕捉所有的x。这将保证D如果G产生信息梯度还没有捕捉到数据的多样性。 在优化过程中,L2的唯一途径D的损失小G就是做G生成x那样接近w。这样,G实际上将学会匹配Pdata(X )。 LSGAN的整体培训目标可以表述如下: 以上,作者选择b=1说明这是真实的数据。相反,选择a=0因为它是假的数据。但是,这些值并不是唯一有效的值。最终的损失如下: 文章所做的实验结果 下图是训练过程中,由生成器采样的几张示例图片。 在Pytorch中执行LSGAN,概述LSGAN对原始GAN所做的修改: 1.从D删除日志 2.使用L2损失而不是日志丢失 G = torch.nn.Sequential( torch.nn.Linear(z_dim, h_dim), torch.nn.ReLU(), torch.nn.Linear(h_dim, X_dim), torch.nn.Sigmoid() ) D = torch.nn.Sequential( torch.nn.Linear(X_dim, h_dim), torch.nn.ReLU(), # No sigmoid torch.nn.Linear(h_dim, 1), ) G_solver = optim.Adam(G.parameters(), lr=lr) D_solver = optim.Adam(D.parameters(), lr=lr) for it in range(1000000): # Sample data z = Variable(torch.randn(mb_size, z_dim)) X, _ = mnist.train.next_batch(mb_size) X = Variable(torch.from_numpy(X)) # Dicriminator G_sample = G(z) D_real = D(X) D_fake = D(G_sample) # Discriminator loss D_loss = 0.5 * (torch.mean((D_real - 1)**2) + torch.mean(D_fake**2)) D_loss.backward() D_solver.step() reset_grad() # Generator G_sample = G(z) D_fake = D(G_sample) # Generator loss G_loss = 0.5 * torch.mean((D_fake - 1)**2) G_loss.backward() G_solver.step() reset_grad() 1

文档评论(0)

moon8888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档