这篇博客是自己在学习生成模型与判别模型过程中的一些记录,整理了相关的文章后写成,感谢前辈们的辛苦总结
转载自:https://blog.csdn.net/zouxy09/article/details/8195017
https://blog.csdn.net/lk7688535/article/details/52353350
https://blog.csdn.net/Solomon1558/article/details/52512459
https://yq.aliyun.com/articles/89342
两个模型是啥
我们从几句话进入这两个概念:
1、机器学习分为有监督的机器学习和无监督的机器学习;
2、有监督的机器学习就是已知训练集数据的类别情况来训练分类器,无监督的机器学习就是不知道训练集的类别情况来训练分类器;
3、所以说,有监督的机器学习可以抽象为一个分类task,而无监督的基本完成的是聚类;
4、有监督的机器学习中,我们可以概述为通过很多有标记的数据,训练出一个模型,然后利用这个,对输入的X进行预测输出的Y。这个模型一般有两种:
决策函数:Y=f(X)
条件概率分布:P(Y|X)
5、根据通过学习数据来获取这两种模型的方法,我们可以分为判别方法和生成方法;
6、概念正式介绍
判别方法:由数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。
数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)得到的预测模型,就是判别模型;
生成方法:由数据学习联合概率分布P(X,Y), 然后由P(Y|X)=P(X,Y)/P(X)求出概率分布P(Y|X)作为预测的模型。该方法表示了给定输入X与产生输出Y的生成关系
P(Y|X)作为的预测的模型就是生成模型;
两个模型的范例
生成模型:朴素贝叶斯、隐马尔可夫(em算法)
判别模型:k近邻法、感知机、决策树、逻辑回归、线性回归、最大熵模型、支持向量机(SVM)、提升方法、条件随机场(CRF)
对比
1、生成模型可以还原出联合概率分布(还原数据本身相似度),而判别方法不能;
2、生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型;
3、当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用;
4、判别学习不能反映训练数据本身的特性,但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异,直接面对预测,往往学习的准确率更高,由于直接学习P(Y|X)或Y=f(X),从而可以简化学习;
5、简单的说,生成模型是从大量的数据中找规律,属于统计学习;而判别模型只关心不同类型的数据的差别,利用差别来分类。
一、决策函数Y=f(X)或者条件概率分布P(Y|X)
监督学习的任务就是从数据中学习一个模型(也叫分类器),应用这一模型,对给定的输入X预测相应的输出Y。这个模型的一般形式为决策函数Y=f(X)或者条件概率分布P(Y|X)。
决策函数Y=f(X):你输入一个X,它就输出一个Y,这个Y与一个阈值比较,根据比较结果判定X属于哪个类别。例如两类(w1和w2)分类问题,如果Y大于阈值,X就属于类w1,如果小于阈值就属于类w2。这样就得到了该X对应的类别了。
条件概率分布P(Y|X):你输入一个X,它通过比较它属于所有类的概率,然后输出概率最大的那个作为该X对应的类别。例如:如果P(w1|X)大于P(w2|X),那么我们就认为X是属于w1类的。
所以上面两个模型都可以实现对给定的输入X预测相应的输出Y的功能。实际上通过条件概率分布P(Y|X)进行预测也是隐含着表达成决策函数Y=f(X)的形式的。例如也是两类w1和w2,那么我们求得了P(w1|X)和P(w2|X),那么实际上判别函数就可以表示为Y= P(w1|X)/P(w2|X),如果Y大于1或者某个阈值,那么X就属于类w1,如果小于阈值就属于类w2。而同样,很神奇的一件事是,实际上决策函数Y=f(X)也是隐含着使用P(Y|X)的。因为一般决策函数Y=f(X)是通过学习算法使你的预测和训练数据之间的误差平方最小化,而贝叶斯告诉我们,虽然它没有显式的运用贝叶斯或者以某种形式计算概率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在所有假设模型有相等的先验概率条件下,输出极大似然假设。
所以呢,分类器的设计就是在给定训练数据的基础上估计其概率模型P(Y|X)。如果可以估计出来,那么就可以分类了。但是一般来说,概率模型是比较难估计的。给一堆数给你,特别是数不多的时候,你一般很难找到这些数满足什么规律吧。那能否不依赖概率模型直接设计分类器呢?事实上,分类器就是一个决策函数(或决策面),如果能够从要解决的问题和训练样本出发直接求出判别函数,就不用估计概率模型了,这就是决策函数Y=f(X)的伟大使命了。例如支持向量机,我已经知道它的决策函数(分类面)是线性的了,也就是可以表示成Y=f(X)=WX+b的形式,那么我们通过训练样本来学习得到W和b的值就可以得到Y=f(X)了。还有一种更直接的分类方法,它不用事先设计分类器,而是只确定分类原则,根据已知样本(训练样本)直接对未知样本进行分类。包括近邻法,它不会在进行具体的预测之前求出概率模型P(Y|X)或者决策函数Y=f(X),而是在真正预测的时候,将X与训练数据的各类的Xi比较,和哪些比较相似,就判断它X也属于Xi对应的类。
实际上,说了那么多,也不知道自己表达清楚了没有。那我们是谈生成模型和判别模型,上面到底啰嗦了那么多到底有啥阴谋啊?呵呵,往下说就知道了。
二、生成方法和判别方法
监督学习方法又分生成方法(Generative approach)和判别方法(Discriminative approach),所学到的模型分别称为生成模型(Generative Model)和判别模型(Discriminative Model)。咱们先谈判别方法,因为它和前面说的都差不多,比较容易明白。
判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知级,决策树,支持向量机等。
生成方法:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类,就像上面说的那样。注意了哦,这里是先求出P(X,Y)才得到P(Y|X)的,然后这个过程还得先求出P(X)。P(X)就是你的训练数据的概率分布。哎,刚才说了,需要你的数据样本非常多的时候,你得到的P(X)才能很好的描述你数据真正的分布。例如你投硬币,你试了100次,得到正面的次数和你的试验次数的比可能是3/10,然后你直觉告诉你,可能不对,然后你再试了500次,哎,这次正面的次数和你的试验次数的比可能就变成4/10,这时候你半信半疑,不相信上帝还有一个手,所以你再试200000次,这时候正面的次数和你的试验次数的比(就可以当成是正面的概率了)就变成5/10了。这时候,你就觉得很靠谱了,觉得自己就是那个上帝了。呵呵,真啰嗦,还差点离题了。
还有一个问题就是,在机器学习领域有个约定俗成的说法是:不要去学那些对这个任务没用的东西。例如,对于一个分类任务:对一个给定的输入x,将它划分到一个类y中。那么,如果我们用生成模型:p(x,y)=p(y|x).p(x)
那么,我们就需要去对p(x)建模,但这增加了我们的工作量,这让我们很不爽(除了上面说的那个估计得到P(X)可能不太准确外)。实际上,因为数据的稀疏性,导致我们都是被强迫地使用弱独立性假设去对p(x)建模的,所以就产生了局限性。所以我们更趋向于直观的使用判别模型去分类。
这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯和隐马尔科夫模型等。
三、生成模型和判别模型的优缺点
在监督学习中,两种方法各有优缺点,适合于不同条件的学习问题。
生成方法的特点:上面说到,生成方法学习联合概率密度分布P(X,Y),所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。生成方法可以还原出联合概率分布P(Y|X),而判别方法不能。生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型,当存在隐变量时,仍可以用生成方法学习。此时判别方法就不能用。
判别方法的特点:判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X)。不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。直接面对预测,往往学习的准确率更高。由于直接学习P(Y|X)或P(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
四、生成模型和判别模型的联系
由生成模型可以得到判别模型,但由判别模型得不到生成模型。
五、再形象点可以吗
例如我们有一个输入数据x,然后我们想将它分类为标签y。(迎面走过来一个人,你告诉我这个是男的还是女的)
生成模型学习联合概率分布p(x,y),而判别模型学习条件概率分布p(y|x)。
下面是个简单的例子:
例如我们有以下(x,y)形式的数据:(1,0), (1,0), (2,0), (2, 1)
那么p(x,y)是:
y=0 y=1
-----------
x=1 | 1/2 0
x=2 | 1/4 1/4
而p(y|x) 是:
y=0 y=1
-----------
x=1| 1 0
x=2| 1/2 1/2
我们为了将一个样本x分类到一个类y,最自然的做法就是条件概率分布p(y|x),这就是为什么我们对其直接求p(y|x)方法叫做判别算法。而生成算法求p(x,y),而p(x,y)可以通过贝叶斯方法转化为p(y|x),然后再用其分类。但是p(x,y)还有其他作用,例如,你可以用它去生成(x,y)对。
再假如你的任务是识别一个语音属于哪种语言。例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:
1、学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你哄,你就可以知道他说的是什么语音,你就可以骂他是“米国人还是小日本了”。(呵呵,切勿将政治掺杂在技术里面)
2、不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。
那么第一种方法就是生成方法,第二种方法是判别方法。
生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。
六、对于跟踪算法
跟踪算法一般来说可以分为两类:基于外观模型的生成模型或者基于外观模型的判别模型。
生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。
GAN :基于概率的生成模型
什么是 GAN?用 Ian Goodfellow 自己的话来说:“生成对抗网络是一种生成模型(Generative Model),其背后基本思想是从训练库里获取很多训练样本,从而学习这些训练案例生成的概率分布。”
而实现的方法,是让两个网络相互竞争,‘玩一个游戏’。其中一个叫做生成器网络( Generator Network),它不断捕捉训练库里真实图片的概率分布,将输入的随机噪声(Random Noise)转变成新的样本(也就是假数据)。另一个叫做判别器网络(Discriminator Network),它可以同时观察真实和假造的数据,判断这个数据到底是不是真的。
用 Adit Deshpande 的话解释更加清晰:
“GAN 的基本原理是它有两个模型:一个生成器,一个判别器。判别器的任务是判断给定图像是否看起来‘自然’,换句话说,是否像是人为(机器)生成的。而生成器的任务是,顾名思义,生成看起来‘自然’的图像,要求与原始数据分布尽可能一致。
GAN 的运作方式可被看作是两名玩家之间的零和游戏。原论文的类比是,生成器就像一支造假币的团伙,试图用假币蒙混过关。而判别器就像是警察,目标是检查出假币。生成器想要骗过判别器,判别器想要不上当。当两组模型不断训练,生成器不断生成新的结果进行尝试,它们的能力互相提高,直到生成器生成的人造样本看起来与原始样本没有区别。”
GAN 首先是一种概率生成模型,概率生成模型可以用于自然图像的生成。假设给定1000万张图片之后,生成模型可以自动学习到其内部分布,能够解释给定的训练图片,并同时生成新的图片。
与庞大的真实数据相比,概率生成模型的参数个数要远远小于数据的数量。因此,在训练过程中,生成模型会被强迫去发现数据背后更为简单的统计规律,从而能够生成这些数据。
除了 GAN ,现在比较常用的变分自动编码模型(VAE)、自回归模型(Auto-regressive)也属于概率生成模型。
GAN 是更好的生成模型,在某种意义上避免了马尔科夫链式的学习机制,这使得它能够区别于传统的概率生成模型。传统概率生成模型一般都需要进行马可夫链式的采样和推断,而 GAN 避免了这个计算复杂度特别高的过程,直接进行采样和推断,从而提高了 GAN 的应用效率,所以其实际应用场景也就更为广泛。
GAN 的基本原理
GAN 模型包括了一个生成模型 G 和一个判别模型 D,GAN 的目标函数是关于 D 与 G 的一个零和游戏。也是一个最小-最大化问题。
这里判别模型 D 实际上是对数据的来源进行一个判别:究竟这个数据是来自真实的数据分布 Pdata,还是来自于一个生成模型 G 所产生的一个数据分布 Pg。
判别模型 D 的训练目的就是要尽量最大化自己的判别准确率。当这个数据被判别为来自于真实数据时,标注 1,自于生成数据时,标注 0。
而与这个目的相反的是, 生成模型 G 的训练目标,就是要最小化判别模型D的判别准确率。在训练过程中,GAN 采用了一种非常直接的交替优化方式,它可以分为两个阶段。第一个阶段是固定判别模型 D,然后优化生成模型 G,使得判别模型的准确率尽量降低。而另一个阶段是固定生成模型 G,来提高判别模型的准确率。
生成方法通过观测数据学习样本与标签的联合概率分布P(X, Y),训练好的模型能够生成符合样本分布的新数据,它可以用于有监督学习和无监督学习。在有监督学习任务中,根据贝叶斯公式由联合概率分布P(X,Y)求出条件概率分布P(Y|X),从而得到预测的模型,典型的模型有朴素贝叶斯、混合高斯模型和隐马尔科夫模型等。无监督生成模型通过学习真实数据的本质特征,从而刻画出样本数据的分布特征,生成与训练样本相似的新数据。生成模型的参数远远小于训练数据的量,因此模型能够发现并有效内化数据的本质,从而可以生成这些数据。生成式模型在无监督深度学习方面占据主要位置,可以用于在没有目标类标签信息的情况下捕捉观测到或可见数据的高阶相关性。深度生成模型可以通过从网络中采样来有效生成样本,例如受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)、深度信念网络(Deep Belief Network, DBN)、深度玻尔兹曼机(Deep Boltzmann Machine, DBM)和广义除噪自编码器(Generalized Denoising Autoencoders)。判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的输出Y。典型的判别式模型包括k近邻法、决策树、支持向量机和提升方法等。
以高斯混合模型(GMM)、朴素贝叶斯(Naïve Bayes)为代表的生成式模型采用浅层结构,这些结构在解决很多简单的或者限制较多的问题上效果明显,但是由于其建模和表示能力有限,在遇到一些更复杂的涉及自然信号(比如人类语言、自然图像和视觉场景)的问题时就会遇到各种困难。
深度学习(Deep Learning)是机器学习的子领域,它是一类通过多层表示来对数据之间的复杂关系进行建模的算法。高层的特征和概念取决于低层概念,而且同一低层的概念有助于确定多个高层概念。深度学习的概念起源于对人工神经网络的研究,其突破在于经验性地缓解了深层神经网络容易陷入局部最优的问题。2006年Hinton提出的深度学习开创性论文[2 3]介绍了一类叫作深度信念网络(Deep Belief Network, DBN) 的深度产生式模型。DBN是由一组受限玻尔兹曼机(RBMs)堆叠而成的深度生成式网络,它的核心部分是贪婪的、逐层学习的算法,这种算法可以最优化深度置信网络的权重,使用配置好的深度置信网络来初始化多层感知器的权重,常常会得到比随机初始化的方法更好的结果。在深度神经网络(Deep Neural Network,DNN)的高度非凸优化问题中,以无监督方式预训练的生成式模型(DBN)可以提供良好的初始点,然后通过有监督的反向传播算法微调权值,从而有效解决深度网络的局部最优情况和欠拟合问题。这种生成式模型与判别式模型相结合的预训练/微调策略,极大地推动了深度学习早期的发展。
深度学习亦称深度机器学习、深度结构学习、分层学习,是一类有效训练深层神经网络(Deep Neural Network,DNN)的机器学习算法,可以用于对数据进行高层抽象建模。广义上说,深层神经网络是一种具有多个处理层的复杂结构,其中包含多重非线性变换。如果深度足够,那么多层感知器无疑是深层网络,前馈神经网络也是深层网络。基本的深层网络模型可以分为两大类:生成模型和判别模型。生成是指从隐含层到输入数据的重构过程,而判别是指从输入数据到隐含层的归约过程。复杂的深层结构可能是一个混合模型,既包含生成模型成分,又包含判别模型成分。生成模型一般用来表达数据的高阶相关性或者描述数据的联合统计分布,判别模型则通常用来分类数据的内在模式或者描述数据的后验分布。生成模型主要包括受限玻耳兹曼机(Restricted Boltzmann Machine,RBM)、自编码器(Autoencoder,AE)[1]、深层信念网络(Deep Belief Network,DBN)[62]、深层玻耳兹曼机(Deep Boltzmann Machine,DBM)[65]以及和积网络(SumProduct Network,SPN)[66],其中AE、DBN和DBM需要RBM进行预训练。判别模型主要包括深层感知器(deep MLP)、深层前馈网络(deep FNN)、卷积神经网络(Convolutional Neural Network,CNN)[82]、深层堆叠网络(Deep Stacking Network,DSN)[83]、循环神经网络(Recurrent Neural Network,RNN)[84]和长短时记忆(Long ShortTerm Memory,LSTM)网络[53]。值得一提的是,虽然受限玻耳兹曼机、自编码器、深层信念网络、深层玻耳兹曼机,以及和积网络都被归类为生成模型,但由于模型中也包含判别过程(即从输入到隐含层的规约),所以在一定条件下,也可以看作判别模型并用于对数据的分类和识别,而且在用于产生序列数据时,循环神经网络也可以看作是生成模型。此外,虽然受限玻耳兹曼机作为一种两层网络,在严格意义上并不是一种深层网络,但由于它是对许多深层网络进行预训练的基础,所以也被看作一种基本的深度学习模型。自编码器作为一种深度学习模型,通常只是用作其他模型的构建模块,而不是作为一个独立的模型使用。