转载自公众号:数学算法俱乐部
摘要:贝叶斯方法对于由证据的积累来推测一个事物发生的概率具有重大作用,它告诉我们当我们要预测一个事物,我们需要的是首先根据已有的经验和知识推断一个先验概率,然后在新证据不断积累的情况下调整这个概率。用贝叶斯分析的方法,可以帮助我们解决生活中方方面面的问题,尤其在我们未来将有可能深入了解的机器学习,大数据挖掘,以及相关工程性问题中,有着极其重要的地位,接下来就让我们走进贝叶斯方法,通过一系列的例子来了解其含义及应用。
文章主线:
①引出贝叶斯方法的含义(1)。
②通过模型比较理论体现出贝叶斯方法的优势所在(2)。
③最后通过中文分词、机器翻译、最大似然与最小二乘、机器学习这几个实例来说明贝叶斯方法运用的普遍性(3)。
1. 贝叶斯学派与频率主义学派
简单说来,贝叶斯学派认为,概率是一个人对于一件事的信念强度,概率是主观的。但频率主义学派所持的是不同的观念:他们认为参数是客观存在的,即使是未知的,但都是固定值,不会改变。我参阅了一些资料,尝试以我们以前课堂上所学的概率论来解释一下,频率学派认为进行一定数量的重复实验后,如果出现某个现象的次数与总次数趋于某个值,那么这个比值就会倾向于固定。最简单的例子就是抛硬币了,在理想情况下,我们知道抛硬币正面朝上的概率会趋向于1/2。非常好理解不是么?但贝叶斯提出了一种截然不同的观念,他认为概率不应该这么简单地计算,而需要加入先验概率的考虑。先验概率也就是说,我们先设定一个假设(或信念,belief)。然后我们通过一定的实验来证明/推翻这个假设,这就是后验。随后,旧的后验会成为一个新的先验,如此重复下去。而归根结底,就得到了这样一个著名的公式:
P( A | B ) = P(B | A ) * P( A ) / P( B )
(A | B表示A给定B的概率,也就是说,如果B发生,A发生的可能性有多大。反之亦然。)
2. 模型比较理论(ModelComparasion)
2.1模型比较
实际上,模型比较就是去比较哪个模型(猜测)更可能隐藏在观察数据的背后。我们对用户实际想输入的单词的猜测就是模型,用户输错的单词就是观测数据。通过P(h | D) ∝ P(h) * P(D | h) 我们可以比较哪个模型最为靠谱。有时候光靠 P(D | h) (即“似然”)是不够的,有时候还需要引入 P(h) 这个先验概率。因为最大似然的猜测,其可能先验概率非常小。但有些时候,我们对于先验概率一无所知,只能假设每种猜测的先验概率是均等的,这个时候就只有用最大似然了。实际上,统计学家和贝叶斯学家有一个有趣的争论,统计学家说:我们让数据自己说话。言下之意就是要摒弃先验概率。而贝叶斯支持者则说:数据会有各种各样的偏差,而一个靠谱的先验概率则可以对这些随机噪音做到健壮。事实证明贝叶斯派胜利了,胜利的关键在于所谓先验概率其实也是经验统计的结果,譬如为什么我们会认为绝大多数硬币是基本公平的?为什么我们认为大多数人的肥胖适中?为什么我们认为肤色是种族相关的,而体重则与种族无关?先验概率里面的“先验”并不是指先于一切经验,而是仅指先于我们“当前”给出的观测数据而已,在硬币的例子中先验指的只是先于我们知道投掷的结果这个经验,而并非“先天”。
不过有时候我们必须得承认,就算是基于以往的经验,我们手头的“先验”概率还是均匀分布,这个时候就必须依赖用最大似然。可以用一个自然语言二义性问题来说明这一点:The girl saw theboy with a telescope.到底是 The girlsaw-with-a-telescope the boy 这一语法结构,还是 The girl sawthe-boy-with-a-telescope 呢?两种语法结构的常见程度都差不多。如果语法结构是 The girl sawthe-boy-with-a-telecope 的话,怎么那个男孩偏偏手里拿的就是望远镜?这也太小概率了吧。所以唯一的解释是,这个“巧合”背后肯定有它的必然性,这个必然性就是,如果我们将语法结构解释为 The girlsaw-with-a-telescope the boy 的话,就跟数据完美吻合了——既然那个女孩是用某个东西去看这个男孩的,那么这个东西是一个望远镜就完全可以解释了(不再是小概率事件了)。
2.2 最小描述长度原则
贝叶斯模型比较理论与信息论有一个有趣的关联:P(h | D)∝P(h) * P(D | h)
两边求对数,将右式的乘积变成相加:ln P(h | D) ∝ ln P(h) + ln P(D | h)。显然,最大化 P(h | D) 也就是最大化 ln P(h | D)。而 ln P(h) + ln P(D | h) 则可以解释为模型(或者称“假设”、“猜测”)h 的编码长度加上在该模型下数据 D 的编码长度。使这个和最小的模型就是最佳模型。
2.3 最优贝叶斯推理
推理分为两个过程,第一步是对观测数据建立一个模型。第二步则是使用这个模型来推测未知现象发生的概率。前面讲的都是对于观测数据给出最靠谱的那个模型。然而很多时候,虽然某个模型是所有模型里面最靠谱的,但是别的模型也并不是一点机会都没有。很多时候我们建立模型是为了推测未知的事情的发生概率,这个时候,不同的模型对未知的事情发生的概率都会有自己的预测,仅仅因为某一个模型概率稍大就只取它一个就太不科学了。所谓的最优贝叶斯推理就是将多个模型对于未知数据的预测结论加权平均起来(权值就是模型相应的概率)。这个推理已经把所有可能性都考虑进去,但由于计算模型可能非常费时间,它仅仅被视为一个理论基准。
3. 无处不在的贝叶斯
3.1 中文分词
贝叶斯是机器学习的核心方法之一。比如中文分词领域就用到了贝叶斯。Google 研究员吴军在《数学之美》系列中就有一篇是介绍中文分词的:
分词问题的描述为:给定一个句子(字串),如:南京市长江大桥
1. 南京市/长江大桥
2. 南京/市长/江大桥
这两个分词,到底哪个更靠谱呢?我们用贝叶斯公式来形式化地描述这个问题,令 X 为字串,Y 为词串。我们就是需要寻找使得 P(Y|X) 最大的Y,使用一次贝叶斯可得:P(Y|X)∝P(Y)*P(X|Y)
用自然语言来说就是:这种分词方式的可能性乘以这个词串生成我们的句子的可能性。进一步容易看到:可以近似地将 P(X|Y) 看作是恒等于 1 的,因为任意假想的一种分词方式之下生成我们的句子总是精准地生成的(只需把分词之间的分界符号扔掉即可)。于是,我们就变成了去最大化 P(Y) ,也就是寻找一种分词使得这个词串的概率最大化。而如何计算一个词串:W1, W2, W3, W4 ..的可能性呢?我们知道,根据联合概率的公式展开:P(W1, W2, W3, W4 ..)=P(W1)*P(W2|W1)*P(W3|W2, W1)*P(W4|W1,W2,W3) *... 可以通过一系列的条件概率(右式)的乘积来求整个联合概率。
不幸的是,随着条件数目的增加,数据稀疏问题也会越来越严重,即便语料库再大也无法统计出一个靠谱的 P(Wn|Wn-1,Wn-2,..,W1)来。为了缓解这个问题,计算机科学家们用了“有限地平线”假设:假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词(k一般不超过 3)。虽然这个假设很天真,但结果却表明它的结果往往是很好很强大的。有了这个假设,刚才那个乘积就可以改写成:P(W1) *P(W2|W1) * P(W3|W2) * P(W4|W3) .. (假设每个词只依赖于它前面的一个词)。统计 P(W2|W1) 就不再受到数据稀疏问题的困扰了。对于我们上面提到的例子“南京市长江大桥”,如果按照自左到右的贪婪方法分词的话,结果就成了“南京市长/江大桥”。但如果按照贝叶斯分词的话(假设使用 3-gram),由于“南京市长”和“江大桥”在语料库中一起出现的频率为 0 ,这个整句的概率便会被判定为 0 。从而使得“南京市/长江大桥”这一分词方式胜出。
有人可能会疑惑,难道我们人类也是基于这些天真的假设来进行推理的?不是的。事实上,统计机器学习方法所统计的东西往往处于相当表层的层面,在这个层面机器学习只能看到一些非常表面的现象,有一点科学研究的理念的人都知道:越是往表层去,世界就越是繁复多变。从机器学习的角度来说,特征就越多,成百上千维度都是可能的。特征一多,高维诅咒就产生了,数据就很稀疏,不够用。而人类的观察水平显然比机器学习的观察水平要更深入一些,为了避免数据稀疏我们不断地发明各种装置(最典型就是显微镜),来帮助我们直接深入到更深层的事物层面去观察更本质的联系,而不是在浅层对表面现象作统计归纳。举一个简单的例子,通过对大规模语料库的统计,机器学习可能会发现这样一个规律:所有的“他”都是不会穿裙子的,所有的“她”则都是会穿的。然而,作为一个男人,却完全无需进行任何统计学习,因为深层的规律就决定了他们根本不会去穿裙子。至于机器学习能不能完成后者的推理,则是人工智能领域的经典问题。至少在那之前,统计学习方法是不可能终结科学研究的。
3.2 统计机器翻译
统计机器翻译的问题可以描述为:给定一个句子e,它的可能的外文翻译f 中哪个是最靠谱的。即我们需要计算:P(f|e) 。一旦出现条件概率,贝叶斯总是挺身而出:P(f|e) ∝ P(f) * P(e|f),这个式子的右端很容易解释:那些先验概率较高,并且更可能生成句子 e 的外文句子 f 将会胜出。我们只需简单统计就可以得到任意一个外文句子 f 的出现概率。
然而 P(e|f) 却不是那么好求的。假设 e 为:John loves Mary,首选f是:Jean aime Marie。为了求出 P(e|f),我们需要考虑 e 和 f 有多少种对齐的可能性。为什么要对齐,是因为一旦对齐了之后,就可以容易地计算在这个对齐之下的 P(e|f) 是多大,只需计算:P(John|Jean) * P(loves|aime) * P(Marie|Mary)即可。然后我们遍历所有的对齐方式,并将每种对齐方式之下的翻译概率∑求和。便可以获得整个的 P(e|f) 是多大。
3.3 最大似然与最小二乘
学过线性代数的同学都知道用经典的最小二乘方法来做线性回归。问题描述是:给定平面上N 个点,找出一条最佳描述了这些点的直线。一个接踵而来的问题就是,如何定义最佳?我们设每个点的坐标为 (Xi, Yi)。如果直线为 y = f(x),那么 (Xi, Yi) 跟直线对这个点的“预测”:(Xi, f(Xi)) 就相差了一个ΔYi = |Yi–f(Xi)|。最小二乘就是说寻找直线使得误差的平方和 (ΔY1)^2 + (ΔY2)^2 + ..最小,关于为什么是误差的平方和而不是误差的绝对值和这个问题,贝叶斯方法提供一个完美的解释。
我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测,所有纵坐标偏离f(Xi)的那些数据点都含有噪音,是噪音使得它们偏离了完美的一条直线,一个合理的假设就是偏离路线越远的概率越小,具体小多少,可以用一个正态分布曲线来模拟,这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心,实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP[-(ΔYi)^2]。
我们要想最大化的后验概率是:P(h|D) ∝ P(h) * P(D|h)。这里 h 就是指一条特定的直线,D 就是指这 N 个数据点。我们需要寻找一条直线 h 使得 P(h) * P(D|h) 最大。很显然,P(h) 这个先验概率是均匀的,因为哪条直线也不比另一条更优越。所以只需看 P(D|h) 这一项,它是指这条直线生成这些数据点的概率,前面说生成数据点 (Xi, Yi) 的概率为 EXP[-(ΔYi)^2] 乘以一个常数。而 P(D|h) =P(d1|h) * P(d2|h) * .. 即假设各个数据点是独立生成的,所以可以把每个概率乘起来。因此生成 N 个数据点的概率为 EXP[-(ΔY1)^2] * EXP[-(ΔY2)^2] * EXP[-(ΔY3)^2] * .. = EXP{-[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..]} 最大化这个概率就是要最小化 (ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..
3.4统计建模
我们先将贝叶斯方法分为两类:一为统计建模,另一个为概率机器学习。后者包括了所谓的非参数方法。
建模通常在数据稀缺且难以获得时得以应用,比如在社会科学和其它难以进行大规模对照实验的环境中。想象一下,如果一个数据学家手头只拥有少量的数据,那么他会不遗余力地对算法进行调整,以期让每个数据都发挥最大的功用。
此外,对于小数据而言,最重要的是量化不确定性,这也正是贝叶斯方法所擅长的。而贝叶斯方法——尤其是MCMC——通常计算量巨大,这又与小数据是共存的。在名为《Data Analysis Using Regression Analysis andMultilevel /Hierarchical Models》(http://www.stat.columbia.edu/~gelman/arm/)的书中,介绍了从一个没有预测变量的线性模型开始,不断增加到11个预测变量的情况并进行讨论。这种劳动密集性模式实际上与我们的机器学习方向背道而驰,我们还是希望能使用数据,让计算机自动学习。
3.5 概率机器学习
我们现在尝试把“概率”一词替换“贝叶斯”。从这个角度而言,它与其它分类方法并没有区别。如果从分类考虑,大多数分类器都能够输出概率预测,比如最经典的SVM(支持变量机)。但需要指出的是,这些概率只是源于分类器的信念陈述,而它们是否符合真实的概率则完全是另一回事了,这也就是所谓的校准
贝叶斯非参数模型:接下来我们要说说贝叶斯非参数模型的一些内容,顾名思义,这个名字代表着模型中的参数数量可以随着数据的增大或减少而自适应模型的变化。这与SVM有些相似,它能在训练点中选择支持向量,而贝叶斯非参数模型也能根据数据多少来选择参数确定模型。比较流行的贝叶斯非参数模型包括高斯回归过程,还有隐含狄里克雷分布(LDA)。
高斯回归过程:高斯回归过程有点类似于SVM——采用内核并具有类似的可伸缩性。其最大的特点在于回归特性,分类做为事后的判断,而对于SVM而言,这个过程是相反的。此外,GP是从头开始进行概率判断,而SVM不是。大多数的常规方法只提供数据点估计,而贝叶斯非参数模型则会输出不确定性估计。高斯回归过程的流行主要应用于机器学习算法的超参数优化上。数据非常小,也只有几个参数需要调整。