PRML-3.5 证据近似
3.5证据近似
解决两个超参数
如果我们引入上的超先验,那么预测分布可以通过边缘化来获得:
其中由式(3.8)给出,由式(3.49)给出,其中的分别由(3.53)(3.54)给出。
第一项和第二项都有了,解决第三项
为了让记号简洁,我们省略了对于输入变量的依赖。如果后验分布在周围是尖峰,那么把固定为,然后对求积分:
就得到了预测分布。
那么如何才能将固定住呢?
就要用贝叶斯定理
根据贝叶斯定理,的后验分布由
给出。如果先验相对较平,那么在证据框架中可以通过最大化边缘似然函数来获得。我们先得到线性基函数模型的边缘似然函数,然后再找出最大值。这将使我们能够不通过交叉验证,而直接从训练数据确定这些超参数的值。回忆一下比值类似于正则化参数。
解读一下
此外,值得注意的是,如果在上定义共轭(Gamma)先验分布,那么对式(3.74)中对这些超参数的边缘化可以通过上的学生t分布(见第2.3.7节)解析的计算出来。虽然得到的结果在上的积分不再有解析解,但是我们可以对这个积分求近似,例如,可以使用基于以后验概率分布的众数为中心的局部高斯近似的拉普拉斯近似方法(见第4.4节),给证据框架提供了另一种实用的方法(Buntine and Weigend, 1991)。然而,作为关于的被积函数的众数通常是强倾斜的(不准确),所以拉普拉斯近似方法不能描述概率质量中的大部分信息。这就导致最终的结果要比最大化证据的方法给出的结果差(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 计算证据函数
边缘似然函数是通过对权重参数的积分来获得的,即:
计算这个积分的一种方法是再次使用式(2.115)给出的线性-高斯模型的条件分布的结果(之前也常用的对应字符后直接写结果)。这里,我们使用另一种通过对指数项配平方,然后使用高斯分布的标准化系数的基本形式,来计算这个积分。
从(3.11)(3.12)和(3.52)中,得到我们可以把证据函数写成
的形式。其中是的维数,且定义
3.78 证明-习题3.17
3.11 改形式
3.52
相乘即可得3.78,3.79
(如果忽略一些比例常数,式(3.79)可以看成与正则化的平方和误差函数(3.27)相等。)
现在,对配平方,可得:
其中,我们引入了
和
注意对应的是误差函数的二阶导数矩阵
这被称为Hessian矩阵(之前证过,可以类比二阶函数)。这里我们定义为:
使用式(3.54)(0均值w后验),可得,因此式(3.84)等价于之前的定义的式(3.53),所以它表示后验分布的均值。
3.80证明 - 习题 3.18
通过标准化多元高斯分布的标准化系数,就可以简单的得到关于的积分,即:
3.78后面的积分项
使用式(3.78)我们可以把对数边缘似然写成
这就是证据函数所需要的表达式。
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),参数的值固定为。这个图像的形式非常有指导意义。回头看图1.4,得到的多项式对数据的拟合效果非常差,结果模型证据的值也相对较小。的多项式对于数据的拟合效果有了显著的提升,因此模型证据变大了。但是,对于的多项式,因为产生数据的正弦函数是奇函数,所以在多项式展开中没有偶次项,所以拟合效果又变差了。事实上,图1.5给出的数据残差从到只有微小的减小。由于复杂的模型有着更大的复杂度惩罚项,因此从到,模型证据实际上减小了。当时,我们对于数据的拟合效果有了很大的提升,如图1.4所示,因此模型证据再次增大,给出了多项式拟合的最高的模型证据。进一步增加的值,只能少量地提升拟合的效果,但是模型的复杂度却越来越复杂,这导致整体的模型证据下降。再次看图1.5,我们看到泛化错误在到之间几乎为常数,因此只基于这幅图很难对模型做出选择。然而,模型证据的值明显地倾向于选择的模型,因为这是能很好地解释观测数据的最简单的模型。
3.5.2 最大化证据函数
让我们先考虑关于来最大化。首先定义特征方程:
根据式(3.81)得到的特征值。
现在考虑式(3.86)中涉及的项关于的导数。得到:
这里用到了一个线性代数的定理,矩阵的行列式=矩阵的特征值之积
因此式(3.86)关于的驻点满足
乘以,整理,可得
由于关于的求和项有个,因此可以写成:
稍后讨论的解释。根据方程(3.90),得到使得边缘似然函数最大化的满足:
这里对
注意,这是的一个隐式解,不仅仅因为与相关,还因为后验分布众数本身也与的选择有关。因此我们使用迭代的方法求解。首先我们选择一个的初始值,再把这个初始值代入式(3.53)求得,利用式(3.91)计算得到,然后这些值再被代入式(3.92)来重新估计的值。 不断执行这个过程直至收敛。注意,由于矩阵是固定的,因此我们只需要在最开始的时候计算一次特征值,然后接下来只需乘以就可以得到的值(3.87特征值的定义)。
需要强调的是,的值是完全通过训练集的数据来确定的。最大似然方法不同,模型的最优的复杂度不需要独立的数据集。
类似地,我们可以关于最大化对数边缘似然函数(3.86)。为了达到这个目的,我们注意到由式(3.87)定义的特征值正比于,即,得到:
因此,边缘似然的驻点满足:
整理可得:
与之前一样,这是的一个隐式解,可以通过迭代的方法解出。首先选择的一个初始值,然后使用这个初始值计算,然后使用式(3.95)重新估计的值,重复直到收敛。如果的值都是由数据确定的,那么他们的值可以在每次更新之后一起重新估计。
3.5.3 参数的有效数量
对图片做一个解释
在方向上,边缘最大似然对应的特征值更大(注意这里的椭圆的一长一短两个方向长度对应的是特征值的倒数),也就是会出现书上的,对于的方向,对应的参数会很接近最大似然值,且比值会很接近1,表示这次的似然学习是有效的,这个参数是有效参数,反之对于这个方向,更小,表示似然函数学习了老半天,没什么用,还是更加接近于先验(绿圈),这个时候就出现了 接近于0的情况,这个参数是无效参数
所以有一句结论
因此式(3.91)定义的度量了好确定的参数的有效总数。
如果考虑数据点的数量大于参数数量$ N \gg M \Phi^T\Phi \lambda_i \gamma = M \alpha,\beta $的再估计方程变成了
其中,分别由(3.25)(3.26)定义。因为这些结果不需要计算Hessian矩阵的一系列特征值,所以可以当成完整证据再估计公式的简化计算的近似。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)