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网络经常会见到或用到,但感觉对其理解不够深入,写此博客记录一下,方便今后查阅。只看笔记估计很难看懂,推荐两个视频:
晟腾CANN训练营
GAN论文精读

1. 首先是GAN的基本原理

在这里插入图片描述#pic_center =x250)
GAN的整个训练对抗过程可以由下式表示出来:

min ? G max ? D V ( D , G ) = E x ~ p data? ( x ) [ log ? D ( x ) ] + E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ) ] \min _G \max _D V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] minG?maxD?V(D,G)=Expdata??(x)?[logD(x)]+Ezpz?(z)?[log(1?D(G(z)))]

其中G(generator)是想让整个式子的值V尽可能小,而D(discriminator)想让V尽可能大。

  • 对于右边第一项:
    E x ~ p data? ( x ) [ log ? D ( x ) ] \mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})] Expdata??(x)?[logD(x)]
    x是data中的数据,D为了使该项更大,对真实数据x的判别为真的概率D(x)就要越大。
  • 对于右边第二项:
    E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ) ] \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] Ezpz?(z)?[log(1?D(G(z)))]
    z是随机噪声,D为了使该项更大,对假数据G(z)的判别为真的概率D(G(z))就要越小。
    G为了使该项越小,其生成的假数据G(z)就要越像真的,才能骗到D使得D(G(z))越大,从而使得第二项整个越小。

2. GAN的训练过程

2.1 训练流程

在这里插入图片描述
简单来说其训练过程如下:

  • 训练判别器D,训练k步(需要调节的超参,即D可能需要更多训练)。采样噪声z和图片x,根据前述的公式求梯度来更新判别器D。
  • 训练生成器G,只训练一步且只需采样噪声z,根据前述公式求梯度更新生成器G。

2.2 实际训练时使用更好优化的损失函数

在这里插入图片描述
观察G和D都有的损失项:
J ( G ) = 1 2 E z log ? ( 1 ? D ( G ( z ) ) ) J^{(G)}=\frac{1}{2} \mathbb{E}_{\boldsymbol{z}} \log (1-D(G(\boldsymbol{z}))) J(G)=21?Ez?log(1?D(G(z)))
图中Minimax(零和博弈)线是该损失项关于D(G(z))的曲线,在网络训练初期,G所生成的图像很好判断,D会给他很低的置信度,这时梯度是很小的,网络的学习很慢,只有当后期时D较难判断时,更新梯度才会较大。

但我们肯定希望是G生成较差时(训练初期)会有较大梯度进行更新才对。
所以实际使用中,我们选择非饱和启发式博弈(Non-saturating heuristic):
J ( G ) = ? 1 2 E z log ? D ( G ( z ) ) J^{(G)}=-\frac{1}{2} \mathbb{E}_{\boldsymbol{z}} \log D(G(\boldsymbol{z})) J(G)=?21?Ez?logD(G(z))
观察它的梯度,是更合适的:初期训练时梯度较大,后期较小。

4. GAN的问题

  • 不好训练:G和D交替训练,其中一个不能训练太好,即对抗平衡不能被打破。
  • 模式坍缩:只产生一种甚至一张迷惑性很高的图,但即可骗过辨别器D。

5. 从数学方面看生成器G的学习

P data? ( x ) P_{\text {data }}(\mathrm{x}) Pdata??(x) :真实图片分布,
P G ( x , θ ) : G P_G(x, \theta): G PG?(x,θ):G 生成的图片分布, θ \theta θ是生成器G的参数,
在真实分布中取一些数据 { x 1 , x 2 , … , x m } \left\{x^1, x^2, \ldots, x^m\right\} {x1,x2,,xm}
生成模型的最大似然估计: L = ∏ i = 1 m P G ( x i ; θ ) L=\prod_{i=1}^m P_G\left(x^i ; \theta\right) L=i=1m?PG?(xi;θ)

θ ? = arg ? max ? θ ∏ i = 1 P G ( x i ; θ ) = arg ? max ? θ log ? ∏ i = 1 m P G ( x i ; θ ) = arg ? max ? θ ∑ i = 1 m log ? P G ( x i ; θ ) ≈ arg ? max ? θ E z ~ P data? [ log ? P G ( x ; θ ) ] = arg ? max ? θ ∫ z P data? ( x ) log ? P G ( x ; θ ) d x ? ∫ x P data? ( x ) log ? P data? ( x ) d x = arg ? max ? θ ∫ x P data? ( x ) ( log ? P G ( x ; θ ) ? log ? P data? ( x ) ) d x = arg ? min ? θ ∫ x P data? ( x ) log ? P data? ( x ) P G ( x ; θ ) d x = arg ? min ? θ K L ( P data? ( x ) ∥ P G ( x ; θ ) ) \begin{aligned} \theta^* &=\arg \max _\theta \prod_{i=1} P_G\left(x^i ; \theta\right) \\ &=\arg \max _\theta \log \prod_{i=1}^m P_G\left(x^i ; \theta\right) \\ &=\arg \max _\theta \sum_{i=1}^m \log P_G\left(x^i ; \theta\right) \\ & \approx \arg \max _\theta E_{z \sim P_{\text {data }}}\left[\log P_G(x ; \theta)\right] \\ &=\arg \max _\theta \int_z P_{\text {data }}(x) \log P_G(x ; \theta) d x-\int_x P_{\text {data }}(x) \log P_{\text {data }}(x) d x \\ &=\arg \max _\theta \int_x P_{\text {data }}(x)\left(\log P_G(x ; \theta)-\log P_{\text {data }}(x)\right) d x \\ &=\arg \min _\theta \int_x P_{\text {data }}(x) \log \frac{P_{\text {data }}(x)}{P_G(x ; \theta)} d x \\ &=\arg \min _\theta K L\left(P_{\text {data }}(x) \| P_G(x ; \theta)\right) \end{aligned} θ??=argθmax?i=1?PG?(xi;θ)=argθmax?logi=1m?PG?(xi;θ)=argθmax?i=1m?logPG?(xi;θ)argθmax?EzPdata???[logPG?(x;θ)]=argθmax?z?Pdata??(x)logPG?(x;θ)dx?x?Pdata??(x)logPdata??(x)dx=argθmax?x?Pdata??(x)(logPG?(x;θ)?logPdata??(x))dx=argθmin?x?Pdata??(x)logPG?(x;θ)Pdata??(x)?dx=argθmin?KL(Pdata??(x)PG?(x;θ))?

  • 中间这个 E z ~ P data? [ log ? P G ( x ; θ ) ] E_{z \sim P_{\text {data }}}\left[\log P_G(x ; \theta)\right] EzPdata???[logPG?(x;θ)]的展开没看懂。。。先记下来吧
    期望的定义: E x ~ p [ f ( x ) ] = ∫ x [ P ( x ) f ( x ) ] d x E_{x \sim p}[f(x)]=\int_x[P(x) f(x)] d x Exp?[f(x)]=x?[P(x)f(x)]dx

最后可推得: θ ? \theta^* θ?就是求使得 P data? ( x ) P_{\text {data }}(x) Pdata??(x) P G ( x ; θ ) P_G(x ; \theta) PG?(x;θ)的KL散度最小(两者相等时)时 θ \theta θ的取值。

  • 题外话:KL散度
    考虑某个未知的分布 p(x),假定用一个近似的分布q(x)对它进行建模。如果我们使用q(x)来建立一个编码体系,用来把×的值传给接收者,那么由于我们使用了q(x)而不是真实分布p(x),平均编码长度比用真实分布px)进行编码增加的信息量(单位是nat )为:
    K L ( p ∥ q ) = ? ∫ p ( x ) ln ? q ( x ) d x ? ( ? ∫ p ( x ) ln ? p ( x ) d x ) = ? ∫ p ( x ) ln ? [ q ( x ) p ( x ) ] d x \begin{aligned} K L(p \| q) &=-\int p(x) \ln q(x) d x-\left(-\int p(x) \ln p(x) d x\right) \\ &=-\int p(x) \ln \left[\frac{q(x)}{p(x)}\right] d x \end{aligned} KL(pq)?=?p(x)lnq(x)dx?(?p(x)lnp(x)dx)=?p(x)ln[p(x)q(x)?]dx?
    p,q相等时KL散度为0。注意,这不是一个对称量,即 K L ( p ∥ q ) ≠ K L ( q ∥ p ) KL(p \| q) \neq K L(q \| p) KL(pq)=KL(qp)

6. 训练:

6.1 先固定G,训练D

基于GAN的对抗过程:
min ? G max ? D V ( D , G ) = E x ~ p data ( x ) [ log ? D ( x ) ] + E x ~ p x ( z ) [ log ? ( 1 ? D ( G ( z ) ) ) ] \min _G \max _D V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data}}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{x} \sim p_{\boldsymbol{x}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] minG?maxD?V(D,G)=Expdata?(x)?[logD(x)]+Expx?(z)?[log(1?D(G(z)))]
在这里插入图片描述

那么固定G,且由上图的定律,那么V就可以由下式的结果表达
V = E x ~ P data? [ log ? D ( x ) ] + E x ~ P G [ log ? ( 1 ? D ( x ) ) ] = ∫ x P data? ( x ) log ? D ( x ) d x + ∫ x P G ( x ) log ? ( 1 ? D ( x ) ) d x = ∫ x [ P data? ( x ) log ? D ( x ) + P G ( x ) log ? ( 1 ? D ( x ) ) ] d x \begin{aligned} V&=E_{x \sim P_{\text {data }}}[\log D(x)]+E_{x \sim P_G}[\log (1-D(x))]\\ &=\int_x P_{\text {data }}(x) \log D(x) d x+\int_x P_G(x) \log (1-D(x)) d x\\ &=\int_x\left[P_{\text {data }}(x) \log D(x)+P_G(x) \log (1-D(x))\right] d x\\ \end{aligned} V?=ExPdata???[logD(x)]+ExPG??[log(1?D(x))]=x?Pdata??(x)logD(x)dx+x?PG?(x)log(1?D(x))dx=x?[Pdata??(x)logD(x)+PG?(x)log(1?D(x))]dx?
接下来解 D ? ( x ) D^*(x) D?(x):
在这里插入图片描述

将解得的 D ? ( x ) D^*(x) D?(x)带入原式中,得到下式:
在这里插入图片描述

最后V推导成了Jensen-Shannon散度与一个常数的和。
其中Jensen-Shannon散度如下式定义,是一个对称量。
在这里插入图片描述
所以可以这么说:
在优化判别器D时,其实是在学习如何度量JS散度(度量得更准)。
在优化生成器G时,其实是在最小化JS散度。

6.2 GAN为啥不好训练

有些理论目前看不懂,先记下来吧
在这里插入图片描述
上面这个结论大概的意思就是JS散度容易为0,有点类似于坏死不起作用的情况。
在这里插入图片描述

前面有提到具体使用时一般使用非饱和启发式博弈替代零和博弈:
在这里插入图片描述
最小化KL散度和最大化JS散度是相反的两个任务。所以不好训练。

  • 模式坍缩的原因:
    在这里插入图片描述
    对KL散度分析,由于KL散度不对称 :(此处也不是很理解)
    左图:因为KL散度的性质,G生成的分布需要兼顾data的两个峰,其KL散度才小
    右图:因为Peverse KL散度的性质,G生成的分布只要能跟住data的一个峰其KL散度就很小,前述的 E x ~ P g [ ? log ? D ? ( x ) ] \mathbb{E}_{x \sim P_g}\left[-\log D^*(x)\right] ExPg??[?logD?(x)]是包含的,所以容易发生模式坍缩。

回顾全程:
我们由对抗博弈的过程推导出其实GAN网络的优化过程和KL和JS散度有关,由于这最小化两个散度有各种问题,也就解释了GAN不好训练。

7. 后续几种常见的GAN

在这里插入图片描述

7.1 WGAN

JS散度问题很多,作者尝试换个指标去衡量:
在这里插入图片描述
上图 CD和AB两个分布,其KL,JS散度以及Wasserstein距离如下:

K L ? P 1 ∥ P 2 ) = K L ( P 1 ∥ P 2 ) = { + ∞ ?if? θ ≠ 0 0 ?if? θ = 0 J S ( P 1 ∥ P 2 ) = { log ? 2 ?if? θ ≠ 0 0 ?if? θ ? 0 W ( P 0 , P 1 ) = ∣ ? ˙ ∣ ?(???)? \begin{aligned} &K L\left\langle P_1 \| P_2\right)=K L\left(P_1 \| P_2\right)= \begin{cases}+\infty & \text { if } \theta \neq 0 \\ 0 & \text { if } \theta=0\end{cases} \\ &J S\left(P_1 \| P_2\right)= \begin{cases}\log 2 & \text { if } \theta \neq 0 \\ 0 & \text { if } \theta-0\end{cases} \\ &W\left(P_0, P_1\right)=|\dot{\phi}| \text { (???) } \end{aligned} ?KL?P1?P2?)=KL(P1?P2?)={+0??if?θ=0?if?θ=0?JS(P1?P2?)={log20??if?θ=0?if?θ?0?W(P0?,P1?)=?˙??(???)??
此时JS散度可以说是坏死的,但W距离仍能工作。

我们看如何使GAN去优化W距离:
在这里插入图片描述

所以对GAN做了如下修改:

  • 判别器最后一层去掉sigmoid:
  • 生成器和判别器的loss不取log
  • 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
  • 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
    最后一点是试出来的,前三个是有理论依据的。

GAN不好训练的问题得到了很好的解决。

7.2 CGAN

在这里插入图片描述
给GAN个标签,让其只生成这一类别的标签。

7.3 CycleGAN

在这里插入图片描述

7.4 StyleGAN:可以精细控制生成的图像的属性

在这里插入图片描述
暂时没时间去了解,先放着吧

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

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