| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> [翻译+笔记]生成对抗网络: 从GAN到WGAN -> 正文阅读 |
|
[人工智能][翻译+笔记]生成对抗网络: 从GAN到WGAN |
最近读了一篇社会力模型的论文, 里面用到了GAN, 发现自己不是很懂. 想翻译一下一个大神的博客, 做一下笔记. 并不是全文翻译, 只翻译一部分. 原文地址: from GAN to WGAN 1. K-L和J-S散度在介绍GAN之前, 首先复习一下衡量两个概率分布相似度的两种指标. (1) K-L散度: KL散度衡量了某个概率分布 p p p是取自(发散自, 来自)另一个期望的(理论的)概率分布 q q q的程度: D K L ( p ∣ ∣ q ) = ∫ x p ( x ) log ? p ( x ) q ( x ) d x D_{KL}(p||q)=\int_xp(x)\log{\frac{p(x)}{q(x)}}dx DKL?(p∣∣q)=∫x?p(x)logq(x)p(x)?dx 当 p ( x ) p(x) p(x)和 q ( x ) q(x) q(x)处处相等时, KL散度为0. 我们要注意到KL散度是非对称的( D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p||q) \ne D_{KL}(q||p) DKL?(p∣∣q)=DKL?(q∣∣p)), 而且当 p ( x ) p(x) p(x)接近0的时候, q ( x ) q(x) q(x)的作用就被忽略了. 这会在有时候造成很有问题的结果.
(2) J-S散度: JS散度是另一种衡量两个概率分布相似度的指标, 范围在 [ 0 , 1 ] [0,1] [0,1]之间. JS散度是对称的, 而且更平滑. 定义如下: D J S ( p ∣ ∣ q ) = 1 2 D K L ( p ∣ ∣ p + q 2 ) + 1 2 D K L ( q ∣ ∣ p + q 2 ) D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||\frac{p+q}{2})+\frac{1}{2}D_{KL}(q||\frac{p+q}{2}) DJS?(p∣∣q)=21?DKL?(p∣∣2p+q?)+21?DKL?(q∣∣2p+q?) 二者差别如下图所示:
2. 生成对抗网络GANGAN由两部分模型组成:
假定以下符号:
一方面, 我们想确保鉴别器D对于真实的数据的决定是非常精确的, 也就是最大化 E x ~ p r ( x ) [ log ? D ( x ) ] E_{x\sim p_r(x)}[\log D(x)] Ex~pr?(x)?[logD(x)], 也就是说, 让 D ( x ) D(x) D(x)尽可能接近1. 同时, 给定一个假样本 G ( z ) G(z) G(z), 鉴别器会输出一个概率 D ( G ( z ) ) D(G(z)) D(G(z)), 我们也希望鉴别器让这个概率接近0, 因此等价于最大化 E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ] E_{z\sim p_z(z)}[\log (1-D(G(z))] Ez~pz?(z)?[log(1?D(G(z))]. 另一方面, 生成器的目标是增大自己产生的样本被鉴别器识别为真实样本的概率, 也就是最小化 E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ] E_{z\sim p_z(z)}[\log (1-D(G(z))] Ez~pz?(z)?[log(1?D(G(z))]. 我们把两个方面都考虑进去, D和G就是玩了一个最大-最小游戏, 我们应该优化如下的损失函数:
D的最佳值是什么?我们现在有了一个定义良好的损失函数. 现在我们看看D的最佳值是什么.
D ? ( x ) = x ~ ? = A A + B = p r ( x ) p r ( x ) + p g ( x ) D^*(x)=\tilde{x}^*=\frac{A}{A+B}=\frac{p_r(x)}{p_r(x)+p_g(x)} D?(x)=x~?=A+BA?=pr?(x)+pg?(x)pr?(x)?. 我们当然希望生成器输出的概率分布 p g ( x ) p_g(x) pg?(x)能与 p r ( x ) p_r(x) pr?(x)十分接近, 此时 D ? ( x ) = 1 / 2 D^*(x)=1/2 D?(x)=1/2(鉴别器相当于在瞎猜). 全局最优是什么?当G和D都到达了最优的值, 也就是 p g ( x ) = p r ( x ) p_g(x)=p_r(x) pg?(x)=pr?(x), D ? ( x ) = 1 / 2 D^*(x)=1/2 D?(x)=1/2, 损失函数变为:
损失函数代表了什么?我们展开J-S散度:
D
J
S
(
p
∣
∣
q
)
=
1
2
D
K
L
(
p
∣
∣
p
+
q
2
)
+
1
2
D
K
L
(
q
∣
∣
p
+
q
2
)
=
1
2
[
∫
x
p
(
x
)
log
?
p
(
x
)
(
p
(
x
)
+
q
(
x
)
)
/
2
d
x
+
∫
x
q
(
x
)
log
?
q
(
x
)
(
p
(
x
)
+
q
(
x
)
)
/
2
d
x
]
D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||\frac{p+q}{2})+\frac{1}{2}D_{KL}(q||\frac{p+q}{2}) \\ =\frac{1}{2}[\int_xp(x)\log{\frac{p(x)}{(p(x)+q(x))/2}}dx+\int_xq(x)\log{\frac{q(x)}{(p(x)+q(x))/2}}dx]\\
DJS?(p∣∣q)=21?DKL?(p∣∣2p+q?)+21?DKL?(q∣∣2p+q?)=21?[∫x?p(x)log(p(x)+q(x))/2p(x)?dx+∫x?q(x)log(p(x)+q(x))/2q(x)?dx] 另一部分同理, 代入得 当 D D D达到最优值即 D ? ( x ) = p r ( x ) p r ( x ) + p g ( x ) D^*(x)=\frac{p_r(x)}{p_r(x)+p_g(x)} D?(x)=pr?(x)+pg?(x)pr?(x)?时, 损失函数为 L ( G , D ? ) = ∫ x p r ( x ) log ? p r ( x ) p r ( x ) + p g ( x ) + ∫ x p g ( x ) log ? p g ( x ) p r ( x ) + p g ( x ) L(G,D^*)=\int_xp_r(x)\log{\frac{p_r(x)}{p_r(x)+p_g(x)}}+\int_xp_g(x)\log{\frac{p_g(x)}{p_r(x)+p_g(x)}} L(G,D?)=∫x?pr?(x)logpr?(x)+pg?(x)pr?(x)?+∫x?pg?(x)logpr?(x)+pg?(x)pg?(x)? 令 p = p r ( x ) , q = p g ( x ) p=p_r(x), q=p_g(x) p=pr?(x),q=pg?(x), 代入得
D
J
S
(
p
r
∣
∣
p
g
)
=
1
2
[
2
log
?
2
+
L
(
G
,
D
?
)
]
D_{JS}(p_r||p_g)=\frac{1}{2}[2\log 2+L(G,D^*)]
DJS?(pr?∣∣pg?)=21?[2log2+L(G,D?)] 所以当一切达到最优的时候, JS散度是0, 损失函数到达理论下界 ? 2 log ? 2 -2\log 2 ?2log2. 3. GAN中存在的问题难以达到纳什均衡(Nash equilibrium)训练过程中两个模型(G和D)是非合作博弈, 各自达到各自的平衡点, 不会考虑另一个模型. 因此并不能保证模型最终可以收敛. 以一个简单的例子说明为什么在非合作博弈中很难寻找纳什均衡. 假设一个玩家的目标是 f 1 ( x ) = x y f_1(x)=xy f1?(x)=xy, 另一个玩家的目标是 f 2 ( y ) = ? x y f_2(y)=-xy f2?(y)=?xy, 则根据梯度下降法, 玩家1每次的更新策略为 x ← x ? η y x\leftarrow x-\eta y x←x?ηy, 玩家2的策略为 y ← y + η x y\leftarrow y+\eta x y←y+ηx, 因此二者的方向是相反的. 更新过程如下图所示. 低维度的支持有人认为许多真实数据集的维度只是人为提高. 例如含有狗的图片, 两个耳朵一个尾巴可以代表狗, 实际上不需要很多自由的高维形式. 也就是说复杂的东西可以集中在低维流形中.
p
g
p_g
pg?也位于低维流形中, 例如输入是100维的向量, 要获取64x64的图像, 这4096像素上的颜色分布已经由100维小随机数向量定义,几乎无法填满整个高维空间. 因为鉴别器和生成器都在低维流形中,它们几乎肯定会不相交(如图, 低维流形很难在高维空间填充). 当它们具有不相交的支撑时,我们总是能够找到一个完美的鉴别器,可以 100% 正确地区分真假样本. 梯度消失如果鉴别器非常完美, 即对每个真实样本都输出概率1, 每个虚假样本都输出概率0, 则损失函数会变为常数0, 梯度不再更新. 下图表明了当鉴别器变好的时候, 梯度在逐渐消失.
模式崩溃在训练期间,生成器可能会折叠到始终产生相同输出的设置。这是 GAN 的常见故障情况,通常称为模式崩溃. 尽管生成器可能能够欺骗相应的鉴别器,但它无法学习表示复杂的真实世界数据分布,并且被困在一个种类极低的小空间. 缺少评估指标生成对抗网络并不是天生就有良好的反对函数,可以通知我们训练进度. 如果没有一个好的评估指标,就像在黑暗中工作一样. 没有好的迹象可以告诉何时停止; 没有很好的指标来比较多个模型的性能. 4. 提升GAN的训练(1) 特征匹配 特征匹配建议在优化鉴别器的时候, 让鉴别器检查生成器的输出是否符合真实样本的期望统计量, 也就是损失函数变为 其中 f f f可以是任何的特征的统计量, 例如均值或者中位数. (2)minibatch判别 通过minibatch判别,鉴别器能够在一个batch中消化训练数据点之间的关系, 而不是独立处理每个点. (3) 历史平均 将模型参数的历史平均和当前模型参数的差加入到损失函数, 即加入 ∣ Θ ? 1 t ∑ i Θ i ∣ 2 |\Theta-\frac{1}{t}\sum_i \Theta_i|^2 ∣Θ?t1?∑i?Θi?∣2, Θ \Theta Θ为参数. 这样可以平滑参数的变化. (4) 单边标签平滑 馈送鉴别器时,不要提供 1 和 0 标签,而是使用 0.9 和 0.1 等软化值. 它被证明可以减少网络的脆弱性. (5) 虚拟批归一化 就是用某一个固定的batch(成为参考batch)做批归一化, 而不是采用每次的minibatch. 参考batch在开始时选择一次,并在整个训练过程中保持不变. (6) 加噪 根据前面的讨论, 我们知道 p r p_r pr?和 p g p_g pg?在高维空间不相交, 因此可以认为加噪使得他们"扩散". (7) 对分布的相似度采用更好的指标 当两个分布不相交时,传统的损失函数无法提供有意义的值。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 16:53:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |