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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2020李宏毅机器学习笔记-Generative Adversarial Network - Theory behind GAN -> 正文阅读

[人工智能]2020李宏毅机器学习笔记-Generative Adversarial Network - Theory behind GAN

目录

摘要

1. Theory behind GAN

2. Maximum Likelihood Estimation

3.MLE=Minimize KL Divergence

4. Generator

5. Discriminator

6. GD Algorithm for GAN

7. Algorithm for GAN(Review)

?结论与展望


摘要

从某种意义上来讲, GAN 图片生成任务就是生成概率分布。因此, 我们有必要结合概率分布来理解 GAN 生成对抗网络的原理。在GAN之前,是使用最大似然的方法来生成,根据李老师的数学推导,如果要去做一个模型的极大似然估计,那么相当于求真实模型和拟合模型之间的K L散度取最小值时的θ取值。但是模型公式真的很难列出来,除非加了很多限制,而且生成的图像非常模糊。于是我们使用神经网络来表述图像模型,即使用GAN中的Gernerator,而且使用Discriminator评估各个分布之间的距离,对抗训练来达到目的,这节课一大堆的数学公式和推导说的就是上面的过程。

1. Theory behind GAN

考虑一下,GAN到底生成的是什么呢?比如说,假如我们想要生成一些人脸图,实际上,我们是想找到一个分布,从这个分布内sample出来的图片,像是人脸,而不属于这个distribution的分布,生成的就不是人脸。而GAN要做的就是找到这个distribution。

在GAN出生之前,我们怎么做这个事情呢?之前用的是Maximum Likelihood Estimation,最大似然估计来做生成的,我们先看一下最大似然估计做的事情。

2. Maximum Likelihood Estimation

最大似然估计的理念是,假如说我们的数据集的分布是Pdata?(x)?,我们定义一个分布 PG?(x;θ),我们想要找到一组参数?θ ,使得 PG?(x;θ)接近Pdata?(x)?。比如说,加入 PG?(x;θ)如果是一个高斯混合模型,那么?θ \thetaθ?就是均值和方差。

具体怎么操作呢?

  • 首先我们不知道真实的数据分布是什么样的,但是我们可以从 Pdata?(x)?抽样出一些样本(真实图片)
  • ?对每一个sample出来的x, 我们都可以计算它的likelihood,也就是给定一组参数θ,我们就能够知道PG?(x;θ)
  • 我们把在某个分布可以产生xi的likelihood乘起来,可以得到总的likelihood L,我们要找到一组θ*可以最大化L

3.MLE=Minimize KL Divergence

其实最大似然估计的另一种解释是Minimize KL Divergence

?数学上KL divergence使用来衡量两个分布的差异程度的,那么现在我们的目标就是找一组θ来最小化Pdata和PG的KL divegence。但是我们常常要先假定一个具体的分布去逼近实际分布,我们的分布PG?不一定是高斯分布。因此我们需要一个通用的分布,去逼近这个复杂的图像真实分布。因此要用GAN的Generator来解决这个问题。

4. Generator

过去如果使用最大似然估计,采用高斯混合模型定义PG,生成的图片会非常模糊。而现在我们用的Generator的方法,是从一个简单的分布(比如正态分布)中sample出样本,然后扔进一个network(即generator),然后得到输出,把这些输出统统集合起来,我们会得到一个distribution, 这个distribution就是我们要找的PG,而我们的目标是使得与Pdata越接近越好。

那么怎么计算两个分布的差异呢??PG和Pdata的公式我们都是不知道的,怎么算呢?这里就要引出Discriminator了。

5. Discriminator

虽然我们不知道?PG和Pdata的公式,但是我们可以从这两个分布中sample出一些样本出来。对于

Pdata来说,我们从给定的数据集中sample出一些样本就可以了。对于PG来说,我们随机sample一些向量,扔到Generator里面,然后generator会输出一些图片,这就是从PG里面sample了。

问题就变成我们怎么从sample的数据求PG和Pdata?其实我们可以使用Discriminator来衡量PG和Pdata的Divergence。

蓝色星星: data sampled from?Pdata,橙色星星: data sampled from?PG。

?我们可以用Discriminator来区分两个Distribution,公式是上图的:V(G,D)。前面一项是表示数据sampled from?Pdata,值越大越好,后面一项是表示数据sampled from?PG,值越小越好。上面公式的形式和训练一个二分类Classifier的目标函数长得一样,就是说可以把PG和Pdata看成两个分类。训练Discriminator就好比训练一个二分类。

如果两个分布的数据很接近(small divergence),那么Discriminator很难把数据分开,也就是上面的公式很难找到一个D,使得D*取得很大的值。那么就找到最大的divergence,使得两个分布的数据相隔远一些,我们的Discriminator就能容易的将数据分开。

?

通过这一系列的化简,我们可以知道,最大化?V(G,D?),其实就是求解分布?Pdata和PG的JS divergence。所以当去训练一个distriminator,就是通过Pdata和PG sample出来的样本去求这两个分布的差异。

6. GD Algorithm for GAN

具体的算法:

  • Step1:首先固定生成器,找到一个能够使V最大的D;
  • Step:然后固定D,找到能够使这个最大D情况下V最小的G。不停的迭代…

那么找最好的G的话就用梯度下降(和一般的train是一样的);θ是表示G的参数,但是L(G)有个max操作,但是它依然也是可以做微分的: 假设有个函数f(x)是max三个子函数,f(x)其实 就是每个阶段取最大值 最终求微分的过程就是在每一个点x,先看哪个子函数在这个点最大,微分值就是最大的那个子函数的微分值。也就是梯度下降依然适用,就是每次更新参数的时候先看自己在那个范围,再用这个范围的函数求梯度,然后更新;重复…

7. Algorithm for GAN(Review)

最终的算法:

首先train判别器,实际上没办法train到收敛,可以定义训练k次;之后train生成器:其中第一项是与生成器无关的,由于G不能训练太多,所以updata一次就好(最小化JS散度)

  1. 首先初始化判别器和生成器

  2. 然后从database中抽取m个图片(like batch size);从一个分布中抽取m个vector,使用m个vector产生m个image。 之后去调整判别器:首先把m张真实图片都拿出来,经过判别器得到分数,然后经过log再统统平均起来(当然希望这个越大越好,因为希望真实的图片得分高);对于生成器生成的m张图片当然希望值越小越好,因此用1-值,其越大越好。因此使用梯度上升的方法,调节判别器参数。(实际训练过程是给真实图片赋值为1,生成图片赋值为0;训练二分类器;等同于上述过程)

  3. 从一个分布中抽取m个vector,重新生成m张图片,G(Z)就是一张图片,再把它丢到判别器中D(G(Z));再对所有的生成的求平均,在D不改变的情况下,希望这个值越小越好

?结论与展望

GAN 的核心本质是通过对抗训练将随机噪声的分布拉近到真实的数据分布,那么就需要一个度量概率分布的指标—散度我们熟知的散度有 KL 散度公式(KL 散度有一个缺点就是距离不对称性,所以说它不是传统真正意义上的距离度量方法)。Discriminator网络就这么诞生了,这个Discriminator网络干的事情就是输入一个x来自真实样本或者拟合样本,然后分析它们来自哪里,并输出一个标量。这个标量你可以训练它为一个判定标准,就是如果是真实样本就输出接近1的数,拟合样本就输出接近0的数这样子。这样我们的判别器也就有了,把判别器对于真实样本和拟合样本的所有判别做比较处理,则我们Gernerator网络需要的分布距离也就有了。

我们的训练过程就是分开训练Gernerator和Discriminator:固定Gernerator,训练Discriminator网络来最大化Pdata和PG之间的距离,训练好Discriminator然后就固定住,接着训练Gernerator,最小化公式中的argminG?V(G),因为因为这道公式最小说明我们通过神经网络实现了类似于极大似然法,找到了网络的最优解θ*。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 11:20:38  更:2021-08-08 11:21:29 
 
开发: 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/27 21:37:20-

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