前面所详细描述的模型以浅层的机器学习为主。本章将承上启下引出后面深度机器学习的部分。本小节,主要讲述的是什么是生成模型,它是不是只是生成样本,生成数据?它的任务是什么?精准的定义是什么?
这个问题实际上在之前的章节中有过详细的介绍。这里更进一步总结。回忆一下,之前讲过的简单的生成模型,包括高斯混合分布(GMM),GMM 的主要任务是聚类,属于非监督学习;而监督学习中的生成模型,最简单的有朴素贝叶斯模型,主要任务是分类。而Logistics regression 显然不是生成模型,简单的说,LR 模型主要是对 P ( Y = 1 ∣ X ) P(Y = 1|X) P(Y=1∣X) 或 P ( Y = 0 ∣ X ) P(Y = 0|X) P(Y=0∣X) 条件概率进行建模,并不关心样本 X X X 是什么样。
所以,对比一下可以发现,生成模型关注点是样本分布本身,解决的问题与任务无关,对样本分布建模。比如简单学习中,先对 P ( X , Y ) P(X, Y) P(X,Y) 建模,然后求 Σ X P ( Y ∣ X ) Σ_X P(Y |X) ΣXP(Y∣X) 来计算条件概率。在无监督学习中,直接对 P ( X ) P(X) P(X) 建模,由于有的时候, P ( X ) P(X) P(X) 非常的复杂,直接对 P ( X ) P(X) P(X) 建模非常的困难。这是就会引入隐变量(Latent) Z Z Z,对 P ( X , Z ) P(X,Z) P(X,Z) 建模,然后 P ( X ) = Σ Z P ( X ∣ Z ) P(X) =Σ_Z P(X|Z) P(X)=ΣZP(X∣Z)。生成模型关注的是样本分布本身,是对样本数据本身建模,所以一定和概率分布有关,往往被称之为“概率生成模型”。
监督或非监督学习,按照任务分可以将生成模型实现的功能分成以下几种,包括:分类,回归,标记,降维,聚类,特征学习,密度估计,生生成数据。
监督任务中可以大致分为概率模型和非概率模型两类。实际上这两个模型之间并不是非黑即白的,两者之间的界限是模糊的,本节中做一个简单的介绍。
判别模型是对条件概率分布建模 P ( Y ∣ X ) P(Y |X) P(Y∣X),典型的有Logistics Regression,最大熵马尔可夫模型(MEMM),条件随机场(CRF),这个模型听名字就很条件概率。
生成模型大致可以分成以下几类:
包括PLA,Support Vector Machines(支持向量机),KNN(K 近邻网络),Tree Model,神经网络(Neural Network)注意神经网络非概率模型,但是和判别模型并不是非黑即白的关系,也可以起到判别模型的作用。其大部分情况是发挥着非概率模型的作用。
非监督任务中,概率模型都是生成模型,和前文描述的监督学习中的概率模型是一样的。这章主要讲述是非概率模型。非概率模型包括,PCA(SVD 分解),LSA(潜语义分析),K-means,Auto-encoder。
本小节主要是从任务的角度介绍了一下,可以分为监督学习和非监督学习。实际上PCA 推广之后就是概率PCA(P-PCA),然后进一步发展就是因子分析(FA)。K-means 算法发展得到Gaussian Mixture Model(GMM)。从auto-Encoder 发展得到VAE。从LSA 模型发展得到PLSA,最后得到LDA 模型。很多模型都是一步步发展出来的。
上一小节从监督学习或者非监督学习的角度介绍了生成模型,这小节将从模型,推断和学习表示的角度分别介绍生成模型。
首先从模型表示角度介绍,我们可以用“形神兼备”四个字来描述。
“形”包括以下几个方面,可以理解为生成模型的概率图表示形式:
这个从“神”的角度来分,有一点抽象,哈哈哈!主要从以下两个方面来理解。
6. Parameteric Model vs Non-Parameteric Model,此分类描述的是参数是确定的,还是一个分布,参数不确定,比如,高斯过程就是Non-Parameteric Model,每个时刻的参数都服从不同的高斯分布。
7. Implicit Model vs Explicit Model,Implicit Model 中最典型的就是GAN。Explicit Model的特征是对 P ( X ) P(X) P(X) 建模,而Implicit Model 不直接考虑对 P ( X ) P(X) P(X) 的建模,只需要可从目标分布中采样即可。比如,GAN 通过从目标分布中采样,来建立一个虚拟的分布。
推断就很简单了,基本就是从计算可行性分析,8. Tractable vs Intractable。
学习的主要可以分为:
9. Likelihood-based Model vs Likelihood-free Model,极大似然估计求解,是使log 似然达到最大之后,用求得的参数来进行采样。而Likelihood-free 方法中,学习采用的方法和Likelihood无关。
我们从模型表示,推断和学习表示的角度分别介绍生成模型,可以得到以下9 种分类。
而我们主要关注的是比较新的模型,所以重点介绍的是,1 中的Discrete;2 中的两个模型,DirectedModel 和Undirected Model;3 中的Latent Variational Model;4 中的Shadow vs Deep,其中深度生成模型是后面的重点;5中的Dense;6中的Parameteric Model;7中的Implicit Mode(l GAN)和ExplicitModel;8 中Tractable 和Intractable 都有讲到;9 中的Likelihood-based Model 和Likelihood-freeModel 都有。
从Likelihood-based Model 和Likelihood-free Model 两个方面分,是目前比较流行的一种分法。
这是显式的估计概率密度函数,也就是Explicit Model。根据其是否可计算大致可以分成两类,tractable 和intractable。
其中,Fully observed 的算法一定是tractable,这样的模型结构相对很简单,典型算法有Autoregression Model。而另一类则是change of variable(Flow-based model),这里做简要的说明。假如 P ( X ) P(X) P(X)非常复杂,那么我们可以对一个简单的分布 P ( Z ) P(Z) P(Z) 建模,然后寻找一个 X ↦ Z X \mapsto Z X↦Z 的映射 X = g ( Z ) X=g(Z) X=g(Z) 。那么,可得 Z = g − 1 ( X ) =g^{-1}(X) =g−1(X) 。此模型的主要目的就是学习这个映射 g ( Z ) , g(Z), g(Z), 可以得到
P X ( X ) = P Z ( g − 1 ( X ) ) P_{X}(X)=P_{Z}\left(g^{-1}(X)\right) PX(X)=PZ(g−1(X))
参数计算为 ∂ g − 1 ( X ) ∂ X \frac{\partial g^{-1}(X)}{\partial X} ∂X∂g−1(X)
而关于Approximate Inference,包括两种,1. MCMC,这是一种Energy Based Model,因为其是基于随机采样的。2. 为确定性的变分推断,典型的算法有VAE。
这是不显示的概率密度函数,也就是不直接对概率密度函数建模。比如说直接从样本分布中采样的GAN,通过模拟一个分布来直接进行采样,不需要通过MCMC 采样。样本直接生成分布。还有直接采样的,比如Mento Calro 算法,GSN 等。
我觉得主要是从函数学习方法的角度,来进行分类,也就是是否计算似然函数。个人觉得Likelihoodfree Model 是目前很重要的研究,我觉得从未知分布中采样来逼近目标分布非常重要,如果给目标分布确定的形式会造成算法的局限性,所有舍弃分布的具体,使用采样来逼近非常重要,现在比较流行的有分布式强化学习中的分位点回归法。
概率图模型和神经网络之间并不是一个非黑即白的区别,它们之间有区别也有联系,但是很多部分同学都搞不清他们之间的区别。
首先我认为他们的核心区别在于,概率图模型是 P ( X ) P(X) P(X) 的表示,神经网络即时一个函数逼近器,对于一个输入的X,得到输出的 Y Y Y ,中间的部分都是权重。所以,他们两压根不是一个东西,概率图模式是对 P ( X ) P(X) P(X) 来建模,典型的概率生成模型。
概率图模型中主要讨论的是Bayesian Network,Boltzmann Machines;神经网络是广义连接主义,确定NN 有CNN,RNN。在本节中,仅比较Beyesian Network 和NN。
本小节将从表示,推断,学习和适合问题四个角度出发进行比较。
Bayesian Network 是从结构化,权值之间相对稀疏,而且通常层数比较浅,符合条件独立假设。其中最重要的是Bayesian Network 具有可解释性,建模的时候具有真实的物理意义。
而NN 的层数,往往会比较深,而且权值连接很稠密,没有具体的物理意义。有的小伙伴会说,NN也具有可解释性,比如神经网络类似为一个滤波器,其可以抽象出更多的高层信息。这个东西,其实只是我们一厢情愿的,这个意义并不是在建模的时候赋予的。而是我们发现了其好的效果之后,在这里强行解释,有点“马后炮”的味道。NN 的可解释性,并不关键,或者说我们都不关心。
Bayesian Network 中包括精确推断和近似推断,有MCMC 和变分等方法。还有极大似然估计等等。
而神经网络的推断方法就非常的简单了,输入输出即可,没有太多的研究意义。
Bayesian Network 中常见的解决方法有Log 似然梯度,EM 算法等。
NN 中常用的方法是梯度下降,由于这个层数很多,节点很多的时候求导很不好求,于是引入了BP 算法。其实BP 算法是一种高效的求导方法,其实BP 算法= 链式求导法则+ 动态规划。动态规划什么意思,就是递归+ 缓存。
实际上,可以感觉到Bayesian Network 和神经网络都不是一个level 的东西。概率图是一个模型层次的,是对数据样本的建模。而神经网络中被称之为计算图,完全就是来计算用的。
Bayesian Network 更适合解决High Level Reasoning 的问题,适合于做原因推断。
而NN 更适合解决Low Level Reasoning 的问题,不适合做原因推断,只能由于解决弱推理问题。其更适合表示学习。
本章的内容比较简单,基本就是从表示,推断,学习和适合问题四个角度出发进行比较概率图模型和神经网络模型。其实这两个东西都不是一个level 的,主要区别是概率图模型是对样本数据的建模,而神经网络只是一个函数逼近器而已。
本章主要介绍的是,神经网络用 Y = f ( X ; θ ) Y = f(X; θ) Y=f(X;θ) 函数逼近器,那么我们将想想神经网络和概率图模型之间有什么关系呢?能不能用NN 去逼近一个概率分布 P ( X ) P(X) P(X) 呢?把他们两结合到一起就是随机后向传播,或者称之为重参数技巧。
假设 P ( Y ) P(Y) P(Y) 是目标分布,曲中 P ( Y ) ∼ N ( μ , σ 2 ) . P(Y) \sim \mathcal{N}\left(\mu, \sigma^{2}\right) . P(Y)∼N(μ,σ2). 我们之前是怎么采样的呢? 是先从一个简单的 高斯分布中进行采样 Z N ( 0 , 1 ) , \mathcal{N}(0,1), N(0,1), 然后令 Y = μ + σ Z , Y=\mu+\sigma Z, Y=μ+σZ, 就相当于一个二元一次变换。这样就可以得 到采样方法:
{ z ( i ) ∼ N ( 0 , 1 ) y ( i ) = μ + σ z ( i ) ( 2 ) \left\{\begin{array}{l} z^{(i)} \sim \mathcal{N}(0,1) \\ y^{(i)}=\mu+\sigma z^{(i)} \end{array}\right. \ \ \ \ \ (2) {z(i)∼N(0,1)y(i)=μ+σz(i) (2)
那么很自然的可以将此函数看成, y = f ( μ , σ , z ) y=f(\mu, \sigma, z) y=f(μ,σ,z) 。这是一个关于 z z z 的函数, μ , σ \mu, \sigma μ,σ 假设是确定性变量,也 就是当 z z z 租定时,函数的值是确定的。那么,算法的目标就是找到一个函数映射 z ↦ y , z \mapsto y, z↦y, 略数的参数 为 { μ , σ } \{\mu, \sigma\} {μ,σ}
假设, J ( y ) J(y) J(y) 是目标函数。那么梯度求导方法为:
∇ J ( y ) ∇ θ = ∇ J ( y ) ∇ y ∇ y ∇ θ ( 3 ) \frac{\nabla J(y)}{\nabla \theta}=\frac{\nabla J(y)}{\nabla y} \frac{\nabla y}{\nabla \theta} \ \ \ \ \ (3) ∇θ∇J(y)=∇y∇J(y)∇θ∇y (3)
假设目标分布为 P ( Y ∣ X ) = N ( X ; μ , σ 2 ) , P(Y | X)=\mathcal{N}\left(X ; \mu, \sigma^{2}\right), P(Y∣X)=N(X;μ,σ2), 那么,在简单高斯分布 Z ∼ N ( 0 , 1 ) Z \sim \mathcal{N}(0,1) Z∼N(0,1) 进行采样,可以得
到,
Y = μ ( X ) + σ ( X ) Z Y=\mu(X)+\sigma(X) Z Y=μ(X)+σ(X)Z
实际上可以将 X X X 看成输入, Z Z Z 看成是噪声, Y Y Y 则是输出。神经网络的参数为 θ \theta θ 。那么逻辑关系为:
Y = μ θ ( X ) + σ θ ( X ) Z Y=\mu_{\theta}(X)+\sigma_{\theta}(X) Z Y=μθ(X)+σθ(X)Z
网络的模型如下所示:
其中, μ ( X ) = f ( X ; θ ) , σ ( X ) = f ( X ; θ ) \mu(X)=f(X ; \theta), \sigma(X)=f(X ; \theta) μ(X)=f(X;θ),σ(X)=f(X;θ) 。损失函数为: L θ ( Y ) = ∑ i = 1 N ∥ y − y ( i ) ∥ 2 ( 5 ) L_{\theta}(Y)=\sum_{i=1}^{N}\left\|y-y^{(i)}\right\|^{2} \ \ \ \ (5) Lθ(Y)=i=1∑N∥∥∥y−y(i)∥∥∥2 (5)
链式求导法则为:
∇ J θ ( Y ) ∇ θ = ∇ J θ ( Y ) ∇ Y ∇ Y ∇ μ ∇ μ ∇ θ + ∇ J θ ( Y ) ∇ Y ∇ Y ∇ σ ∇ σ ∇ θ ( 6 ) \frac{\nabla J_{\theta}(Y)}{\nabla \theta}=\frac{\nabla J_{\theta}(Y)}{\nabla Y} \frac{\nabla Y}{\nabla \mu} \frac{\nabla \mu}{\nabla \theta}+\frac{\nabla J_{\theta}(Y)}{\nabla Y} \frac{\nabla Y}{\nabla \sigma} \frac{\nabla \sigma}{\nabla \theta} \ \ \ \ (6) ∇θ∇Jθ(Y)=∇Y∇Jθ(Y)∇μ∇Y∇θ∇μ+∇Y∇Jθ(Y)∇σ∇Y∇θ∇σ (6)
这样就可以做到用NN 来近似概率密度函数,观测这个式子发现 Y Y Y 必须要是连续可微的,不然怎么求 ∇ Y ∇ σ \frac {∇Y} {∇σ} ∇σ∇Y 。实际上这个模型可以被写为 P ( Y ∣ X ; θ ) P(Y |X; θ) P(Y∣X;θ),将 X , θ X, θ X,θ 合并到一起就是 w w w,所以模型也可以被写为 P ( Y ∣ w ) P(Y |w) P(Y∣w)。
这小结从用神经网络来近似概率分布的角度分析两种概率分布模型,简单的高斯分布和条件高斯模型。并简要的介绍了其链式求导法则。
本章节主要是对于概率生成模型进行了一个全面的介绍,起到一个承上启下的作用。回顾了之前写到的浅层概率生成模型,并引出了接下来要介绍的深度概率生成模型。并从任务(监督vs 非监督),模型表示,模型推断,模型学习四个方面对概率生成模型做了分类。并从极大似然的角度重新对模型做了分类。并介绍了概率图模型和神经网络的区别,我觉得其中最重要的是,概率图模式是对样本数据建模,其图模型有具体的意义;而神经网络只是函数逼近器,只能被称为计算图。最后,介绍了重参数技巧,用神经网络逼近概率分布。