watch: ML - 白板 30 | Review of Generative models

总结之前讲过的各种模型,引出之后要讲的生成模型

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. 模型分类

P2

按照解决的任务:监督 vs. 非监督 (自监督未介绍) 对各种模型分类

任务:分类,回归,标记,降维,聚类,特征学习,密度估计,生成数据

把机器学习模型分为“概率”与“非概率”一般没太大必要,但是生成模型一定是与概率相关的,所以这里以概率为分类标准

监督学习任务

  • 概率模型(建模与概率相关)

    1. 判别模型

      对”条件概率“的分布建模:逻辑回归(LR),最大熵(MEMM),条件随机场(CRF),(输出为概率分布的参数的)神经网络NN

    2. 生成模型

    • 简单的神经网络只能是判别模型,不是生成模型。但是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

各种生成模型

生成模型分成监督,非监督不重要

  1. Naive Bayes

    朴素贝叶斯是最简单的生成模型,直接描述 x,假设简单:因为它是判别模型,所以它假设是在给定 y 的情况下,样本 x∈ℝᵖ 可以表示成各维度之积

    P(x|y) = ∏ᵢ₌₁ᵖ p(xᵢ|y)

  2. Mixture model

    GMM 认为 x 由 z 生成,在给定 z 的情况下,x服从高斯分布。

  3. Time-series model

    从时间序列角度,从有限到无限,比如 HMM,卡尔曼滤波,粒子滤波

  4. Non-parametric

    在参数空间上,从有限到无限:高斯过程 Gaussian process/ Dirichlet process,是非参贝叶斯模型, 它的参数不再是固定的,未知的常数了。高斯分布是参数模型:通过learning把(mu,sigma)学习出来,

  5. Mixed Membership Model

    也是混合模型,比GMM那中复杂些,变量多。LDA 隐含狄利克雷分布,用来做文档聚类

  6. Factorial Modeel

    因子模型:因子分析FA,概率PCA P-PCA, ICA, 稀疏编码sparse coding

以上 6 种都是结构化的概率图模型,这些模型每一类都有固定的套路,思想比较底层,专家设计的处理特定问题的算法。与下面的“深度”生成模型对应,它们则是“浅层”生成模型。

以下是与深度学习神经网络相结合的模型:

  1. Energy-based Model

    Boltzmann Machine玻尔兹曼机,包括 sigmoid network,deep belif network, 都是无向图模型

  2. VAE

    自编码器与概率图结合,用变分的手段处理

  3. GAN

  4. Auto regressive model

    自回归网络

  5. Flow-based model


3. 模型表示&推断&学习

P3

从模型表示,推断,和学习的角度去认识一个生成模型

模型表示

“形神”兼备

    • 节点可以是离散的,有可以是连续的;
    • 边可以是有向的,也可以是无向的。如果所有的边是有向的,则为有向图模型 以上写出来的11 种除了 玻尔兹曼机,其他都是有向图模型
    • 含有隐变量节点就是隐变量模型,若不使用隐变量就是“fully observed model”
    • 概率图的结构:从层次来看,shallow (前6种) 或者 deep(后5种); 或者从连接数量来看,就对应 sparse 和 dense 两类, 比如玻尔兹曼机的层间的连接没有缺失,它是稠密的, 而HMM一个隐变量只有2-3条边
  1. 神(概率分布本身)

    对于样本的概率密度函数来讲,它既可以是参数化模型,即它的参数是固定的,未知的常量,也可以是非参数化模型,即非参贝叶斯。

    • 参数角度 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. 模型分类

P4

主要关注:无监督的,有向图的,深层结构的,参数化的,模型

Likelihood-based model

  • 概率密度函数是显式的
    • 推断 Tractable

      1. Fully-observed model 它的概率/似然可直接求出,比如自回归
      2. 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

      1. 基于变分推断,比如VAE
      2. 基于马尔科夫链,比如 Energy-based model

Likelihood-free model

  • 概率密度函数是隐式的,不直接关心P(X),
    1. GAN 直接用generator 生成样本,然后用 判别器 去评价样本好坏。它是直接生成样本,而不是先估计PDF,再从PDF中采样生成样本。
    2. 不直接生成样本,可以用MC 采样,比如“生成随机网络” GSN,有点类似“去噪自编码器”

5. 概率图 vs. 神经网络

P5

他俩不是非此即彼的关系,不是互斥的,是独立的,两者都有发生的可能性

神经网络里有“计算图”

概率图是概率分布的表示,而(前馈)神经网络是函数逼近器,只不过函数可能比较复杂,如果不给神经网络加修正,它与概率没关系。

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. 重参数化技巧(随机后向传播)

P6

最基础的神经网络就是一个函数逼近器。用样本 (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 之间的函数,神经网络的参数是θ:

1
2
3
x ——> NN ——> y
z ————┘

更变量之间的关系画得更详细: μ, σ 都从神经网络中出来,它们就是 θ 的函数,则 y = μ_θ(x) + σ_θ(x)⋅z

1
2
3
4
x ─> NN-θ ──> μ_θ(x) ──── + ──> y
        └───> σ_θ(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)