总结之前讲过的各种模型,引出之后要讲的生成模型
1. 定义
P1 - 【机器学习】白板推导系列(三十) ~ 生成模型综述(Generative Model Introduction)
生成模型除了生成数据还能做什么任务?
GAN 用来生成数据。 GMM 用来做聚类任务的。 这2个都是无监督学习(无标签)。 逻辑回归虽然与概率相关,但它不是生成模型。P(Y=1 | X) = ?, P(Y=0 | X) = ? 只是对条件概率建模,而不关注样本数据X本身的分布,
所以(概率)生成模型关注的是样本的概率分布本身,而与它要解决的任务没有必然的联系。 既可以解决监督学习的任务(对 P(X,Y) 建模),也可以解决无监督学习的任务,对于隐变量模型,可以构造 P(X,Z) 并建模;或者不用隐变量,比如自回归模型,直接对 P(X) 建模(把P(X) 拆成各个维度之积)。
所以关注样本的概率分布的模型就是生成模型
2. 模型分类
按照解决的任务:监督 vs. 非监督 (自监督未介绍) 对各种模型分类
任务:分类,回归,标记,降维,聚类,特征学习,密度估计,生成数据
把机器学习模型分为“概率”与“非概率”一般没太大必要,但是生成模型一定是与概率相关的,所以这里以概率为分类标准
监督学习任务
-
概率模型(建模与概率相关)
-
判别模型
对”条件概率“的分布建模:逻辑回归(LR),最大熵(MEMM),条件随机场(CRF),(输出为概率分布的参数的)神经网络NN
-
生成模型
- 简单的神经网络只能是判别模型,不是生成模型。但是NN里分步式表示可以和概率图模型结合,就变成了(深度)生成模型
- 具体见下文
-
-
非概率模型(建模时未考虑概率分布),若要解决分类问题,则大概率是判别模型
- 感知机PLA,(硬间隔)支持向量机SVM,KNN,(输出为类别的)神经网络NN,树模型
非监督学习任务
-
概率模型:必然是生成模型,因为非监督里没有标签Y无法判别,只能描述样本X的概率分布。概率图模型中的大部分是生成模型
-
非概率模型:PCA降维(SVD分解),潜语义分析LSA (pLSA, LDA),K-means,(不带标签的NN)自编码器Auto-Encoder
- PCA 从概率角度看,它就是P-PCA的一种,就是因子分析Factor Analysis
- LSA 的概率模式是 pLSA, 再改造就是 LDA
- K-means 从概率角度看,是特殊的GMM
- Auto-Encoder 的概率模式就是 VAE
各种生成模型
生成模型分成监督,非监督不重要
-
Naive Bayes
朴素贝叶斯是最简单的生成模型,直接描述 x,假设简单:因为它是判别模型,所以它假设是在给定 y 的情况下,样本 x∈ℝᵖ 可以表示成各维度之积
P(x|y) = ∏ᵢ₌₁ᵖ p(xᵢ|y)
-
Mixture model
GMM 认为 x 由 z 生成,在给定 z 的情况下,x服从高斯分布。
-
Time-series model
从时间序列角度,从有限到无限,比如 HMM,卡尔曼滤波,粒子滤波
-
Non-parametric
在参数空间上,从有限到无限:高斯过程 Gaussian process/ Dirichlet process,是非参贝叶斯模型, 它的参数不再是固定的,未知的常数了。高斯分布是参数模型:通过learning把(mu,sigma)学习出来,
-
Mixed Membership Model
也是混合模型,比GMM那中复杂些,变量多。LDA 隐含狄利克雷分布,用来做文档聚类
-
Factorial Modeel
因子模型:因子分析FA,概率PCA P-PCA, ICA, 稀疏编码sparse coding
以上 6 种都是结构化的概率图模型,这些模型每一类都有固定的套路,思想比较底层,专家设计的处理特定问题的算法。与下面的“深度”生成模型对应,它们则是“浅层”生成模型。
以下是与深度学习神经网络相结合的模型:
-
Energy-based Model
Boltzmann Machine玻尔兹曼机,包括 sigmoid network,deep belif network, 都是无向图模型
-
VAE
自编码器与概率图结合,用变分的手段处理
-
GAN
-
Auto regressive model
自回归网络
-
Flow-based model
3. 模型表示&推断&学习
从模型表示,推断,和学习的角度去认识一个生成模型
模型表示
“形神”兼备
-
形
- 节点可以是离散的,有可以是连续的;
- 边可以是有向的,也可以是无向的。如果所有的边是有向的,则为有向图模型 以上写出来的11 种除了 玻尔兹曼机,其他都是有向图模型
- 含有隐变量节点就是隐变量模型,若不使用隐变量就是“fully observed model”
- 概率图的结构:从层次来看,shallow (前6种) 或者 deep(后5种); 或者从连接数量来看,就对应 sparse 和 dense 两类, 比如玻尔兹曼机的层间的连接没有缺失,它是稠密的, 而HMM一个隐变量只有2-3条边
-
神(概率分布本身)
对于样本的概率密度函数来讲,它既可以是参数化模型,即它的参数是固定的,未知的常量,也可以是非参数化模型,即非参贝叶斯。
- 参数角度 parametric vs. Non-parametric models
- 显性与隐性密度函数 Implicit Density vs. Explicit Density。显性是直接对P(X) 建模,若是隐变量模型,就对P(X,Z)建模,若是fully observed model,就直接对P(X) 分解。 隐性不直接对 P(X) 建模,因为它的任务不是先估计出概率密度函数,再从中生成样本。只需要确保样本是从 P(X) 中生成的即可。上述的只有 GAN 是Implicit 的,其余10种都是显式的
推断
推断是否 tractable, (intractable)
学习
Likelihood-based model (极大似然估计) vs. Likelihood-free model (GAN 不关心 P(X),也就不管样本的似然是多少,它有自己的判别器和目标函数)
4. 模型分类
主要关注:无监督的,有向图的,深层结构的,参数化的,模型
Likelihood-based model
- 概率密度函数是显式的
-
推断 Tractable
- Fully-observed model 它的概率/似然可直接求出,比如自回归
- Change of variable model 变量替换,比如 Flow-based 模型不直接求解复杂的P(X), 而把x与一个服从简单分布的变量z,用一个连续可逆的复杂函数联系起来,以引入非线性转换,x=g(z),然后去学习 g(z) , 因为 z=g⁻¹(x),所以 Pₓ(X) = Pz(g⁻¹(x) | ∂g⁻¹(x)/∂x)
-
推断 Intractable 就用近似推断Approximate inference
- 基于变分推断,比如VAE
- 基于马尔科夫链,比如 Energy-based model
-
Likelihood-free model
- 概率密度函数是隐式的,不直接关心P(X),
- GAN 直接用generator 生成样本,然后用 判别器 去评价样本好坏。它是直接生成样本,而不是先估计PDF,再从PDF中采样生成样本。
- 不直接生成样本,可以用MC 采样,比如“生成随机网络” GSN,有点类似“去噪自编码器”
5. 概率图 vs. 神经网络
他俩不是非此即彼的关系,不是互斥的,是独立的,两者都有发生的可能性
神经网络里有“计算图”
概率图是概率分布的表示,而(前馈)神经网络是函数逼近器,只不过函数可能比较复杂,如果不给神经网络加修正,它与概率没关系。
x –> NN –> y,y可以是离散的类别,也可以是连续的数值
NN 的作用只有一个:逼近函数。输入样本,得到目标函数的值,用此值对 NN 中的参数(权重、偏置)求梯度,然后做梯度下降
概率图模型可笼统的分为:有向图模型(贝叶斯网络),无向图模型(比如Boltzmann machine)
玻尔兹曼机既属于无向图模型,也属于神经网络,代表“广义连结主义”。
神经网络也可分为:确定性神经网络(CNN,RNN),随机性神经网络(比如 Boltzmann machine,sigmoid belief network)
所以在讨论概率图与神经网络的区别时,不考虑 Boltzmann machine, 只比较有向图模型(贝叶斯网络)与确定性神经网络
从“表示”,“推断”,“学习” 3个角度对比:
模型表示
-
贝叶斯网络:结构化的,浅层的,稀疏的(高维问题有各种条件独立性假设),节点有概率意义,具有可解释性,每个节点在建模时被赋予意义,比如LDA和HMM
-
神经网络:深层的,稠密的(无条件独立性假设),节点仅用于计算σ(∑wᵢxᵢ),没有任何概率意义/物理意义。它的解释性未知也不重要,神经网络每层的意义在建模时并未赋予。
推断
- 贝叶斯网络:精确推断,近似推断,MC采样推断,变分推断,估计后验分布
- 神经网络:它的推断很容易(前向)但没有意义,参数的分布不重要,只关注输出
学习
- 贝叶斯网络:Likelihood-based: EM
- 神经网络:梯度下降(反向传播:一种高效的求导方法,就是链式求导法则+动态规划(递归+Cache))
用法
- 概率图描述了模型,适合高级别的推理任务 high-level reasoning
- 神经网络(的计算图)只用来计算,适合低级别简单的推理 low-level reasoning:弱推理,只是分类图像,而没有像人类一样理解;还适合表示学习:声音、图像识别(现在的语言模型是两个的综合)
6. 重参数化技巧(随机后向传播)
最基础的神经网络就是一个函数逼近器。用样本 (X,Y) 去逼近函数 y=f(x;θ)。基于 y 构建目标函数,用BP求神经网络的权重和偏置的梯度,通过随机梯度下降修正
用神经网络逼近概率分布(概率图),结合到一起就叫随机后向传播 Stochastic Backpropagation 或者叫重参数化技巧 Reparameterization Trick
假设 y 是一个概率分布,它的概率密度函数是 P(y)。
假定 P(y) = N(μ,σ²),当对它采样时,先对中间变量 z 采样,再由 z 得到 y,其中 z 服从标准正态分布 z~N(0,1),那么 y 与 z 的关系就是 y = μ+σ⋅z。
因为对标准正态分布是很容易采样的,先采一个 z⁽ᶦ⁾~N(0,1),那么 y⁽ᶦ⁾=μ+σ⋅z⁽ᶦ⁾
给定 z,则 y 也固定,把 μ,σ 看作是未知但确定的参数,所以 y 与 z 之间就是一个线性变换。
可以将 y 看作一个函数 y = f(μ,σ,z),其中 z 是随机变量,除它之外都是确定性变换,可以用神经网络去逼近这个线性函数
z –> NN –> y,NN 逼近 f;因为 z 是个随机变量,所以 y 也是个随机变量
以上假设了 P(y) 是正态分布,所以 y 与 z 之间是线性关系,所以神经网络的参数是 μ, σ,令 θ={μ,σ²}。
可以构造关于 y 的目标函数: J(y) ,因为 y 是关于μ, σ 的函数,所以求梯度∇_θ J(y)时:
∂J(y)/∂θ = ∂J(y) / ∂y ⋅ ∂y/∂θ
如果 目标变量 是个条件概率分布: P(y|x) = N(x; μ,σ²),然后 z 还是服从一个标准正态分布 z~N(0,1),那么 y 与 z 的关系是:y = μ(x) + σ(x)⋅z 其中 x 是输入,所以 μ,σ 都是 x 的函数。
仍然可用神经网络去逼近 y 与 z 之间的函数,神经网络的参数是θ:
|
|
更变量之间的关系画得更详细: μ, σ 都从神经网络中出来,它们就是 θ 的函数,则 y = μ_θ(x) + σ_θ(x)⋅z
|
|
也可以用两个NN 分别逼近 μ, σ : μ(x) = f(x;θ) σ(x) = g(x;θ)
然后构造关于 y 的目标函数 J_θ(y) = ∑ᵢ₌₁ᴺ ||y-yⁱ||²,然后对 θ 求梯度:
∂J(y)/∂θ = ∂J(y) / ∂y ⋅ ∂y/∂μ ⋅ ∂μ/∂θ + ∂J(y) / ∂y ⋅ ∂y/∂σ ⋅ ∂σ/∂θ
所以无论想求一个普通的概率分布,还是要求一个条件概率分布,都可以用神经网络逼近那个概率分布
在本节的例子中,都是假设 P(y) 是高斯分布,即它是连续的,可微的,而且要求 y 本身是一个连续的随机变量,因为需要 y 对 μ,σ 求偏导。 如果 y 是离散随机变量,就不能用这个方法。
最后,可以把上面两种情况,合并起来描述: P(y|w),如果只求 P(y),则w 就是参数 θ;如果要求 P(y|x),那 w 就代表 x 和 θ,w={x;θ},x 无所谓,它是条件概率中的条件,是输入。
神经网络的参数 w,用神经网络去逼近概率分布 P(y|w)