第二十周学习周报

目录

    • 摘要
    • abstract
    • Theory behind GAN
      • GAN训练目标
      • GAN训练技巧
    • 总结

摘要

本周的学习内容是GAN的基本理论,在训练GAN的时候,Generator的目标是希望生成的数据与真实的数据越相似越好,而Discriminator的目标是尽量将生成的数据与真实的数据区分开来。两者之间这种棋逢对手的关系,导致GAN成为一个很难训练的模型,为了优化GAN的训练,也诞生了WGAN、Conditional GAN、CylceGAN等方法。

abstract

This week’s learning content is the basic theory of GAN. When training GAN, the goal of the generator is to hope that the generated data is as similar as real data as possible, while the goal of the discriminator is to try to distinguish the generated data from real data as much as possible. The competitive relationship between the two has made GAN a difficult model to train. In order to optimize GAN training, methods such as WGAN, Conditional GAN, and CylceGAN have also emerged.

Theory behind GAN

GAN训练目标

上一周学习了GAN的训练,那么训练的目标是什么呢?
将Distribution中sample出来的向量丢到generator里面,会产生一个比较复杂的Distribution PG,而真正的data也形成了一个Distribution Pdata,我们希望 PG和Pdata越接近越好。
假设输入输出都是一维的向量,从一维的角度来看,输入的Distribution通过一个generator之后得到的Distribution中点的位置会发生一系列的变化,而Pdata是真正的数据分布,显然与 PG是存在一定差异的。
在这里插入图片描述
Divergence
Div( PG,Pdata)即Divergence,是衡量两个Distribution相似度的一个major,当Divergence的值越大就代表这两个Distribution越不像。Divergence的值越小就代表这两个Distribution越相近。

与普通的神经网络的训练一样,定义Loss Function,找到一组参数使得Loss的值最小。那么在Generation的训练要做的事情就是找一组Generator里面的参数(Generator是一个Network,里面也有大量的weight和bias),使得通过在这组参数下的Generator G*得到的PG与c越小越好。因此在Generation问题中我们的Loss Function就是Div( PG,Pdata)。
在这里插入图片描述
在做Generation的训练的时候,我们所遇到的问题就是不知道如何躯计算这个Divergence,而GAN可以解决不会计算Divergence的限制。
在这里插入图片描述
对于GAN来说,不需要知道 PG和Pdata的分布,只要知道怎么从 PG和Pdata中sample东西出来,就可以算出Divergence,而 PG和Pdata是可以sample的。对于真实的数据Pdata从图片库里sample一些出来就可以得到了,而 PG的sample是可以通过Generaator产生得到的。
GAN中鉴别器的目标
通过sample就可以计算Divergence,这就需要依靠Discriminator的力量了,Discriminator 就是要尽量把从PG里sample的数据与从Pdata里sample的数据分开,这其实也可以用 Binary Classifier 做,把Pdata的sample 当作 class 1, 把 PG的sample当作class 2,如下图所示。设计 Classifier 的目标函数 V(G,D)
根据从 PG和Pdata中sample出来的data训练一个Discriminator,训练的目标就是看到real data就给它高分,看到generation data就给低分,也就是要分辨一个图片是真的图还是生成的图。
在这里插入图片描述
其实Discriminator的问题可以当作是一个Optimization的问题
训练出来的Discriminator可以去maximize Objective Function,(minimize的就叫Loss Function),因此要找一个D可以Maximize这个Objective Function。
如下图所示。设计 Classifier 的目标函数 V(G,D)
log D(y): Pdata的sample 经过 Discriminator 得到的分数
log (1-D(y)): PG的sample 经过 Discriminator 得到的分数
我们希望可以找到一个D使得 V(G,D)越大越好,也就是说希望log D(y)的值越大越好,代表给真正的Image打分越高越好。经过推导可以发现V(G,D)的最大值与 JS divergence 有关。
在这里插入图片描述
下面通过例子从直观上来理解为什么Objective Function的最大值是和Divergence有关的,当 PG和Pdata两组sample出来的数据之间的divergence很小的时候,Discriminator 很难分辨两者,因此打的分数不准确,则maxV(G,D)的值小。反之当divergence很大的时候,Discriminator 很容易分辨两者,因此打的分数比较准确,则maxV(G,D)的值大。
在这里插入图片描述
训练Discriminator的目标就是分辨出真正的Image和生成的Image,即使V(G,D)的值达到最大,而Generator的目标就是让生成的图片瞒过Discriminator,因此它的目标是让V(G,D)的值越小越好,因此G*等式右边既有min又有max。
在这里插入图片描述

GAN训练技巧

为什么JS divergence不适合?
PG和Pdata有一个关键特性就是重叠部分非常少,有两个方面的原因。

从数据本身特性来说,PG和Pdata都是要产生图片,而图片就是在高维空间中一条低维的流行,以二维空间为例,那么图片的分布就是一条直线,因此重叠几乎可以忽略。
在计算Divergence的时候是不看PG和Pdata的分布,而是通过sample出来的图片计算,因此就算PG和Pdata有重叠的部分,如果sample的点不够多,Discriminator也很难发现有重叠,可能刚好就画了一条线将两者分布区分开来。
在这里插入图片描述
JS divergence有一个特性就是两个分布没有重叠,那么算出来的divergence永远都是log2,这导致 Generator 无法知道训练是否带来结果的提升,训练学不到东西。
在这里插入图片描述
WGAN
除了 JS divergence,还可以使用其它的 divergence,即设置discriminator不一样的目标函数。而GAN 是出了名的不好训练。下面介绍知名的一个最有名的训练技巧:WGAN。

Wasserstein distance
Wasserstein distance就是将P推着移动到Q的平均距离,也就是图中的d

移动的方法有很多种,但不同的方法移动距离不同,因此为了让Wasserstein distance的值唯一,它的定义就是穷尽所有的”moving plans“,看看哪种方法的平均距离最小,这个最小的值就是Wasserstein distance。
在这里插入图片描述
从JS divergence换到Wasserstein distance的好处:

假设可以计算Wasserstein distance的值,当使用Wasserstein distance来衡量divergence的时候,从PG移动到的距离Pdata d是很遥远的,想要”一步到位“是很难的,对于JS divergence而言,只有”一步到位“它的loss才会有差异,但是对于Wasserstein distance而言,需要步步递进,每次移动一点Wasserstein distance就会有变化,Wasserstein distance变化就可以训练Generator,去Minimize W distance。
用Wasserstein distance代替JS divergence的GAN 就叫做WGAN
Wasserstein distance的计算公式如下:
在这里插入图片描述
在WGAN中,对判别器D做出了限制,D必须满足1-lipschitz的条件,也可以理解为D必须是一个足够平滑的Function。

当PG和Pdata没有重叠的时候,但两者相距很近的时候,要在Pdata上得分很高,就会取到正无穷,在PG取得分低就会到负无穷,那这个function的变化就会很大,D的训练就没办法收敛,因此在两组数据没有重叠的情况下,算出来的max值就会无限大。
在这里插入图片描述
加上这个限制就可以解决无限大的问题的原因:
这个限制是要求Discriminator不可以变化剧烈要平滑, 因此在两组数据挨得很近的时候,在平滑的限制下,real上的值不会非常大,generated上的值也不会特别小,因此计算得到的值就会比较小,这样的值才是Wasserstein distance。
WGAN中让判别器满足1-lipschitz的条件的方法其实相对较为简单,训练network的时候,更新参数后将权重w限制在c到-c之间,如下图所示:
在这里插入图片描述
在Imprived WGAN中提到了Gradient Penalty的方法,在real data的分布与fake data的分布中各取sample,然后在两袋奶现在也有很多其他1-lipschitz的方法比谱归一化Spectral Normalization就是很好的例子,其有效的让梯度在各个地方都小于1防止梯度消失。
在这里插入图片描述
虽然已经有了WGAN,并不意味着GAN就很好训练了,依旧很难训练。因为Generaator与Discriminator两个network是棋逢对手的关系,需要共同成长,一旦一个停止进步了,另一个也跟着再进步了。
在这里插入图片描述
如上图所示。在实际训练中,无法保证每一次 Discriminator 的 loss 都会下降,一旦 loss 不下降,Discriminator停止训练,那么Generator也随着不再训练,就会出现连锁反应,整个结构都不再改进。

总结

本周的学习使我对GAN的理论有了进一步的了解,为后续研究和应用打下了一定的基础。GAN的训练过程涉及两个阶段的交替进行:判别器训练和生成器训练。生成器的目标是产生尽可能接近真实数据的假样本,而判别器的目标是区分真实样本和生成器产生的假样本。在后续的学习中我将继续学习GAN的相关内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年CRM系统对比:国内外十大CRM热门选择

在数字化转型的大潮中,CRM系统是企业提升客户关系管理、优化销售流程的重要工具。本文将从系统功能、优势、劣势、总体评价四个方面,对2024年国内外十大热门CRM系统进行全方位对比,帮助企业找到最适合的CRM解决方案。 1.纷享销客CRM 系统功…

VideoChat:开源的数字人实时对话系统,支持自定义数字人的形象和音色

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号&#xff…

[CKS] TLS Secrets创建与挂载

目前的所有题目为2024年10月后更新的最新题库,考试的k8s版本为1.31.1 BackGround 您必须使用存储在TLS Secret中的SSL文件,来保护Web 服务器的安全访问。 Task 在clever-cactus namespace中为名为clever-cactus的现有Deployment创建名为clever-cactu…

使用 wxPython 开发 Python 桌面应用程序的完整教程

使用 wxPython 开发 Python 桌面应用程序的完整教程 引言 在当今的软件开发领域,桌面应用程序仍然占据着重要的位置。Python 作为一种灵活且易于学习的编程语言,结合 wxPython 库,可以快速构建跨平台的桌面应用程序。本文将深入探讨 wxPyth…

自动驾驶系列—自动驾驶环境感知:Radar数据的应用与实践

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

DimensionX:从单张图片生成高度逼真的 3D 和 4D 场景

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号&#xff…

蓝桥杯备考——算法

一、排序 冒泡排序、选择排序、插入排序、 快速排序、归并排序、桶排序 二、枚举 三、二分查找与二分答案 四、搜索(DFS) DFS(DFS基础、回溯、剪枝、记忆化) 1.DFS算法(深度优先搜索算法) 深度优先搜…

【网络面试篇】其他面试题——Cookie、Session、DNS、CDN、SSL/TLS、加密概念

目录 一、HTTP 相关问题 1. Cookie 和 Session 是什么? (1)Cookie (2)Session 2. Cookie 的工作原理? 3. Session 的工作原理? 4. Cookie 和 Session 有什么区别? 二、其他问…

隧道论文阅读2-采用无人融合扫描数据的基于深度学习的垂直型隧道三维数字损伤图

目前存在的问题: 需要开发新的无人测量系统测量垂直隧道图像数据量巨大,基于深度学习完成损伤评估跟踪获取图像位置的困难,对大型基础设施感兴趣区域(roi)的2d和3d地图建立进行了研究,对整个目标结构的损伤定位仍然具有挑战性。为…

CCF-A类 HPCA 2025 重磅揭晓:录取数据公布

近日,第31届国际计算机体系结构领域顶级会议HPCA (International Symposium on High Performance Computer Architecture) 正式发布了2025年会议的录用通知!本届会议共收到了534 篇提交论文,其中,112篇论文被接收,整体…

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间,而我们选择于 C 的类内包装原生线程库的形式来创建,其具体实行逻辑如图 可以看到,整个线程池其实就是一个大型的 CP 模型,接下来我们来完成它 2. 整体模板 #pragma …

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下,当安装IDM软件后,该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上,但在某些情况下,需要我们手动安装,以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…

docker 拉取MySQL8.0镜像以及安装

目录 一、docker安装MySQL镜像 搜索images 拉取MySQL镜像 二、数据挂载 在/root/mysql/conf中创建 *.cnf 文件 创建容器,将数据,日志,配置文件映射到本机 检查MySQL是否启动成功: 三、DBeaver数据库连接 问题一、Public Key Retrieval is not allowed 问题…

深入探索Waymo自动驾驶技术发展:从DARPA挑战赛到第五代系统的突破

引言 自动驾驶技术正引领着未来出行方式的革命,而Waymo作为全球自动驾驶领域的先锋,始终走在技术发展的最前沿。本文基于Waymo联席CEO德米特里多尔戈夫(Dmitri Dolgov)在No Priors节目中的访谈,全面介绍Waymo的技术发展…

鸿蒙移动应用开发-------初始arkts

一. 什么是arkts ArkTS是HarmonyOS优选的主力应用开发语言。 ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和…

c++ 输入三条边 绘制三角形

安装图形库 参考 #include "graphics.h" // 就是需要引用这个图形库 #include <conio.h> #include <stdio.h> #include <math.h>// 判断是否可以构成三角形 int isTriangle(int a, int b, int c) {return (a b > c) && (a c >…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

Logrus入门

Logrus入门 1. 下载 go get github.com/sirupsen/logrus2. logrus常用方法 logrus.Debugln("Debugln") logrus.Infoln("Infoln") logrus.Warnln("Warnln") logrus.Errorln("Errorln") logrus.Println("Println")// 输出如…

pyspark入门基础详细讲解

1.前言介绍 学习目标&#xff1a;了解什么是Speak、PySpark&#xff0c;了解为什么学习PySpark&#xff0c;了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码&#xff0c;既可以在电脑上简单运行&#xff0c;进行数据分析处理&#xff0c;又可以把代码无缝…

权限管理练习2

1.在/home中创建一个名为 file1.txt 的文件&#xff0c;并设置权限为&#xff1a;所有者和组成员可以读写&#xff0c;但其他人只能读。 所有者和组成员可以读写 u rw- g rw- o r-- 2.在 /home 目录下创建一个名为 shared 的子目录&#xff0c;使得所有用户都可以进入&#…