版权声明:本作品采用知识共享 署名-非商业性使用 3.0 中国大陆 许可协议进行许可。 https://blog.csdn.net/jinping_shi/article/details/53444100
极大似然估计
贝叶斯估计是参数估计中的一种方法,以贝叶斯思想为基础,而贝叶斯思想在机器学习中经常用到。机器学习中常涉及贝叶斯网络,最终的问题都是转化为参数求解。贝叶斯参数估计是这些问题的基础版本。前方高能预警,本文的讲解比较理论。
实际问题中我们会有很多数据,比如一篇文章中每个单词的词频等。我们得到的数据通常用
X
表示,也称为样本。我们还会假设这些数据服从某一个分布,例如最常用的正态分布,这时可以将问题表示为
X∼N(μ,σ)
,
μ
和
σ
表示正态分布的两个参数。如果这两个参数知道了,这个分布就确定了,从而可以知道数据
X
的许多性质。最常用的参数估计方法是极大似然(或最大似然估计)估计。
一般的最大似然法求解两个参数的基本步骤是:
- 假设每个样本
Xi
是独立同分布(iid)的,即每一个样本都有
Xi∼N(μ,σ)
.
- 求所有样本
X
的联合分布
因为是iid,所以
X
的联合分布等于每个样本
Xi
的概率密度函数的乘积,即:
L(μ,σ2;x)=f(x)=(12πσ2√)nexp{−∑ni=1(xi−μ)22σ2}
- 对上述联合分布的概率密度函数取对数,即:
ℓ(μ,σ2;x)=logL(μ,σ2;x)=−n2log(2πσ2)−∑ni=1(xi−μ)22σ2
- 对上述函数分别求
∂ℓ∂μ
和
∂ℓ∂σ2
并另它们等于0,进而求得极值
- 分别对
μ
和
σ2
求二阶偏导,验证极值是最大值
上述步骤是极大似然法的求解步骤,用到的信息都是已知样本的信息。但是通常在估计参数时我们可能已经对参数有了一个大概的了解,比如已经知道
μ
和
σ2
的取值范围。仅仅知道取值范围还太简单,有时会更进一步假设
μ
和
σ2
的取值服从某个分布,这样问题就变成了在正态分布中,要估计期望
μ
和方差
σ2
的值,但与极大似然法不同的是,我们事先已经知道了
μ
和
σ2
的取值是服从某种分布的,这个信息如果不用到参数估计中那真是太浪费了,于是问题变成:如何将这两个参数的分布结合到参数估计当中去呢?贝叶斯估计解决了这个问题。
贝叶斯估计(Bayes Estimation)
上述提到的在估计参数之前对参数已经有了了解称为参数的先验知识。贝叶斯估计即在估计过程中将先验知识也考虑了进去,博众家之长总是好的。先验知识可以是一个具体的值,也可以是取值范围(函数)。实际应用中,通常会将参数的先验知识视作一个分布,那么这个参数就会有一个概率密度函数,这个pdf叫做参数的先验概率。
一般待估计的一维参数用
θ
表示,多维用粗体
θ
. 先验概率密度函数用符号
π(θ)
表示。样本的概率密度函数用
f(x|θ)
表示,其中加入
θ
是表示该pdf跟
θ
有关,同时说明要估计的参数是
θ
.
贝叶斯估计涉及到三个基本概念,他们长的很像:
- 损失函数(Loss Funcition)
- 风险函数(Risk Function)
- 贝叶斯风险(Bayes Risk)
贝叶斯估计的目的是结合参数的先验知识,使得估计出来的参数能令贝叶斯风险达到最小。简单说就是最小化贝叶斯风险。
下面解释这三个概念。
损失函数
在参数估计问题中,评价估计的好坏就是看估计出来的参数与真值的差距有多小。估计出来的参数通常用
θ^
表示,参数的真值用
θ
表示。那么这个差距如何定义呢?实际上,这个差距就是损失函数。
损失函数有好几种:
上述是三种常用的损失函数。可以看到当估计值与真实值无限接近时,损失函数都会无限接近0,相当于没有损失. 损失函数中的估计值
θ^
是通过样本计算出来的。比如正态分布中的
μ
,我们可以用样本均值来估计
μ
,即
μ^=1n∑ni=0Xi=X¯
。我们也常常用样本方差来估计
σ2
. 但是注意到
μ^
和
σ^2
的值都跟样本的个数有关,即都跟
n
有关。如果
1n∑ni=0Xi
是
μ
的估计值,那
1n−1∑n−1i=0Xi
是
μ
的估计值吗?那
1n−6∑n−6i=0Xi
呢?可以看到
n
不一样,估计值也不一样,到底用哪个
n
(用多少个样本)来计算损失函数呢?这时容易(其实不容易!)想到,既然损失函数可以因为
θ^
的不同而有不同的值,那就求平均啊!通过判断损失的平均值的大小来判断参数估计得好不好。求平均是很自然的想法,但平均通常是相对样本来说的,如果是总体,我们通常说期望。这时就要引入风险函数了。
风险函数
其实风险就是损失函数关于
θ^
的期望。
既然估计值
θ^
是随
n
的变化而变化的,那也可以将
θ^
视为随机变量,进而可以计算损失函数的期望。于是风险函数的定义如下:
R(θ^,θ)=Eθ^[L(θ^,θ)]
Eθ^
表示对
θ^
求期望(因为真值是固定的,不是变量)。我们的目标是:求出一个
θ^
,使得风险最小(最小化风险)。
举个栗子,估计期望
μ
,假设损失函数是
L(μ^,μ)=(μ^−μ)2
,计算当
μ^=1n∑ni=0Xi
时的风险是多少?
E[L(μ^,μ)]=E(X¯−μ)2=EX¯2−2μEX¯+μ2 (记住这个例子)
算出上式中的
EX¯2
和
EX¯
就可以知道风险是多少啦!其实上式的风险是0,已经是最小值了。这个结果说明当使用样本均值来估计总体期望时,风险最低。
到目前为止我们并没有用到前面提过的先验知识
π(θ)
。仅仅定义了损失函数和风险函数。上式的风险函数求出了一个具体的值,但很多情况没有那么简单,求出的风险是一个函数表达式,而不是值。如果求出来的风险是一个值,其实可以不用贝叶斯估计(上面也一直没有用到
θ
的任何先验知识)。贝叶斯估计通常用于风险不可以直接比较的情况。
这时就要引入贝叶斯风险的概念了。贝叶斯风险中就用到了
θ
的先验分布
π(θ)
.
贝叶斯风险
我们注意到风险函数
R(θ^,θ)
是
θ^
的函数,前面也提到真值
θ
是一个固定的值,不是变量。但是!我们又提到,我们会在估计
θ
之前知道了一些
θ
的知识,比如说
θ
的分布
π(θ)
(这个分布是怎么知道的呢?下文有讲解)。既然
θ
是有一个概率分布的,那么此时
θ
也变成一个随机变量了,所以
R(θ^,θ)
同时是
θ^
和
θ
的函数。这时要怎么使用
π(θ)
呢?下面定义贝叶斯风险。
(注意!下面要积分了!)
贝叶斯风险:
Bayes Risk=Eθ[R(θ,θ^)]=∫R(θ,θ^)π(θ)dθ
上式表示:贝叶斯风险是风险函数在
θ
上的期望(时刻注意到期望是通过积分来定义的)。
回顾一下期望的定义。如果随机变量用
X
表示,其概率密度函数是
f(x)
,那么
X
的期望
EX=∫xf(x)dx
. 对照期望的积分形式,可以看到
π(θ)
就是
θ
的概率密度函数,随机变量是
θ
.
R(θ,θ^)
是关于随机变量
θ
的一个函数,所以Bayes Risk就是在求风险函数的期望。总的来说:风险函数是损失函数关于
θ^
的期望,而贝叶斯风险是风险函数关于
θ
的期望。所以贝叶斯风险是一个双期望。更进一步,
θ^
是关于随机变量
X
的函数(
θ^
总是通过
X
求出来的呀!),所以也可以说:风险函数是损失函数关于
x
的期望。这样就将风险与
θ
的先验知识结合起来了。
之所以叫贝叶斯风险是因为引入了一个先验分布
π(θ)
. 『先验』这个词本身就是贝叶斯理论的一部分。
如何最小化贝叶斯风险(贝叶斯估计)
终于到达贝叶斯估计的核心了,即如何找到一个
θ^
,使得贝叶斯风险最小。问题转化为求
∫R(θ,θ^)π(θ)dθ
的最小值。
这是一个积分形式的函数,如果知道
R(θ,θ^)
和
π(θ)
的形式或许可以求出最小值。但其实仅仅根据这个抽象的形式,也是可以求出最小值的形式的。
下面要开始积分了!不想看推导过程可以直接看最后结论。
为了跟一些书的符号统一,下面引入一个新的符号:
a=θ^
. 即用字母
a
来表示参数的估计值
θ^
.
字母
a
表示action,表示采取某一动作求得
θ
的估计。在参数估计问题中,
a
就是
θ^
. 所以
R(θ,θ^)=R(θ,a)
因为
R(θ,a)
的本质也是求期望,先将其转换为积分的形式。
R(θ,a)=Ea[L(θ,a)]=∫L(θ,a(x))f(x|θ)dx
因为
a
是
x
的函数,所以对
a
求期望就是在
x
上求期望,进而转换为对
x
求积分。同时
x
的概率密度函数是已知的,记为
f(x|θ)
,表示
x
的pdf跟
θ
有关,也表示条件概率密度函数,一石二鸟。
既然在
θ
给定的条件下,
x
的条件pdf是
f(x|θ)
(此时已经将
θ
当成随机变量看待了),而且
θ
的分布又是
π(θ)
,那么根据条件概率的定义,可以求出
x
的边缘概率密度函数:
f(x)=∫f(x|θ)π(θ) dθ (边缘概率定义)
所以有:
∫R(θ,a)π(θ)dθ=∫θ[∫xL(θ,a(x)) f(x|θ) dx]π(θ) dθ=∫θ∫xL(θ,a(x))f(x|θ)π(θ)f(x)f(x) dx dθ=∫θ∫xL(θ,a(x))π(θ|x) f(x) dx dθ=∫x[∫θL(θ,a(x))π(θ|x) dθ]f(x) dx (带入上式展开) (除以一个f(x)再乘以一个f(x)结果不变) (贝叶斯定理) (交换积分顺序)
到这里再也无法化简了,那就来分析上式中最后一项。
通过贝叶斯定理,我们求出了
π(θ|x)
. 观察中括号中的式子,
π(θ|x)
是一个pdf,会发现中括号中的这一项很像期望的定义。实际上中括号这一项就是在
π(θ|x)
上求损失函数
L(θ,a(x))
的期望。
要记得贝叶斯估计的目的:求出
θ^
(在这里就是
a(x)
),使得贝叶斯风险最小(即
∫R(θ,a)π(θ)dθ
最小)。
中括号中的那一项是对
θ
积分,积分后不会有
θ
,从而整个式子只剩下
x
. 而回想一下贝叶斯估计的目的,
x
并不是我们要关心的。所以贝叶斯估计就是要计算中括号一项,使得中括号内的积分最小,最终还是回到了损失函数上。
刚才说到中括号一项看起来像是期望的定义,其实这一项就叫posterior expected risk. 记作:
∫θL(θ,a(x))π(θ|x) dθ=EπL(θ,a(x))
Eπ
表示在
π(θ|x)
上求期望。
π(θ|x)
就叫做
θ
的后验分布,即在知道数据
x
后
θ
的分布。所以贝叶斯估计就是:求
θ^
,使得损失函数在
θ
的后验分布上的期望最小。
这样我们发现,
L(θ,a(x))
是自己设计的,比如前面提到的那三种,如果知道
π(θ)
,根据贝叶斯定理,容易求出
π(θ|x)
;而
π(θ)
又是我们自己定义的(先验知识嘛,肯定是事先就知道了的),所以这个posterior expected risk不难求得。至于如何计算后验分布,后面有讲解。
结论
贝叶斯参数估计的步骤:
- 拿到数据,知道数据的分布,记为
f(x|θ)
,要估计的参数记为
θ
- 定义损失函数
L(θ,θ^)
- 定义
θ
的先验知识或先验分布
π(θ)
- 根据贝叶斯定理求出后验分布
π(θ|x)=f(x|θ)π(θ)f(x)
- 最小化如下式子:
argmin∫L(θ,θ^)π(θ|x) dθ=EπL(θ,θ^)
上面最后一步,涉及积分以及最小值求解,看起来十分麻烦。所幸,在特定的损失函数形式下,上面最后一步可以化简,并不需要完全用到积分。下面一部分的讲解就是在三种特定损失函数形式下贝叶斯估计的计算方法。
理论总是简单的,上述的求解过程后面附有例子,可以温习一下。
三种常用损失函数的贝叶斯估计计算
Square Error
square error就是
L(θ,a)=(θ−a)2
下面这直接给出结论:
若损失函数是square error,那么当
a
等于
θ
在
π(θ|x)
上的期望时,贝叶斯风险最小。
上述结论证明涉及到其它知识,略过。
上述结论说明,如果知道
π(θ|x)
的形式,那么只需求
∫θπ(θ|x) dθ
就可以了,实际上就是期望。例如,如果
π(θ|x)
是正态分布,
π(θ|x)∼N(η,τ)
,那么
a=η
,
η
就是参数
θ
的估计。
Absolute Error
Absolute error就是
L(θ^,θ)=|θ^−θ|
下面直接给出结论:
若损失函数是square error,那么当
a
等于数据
X
的中位数时,贝叶斯风险最小。
这个结论说明:如果使用square error作为损失函数,连
θ
的后验分布都不用求了。
uniform error的形式为:
L(θ^,θ)={01if |θ−θ^|⩽Δif |θ−θ^|>Δ
下面直接给出结论:
若损失函数是uniform error且
Δ
很小,当
a=argmaxπ(θ|x)
时,即
a
等于
θ
后验分布的最大值时,贝叶斯风险最小。
上述结论说明,在uniform error的情况下,如果知道
π(θ)
的形式,那么求它的最大值即可。如果
π(θ|x)
是正态分布,
π(θ|x)∼N(η,τ)
,正态分布的最大值在均值处取得,所以
θ
的估计值为
η
,与square error一样。
如何确定先验分布(先验知识)与后验分布
前面一直提到先验知识或者先验分布,偶尔混用。这是因为
θ
的先验知识
π(θ)
可以有很多种形式,可以是一个数,可以是离散的几个数,也可以是个概率分布函数,此时就叫后验分布。
但是对于后验分布,它只能是一个概率分布形式,即
π(θ|x)
必须满足概率密度函数的定义,而
π(θ)
却不一定。原因是因为最后求贝叶斯风险最小值的函数形式只涉及到
π(θ|x)
,没有涉及到
π(θ)
,所以
π(θ)
取什么值在数学上无所谓,但是会对结果造成影响。
很多应用中
π(θ)
会取一个概率密度函数。下面介绍一种
π(θ)
的取法:共轭先验。
共轭先验(Conjugate Prior)
共轭先验这四个字指的不是一个分布,而是指一大类分布,比如指数族分布。下面给出共轭分布不太严谨的数学定义:
设资料
X
有概率密度函数
F
:
X∼F(x|θ)
.
θ
的先验分布
π(θ)
属于某个分布族
P
:
π(θ)∈P
. 如果对任意
θ
,
θ
的后验分布
π(θ|x)
也属于分布族
P
,那么
P
就叫做
F
的共轭先验。
白话解释:
如果找到一个
π(θ)
,它是
F
的共轭先验,那么
θ
的后验分布
π(θ|x)
和先验分布
π(θ)
会有一样的形式,即同属于分布族
P
。注意共轭是指
π(θ)
与
f(x|θ)
共轭。
前面说到贝叶斯估计最终需要计算出
θ
的后验分布,
θ
的先验分布
π(θ)
分布是已知的。如果
π(θ)
于
f(x)
共轭,那么
π(θ)
与
π(θ|x)
会有一样的形式,这样不就会很方便求解
π(θ|x)
?事实上就是这样的,因此在设计先验分布的时候常常会设计成与
f(x)
共轭,后面计算会方便。
但是看定义凭空想出一个共轭先验蛮难的。幸运的是我们可以证明,所有属于指数族分布的
f(x)
,都可以求出它的共轭先验分布
π(θ)
的具体形式。而大部分常见的分布都属于指数族分布(Exponential Family),比如正态分布,指数分布,二项分布,泊松分布,Beta分布,Gamma分布等等。
下面给出常见的共轭先验:
中文名称 |
f(x|θ)
|
π(θ)
|
正态分布 |
N(μ,σ2)
|
π(μ)∼N(η,τ)
|
正态分布 |
N(μ,σ2)
|
π(σ2)∼inverse Gamma
|
指数分布 |
Exp(θ)
|
π(θ)∼inverse Gamma
|
二项分布 |
Bin(n,p)
|
π(p)∼Beta(α,β)
|
泊松分布 |
Poi(λ)
|
π(λ)∼Γ(α,β)
|
如果你的样本的分布是上面表中第二列中的一项,那么就可以将先验分布设计成第三列中对应的分布。所以在才会在那么多算法或实际问题中将某个参数的分布定义成Gamma或Beta这种“奇怪”的形式,原因就是为了求解方便。
后验分布的计算
贝叶斯估计的落脚点之一是求解参数的后验分布
π(θ|x)
. 本部分讲解求解
π(θ|x)
的步骤。
先给出公式:
π(θ|x)=f(x|θ)π(θ)f(x)
贝叶斯理论中是将参数作为随机变量看待的,因此样本的概率密度函数通常写成
f(x|θ)
的形式,表示
θ
是已知的,而
f(x)
就是
x
的边缘密度概率函数,这个需要计算,而且的确是可以计算出来的。
泊松分布的例子
这个例子很理论,但胜于比较典型。
问题:已知
X1,X2,...,Xn
是iid的,服从泊松分布,
Xi∼Poi(λ)
.
λ
是要估计的参数。
(1) 利用
λ
的共轭先验求
λ
的后验分布
(2) 求在square error下
λ
的贝叶斯估计
λ^bayes
求解(1)
依题意,我们可以写出
Xi
的概率密度函数:
f(x|λ)=e−λλxx!
因为
Xi
是独立同分布,所以它的联合概率密度函数是:
f(x|λ)=e−nλλ∑ni=1xi∏ni=1(xi!) (连乘)
由之前的表格可知,泊松分布的共轭先验分布是Gamma分布,Gamma分布的参数是
α
和
β
,这两个参数可以当成是已知的。所以先验分布可以写成:
π(λ)=βαλα−1e−λβΓ(α)
求解
X
的边缘概率密度函数
f(x)
(下面积分过程其实很简单,但也实在太碍眼了,可以略过不看)
f(x)=∫∞0f(x|λ)π(λ)dλ (连续函数需要积分,如果是离散就就求和)=∫∞0e−nλλ∑ni=1xi∏ni=1(xi!)βαλα−1e−λβΓ(α)dλ=βα∏ni=1(xi!)Γ(α)∫∞0λ∑ni=1xi+α−1e(n+β)λdλ=(1n+β)∑ni=1xi+αβα∏ni=1(xi!)Γ(α)∫∞0((n+β)λ)(∑ni=1xi+α)−1e(n+β)λd(n+β)λ=βα∏ni=1(xi!)Γ(α)Γ(∑i=1nxi+α)(1n+β)∑ni=1xi+α
根据贝叶斯定理求解
λ
的后验分布:
π(λ|x)=f(x|λ)π(λ)f(x)=e−nλλ∑ni=1xi∏ni=1(xi!)βαλα−1e−λβΓ(α)∏ni=1(xi!)Γ(α)(n+β)∑ixi+αβαΓ(∑ni=1xi+α)=e−(n+β)λλ∑ixi+α−1(n+β)∑ixi+αΓ(∑ni=1xi+α)
上面的式子很复杂,但其实它是一个Gamma分布:
π(λ|x)∼Γ(∑i=1nxi+α,n+β)
上面的求解过程还是太复杂,其实有更简便的方法。因为共轭先验分布是Gamma分布,所以后验分布肯定也是Gamma,我们可以直接凑出后验分布的形式,但不是很直观,略过。
求解(2)
Square error下的贝叶斯估计就是后验分布的期望。对于
X∼Γ(α,β)
,
EX=αβ
. 所以对于本问题:
λ^bayes=∑ni=1xi+αn+β
可以看到先验分布中
λ
服从参数为
α
和
β
的Gamma分布,在观察到一些数据后,
λ
仍然是服从Gamma分布的,只不过参数得到了修正,变成了
∑ni=1xi+α
和
n+β
. 这就是贝叶斯估计的思想,先假设参数服从某个分布,可能会有偏差。有偏差不要紧,我们将观察到的数据(样本)带入贝叶斯估计的过程便可以修正这些偏差。
二项分布的例子
问题:已知
X1,X2,...,Xn
是iid的,服从伯努利(Bernouli),
Xi∼Ber(r)
.
r
是要估计的参数。
(1) 利用
r
的共轭先验求
r
的后验分布
(2) 求在square error下
r
的贝叶斯估计
r^bayes
求解(1)
依题意,可以写出数据的分布:
f(x|r)=r∑xi(1−r)n−∑xi (单个pdf连乘)
二项分布的共轭先验是Beta分布,长这个样子:
π(r)∼Beta(α,β)=Γ(α+β)Γ(α)+Γ(β)rα−1(1−r)β−1
不像第一个例子,这里不根据
π(θ|x)=f(x|θ)π(θ)f(x)
来求后验分布,而是用比较简单的拼凑法来求。
注意到
π(θ|x)=f(x|θ)π(θ)f(x)
的分母与参数
θ
无关,因此可以认为
π(θ|x)
的分布近似于
f(x|θ)π(θ)
的形式。
π(r|x)∝π(r)×f(x|r)∝rα−1(1−r)β−1×r∑xi(1−r)n−∑xi(其余部分与参数无关,省略)∝r∑xi+α−1(1−r)n−∑xi+β−1∝1B(α+∑xi,n−∑xi+β)r∑xi+α−1(1−r)n−∑xi+β−1(凑出Beta分布的形式)
上式中:
B(α+x,n−x+β)=Γ(α+x+n−x+β)Γ(α+x)+Γ(n−x+β)=Γ(α+β+n)Γ(α+x)+Γ(n−x+β)
.
所以最终后验分布的形式是:
π(r|x)∼Beta(α+∑xi,n−∑xi+β)
求解(2)
Square error下的贝叶斯估计是后验分布的期望,在这里即为
Beta(α+x,n−x+β)
的期望。其期望如下:
r^bayes=E(r|X)=α+∑xiα+∑xi+n−x+β=α+∑xiα+β+n
二项分布贝叶斯估计的实际背景(点击率的贝叶斯平滑)
这个例子有实际应用的背景。
Xi
可以认为是一件商品或一则广告,对于网页上的广告,用户看到了算是一次曝光(impression或exposure),看到之后用户只有点击与不点击两种情况,点击取1,不点击取0,那么
∑xi
的实际意义就是点击次数,而
n
就是曝光次数。令
C=∑xi
,
I=n
,
CI
就是点击率了,用
r
表示点击率,那么上式中的
r^bayes
就是点击率的贝叶斯估计,也称为点击率的贝叶斯平滑,式中的
α
和
β
是平滑参数。这两个平滑参数可以方便地从历史数据中计算(估计)得到。