IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> GAN的理论知识及公式的理解 -> 正文阅读

[人工智能]GAN的理论知识及公式的理解

对于GAN的理解

借用参考资料[1]中对于GAN的描述:
假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,一批「学艺不精」的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。
在这里插入图片描述
警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。
在这里插入图片描述
为了避免被捕,小偷们努力表现得不那么「可疑」,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种「交流」与「切磋」,小偷们都变得非常谨慎,他们有着极高的偷窃技巧,表现得跟普通群众一模一样,而警察们都练就了「火眼金睛」,一旦发现可疑人员,就能马上发现并及时控制——最终,我们同时得到了最强的小偷和最强的警察。
同时得到了最强的小偷和最强的警察
由此,可以引出生成对抗网络(GAN)的结构了,由2个重要的部分构成:

  • 生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器
  • 判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”

GAN的公式理解


整体公式:

其中,x表示真实的图片,z表示网络中输入的噪声,G(z)表示G网络生成的图片,D(*)表示D网络判断图片是否真实的概率。


前半部分:
对于判别器D,我们希望它可以正确地识别真实数据,这便是GAN公式的前半部分:

其中,对数函数log可以用来放大损失,因为概率越接近于0,则通过log之后产生的值越大

其中, E x ? p d a t a E_{x-pdata} Ex?pdata? 表示期望x从 P d a t a P_{data} Pdata? 中获取。x表示真实的数据, P d a t a P_{data} Pdata? 表示真实的数据分布。

所以,公式的前半部分,即的含义是:判别器判别出真实数据的概率。我们的优化目标是希望这个概率越大越好。也就是说,对于服从 P d a t a P_{data} Pdata? 分布的图片x,判别器应该给出预测结果 D ( x ) = 1 D(x)=1 D(x)=1


后半部分:

其中, E z ? p z ( z ) E_{z-p_z(z)} Ez?pz?(z)? 表示期望z是从 P z ( Z ) P_z(Z) Pz?(Z) 中获取。z表示随机的噪声, P z ( Z ) P_z(Z) Pz?(Z) 表示生成随机噪声的分布。

  • 对于判别器D来说,如果输入的是生成的数据,即 D ( G ( z ) ) D(G(z)) D(G(z)) ,判别器的目标是最小化 D ( G ( z ) ) D(G(z)) D(G(z)) ,希望它被判定为0,也就是希望 l o g ( 1 ? D ( G ( z ) ) ) log(1 - D(G(z))) log(1?D(G(z))) 越大越好。
  • 而对于生成器来说,它希望生成的数据被判别器识别为真,判别器的目标是最大化 D ( G ( z ) ) D(G(z)) D(G(z)) ,希望它被判定为1,也就是希望 l o g ( 1 ? D ( G ( z ) ) ) log(1 - D(G(z))) log(1?D(G(z))) 越小越好。

由此可以看出,判别器D和生成器G对 l o g ( 1 ? D ( G ( z ) ) ) log(1 - D(G(z))) log(1?D(G(z))) 的优化目标是相反的,这就体现在公式中的:

总结起来就是:
对于判别器来说,训练目标是最大化 l o g D ( x ) logD(x) logD(x) l o g ( 1 ? D ( G ( z ) ) ) log(1 - D(G(z))) log(1?D(G(z))) ,从而达到最大化 V ( D , G ) V(D, G) V(D,G)的目标。
对于生成器来说,训练目标是最小化 l o g ( 1 ? D ( G ( z ) ) ) log(1 - D(G(z))) log(1?D(G(z))) ,从而达到最小化 V ( D , G ) V(D, G) V(D,G)的目标。

因此,公式表示:
从判别器D的角度,希望最大化 V ( D , G ) V(D, G) V(D,G)
从生成器G的角度,希望最小化 V ( D , G ) V(D, G) V(D,G)
*


代码实现

基于本文的Pytorch版本的代码实现见下一篇博客:
Pytorch搭建基本的GAN模型及训练过程

参考资料

[1] https://easyai.tech/ai-definition/gan/
[2] https://www.bilibili.com/video/BV1xm4y1X7KZ?p=2

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:29:07  更:2022-09-21 00:29:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:55:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码