当前位置: 首页 > article >正文

GAN 干!!!!

1标题 + 作者

近 5 年,GAN 上头条次数很多,Reddit 里 GAN 很火

thispersondoesnotexist.com

加州法令:禁止换脸、禁止对政治人物骚操作,说未讲过的话

GAN: 两个网络相互对抗

generative: ML模型分 discriminative(AlexNet, ResNet, Transformer) 和 generative

adversarial: 对抗

nets: networks 简写

非 native speaker 不建议使用简写

2摘要

写作简洁,可直接搬运😂(wiki, textbook)

  • 创新工作:讲清楚自己是谁?

  • 拓展工作:和别人的区别、创新

framework 如何用?

framework 比 一个模型 model 要大。自己是否适合使用?哈哈哈哈哈

本文的 framework 是什么?

  • estimating generative models via an adversarial process

  • simultaneously train two models 生成器、判别器

  • G: 假钞制造者 capture the data distribution

  • data distribution 可以是图片、文本、电影

  • 统计学视角: 世界由采样不同的分布得到的

  • D: 警察判断 💴 是真的,而不是伪造的概率 estimate the probability that a sample came from the training data rather than G

G 和 D 怎么 adversarial?

G 的目标是什么?

  • 让 D 犯错

  • GAN 的 G 可不一般,一般的生成模型干什么?

  • 让生成数据 尽可能靠近 原始分布

G D 一起玩和博弈有什么关系?

  • minimax two-player game

在任意函数 G 和 D 的空间里,a unique solution exisits,独一无二的解表明 G 找到了真实数据分布,D 无法分辨。

G 和 D 是 MLP --> error backpropagation 训练,简单。

无需 Markov chains or unrolled approximate inference networks 近似推理过程的展开。

实验效果非常好。

写作:摘要简洁,权衡读者是谁。懂得都懂。

3导言

DL ≠ DNN,那 DL 是什么?

数据特征的概率表示,represent probability distributions

discriminative 模型发展很好,generative 模型发展困难、Why?

difficulty in maximum likelihood estimation 计算最大似然概率的近似时,计算困难。

本文的故事是什么?

解决 generative 模型发展的困难:不近似 likelihood 函数,使用别的方法计算 得到更好的模型。

img

导言第二段: GAN 的介绍 警察 造假币者

adversarial nets framework 里 有什么?

  • generative model 造假币者

  • discriminative model 警察

造假者 和 警察 不断提升性能,造假者造出的假币和真币一模一样,警察判断的概率是 1 / 2

导言第三段:framework 里的 G 和 D 是 MLP --> adversarial nets

G 的输入是 random noise,映射到任何一个想拟合的分布。

D 是 MLP

G 和 D 都是 MLP,有什么用? --> 计算上有优势

train using backpropagation √

Markov chains 分布采样 ❌

introduction写的怎么样?

good!摘要的扩充,第一段的故事性:generative models发展困难,因为拟合似然函数计算的复杂性。我能解决,MLP作为 G 和 D 的结构,反向传播 无需 Markov chain 采样。

4相关工作

版本:NIPS final version,arxiv 早期版本

相关工作 的 区别,未参考别人工作,大佬!高级高级!

Related work 第一段:先说别人的问题,我们怎么做?

别人的问题在哪里呢?

构造 有参数的 概率分布函数,provide a parametric specification of a probability distribution function

参数构造了,怎么学习呢?

maximizing the log-likelihood,但采样分布计算难, esp 维度高, i.e., DBM。

怎么解决这个计算难的问题?当然是不要 分布 啦

直接学习一个模型,近似数据分布。

DBM 和 我们的 generative models 有什么区别?

DBM:一定要学 分布,知道均值、方差等一系列参数

GAN:用一个模型学习 你想要的结果,答对题就行。

GAN 的好处和坏处是什么呢?

  • pros: 计算容易;

  • cons: 即使答对了题,GAN 不知道正确的分布长什么样。

Related work 第二段:误差反向传递对 GAN 进行求解

Why error BP 有效?

对 f 的期望求导 == 对 F 自己求导

Related work 第三段:unaware 别人的类似工作,VAE

Related work 第四段:从 discriminative 角度 to train a generative model 的相关工作

GAN 和 Noise-contrastive estimation (NCE) 的区别?

NCE 的损失函数复杂一点 --> 求解性能不如 GAN

Related work 第五段:和 predictability minimization 1992的区别

Jürgen (LSTM作者) 有非常超前的工作,LSTM在当年的计算量和数据量的条件,很难大展身手。现在,LSTM 效果被发现了。

Jürgen predictability minimization算法被埋没了,Jürgen 认为 GAN 是 reverse PM。

轶事:Jürgen 在GAN 的 NIPS 汇报,也提出质疑。Ian 回绝,邮件交流已经很清楚了,你在耽搁大家学习 GAN

Remark:一个真实有用的技术,会在不同领域、不断的被人重新发现,给予新的名词。大家会把功劳归给那一个教会了大家这个算法的人,而不是最早发明它的人。

Related work 第六段:和 adversarial examples 的区别

adversarial examples 测试算法的稳定性,how?

构造一些假的、跟真的样本长得很像的 样本,能糊弄到分类器。

5模型:GAN 目标函数 + 求解

adversarial modeling framework 怎么简单 most straightforward 呢?

G 和 D 都是 MLP

G 如何学习 data x 上的分布 pg?

i.e., 游戏 4k 分辨率的屏幕,60 pictures / second

G 的学习目标:生成和游戏里一样的图片。

data x :显示器里每一张 4k 分辨率(800w像素)的图片。每一个像素是一个随机向量,data x 是一个 800w 维度的多维随机变量。

每一个像素的值由 pg 分布控制,此例中 pg 是游戏程序。

生成模型 怎么输出 x 呢?

z 噪音变量:i.e., 1个100维的向量,每个元素是高斯噪音,服从G(0, 1)

define a prior on input noise variables p_z(z)

定义一个在输入噪音变量 z 的先验分布

生成模型做什么呢?

z 映射成 x

生成模型怎么把 z 映射成 x ?

生成模型是 MLP,有可学习参数 theta_g

游戏 example (continued) 生成游戏图片的方式?

  • 反汇编 游戏代码,找到代码生成原理 ------- DBM 难计算

  • 放弃底层原理。假设游戏里 4k图片由 100个变量 控制。直接构造一个 约100维 的向量,用 MLP 强行拟合最后图片的样子。(MLP理论可以拟合任意函数)

使用 MLP 的利弊?

计算简单、但不真正了解代码。看到一个图片,很难找到对应的 z;只能反向操作,随机给一个 z ,生成一个像样的图片。

====================================

Discriminative model

MLP with 可学习参数 theta_d,ouputs a single scalar

判别模型的作用?

游戏example(continued), 一张 800w 像素的图片输入判别模型,输出一个概率值。

概率 = 1:这张图来自真实采样数据(游戏截图)

概率 = 0:来自生成模型?

同时训练 D 和 G

训练 D to maximize 正确分类的概率:真实采样数据 和 来自 G 生成的样本

训练 G to minimize log( 1 - D(G(Z)) ),尽可能使 D 犯错, D(G(Z)) 更大、更靠近 1

✔ D 判断此图是生成的,D(G(Z)) = 0, log( 1 - D(G(Z)) ) = log1 = 0

❌ D 判断此图是真实采样,D(G(Z)) = 1, log( 1 - D(G(Z)) ) = log0 = -∞

训练 G 使得 D 无法区别 是真实采样数据 还是生成数据。

完美情况:log 1 + log 1 = 0

不完美情况:log(0 ~ 1) + log(0 ~ 1) < 0 ----> maximize D 正确分类的概率,objective 靠近 0,靠近完美情况

min G 尽可能得使 D 判别器 犯错,无法判断来自 真是采样 or 生成数据。

img

value function 有 min G max D 的双目标

  • D 使数据尽量分开

  • G 使数据尽量分不开

two-player minimax game Nash equilibrium:D和G都不能往前进步

图 1: GAN 的前 3 步 和 最后 1 步

噪音 z 一维标量 (均匀分布采样得来),数据 x 也是 一维标量(图中黑点,高斯分布)。

img

图例:

G 对 噪声 z 的映射

D 对 噪声 z 映射到 数据空间的判断线

data x 真实数据点

step 1: G 把 均匀分布采样得到的噪声 z 映射到 绿色高斯分布

step 1 --> 2: D 尽可能地去学习如何判断,i.e., 真实数据均值更靠左,将左侧的数据判断为真 1, 将右侧数据判断为假 0

step 2 --> 3:G 尽可能地去糊弄 D,把高斯分布的均值中心往左挪动

final step: G 把 来自均匀分布的噪声,映射成和真实 data x 相似的高斯分布。

D 对来自真实采样的数据 or G 生成的数据无法判断来源,概率都是 0.5,躺平-------

算法 1

# 每一次做迭代

for number of training iterations do

# 有采样 k * 2m 个 examples

for k steps do

每一步有 2m 个 examples

【从噪声变量 z 的先验分布采样的 m 个 noise examples,从真实数据 data x 中采样 m 个 examples】

用 2m 个examples 输入价值函数 求梯度

m 个 examples 放进 log D(x^(i))

m 个 noise examples 放进 log (1 - D(G(z^(i)))

对 判别器 D 的参数求梯度,更新判别器 D 的参数

end for # for k steps do, 完成 k 次 2m 个数据采样

img

从噪音的先验分布中 sample m 个 noise samples

把 m 个 noise samples 放进 价值函数 (只有第二项,第一项与生成器 G 无关)

得到生成器 G 的梯度,更新生成器 G 的参数

# 每次迭代,先更新 D 再更新 G

end for # for number of training iterations

超参数:k 不能太小、不能太大

Why k 重要?

k 不能太小 --> 保证 判别器 D 有足够的更新

  • D 要对 G 生成的不错的数据 有一定的判别能力,不然 G 很无聊的,都不想糊弄 D,轻而易举。

  • 警察不给力,假钞不会被发现,抓不到造假者,无需提升工艺,游戏结束。

k 不能太大 --> D 过于完美,D(G(z^(i))) = 0,对值为 0 求导,G 梯度更新有困难

  • 警察超厉害,造假者产一点假钞就会被发现,端掉制造工厂;造假者赚不到钱,不能提升工艺,结束游戏。

最好情况:双方实力相当、相爱相杀、一起进步。

k 的设计目标:使得 D 和 G 的更新进度差不多

如何判断 GAN收敛?min max 两项

一方不动、一方动;双方都在相互抖动;有很多 GAN 收敛相关的研究工作。

Model 最后一段:G 的 梯度更新 问题

第二项 log( 1 - D(G(z)) ) 变为 log( D(G(z)) )

Why 通过变化 目标函数第二项 来解决 ?

早期 G 比较弱,生成数据和真实采样的数据差距很大。--> D 判别器 很容易区分数据来源。 --> log( 1 - D(G(z)) ) 变为 log(1 - 0) = 0 --> 无法更新判别器 D 的参数。

改变 value function:min log( 1 - D(G(z)) ) --> max log( D(G(z)) )

如果 D 判别得很好,log( D(G(z)) ) = log( 0 ), -∞ 带来其它问题,有后续的研究工作改进。

6理论

value function 的全局最优解 p_g = p_data, 当且仅当 G 生成器学到的分布和真实数据分布一致。

算法 1 能求解 value function

4.1 Global optimality of p_g = p_data 目标函数是正确的

固定的生成器 G,最优的判别器 D 是 D_G^*(x) = p_data(x) / ( p_data(x) + p_g(x) )

p_data(x): x 在真实数据分布中的概率 ∈[0,1]

p_g(x): x 在生成器拟合的分布中的概率∈[0,1]

a global optimum: D_G^*(x) = 1 / 2

img

D 的训练过程:从真实数据分布和噪音变量的先验分布中采样数据,用 value function 训练一个二分类的分类器,但分类器输出的概率一直是 1 / 2 --> D 什么都分不出来 --> 分布是重合的

two sample test 判断两块数据是否来自同一分布。

i.e., T 分布检测 in 数据科学

1 / 2 的启示:高维数据统计分布不好用时,训练一个分类器。

这个分类器能分开两块数据 --> 不同分布

这个分类器不能分开两块数据 --> 相同分布

分类器的应用:

部署 训练集上训练好的模型 到另一个环境,用一个分类器检测 训练集和测试集 是否同一分布,避免部署的新环境和已有模型的不匹配。

Global optimality 证明

期望的积分形式 代入 value function

用复合函数 x = g(z) 消除 z

抽象为 a log(y) + b log(1 - y) convex function

求导得到 最优点 y = a / (a + b)

最优解 D 对 任意 x 的输出 = y = a / (a + b) = p_data(x) / ( p_data(x) + p_g(x) )

img

D_G^* 代入 value function 得到 C(G)

max_D V(G, D) --> min C(G)

img

Theorem 1: C(G) 取全局最小值时,if and only if 生成器 G 生成的数据分布和真实数据分布一样 p_g = p_data

KL 散度:衡量两个分布

KL(P ||Q)= E_{x ~ P} log( P(x) / Q(x) )

在知道 P 的情况下,至少要多少个 bit 能够把 Q 给描述出来。

img

分母凑成 和为 1 的概率分布 1 / 2 *( p_data(x) + p_g(x) ),分子凑的 1/2 根据对数运算法则,为 + log 1 / 2

img

KL 散度 ≥ 0

KL 散度 = 0 的情况是,P Q 两个分布相等

推导 p_data = p_g

img

KL divergence (不对称,PQ不可互换)两个写成 JS divergence (对称,PQ可互换)

GAN 使用了 JS divergence,训练容易一些。

之后的研究工作有更好的目标、训练更容易。

4.1总结 value function 很不错!

4.2 Convergence of algorithm 1

算法 1 能够优化 value function

proposition 2:当 G 和 D 有足够的容量的时候,在算法 1 的每一步,判别器 D 是可以达到最优解的,对 生成器 G 的优化 如下

判别器 D 已经换成了 D_G^*, p_g converges to p_data

img

将 V(G, D) 看成 U(p_g, D),一个关于 p_g 的函数。p_g 是模型 or 分布,p_g 也是一个函数。

函数的输入可以是标量 or 向量。

U(p_g, D) 是一个函数的函数,输入是一个函数,输入不再是一个值,而是一个值 + 一个计算。

之前:在一个高维的值空间做迭代

现在:在一个函数空间做梯度下降。

看成 p_g 的函数,第二项关于 p_g 的期望展开,是 p_g 的线性函数(log(1 - D_G^*(x)) 与 p_g 无关,so linear function)--> U(p_g, D) is convex in p_g

img

sup_D U(p_g, D) is convex in p_g 一个凸函数的上限函数还是凸函数。

每一步把 D 求到最优,对一个 convex function 梯度下降,会得到最优点。

假设:每次对 D 优化到极致

实际:只是迭代 k 步。

证明不能说明 algorithm 1 works,但实际 algorithm 1跑的效果还可以。

“效果还可以”的误解:算法一 难收敛。

但没关系,坑留给后来的人填。

7实验+结论

最后一列是GAN生成的

虽然分辨率低,但当时很震撼,i.e.,电视刚出现画面时

img

disad:训练难,G 和 D 需要比较好的均衡,否则生成的图片很难看。

adv:G 没有去看真实数据,没有试图拟合数据特征,生成的图片中边缘比较锐利。 ❌

未来研究方向

conditional GAN,本文 GAN 不受控制,增加 c 控制条件,i.e., 手写数字的 0 - 9

有几万工作继续改进。

8评论

写作:清晰明确,GAN 在做什么?

Abstract: GAN 在干什么?

Intro: 短 + 故事性(why 需要 GAN,无需拟合似然函数的参数、计算简单)

Related works: GAN 与已有工作 adversarial examples 的区别

真正伟大的工作:不在于你的那些想法是否出现过,而在于你给大家展示,这个工作可以取得非常好的应用;让别人信服,有人 follow,把这个领域做大做强。

adversarial nets: value function 如何做优化

theoretical results: 证明 value function 为什么能得到最优解,求解算法 algorithm 1 差不多能得到最优解

experiments + pros & cons + future works

开创性比较高的工作:适合本文的写法

创新度不够的工作:讲清楚和别人的区别、文章的贡献

GAN 算法评论:

  • 无监督学习,无需标注数据

  • 标签 by 数据来自真实采样 or 来自生成器拟合的

  • 有监督学习的损失函数来训练无监督学习,训练高效

  • 自监督学习的灵感来源 i.e., BERT

自监督学习(Self-supervised learning) 旨在对于无标签数据 ,通过设计 辅助任务(Proxy tasks) 来挖掘数据自身的表征特性作为监督信息,来提升模型的特征提取能力(PS:这里获取的监督信息不是指自监督学习所面对的原始任务标签,而是构造的辅助任务标签)。注意这里的两个关键词:无标签数据和辅助信息,这是定义自监督学习的两个关键依据。

有监督(Supervised): 监督学习是从给定的带标签训练数据集中学习出一个函数(模型参数),在输入新的测试数据时,可以根据这个函数预测结果;

无监督(Unsupervisedg): 无监督学习是从无标签数据中分析数据本身的规律性等解析特征。无监督学习算法分为两大类:基于概率密度函数估计的方法和基于样本间相似性度量的方法;

半监督习(Semi-supervised): 半监督介于监督学习和无监督之间,即训练集中只有一部分数据有标签,需要通过伪标签生成等方式完成模型训练;

弱监督(Weakly-supervised): 弱监督是指训练数据只有不确切或者不完全的标签信息,比如在目标检测任务中,训练数据只有分类的类别标签,没有包含Bounding box坐标信息。


http://www.kler.cn/news/294208.html

相关文章:

  • Qt 去掉QDialog对话框的问号
  • 【GD32】外部存储器控制器(EXMC)驱动16位8080时序并口屏(GD32F470ZGT6)
  • 企业级WEB应用服务器---TOMACT
  • LeetCode --- 413周赛
  • Spring + ActiveMQ 整合实现发布/订阅(publish-subscribe)消息发送案例
  • OPenCV结构分析与形状描述符(2)计算轮廓周长的函数arcLength()的使用
  • 机器学习面试:SVM为什么使用对偶函数求解?
  • 力扣1049-最后一块石头的重量II(Java详细题解)
  • 3个恢复方法详解:iPhone手机快速找回备忘录
  • 数据血缘系列(19)—— 数据血缘技术实现之数据血缘可视化
  • 高德地图SDK Android版开发 10 InfoWindow
  • 【Redis】Windows平台编译调试运行Redis,并附编译问题解决方案
  • 用python fastapi写一个http接口,使ros2机器人开始slam toolbox建图
  • @import导入样式以及scss变量应用与static目录
  • 4. GIS前端工程师岗位职责、技术要求和常见面试题
  • Windows 11的新游戏手柄键盘现在可让玩家使用Xbox手柄打字
  • UE引擎工具链
  • vue3+ant design vue实现表格导出(后端返回文件流类型导出)
  • 多线程的实现和成员方法
  • 2 php8.0 中开发一个websocket 聊天 表设计
  • 启动第一个docker容器
  • Vue——day11之生命周期
  • Java使用类加载器解决类冲突,多版本jar共存
  • MySQL5.7.36之高可用架构部署-MHA
  • 大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
  • 探索 Zed 编辑器:速度与协作的巅峰之作
  • 怎麼實現爬蟲自動換代理-okeyproxy
  • 用idea写Spark程序时,想要在控制台打印日志?
  • CentOS7 部署 Zabbix 监控平台———监控网络设备,Linux 主机、Windows 主机
  • 启动Spring Boot报错