生成模型

给定数据集,希望生成模型产生与训练集同分布的新样本。对于训练数据服从\(p_{data}(x)\);对于产生样本服从\(p_{model}(x)\)。希望学到一个模型\(p_{model}(x)\)与\(p_{data}(x)\)尽可能接近。

这也是无监督学习中的一个核心问题——密度估计问题。有两种典型的思路:

  1. 显式的密度估计:显式得定义并求解分布\(p_{model}(x)\),如VAE。
  2. 隐式的密度估计:学习一个模型\(p_{model}(x)\),而无需显式定义它,如GAN。

VAE

AE

首先介绍下自编码器(Auto Encoder, AE),它将输入的图像X通过编码器encoder编码为一个隐向量(bottleneck)Z,然后再通过解码器decoder解码为重构图像X',它将自己编码压缩再还原故称自编码。结构如下图所示:

以手写数字数据集MNIST为例,输入图像大小为28x28,通道数为1,定义隐向量的维度(latent_dim)为1 x N,N=20。经过编码器编码为一个长度为20的向量,再通过解码器解码为28x28大小的图像。将生成图像X'与原始图像X进行对比,计算重构误差,通过最小化误差优化模型参数:

\[Loss = distance(X, X')
\]

一般distance距离函数选择均方误差(Mean Square Error, MSE)。AE与PCA作用相同,通过压缩数据实现降维,还能把降维后的数据进行重构生成图像,但PCA的通过计算特征值实现线性变换,而AE则是非线性。

VAE

如果中间的隐向量的每一分量取值不是直接来自Encoder,还是在一个分布上进行采样,那么就是VAE(Variational Auto Encoder),结构如下图所示:

还是上面的例子,这里的Z维度还是1 x 20,但是每一分量不是直接来自Encoder,而是在一个分布上进行采样计算,一般来说分布选择正态分布(当然也可以是其他分布)。每个正态分布的\(\mu\)与\(\sigma\)由Encoder的神经网络计算而来。关于Z上每一分量的计算,这里,\(\epsilon\)从噪声分布中随机采样得到。

\[z^{(i,l)}=\mu^{(i)}+\sigma^{(i)}\cdot\epsilon^{(l)}\space\mathrm{and}\space\epsilon^{(l)}\sim N(0,I)
\]

在Encoder的过程中给定x得到z就是计算后验概率\(q_\phi(z|x)\),学习得到的z为先验分布\(p_\theta(z)\),Decoder部分根据z计算x的过程就是似然估计\(p_\theta(x|z)\),训练的目的也是最大化似然估计(给出了z尽可能得还原为x)。

边缘似然度\(p_\theta(x)=\int p_\theta(z)p_\theta(x|z)\,{\rm d}z\),边缘似然度又是每个数据点的边缘似然之和组成:\(\log p_\theta(x^{(1)},\cdots,x^{(N)})=\sum_{i=1}^N\log p_\theta(x^{(i)})\),可以被重写为:

\[\log p_\theta(x^{(i)})={\rm D_{KL}}(q_\phi(z|x^{(i)})||p_\theta(z|x^{(i)}))+{\cal L}(\theta,\phi;x^{(i)})
\]

等式右边第二项称为边缘似然估计的下界,可以写为:

\[\log p_\theta(x^{(i)})\ge{\cal L}(\theta,\phi;x^{(i)})=\mathbb{E}_{z\sim q_\phi(z|x)}[-\log q_\phi(z|x)+\log p_\theta(x|z)]
\]

得到损失函数:

\[{\cal L}(\theta,\phi;x^{(i)})=-{\rm D_{KL}}(q_\phi(z|x^{(i)})||p_\theta(z))+\mathbb{E}_{z\sim q_\phi(z|x^{(i)})}[\log p_\theta(x^{(i)}|z)]
\]

GAN

生成对抗网络(Generative Adversarial Nets, GAN)需要同时训练两个模型:生成器(Generator, G)和判别器(Discriminator, D)。生成器的目标是生成与训练集同分布的样本,而判别器的目标是区分生成器生成的样本和训练集中的样本,两者相互博弈最后达到平衡(纳什均衡),生成器能够以假乱真,判别器无法区分真假。

生成器和判别器最简单的应用就是分别设置为两个MLP。为了让生成器在数据x学习分布\(p_g\),定义一个噪声分布\(p_z(z)\),然后使用生成器\(G(z;\theta_g)\)将噪声映射为生成数据x'(\(\theta_g\)是生成器模型参数)。同样定义判别器\(D(x;\theta_d)\),输出为标量表示概率,代表输入的x来自数据还是\(p_g\)。训练D时,以最大化分类训练样例还是G生成样本的概率准确性为目的;同时训练G以最小化\(\log(1-D(G(z)))\)为目的,两者互为博弈的双方,定义它们的最大最小博弈的价值函数\(V(G,D)\):

\[\min_G\max_DV(D,G)=\mathbb{E}_{x\sim p_{data}}[\log D(x)]+\mathbb{E}_{z\sim p_{z}}[\log(1-D(G(z)))]
\]

可以得到生成器与判别器的损失函数:

\[ \mathcal{L}_G = -\log(D(G(z))) \\
\mathcal{L}_D = -\log(D(x)) - \log(1 - D(G(z)))
\]

极端情况下如果D很完美,\(D(x)=1,D(G(z))=0\),最后两项结果都为0,但如果存在误分类,由于log两项结果会变为负数。随着G的输出越来越像x导致D误判,价值函数V也会随之变小。

计算它们的期望(\(\mathbb{E}_{x\sim p}f(x)=\int_xp(x)f(x){\rm d}x\)):

\[V(G,D)=\int_xp_{data}(x)\log D(x)\,{\rm d}x+\int_zp_z(z)\log(1-D(G(z)))\,{\rm d}z \\
=\int_xp_{data}(x)\log D(x)+p_g(x)\log(1-D(x))\,{\rm d}x
\]

当D取到最优解时,上面的最大最小博弈价值函数\(V(G,D)\)可以写为:

\[C(G)=\max_DV(G,D)= \\
\mathbb{E}_{x\sim p_{data}}[\log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}]+\mathbb{E}_{x\sim p_g}[\log\frac{p_g(x)}{p_{data}(x)+p_g(x)}]
\]

当\(p_g=p_{data}\),取到\(-\log4\),上式可以写成KL散度的形式:

\[C(G)=-\log4+{\rm KL}(p_{data}||\frac{p_{data}+p_g}{2})+{\rm KL}(p_g||\frac{p_{data}+p_g}{2})
\]

当\(p_g=p_{data}\)时,D取最小值也就是最优解。对于对称的KL散度,可以写成JS散度的形式:

\[C(G)=2\cdot{\rm JS}(p_{data}||p_g)-\log4
\]

参考文献

  1. PyTorch-VAE-vanilla_vae.py
  2. Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).
  3. DALL·E 2(内含扩散模型介绍)【论文精读】
  4. Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems 27 (2014).
  5. 【概率论】先验概率、联合概率、条件概率、后验概率、全概率、贝叶斯公式
  6. 机器学习方法—优雅的模型(一):变分自编码器(VAE)
  7. GAN论文逐段精读【论文精读】

生成模型的两大代表:VAE和GAN的更多相关文章

  1. GAN︱生成模型学习笔记(运行机制、NLP结合难点、应用案例、相关Paper)

    我对GAN"生成对抗网络"(Generative Adversarial Networks)的看法: 前几天在公开课听了新加坡国立大学[机器学习与视觉实验室]负责人冯佳时博士在[硬 ...

  2. tflearn kears GAN官方demo代码——本质上GAN是先训练判别模型让你能够识别噪声,然后生成模型基于噪声生成数据,目标是让判别模型出错。GAN的过程就是训练这个生成模型参数!!!

    GAN:通过 将 样本 特征 化 以后, 告诉 模型 哪些 样本 是 黑 哪些 是 白, 模型 通过 训练 后, 理解 了 黑白 样本 的 区别, 再输入 测试 样本 时, 模型 就可以 根据 以往 ...

  3. GAN实战笔记——第二章自编码器生成模型入门

    自编码器生成模型入门 之所以讲解本章内容,原因有三. 生成模型对大多数人来说是一个全新的领域.大多数人一开始接触到的往往都是机器学习中的分类任务--也许因为它们更为直观:而生成模型试图生成看起来很逼真 ...

  4. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

  5. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  6. 【图机器学习】cs224w Lecture 8 & 9 - 图神经网络 及 深度生成模型

    目录 Graph Neural Network Graph Convolutional Network GraphSAGE Graph Attention Network Tips Deep Gene ...

  7. Java轻量级业务层框架Spring两大核心IOC和AOP原理

    IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...

  8. 生成模型(Generative)和判别模型(Discriminative)

    生成模型(Generative)和判别模型(Discriminative) 引言    最近看文章<A survey of appearance models in visual object ...

  9. 生成模型(Generative Model)和 判别模型(Discriminative Model)

    引入 监督学习的任务就是学习一个模型(或者得到一个目标函数),应用这一模型,对给定的输入预测相应的输出.这一模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X). 监督学习方法又可以 ...

  10. 文档主题生成模型(LDA)

    一.问题描述 1.1文本建模相关 统计文本建模的目的其实很简单:就是估算一组参数,这组参数使得整个语料库出现的概率最大.这是很简单的极大似然的思想了,就是认为观测到的样本的概率是最大的.建模的目标也是 ...

随机推荐

  1. Blazor前后端框架Known-V1.2.12

    V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

    一.如果用go语言,为什么我们分析随机化算法的期望运行时间,而不是其最坏运行时间呢? 文心一言: 在分析算法的性能时,期望运行时间是一个重要的指标,它描述了算法在平均情况下的表现.期望运行时间考虑了所 ...

  3. 深入理解Linux内核——内存管理(2)

    提要:本系列文章主要参考MIT 6.828课程以及两本书籍<深入理解Linux内核> <深入Linux内核架构>对Linux内核内容进行总结. 内存管理的实现覆盖了多个领域: ...

  4. 架构师必会之-DBA级问题的数据库底层设计思想

    大家好,我是sulny_ann,这期想跟大家分享一下我之前在面试里面问过比较难的数据库相关的问题. 大家经常也在调侃后端好像就是技术数据库的增删改查,所以作为后端开发,你对应数据库这一块掌握的怎么样, ...

  5. 4.go语言复合类型简述

    目录 1. 本章前瞻 2.来自leetcode的例题 描述 分析 题解 3. 复合类型新版本的变化 3.1 string和[]byte的高效转化 3.2 内置函数clear 4. 复合类型概述 4.1 ...

  6. Iphone常用工具

    iFunBox itools 百度助手 崩溃日志的路径 /var/mobile/Library/Logs/CrashReporter

  7. C#结合OpenCVSharp4图片相似度识别

    OpenCVSharp4图片相似度识别 需求背景:需要计算两个图片的相似度,然后将相似的图片进行归纳 1. 图片相似度算法 由于我是CRUD后端仔,对图像处理没什么概念.因此网上调研了几种相似度算法分 ...

  8. 使用HTML一键打包IPA工具打包KRPANO全景项目

    该软件已经被GDB苹果网页一键打包工具取代,详情参考如下链接 GDB苹果网页一键打包 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码 ...

  9. 小知识:vi 查找如何不区分大小写

    在使用vi查找数据库的truncate记录日志时,发现对应语句夹杂了大小写,不够规范: 而vi默认查找是区分大小写的,如何不区分大小写查找指定内容呢? 有两种方式: (1)在查找指令后面额外加上\c标 ...

  10. JDK17和JDK8在windows上同时安装方便切换

    参考:https://blog.csdn.net/chencaw/article/details/121674479 一.JDK8的安装 1.电脑上已经安装了JDK8,安装主要步骤如下 (1)创建JA ...