二、概率推理(3)
到目前为止,均假设概率模型的参数和结构是已知的。本部分讨论从数据学习或拟合模型参数的问题,进一步讨论了从数据中学习模型结构的方法,最后对决策理论进行了简单的概述。
3. 参数学习
3.1 最大似然学习
所谓最大似然参数学习,就是试图找到最大化观测数据可能性的分布参数,即$$\hat{\theta} = \argmax_{\theta} \mathbb{P} (D \mid \theta).$$该方法主要面临两个挑战:
- 选择合适的概率模型,通过该模型定义$\mathbb{P} (D \mid \theta)$。通常假设数据$D$中的样本是独立同分布的(independently and identically distributed),分布可能是二项分布或高斯分布。
- 执行定义等式的最大化在常见的概率模型上是可执行的。对于其他的概率模型常使用最大化对数似然(log-likelihood),即$$\hat{\theta} = \argmax_{\theta} \sum_{i} \log \mathbb{P} (D \mid \theta).$$ 与计算许多小概率质量或密度的乘积相比,计算对数似然之和通常在数值上更稳定。
示例 最大似然估计贝叶斯网络。
function sub2ind(siz, x)
k = vcat(1, cumprod(siz[1:end-1]))
return dot(k, x .- 1) + 1
end
function statistics(vars, G, D::Matrix{Int})
n = size(D, 1)
r = [vars[i].r for i in 1:n]
q = [prod([r[j] for j in inneighbors(G,i)]) for i in 1:n]
M = [zeros(q[i], r[i]) for i in 1:n]
for o in eachcol(D)
for i in 1:n
k = o[i]
parents = inneighbors(G,i)
j = 1
if !isempty(parents)
j = sub2ind(r[parents], o[parents])
end
M[i][j,k] += 1.0
end
end
return M
end
3.2 贝叶斯参数学习
贝叶斯参数学习解决了最大似然学习在数据量有限时的缺陷。贝叶斯参数学习估计$\mathbb{P} (\theta \mid D)$,即给定数据$D$后$\theta$的后验分布$$\hat{\theta} = \mathbb{E}_{\theta \sim \mathbb{P} (\cdot \mid D)} [\theta].$$然而,在某些情况下,期望可能不是可接受的估计值也会使用最大后验估计$$\hat{\theta} = \argmax_{\theta} \mathbb{P} (\theta \mid D).$$
3.3 非参学习
常用的非参估计为核密度估计(kernel density estimation)$$\mathbb{P} (x) = \frac{1}{m} \sum_{i = 1} ^{m} \phi(x - D_{i}).$$常使用的核函数$\phi$为高斯核函数,即零均值的高斯分布函数。其方差被称为带宽(bandwidth),可用于控制密度函数的光滑度。
# kernel density estimation
gaussian_kernel(b) = x->pdf(Normal(0,b), x) #bandwidth of this kernel function is b
function kernel_density_estimate(ϕ, O)
return x -> sum([ϕ(x - o) for o in O])/length(O)
end
3.4 缺失数据的学习
本部分关注数据随机缺失的情况,这意味着在给定观察变量值的情况下,条目缺失的概率与其值条件独立。具体包括两种通用方法,第一种使用缺失条目的预测值来学习分布参数,第二是基于参数估计的迭代方法。
- 数据补全(Data Imputation)
事实上,使用最大似然或贝叶斯方法从缺失数据中学习模型参数。如果采用贝叶斯最大后验方法,估计过程为$$\begin{align*}\hat{\theta} & = \argmax_{\theta} p(\theta \mid D_{\rm obs}) \\ & = \argmax_{\theta} \sum_{D_{\rm mis}} p(\theta \mid D_{\rm obs}, D_{\rm mis}) p(D_{\rm obs} \mid D_{\rm mis}).\end{align*}$$如果将补全视为一种近似,有$$\hat{D}_{\rm mis} = \argmax_{D_{\rm mis}} p(D_{\rm mis} \mid D_{\rm obs}).$$进而有$$\hat{\theta}= \argmax_{\theta} p(\theta \mid D_{\rm obs}) \approx \argmax_{\theta} p(\theta \mid D_{\rm obs}, \hat{D}_{\rm mis}).$$
缺失数据$D_{\rm mis}$的计算仍具有挑战性。
- 离散数据集的一种简单方法为边际模式(marginal mode)是用最常见的观测值替换缺失条目。
- 连续数据通常缺少重复数据,可以将分布拟合为连续值,然后使用结果分布。但这种补全方法并不总是产生合理的预测,且学习模型相当差。
如果虑观测变量和未观测变量之间的概率关系,可使用最近邻补全,往往会导致更好的估计和学习分布。此外,还可将分布拟合到完全观察到的数据,然后使用该分布推断缺失值。
- 期望最大化(Expectation-Maximization)
该方法即EM算法,往往分两步进行:
1) 第一步称为期望步骤(E-step),使用$\theta$的当前估计来推断数据的完整性。
2) 第二步称为最大化步骤(M-step),试图找到一个新的最大似然$\hat{\theta}$补全数据。
这种方法不能保证收敛到最大化观测数据可能性的模型参数,但在实践中很有效。为了降低算法仅收敛到局部最优的风险,可以从参数空间中的许多不同初始点运行算法以收敛,只需在最后选择最大化可能性的结果参数估计。
4. 结构学习
网络$G$的评分,即对网络$G$对数据建模的好坏的评价。首先分析基于$\mathbb{P} (G \mid D)$的贝叶斯评分,然后解释如何在网络空间中搜索得分最高的网络。
4.1 贝叶斯网络评分
书中写了一段基于文献的一段论述,还没搞清楚。
本质上,贝叶斯评分为$${\rm score}_{B} = \log \mathbb{P} (G \mid D) = \log \mathbb{P} (D \mid G) + \log \mathbb{P} (G). $$
# A variety of graph priors have been explored in the literature,
# although a uniform prior is often used in practice,
# in which case log P(G) can be dropped from the computation of the Bayesian score.
function bayesian_score_component(M, α)
p = sum(loggamma.(α + M))
p -= sum(loggamma.(α))
p += sum(loggamma.(sum(α,dims=2)))
p -= sum(loggamma.(sum(α,dims=2) + sum(M,dims=2)))
return p
end
function bayesian_score(vars, G, D)
n = length(vars)
M = statistics(vars, G, D)
α = prior(vars, G)
return sum(bayesian_score_component(M[i], α[i]) for i in 1:n)
end
4.2 有向图搜索
struct K2Search ordering::Vector{Int} # variable ordering end function fit(method::K2Search, vars, D) G = SimpleDiGraph(length(vars)) for (k,i) in enumerate(method.ordering[2:end]) y = bayesian_score(vars, G, D) while true y_best, j_best = -Inf, 0 for j in method.ordering[1:k] if !has_edge(G, j, i) add_edge!(G, j, i) y′ = bayesian_score(vars, G, D) if y′ > y_best y_best, j_best = y′, j end rem_edge!(G, j, i) end end if y_best > y y = y_best add_edge!(G, j_best, i) else break end end end return G end
局部搜索/爬山法:从初始图开始,移动到得分最高的邻居。图的邻域由距离基本图操作仅一次的图组成,其中基本图操作包括引入边、删除边和反转边。此外,可使用Randomized restart、Simulated annealing、Genetic algorithms、Memetic algorithms、Tabu search等方法避免陷入局部最优。
# An opportunistic version of local search struct LocalDirectedGraphSearch G # initial graph k_max # number of iterations end function rand_graph_neighbor(G) n = nv(G) i = rand(1:n) j = mod1(i + rand(2:n)-1, n) G′ = copy(G) has_edge(G, i, j) ? rem_edge!(G′, i, j) : add_edge!(G′, i, j) return G′ end function fit(method::LocalDirectedGraphSearch, vars, D) G = method.G y = bayesian_score(vars, G, D) for k in 1:method.k_max G′ = rand_graph_neighbor(G) y′ = is_cyclic(G′) ? -Inf : bayesian_score(vars, G′, D) if y′ > y y, G = y′, G′ end end return G end
- 部分有向图搜索:利用马尔可夫等价类(Markov equivalence classes)的概念,将全空间分为若干个子空间,进行部分搜索,提高搜索效率。
5. 简单决策
Humans are not always rational.本部分的主要效用理论的角度去看待决策问题,其中最大期望效用准则(maximum expected utility principle)是决策理论的核心概念之一。
5.1 理性选择(rational preferences)与效用函数
理性选择的概念类似于概率推断,是概率在经济学领域的重写。根据这个有了效用函数(Utility Function)的概念。
It follows from our constraints on rational preferences that there exists a real-valued **utility
function** $\mathcal{U}$ such that
- $\mathcal{U} (A) > \mathcal{U} (B)$ if and only if $A \succ B$, and
- $\mathcal{U} (A) = \mathcal{U} (B)$ if and only if $A \sim B$.
效用函数具有
1) 正仿射变换唯一性;
2)线性性(?) $\mathcal{U} \left([S_{1} : p_{1}; \cdots; S_{n} : p_{n}]\right)= \sum_{i = 1}^{n} p_{i} \mathcal{U} (S_{i}).$
3)类似于其他概念,也可以归一化。
5.2 最大期望效用准则
假设概率模型$\mathbb{P} (s^{\prime} \mid o, a)$表示观察到状态$o$并执行行动$a$后,状态变为$s^{\prime}$的概率。假设效用函数$\mathcal{U}(s^{\prime})$表征对结果空间的偏好。给定状态$o$并执行行动$a$的期望效用为$$\mathbb{E}[\mathcal{U} (a \mid o)] = \sum_{s^{\prime} } \mathbb{P} (s^{\prime} \mid o, a) \mathcal{U}(s^{\prime}).$$最大预期效用原则指出,理性智能应选择最大化预期效用的行动:$$a^{\ast} = \argmax_{a} \mathbb{E}[\mathcal{U} (a \mid o)].$$
5.3 决策网络(decision network)
决策网络或影响图(influence diagram),是贝叶斯网络包括行动和效用节点的推广,以便紧凑地表示定义决策问题的概率和效用模型。其包含三种节点和三种有向边:
- 机会节点(chance node)表示随机变量,由圆圈表示;
- 行动节点(action node)表示决策变量,由正方形表示;
- 效用节点(utility node)表示效用变量,由菱形表示,并且不能有子节点。
- 条件边(conditional edge)以机会节点结束,并指示该节点的不确定性取决于其所有父节点的值;
- 信息边(informational edge)以行动节点结束,并指示与该节点相关联的决策是在知道其父节点的值的情况下做出的;(这些边通常用虚线绘制,有时从图中省略。)
- 功能边(functional edge)以效用节点结束,表示该节点由其父节点的结果决定。
与贝叶斯网络一样,决策网络不能有循环。与动作关联的效用等于所有效用节点的值之和。
struct SimpleProblem
bn::BayesianNetwork
chance_vars::Vector{Variable}
decision_vars::Vector{Variable}
utility_vars::Vector{Variable}
utilities::Dict{Symbol, Vector{Float64}}
end
function solve(𝒫::SimpleProblem, evidence, M)
query = [var.name for var in 𝒫.utility_vars]
U(a) = sum(𝒫.utilities[uname][a[uname]] for uname in query)
best = (a=nothing, u=-Inf)
for assignment in assignments(𝒫.decision_vars)
evidence = merge(evidence, assignment)
ϕ = infer(M, 𝒫.bn, query, evidence)
u = sum(p*U(a) for (a, p) in ϕ.table)
if u > best.u
best = (a=assignment, u=u)
end
end
return best
end
5.4 信息价值
The value of information about variable $O^{\prime}$
Given $o$, the value of information about variable $O^{\prime}$ is $${\rm VOL} (O^{\prime} \mid o) = \left(\sum_{o^{\prime}} \mathbb{P} (o^{\prime} \mid o) \mathbb{E} [\mathcal{U}^{\ast} (o)] \right).$$
换句话说,有关变量的信息值是如果该变量被观测到则预期效用的增加。
# A method for decision network evaluation
function value_of_information(𝒫, query, evidence, M)
ϕ = infer(M, 𝒫.bn, query, evidence)
voi = -solve(𝒫, evidence, M).u
query_vars = filter(v->v.name ∈ query, 𝒫.chance_vars)
for o′ in assignments(query_vars)
oo′ = merge(evidence, o′)
p = ϕ.table[o′]
voi += p*solve(𝒫, oo′, M).u
end
return voi
end
总结
第一部分给出了概率推理的基本概念和表示法。该部分专注于单步决策,将序列决策问题的讨论保留到下一部分。