PRML-3.5 证据近似

3.5证据近似

解决两个超参数α,β


如果我们引入α,β上的超先验,那么预测分布可以通过边缘化w,α,β来获得:

(3.74)p(t|t)=p(t|w,β)p(w|t,α,β)p(α,β|t)dwdαdβ

其中p(t|w,β)由式(3.8)给出,p(w|t,α,β)由式(3.49)给出,其中的mN,SN分别由(3.53)(3.54)给出。

(3.8)p(t|x,w,β)=N(t|y(x,w),β1)

(3.49)p(w|t)=N(w|mN,SN)

(3.53)mN=βSNΦTt(3.54)SN1=αI+βΦTΦ


第一项和第二项都有了,解决第三项

为了让记号简洁,我们省略了对于输入变量x的依赖。如果后验分布p(α,β|t)α^,β^周围是尖峰,那么把α,β固定为α^,β^,然后对w求积分

α,βα,β

(3.75)p(t|t)p(t|t,α^,β^)=p(t|w,β^)p(w|t,α^,β^)dw

就得到了预测分布。


那么如何才能将α,β固定住呢?
就要用贝叶斯定理

根据贝叶斯定理,α,β的后验分布由

(3.76)p(α,β|t)p(t|α,β)p(α,β)

给出。如果先验相对较平,那么在证据框架中α^,β^可以通过最大化边缘似然函数p(t|α,β)来获得。我们先得到线性基函数模型的边缘似然函数,然后再找出最大值。这将使我们能够不通过交叉验证,而直接从训练数据确定这些超参数的值。回忆一下比值α/β类似于正则化参数。

解读一下
,,p(t|α,β)

此外,值得注意的是,如果在α,β上定义共轭(Gamma)先验分布,那么对式(3.74)中对这些超参数的边缘化可以通过w上的学生t分布(见第2.3.7节)解析的计算出来。虽然得到的结果在w上的积分不再有解析解,但是我们可以对这个积分求近似,例如,可以使用基于以后验概率分布的众数为中心的局部高斯近似的拉普拉斯近似方法(见第4.4节),给证据框架提供了另一种实用的方法(Buntine and Weigend, 1991)。然而,作为关于w的被积函数的众数通常是强倾斜的(不准确),所以拉普拉斯近似方法不能描述概率质量中的大部分信息。这就导致最终的结果要比最大化证据的方法给出的结果差(MacKay, 1999)

回到证据框架中,我们注意到有两种方法可以用来最大化对数证据。我们可以解析的得到证据函数,然后令它的导数等于零,来得到了α,β的再估计方程(将在3.5.2节讨论)。另一种方法是,我们使用一种被称为期望最大化(EM)算法的技术,这将在9.3.4节讨论,并在那证明这两种方法会收敛到同一个解。

最大化边缘似然函数的方法
1.假设alpha.beta的先验是Gamma分布,但是这样w就没有解析解了
2.拉普拉斯近似 4.4章节
3.解析计算证据函数,求导=0 本章3.5.2
4.EM算法

3.5.1 计算证据函数

边缘似然函数p(t|α,β)是通过对权重参数w的积分来获得的,即:

(3.77)p(t|α,β)=p(t|w,β)p(w|α)dw

计算这个积分的一种方法是再次使用式(2.115)给出的线性-高斯模型的条件分布的结果(之前也常用的对应字符后直接写结果)。这里,我们使用另一种通过对指数项配平方,然后使用高斯分布的标准化系数的基本形式,来计算这个积分。

(3.11)lnp(t|w,β)=n=1NlnN(tn|wTϕ(xn),β1) =N2lnβN2ln(2π)βED(w)

(3.12)ED(w)=12n=1N{tnwTϕ(wn)}2

(3.52)p(w|α)=N(w|0,α1I)

从(3.11)(3.12)和(3.52)中,得到我们可以把证据函数写成

(3.78)p(t|α,β)=(β2π)N/2(α2π)M/2exp{E(w)}dw

的形式。其中Mw的维数,且定义

(3.79)E(w)=βED(w)+αEW(w) =β2tΦw2+α2wTw


3.78 证明-习题3.17
3.11 改形式
p(t|w,β)=n=1NN(tn|wTϕ(xn),β1)=(β2π)N2exp(βED(w))
ED(w)=12||tΦw||2
3.52
p(w|α)=N(w|0,α1I)=(α2π)M2exp(α2wTw)
相乘即可得3.78,3.79


(如果忽略一些比例常数,式(3.79)可以看成与正则化的平方和误差函数(3.27)相等。)

(3.27)12n=1N{tnwTϕ(xn)}2+λ2wTw

现在,对w配平方,可得:

(3.80)E(w)=E(mN)+12(wmN)TA(wmN)

其中,我们引入了

(3.81)A=αI+βΦTΦ

(3.82)E(mN)=β2tΦmN2+α2mNTmN

注意A对应的是误差函数的二阶导数矩阵

(3.83)A=E(w)

这被称为Hessian矩阵(之前证过,可以类比二阶函数)。这里我们定义mN为:

(3.84)mN=βA1ΦTt

使用式(3.54)(0均值w后验),可得A=SN1,因此式(3.84)等价于之前的定义的式(3.53),所以它表示后验分布的均值。

(3.53)mN=βSNΦTt(3.54)SN1=αI+βΦTΦ


3.80证明 - 习题 3.18


通过标准化多元高斯分布的标准化系数,就可以简单的得到关于w的积分,即:
3.78后面的积分项

(3.85)exp{E(w)}dw=exp{E(mN)}exp{12(wmN)TA(wmN)}dw=exp{E(mN)}(2π)M2|A|12

使用式(3.78)我们可以把对数边缘似然写成
(3.86)lnp(t|α,β)=M2lnα+N2lnβE(mN)12ln|A|N2ln(2π)
这就是证据函数所需要的表达式。


3.85证明 - 习题 3.19


模型证据与多项式阶数之间的关系

代码中的经验贝叶斯公式要和3.5.2结合起来看

点击查看代码

# 3.5
def cubic(x):
    return x * (x - 5) * (x + 5)


x_train, y_train = create_toy_data(cubic, 30, 10, [-5, 5])
x_test = np.linspace(-5, 5, 100)
evidences = []
models = []
for i in range(8):
    feature = PolynomialFeature(degree=i)
    X_train = feature.transform(x_train)
    model = EmpiricalBayesRegression(alpha=100., beta=100.)  # Empirical 经验的意思
    model.fit(X_train, y_train, max_iter=100)
    evidences.append(model.log_evidence(X_train, y_train))
    models.append(model)

degree = np.nanargmax(evidences)
regression = models[degree]  # 9个模型,拿出 evidences 最好的那个

X_test = PolynomialFeature(degree=int(degree)).transform(x_test)
y, y_std = regression.predict(X_test, return_std=True)

plt.scatter(x_train, y_train, s=50, facecolor="none", edgecolor="steelblue", label="observation")
plt.plot(x_test, cubic(x_test), label="x(x-5)(x+5)")
plt.plot(x_test, y, label="prediction")
plt.fill_between(x_test, y - y_std, y + y_std, alpha=0.5, label="std", color="orange")
plt.legend()
plt.show()

plt.plot(evidences)
plt.title("Model evidence")
plt.xlabel("degree")
plt.ylabel("log evidence")
plt.show()


这里,我们已经假定先验分布的形式为式(1.65),参数α的值固定为alpha=5×103。这个图像的形式非常有指导意义。回头看图1.4,得到M=0的多项式对数据的拟合效果非常差,结果模型证据的值也相对较小。M=1的多项式对于数据的拟合效果有了显著的提升,因此模型证据变大了。但是,对于M=2的多项式,因为产生数据的正弦函数是奇函数,所以在多项式展开中没有偶次项,所以拟合效果又变差了。事实上,图1.5给出的数据残差从M=1M=2只有微小的减小。由于复杂的模型有着更大的复杂度惩罚项,因此从M=1M=2,模型证据实际上减小了。当M=3时,我们对于数据的拟合效果有了很大的提升,如图1.4所示,因此模型证据再次增大,给出了多项式拟合的最高的模型证据。进一步增加M的值,只能少量地提升拟合的效果,但是模型的复杂度却越来越复杂,这导致整体的模型证据下降。再次看图1.5,我们看到泛化错误在M=3M=8之间几乎为常数,因此只基于这幅图很难对模型做出选择。然而,模型证据的值明显地倾向于选择M=3的模型,因为这是能很好地解释观测数据的最简单的模型

3.5.2 最大化证据函数

让我们先考虑关于α来最大化p(t|α,β)。首先定义特征方程:

(3.87)(βΦTΦ)ui=λiui

根据式(3.81)得到A的特征值α+λi

(3.81)A=αI+βΦTΦ

(3.86)lnp(t|α,β)=M2lnα+N2lnβE(mN)12ln|A|N2ln(2π)

(3.82)E(mN)=β2tΦmN2+α2mNTmN

现在考虑式(3.86)中涉及ln|A|的项关于α的导数。得到:
这里用到了一个线性代数的定理,矩阵的行列式=矩阵的特征值之积


A=PΛP1,

det(A)=det(PΛP1)

det(A)=det(ΛPP1)

det(A)=λ1λ2...λn


(3.88)ddαln|A|=ddαlni(λi+α)=ddαiln(λi+α)=i1λi+α

因此式(3.86)关于α的驻点满足

(3.89)0=M2α12mNTmN12i1λi+α

乘以2α,整理,可得

(3.90)αmNTmN=Mαi1λi+α=γ

由于关于i的求和项有M个,因此γ可以写成:

(3.91)γ=iλiα+λi

0γM

稍后讨论γ的解释。根据方程(3.90),得到使得边缘似然函数最大化的α满足:

(3.92)α=γmNTmN

这里对α3.21


(3.53)mN=βSNΦTt(3.54)SN1=αI+βΦTΦ

注意,这是α的一个隐式解,不仅仅因为γα相关,还因为后验分布众数mN本身也与α的选择有关。因此我们使用迭代的方法求解。首先我们选择一个α的初始值,再把这个初始值代入式(3.53)求得mN,利用式(3.91)计算得到γ,然后这些值再被代入式(3.92)来重新估计α的值。 不断执行这个过程直至收敛。注意,由于矩阵ΦTΦ是固定的,因此我们只需要在最开始的时候计算一次特征值,然后接下来只需乘以β就可以得到λi的值(3.87特征值的定义)。

需要强调的是,α的值是完全通过训练集的数据来确定的。最大似然方法不同,模型的最优的复杂度不需要独立的数据集

类似地,我们可以关于β最大化对数边缘似然函数(3.86)。为了达到这个目的,我们注意到由式(3.87)定义的特征值λi正比于β,即dλi/dβ=λi/β,得到:

(3.93)ddβln|A|=ddβiln(λi+α)=1βiλiλi+α=γβ

因此,边缘似然的驻点满足:

(3.94)0=N2β12n=1N{tnmNTϕ(xn)}2γ2β

整理可得:

(3.95)1β=1Nγn=1N{tnmNTϕ(xn)}2

与之前一样,这是β的一个隐式解,可以通过迭代的方法解出。首先选择β的一个初始值,然后使用这个初始值计算mN,γ,然后使用式(3.95)重新估计β的值,重复直到收敛。如果α,β的值都是由数据确定的,那么他们的值可以在每次更新γ之后一起重新估计。

3.5.3 参数的有效数量

对图片做一个解释
w2方向上,边缘最大似然对应的特征值λ2更大(注意这里的椭圆的一长一短两个方向长度对应的是特征值的倒数),也就是会出现书上的,对于λiα的方向,对应的参数wi会很接近最大似然值,且比值λi/(λi+α)会很接近1,表示这次的似然学习是有效的,这个参数是有效参数,反之对于w1这个方向,λ1更小,表示似然函数学习了老半天,没什么用,wmap还是更加接近于先验(绿圈),这个时候就出现了γ 接近于0的情况,这个参数是无效参数
所以有一句结论
因此式(3.91)定义的γ度量了好确定的参数的有效总数

如果考虑数据点的数量大于参数数量$ N \gg M 3.87 \Phi^T\Phi \lambda_i \gamma = M \alpha,\beta $的再估计方程变成了

(3.98)α=M2EW(mN)(3.99)β=N2ED(mN)

其中,EW,ED分别由(3.25)(3.26)定义。因为这些结果不需要计算Hessian矩阵的一系列特征值,所以可以当成完整证据再估计公式的简化计算的近似。

posted @   筷点雪糕侠  阅读(303)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示