从GAN到WGAN(01/2)

从GAN到WGAN

文章目录

  • 一、说明
  • 二、Kullback-Leibler 和 Jensen-Shannon 背离
  • 三、生成对抗网络 (GAN)
  • 四、D 的最优值是多少?
  • 五、什么是全局最优?
  • 六、损失函数代表什么?
  • 七、GAN中的问题

一、说明

生成对抗网络 (GAN) 在许多生成任务中显示出巨大的效果,以复制现实世界的丰富内容,如图像、人类语言和音乐。它的灵感来自博弈论:两个模型,一个生成器和一个批评家,在相互竞争的同时使彼此更强大。然而,训练GAN模型是相当具有挑战性的,因为人们面临着训练不稳定或收敛失败等问题。

在这里,我想解释一下生成对抗网络框架背后的数学原理,为什么很难训练,最后介绍一个旨在解决训练难点的GAN修改版本。

二、Kullback-Leibler 和 Jensen-Shannon 背离

在我们开始仔细研究 GAN 之前,让我们首先回顾一下用于量化两个概率分布之间相似性的两个指标。

  1. KL(Kullback-Leibler)散度衡量一个概率分布如何偏离第二个预期概率分布
    .
    D K L ( p ∥ q ) = ∫ x p ( x ) log ⁡ p ( x ) q ( x ) d x D_{KL}(p \| q) = \int_x p(x) \log \frac{p(x)}{q(x)} dx DKL(pq)=xp(x)logq(x)p(x)dx

在以下情况下达到最小零点: p ( x ) = = q ( x ) p(x)==q(x) p(x)==q(x) 处处成立。
该公式表明 KL 散度是不对称的。当 p ( x ) p(x) p(x)接近零而 q ( x ) q(x) q(x)仍然显着大于零时, q q q的影响被忽略。当尝试测量两个同等重要的分布之间的相似性时,这可能会导致有问题的结果。

  1. Jensen-Shannon 散度是两个概率分布之间相似性的另一种度量,以.JS发散是对称的(耶!),而且更平滑。如果您有兴趣阅读有关 KL 背离和 JS 背离之间比较的更多信息,请查看这篇 Quora 帖子。
    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(pq)=21DKL(p2p+q)+21DKL(q2p+q) 在这里插入图片描述
    图 1.给定两个高斯分布,平均值=0 且 std=1 且平均值=1,标准度=1。两个分布的平均值标记为.吉隆坡背离是不对称的,但 JS 发散是对称的。

一些人认为(Huszar,2015)GANs取得巨大成功背后的一个原因是将损失函数从传统最大似然方法中的非对称KL散度转换为对称JS散度。我们将在下一节中详细讨论这一点。

三、生成对抗网络 (GAN)

GAN由两个模型组成:

  • 鉴别器:估计给定样本来自真实数据集的概率。它作为评论家工作,并经过优化以区分假样品和真样品。
  • 生成器: 输出给定噪声变量输入的合成样本 (带来潜在的产出多样性)。它被训练为捕获真实的数据分布,以便其生成样本尽可能真实,或者换句话说,可以欺骗鉴别器提供高概率。
  • 在这里插入图片描述

图 2.生成对抗网络的架构。(图片来源:www.kdnuggets.com/2017/01/generative-…-learning.html)
这两个模型在训练过程中相互竞争:生成器在努力欺骗鉴别者,而批评者模型
正在努力不被骗。两种模型之间这种有趣的零和博弈激励了两者改进其功能。

鉴于

SymbolMeaningNotes
p z p_z pzData distribution over noise input zUsually, just uniform.
p g p_g pgThe generator’s distribution over data x
p r p_r prData distribution over real sample x

一方面,我们的目标是通过最大化 E x ∼ p r ( x ) [ log ⁡ D ( x ) ] \mathbb{E}_{x \sim p_{r}(x)} [\log D(x)] Expr(x)[logD(x)] 来确保判别器 D D D 对真实数据做出准确的决策。另一方面,对于假样本 G ( z ) , z ∼ p z ( z ) G(z), z \sim p_z(z) G(z),zpz(z),判别器应该输出一个接近于零的概率 D ( G ( z ) ) D(G(z)) D(G(z)),这是通过最大化 E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \mathbb{E}_{z \sim p_{z}(z)} [\log (1 - D(G(z)))] Ezpz(z)[log(1D(G(z)))]
另一方面,生成器经过训练以增强 D D D 为虚假示例分配高概率的可能性,从而最小化 E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \mathbb{E}_{z \sim p_{z}(z)} [\log (1 - D(G(z)))] Ezpz(z)[log(1D(G(z)))]
当整合这两个方面时,D 和 G 进行极小极大博弈,其目标是优化后续损失函数:
min ⁡ G max ⁡ D L ( D , G ) = E x ∼ p r ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] = E x ∼ p r ( x ) [ log ⁡ D ( x ) ] + E x ∼ p g ( x ) [ log ⁡ ( 1 − D ( x ) ] \begin{aligned} \min_G \max_D L(D, G) & = \mathbb{E}_{x \sim p_{r}(x)} [\log D(x)] + \mathbb{E}_{z \sim p_z(z)} [\log(1 - D(G(z)))] \\ & = \mathbb{E}_{x \sim p_{r}(x)} [\log D(x)] + \mathbb{E}_{x \sim p_g(x)} [\log(1 - D(x)] \end{aligned} GminDmaxL(D,G)=Expr(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]=Expr(x)[logD(x)]+Expg(x)[log(1D(x)]
E x ∼ p r ( x ) [ log ⁡ D ( x ) ] \mathbb{E}_{x \sim p_{r}(x)} [\log D(x)] Expr(x)[logD(x)]在梯度下降更新期间对 G 没有影响。

四、D 的最优值是多少?

现在我们有一个明确定义的损失函数。让我们首先检查一下什么是D最佳值
.
L ( G , D ) = ∫ x ( p r ( x ) log ⁡ ( D ( x ) ) + p g ( x ) log ⁡ ( 1 − D ( x ) ) ) d x L(G, D) = \int_x \bigg( p_{r}(x) \log(D(x)) + p_g (x) \log(1 - D(x)) \bigg) dx L(G,D)=x(pr(x)log(D(x))+pg(x)log(1D(x)))dx

由于我们感兴趣的是确定 D(x) 的最佳值以最大化 L(G,D),因此我们将贴上标签
x ~ = D ( x ) , A = p r ( x ) , B = p g ( x ) \tilde{x} = D(x), A=p_{r}(x), B=p_g(x) x~=D(x),A=pr(x),B=pg(x)
然后是积分内部的东西(我们可以安全地忽略积分,因为对所有可能的值进行采样)为:
f ( x ~ ) = A l o g x ~ + B l o g ( 1 − x ~ ) d f ( x ~ ) d x ~ = A 1 l n 10 1 x ~ − B 1 l n 10 1 1 − x ~ = 1 l n 10 ( A x ~ − B 1 − x ~ ) = 1 l n 10 A − ( A + B ) x ~ x ~ ( 1 − x ~ ) \begin{aligned} f(\tilde{x}) & = A log\tilde{x} + B log(1-\tilde{x}) \\ \frac{d f(\tilde{x})}{d \tilde{x}} & = A \frac{1}{ln10} \frac{1}{\tilde{x}} - B \frac{1}{ln10} \frac{1}{1 - \tilde{x}} \\ & = \frac{1}{ln10} (\frac{A}{\tilde{x}} - \frac{B}{1-\tilde{x}}) \\ & = \frac{1}{ln10} \frac{A - (A + B)\tilde{x}}{\tilde{x} (1 - \tilde{x})} \\ \end{aligned} f(x~)dx~df(x~)=Alogx~+Blog(1x~)=Aln101x~1Bln1011x~1=ln101(x~A1x~B)=ln101x~(1x~)A(A+B)x~

因此,设置 d f ( x ~ ) d x ~ = 0 \frac{d f(\tilde{x})}{d \tilde{x}} = 0 dx~df(x~)=0,我们得到鉴别器的最佳值:

D ∗ ( x ) = x ~ ∗ = A A + B = p r ( x ) p r ( x ) + p g ( x ) ∈ [ 0 , 1 ] D^*(x) = \tilde{x}^* = \frac{A}{A + B} = \frac{p_{r}(x)}{p_{r}(x) + p_g(x)} \in [0, 1] D(x)=x~=A+BA=pr(x)+pg(x)pr(x)[0,1]
.
Once the generator is trained to its optimal,
p g p_g pg gets very close to p r p_r pr. When p g = p r p_g = p_{r} pg=pr, D ∗ ( x ) D^*(x) D(x) becomes 1/2.
.

一旦生成器被训练到最佳状态, p g p_g pg 非常接近 p r p_r pr。当 p g = p r p_g = p_{r} pg=pr时, D ∗ ( x ) D^*(x) D(x)变为1/2。

五、什么是全局最优?

当两者都G和D处于最佳值,我们有 p g = p r p_g = p_{r} pg=pr D ∗ ( x ) = 1 / 2 D^*(x)=1/2 D(x)=1/2。损失函数变为:

L ( G , D ∗ ) = ∫ x ( p r ( x ) log ⁡ ( D ∗ ( x ) ) + p g ( x ) log ⁡ ( 1 − D ∗ ( x ) ) ) d x = log ⁡ 1 2 ∫ x p r ( x ) d x + log ⁡ 1 2 ∫ x p g ( x ) d x = − 2 log ⁡ 2 \begin{aligned} L(G, D^*) &= \int_x \bigg( p_{r}(x) \log(D^*(x)) + p_g (x) \log(1 - D^*(x)) \bigg) dx \\ &= \log \frac{1}{2} \int_x p_{r}(x) dx + \log \frac{1}{2} \int_x p_g(x) dx \\ &= -2\log2 \end{aligned} L(G,D)=x(pr(x)log(D(x))+pg(x)log(1D(x)))dx=log21xpr(x)dx+log21xpg(x)dx=2log2

六、损失函数代表什么?

根据上一节中列出的公式,JS 之间的背离 p g p_g pg p r p_r pr,可以计算为:
D J S ( p r ∥ p g ) = 1 2 D K L ( p r ∣ ∣ p r + p g 2 ) + 1 2 D K L ( p g ∣ ∣ p r + p g 2 ) = 1 2 ( log ⁡ 2 + ∫ x p r ( x ) log ⁡ p r ( x ) p r + p g ( x ) d x ) + 1 2 ( log ⁡ 2 + ∫ x p g ( x ) log ⁡ p g ( x ) p r + p g ( x ) d x ) = 1 2 ( log ⁡ 4 + L ( G , D ∗ ) ) \begin{aligned} D_{JS}(p_{r} \| p_g) =& \frac{1}{2} D_{KL}(p_{r} || \frac{p_{r} + p_g}{2}) + \frac{1}{2} D_{KL}(p_{g} || \frac{p_{r} + p_g}{2}) \\ =& \frac{1}{2} \bigg( \log2 + \int_x p_{r}(x) \log \frac{p_{r}(x)}{p_{r} + p_g(x)} dx \bigg) + \\& \frac{1}{2} \bigg( \log2 + \int_x p_g(x) \log \frac{p_g(x)}{p_{r} + p_g(x)} dx \bigg) \\ =& \frac{1}{2} \bigg( \log4 + L(G, D^*) \bigg) \end{aligned} DJS(prpg)===21DKL(pr∣∣2pr+pg)+21DKL(pg∣∣2pr+pg)21(log2+xpr(x)logpr+pg(x)pr(x)dx)+21(log2+xpg(x)logpr+pg(x)pg(x)dx)21(log4+L(G,D))

因此 L ( G , D ∗ ) = 2 D J S ( p r ∥ p g ) − 2 log ⁡ 2 L(G, D^*) = 2D_{JS}(p_{r} \| p_g) - 2\log2 L(G,D)=2DJS(prpg)2log2
当判别器最优时,生成对抗网络 (GAN) 的损失函数使用 Jensen-Shannon 散度来衡量生成的数据分布 p g p_g pg 与真实样本分布 p r p_r pr 之间的相似性。最优生成器 G ∗ G^* G 复制真实数据分布,导致最小损失 L ( G ∗ , D ∗ ) = − 2 log ⁡ 2 L(G^*, D^*) = -2\log2 L(G,D)=2log2,与前面的方程一致。

GAN 的其他变体:存在许多 GAN 变体,专为各种环境或特定任务而定制。例如,在半监督学习中,一种方法涉及修改鉴别器以生成实际的类标签 1 、 … 、 K − 1 1、\ldots、K-1 1K1,以及单个假类标签 K K K。生成器的目标是欺骗鉴别器分配小于 K K K 的分类标签。

七、GAN中的问题

(见系列下文)…

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

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

相关文章

SwiftUI四绘制路径和形状

代码下载 创建徽章视图 创建徽章前需要使用SwiftUI的矢量绘画API创建一个徽章视图 1、新建HexagonParameters.swift文件。HexagonParameters结构体定义了绘制徽章六边形形状的控制点参数。仅仅使用这些数据指定绘制徽章形状时,线段和曲线的控制点位置&#xff1a…

Camtasia Studio怎么自动加字幕呢,Camtasia Studio有什么功能呢

在信息化高度发达的今天,视频作为一种直观、生动的信息表达方式,受到了越来越多人的青睐。无论是教育领域的教学视频,还是企业宣传的推广短片,甚至是个人创作的分享作品,都离不开一款优秀的视频编辑软件。Camtasia Stu…

【Python数据分析--pandas学习笔记】Python数据分析库pandas详细学习笔记(内容详细,适合小白入门),数据分析学习笔记

一,pandas教程 1-1 pandas 安装 1-1-1 使用 pip 安装 pandas: pip install pandas安装成功后,我们就可以导入 pandas 包使用: import pandas1-1-2 查看 pandas 版本 >>> import pandas >>> pandas.__version__ # 查看…

减少GPU显存的策略

训练时 减少batchsize图片尺寸缩小 推理时 cpu加载模型 pipe.enable_sequential_cpu_offload()减小精度 torch.float32 --> torch.float16其它

2.组件间通信-自定义事件(子传父)

子传父 父组件&#xff1a; <template><div class"father"><h3>父组件</h3><h3 v-show"toy">父组件接收到子组件传过来的数据:{{ toy }}</h3><!-- 给子组件Child绑定自定义事件 --><Child send-toy"sa…

L46---面试题 01.02. 判定是否互为字符重排(排序)---Java版

1.题目描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 示例 1&#xff1a; 输入: s1 “abc”, s2 “bca” 输出: true 示例 2&#xff1a; 输入: s1 “abc”,…

【面试】哪些类型对应有Class的对象?

目录 1. 类&#xff08;Class Types&#xff09;2. 接口&#xff08;Interface Types&#xff09;3. 数组类型&#xff08;Array Types&#xff09;4. 基本类型&#xff08;Primitive Types&#xff09;5. 枚举类型&#xff08;Enum Types&#xff09;6. 注解类型&#xff08;A…

c++ 实现栈、单向队列、双向队列

一、栈实现 code // // Created by shaoxinHe on 2024/6/8. //#ifndef CPRIMER_MYSTACK_H #define CPRIMER_MYSTACK_H#include "stdexcept" #include "iostream"using namespace std;struct queuNode {int num{};queuNode *next nullptr; };class mySta…

数据+AI 打造企业的“金山银山”

今日之世界&#xff0c;数据是生产资料&#xff0c;而人工智能&#xff08;AI&#xff09;是生产工具&#xff0c;它们的结合&#xff0c;带来的是业务的增长、新质生产力的提升&#xff0c;就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人&#xff0c;应该都会被它…

2D图片的描边

第一种 Sprite 外边框 原理是找到边缘像素&#xff0c;然后设置颜色&#xff0c;边缘像素的特点是像素的八个方向的邻像素不全是透明或者不全是不透明&#xff0c;这样的像素就是边缘上的像素&#xff0c;下面是找到的shader源码&#xff0c;很简单 Shader "Custom/Spri…

【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中&#xff0c;Deployment 是一种高级控制器&#xff0c;负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态&#xff0c;并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务&#xff0c;是…

Spring AI 第二讲 之 Chat Model API 第九节 watsonx.ai Chat

通过 watsonx.ai&#xff0c;你可以在本地运行各种大型语言模型&#xff08;LLM&#xff09;&#xff0c;并从中生成文本。Spring AI 通过 WatsonxAiChatModel 支持 watsonx.ai 文本生成。 您首先需要拥有一个 watsonx.ai 的 SaaS 实例&#xff08;以及一个 IBM 云帐户&#x…

Elasticsearch高效检索:基础查询详解

在当今大数据和云计算的时代&#xff0c;信息的快速检索和高效处理成为了企业竞争的关键。Elasticsearch&#xff0c;作为一款基于Lucene构建的开源、分布式、RESTful搜索引擎&#xff0c;以其强大的全文搜索和结构化搜索能力&#xff0c;赢得了众多开发者和企业的青睐。今天&a…

web前端复试经验:深度解析与实用指南

web前端复试经验&#xff1a;深度解析与实用指南 在Web前端开发领域的求职过程中&#xff0c;复试无疑是一个至关重要的环节。它既是对求职者技术实力的全面检验&#xff0c;也是展现个人能力与潜力的绝佳机会。本文将围绕四个方面、五个方面、六个方面和七个方面&#xff0c;…

C++STL(四)priority_queue的详细用法及仿函数实现

目录 一&#xff1a;&#x1f525;介绍二&#xff1a;&#x1f525;priority_queue 的基本操作三&#xff1a;&#x1f525;priority_queue 的原型定义四&#xff1a;&#x1f525;重写仿函数4.1.仿函数的介绍4.2.priority_queue仿函数代码示例 五&#xff1a;&#x1f525;pri…

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍 这篇论文介绍了一个名为“Recognize Anything Model”&#xff08;RAM&#xff09;的新型基础模型&#xff0c;专用于图像标签识别&#xff08;图像分类&#xff09;。这一模型采用大规模图像-文本配对数据进行训练&#xff0c;无需手动注释&#xff0c;能够在…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现一、引言二、焊点检测功能的实现方法&#xff08;1&#xff09; 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

oracle linux和ubuntu的区别

Oracle Linux和Ubuntu是两种不同的Linux发行版&#xff0c;它们有一些区别&#xff1a; 背景和支持&#xff1a; Oracle Linux是由Oracle公司开发和支持的&#xff0c;它是基于Red Hat Enterprise Linux (RHEL)的一个分支。Ubuntu是由Canonical Ltd.开发和支持的&#xff0c;它…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…