1. 项目概述从数据到模型参数学习的核心挑战在机器学习和统计建模的世界里我们常常手握一堆观测数据心中有一个关于数据生成机制的猜想模型但模型里那些关键的“旋钮”——也就是参数——到底该拧到哪个刻度上才能让模型最“像”真实世界这就是参数学习要解决的根本问题。最大似然估计Maximum Likelihood Estimation, MLE无疑是解决这个问题的“标准答案”之一它的哲学朴素而有力在给定模型下找到一组参数使得我们手头观测到的这组数据出现的“可能性”最大。听起来很直接对吧但魔鬼藏在细节里。当模型结构简单、所有变量都可观测时MLE往往有漂亮的解析解或可以通过梯度下降轻松找到。然而现实世界的数据常常是“不完整”的。比如我们观测到了用户的点击行为显变量但驱动这些行为的用户潜在兴趣隐变量却看不见在贝叶斯网络中我们可能只知道部分节点的状态。一旦模型引入了隐变量或者像马尔可夫随机场那样具有复杂的环状依赖结构似然函数就会变成一个涉及对隐变量求和或积分的复杂表达式直接最大化它变得异常困难计算上常常是“难解”的。这时变分近似Variational Approximation就像一束照亮复杂计算迷宫的光。它的核心思想很巧妙与其硬啃那个难以下咽的真实后验分布不如用一个我们熟悉且易于处理的简单分布比如指数族分布去逼近它。通过优化这个近似分布与真实分布之间的差异通常用KL散度衡量我们将一个棘手的积分问题转化为了一个相对容易的优化问题。当模型本身恰好也属于指数族时事情会变得更加美妙因为指数族分布具有良好的数学性质如共轭先验、充分统计量使得变分推断中的期望计算常常能得出闭合形式或高效的迭代更新公式。本文将深入拆解从指数族模型的最大似然估计到引入变分方法处理隐变量模型再到具体应用于贝叶斯网络参数学习的完整技术链条。我会结合原理推导、算法步骤以及我多年实践中积累的调参心得和避坑指南让你不仅明白这些方法“是什么”更清楚它们“为什么”有效以及在实际项目中“如何”正确且高效地使用它们。2. 核心原理深度剖析似然、隐变量与变分框架2.1 最大似然估计的数学本质与指数族的便利最大似然估计的目标函数是似然函数 ( L(\theta; \mathcal{D}) ) 或其对数形式 (\ell(\theta; \mathcal{D}) \log L(\theta; \mathcal{D}))其中 (\theta) 是参数(\mathcal{D}) 是观测数据集。我们的任务是找到 (\theta^* \arg\max_{\theta} \ell(\theta; \mathcal{D}))。当模型属于指数族时概率密度函数可以写成如下统一形式 [ p(x; \theta) h(x) \exp\left( \eta(\theta)^T T(x) - A(\theta) \right) ] 其中(\eta(\theta)) 是自然参数(T(x)) 是充分统计量(A(\theta)) 是对数配分函数保证归一化(h(x)) 是底层测度。高斯分布、伯努利分布、泊松分布等常见分布都是指数族成员。为什么指数族如此重要充分统计量(T(X)) 包含了关于参数 (\theta) 的所有信息这意味着在估计时我们只需要存储和计算这些统计量的值而不需要整个数据集这对于大规模数据非常高效。矩匹配指数族分布的对数似然函数关于自然参数 (\eta) 是凹的。其梯度为 (\nabla_\eta \ell \mathbb{E}{p(x;\theta)}[T(X)] - \frac{1}{N}\sum{i1}^N T(x^{(i)}))。令梯度为零就得到了著名的矩匹配条件模型期望的充分统计量必须等于观测数据的经验均值。这为优化提供了清晰的目标。共轭先验在贝叶斯框架下指数族分布存在共轭先验。这意味着后验分布与先验分布属于同一族极大简化了贝叶斯推断的计算。这在后续贝叶斯网络参数学习中至关重要。实操心得在实现MLE时首先检查你的模型是否属于指数族。如果是优先尝试利用其矩匹配性质来求解这往往比通用的梯度下降更快、更稳定。例如对于高斯混合模型GMM虽然整体不是指数族但其每个组分是这为EM算法中的M步提供了闭合解。2.2 隐变量模型的挑战与EM算法的登场当模型包含隐变量 (Z) 时我们观测到的数据 (X) 的边际似然需要对 (Z) 积分 [ p(x; \theta) \int p(x, z; \theta) dz ] 对应的对数似然为 (\ell(\theta) \sum_{i1}^N \log \int p(x^{(i)}, z; \theta) dz)。这个 (\log) 在积分外面直接求导优化极其困难。EM算法Expectation-Maximization巧妙地绕开了这个难题。它基于Jensen不等式通过引入一个关于隐变量的分布 (q(z))构造出对数似然的一个下界Evidence Lower BOund, ELBO [ \ell(\theta) \ge \mathcal{L}(q, \theta) \mathbb{E}{q(Z)}[\log p(X, Z; \theta)] - \mathbb{E}{q(Z)}[\log q(Z)] ] EM算法通过交替两步迭代优化这个下界E步期望步固定参数 (\theta^{old})优化 (q) 以收紧下界。最优的 (q) 恰好是隐变量的后验分布(q(z) p(z | x; \theta^{old}))。M步最大化步固定分布 (q)优化参数 (\theta)(\theta^{new} \arg\max_{\theta} \mathbb{E}_{q(Z)}[\log p(X, Z; \theta)])。对于指数族模型如果隐变量的后验分布 (p(z|x; \theta)) 也属于指数族或者其充分统计量的期望可计算那么E步就简化为计算一组“充分统计量的期望”。M步则变成了一个以这些期望统计量为“数据”的完全数据最大似然估计问题通常有闭合解。2.3 变分推断当后验难以处理时EM算法假设E步中计算的后验分布 (p(z|x; \theta)) 是可精确计算的。但对于许多复杂模型如深层贝叶斯网络、某些马尔可夫随机场这个后验分布本身计算起来就是难解的intractable。这时就需要变分推断。变分推断的核心是在一个预先选定的、形式简单的分布族 (\mathcal{Q})称为变分族中寻找一个分布 (q^(z) \in \mathcal{Q})使其尽可能接近真实后验 (p(z|x))。接近程度通常用KL散度衡量 [ q^ \arg\min_{q \in \mathcal{Q}} D_{KL}(q(z) | p(z|x)) ] 可以证明最小化KL散度等价于最大化ELBO [ \text{ELBO}(q) \mathbb{E}{q(Z)}[\log p(x, Z)] - \mathbb{E}{q(Z)}[\log q(Z)] ] 注意这里的ELBO与EM中的形式类似但参数 (\theta) 被视作已知或与 (q) 一起优化。变分推断将复杂的后验推断问题转化为了一个纯粹的优化问题。如何选择变分族 (\mathcal{Q})平均场近似最常用的选择。假设隐变量可以分解为独立的组(q(z) \prod_{j1}^M q_j(z_j))。这大大简化了优化因为我们可以轮流优化每个 (q_j)常常能得到坐标上升的闭合更新方程。结构化变分族保留部分变量间的依赖关系以得到更精确的近似但计算会更复杂。参数化变分族使用一个由参数 (\phi) 控制的分布如神经网络通过随机梯度下降同时优化 (\phi) 和模型参数 (\theta)这就是变分自编码器VAE等现代方法的基石。注意事项变分推断是一种近似方法。变分族 (\mathcal{Q}) 的选择决定了近似的质量和解的质量。平均场假设虽然计算简单但可能会严重低估后验分布的方差因为忽略了变量间的相关性。在实际应用中需要通过检查ELBO的收敛性、或使用更复杂的变分族来评估近似的合理性。3. 算法实现与核心环节拆解3.1 指数族模型下的随机EM算法当数据量 (N) 非常大时标准的EM算法每次E步需遍历所有数据计算期望会变得很慢。一种高效的变体是随机EMStochastic EM或在线EM。回顾输入材料中的公式(17.10)其核心思想是为每个数据点 (x_k) 维护一个关于隐变量充分统计量期望的运行估计(\eta_n^{(k)})。每次迭代随机选取一个或一个小批量数据更新对应的 (\eta)然后基于当前所有 (\eta) 的聚合来更新参数 (\theta)。算法步骤拆解初始化参数 (\theta_0)对于每个数据点 (k)初始化其隐变量充分统计量的期望估计值 (\eta_0^{(k)})例如设为0或先验猜测。迭代对于 n0, 1, 2, ... a.随机采样从数据集中随机选取一个索引 (k)或一个小批量。 b.E步随机计算当前参数 (\theta_n) 下对于数据 (x_k)隐变量 (Z) 的后验分布 (p(z | x_k; \theta_n))。然后计算该后验下充分统计量 (H(x_k, z)) 的期望但这里我们采用随机近似我们可能只采样一个 (z_{n1}^{(k)} \sim p(z | x_k; \theta_n))或者计算精确期望如果可解。 c.更新运行估计以衰减的学习率更新该数据点的统计量估计 [ \eta_{n1}^{(k)} (1 - \rho_n) \eta_n^{(k)} \rho_n \mathbb{E}{z \sim p(\cdot|x_k;\theta_n)}[H(x_k, z)] ] 其中 (\rho_n) 是一个递减的步长序列满足 (\sum \rho_n \infty) 且 (\sum \rho_n^2 \infty)例如 (\rho_n 1/(n1))。这确保了估计的收敛性。 d.M步基于所有数据点更新后的运行估计 ({\eta{n1}^{(k)}})更新参数 (\theta)。对于指数族这通常涉及求解一个方程模型充分统计量的期望关于当前参数等于所有数据点运行估计的平均值。 [ \nabla_\theta A(\theta_{n1}) \frac{1}{N} \sum_{k1}^N \eta_{n1}^{(k)} ] 这里 (\nabla_\theta A(\theta)) 就是模型充分统计量的期望 (\mathbb{E}_{p(x;\theta)}[T(X)])。为什么有效这个算法本质上是使用随机近似Robbins-Monro算法来求解MLE的矩匹配方程。它避免了每次迭代遍历全量数据特别适合流式数据或大规模数据集。3.2 变分贝叶斯EMVB-EM算法当后验 (p(z|x; \theta)) 难解时我们将EM算法中的E步替换为变分推断步。这就是变分贝叶斯EMVB-EM算法如输入材料中Algorithm 17.6所述。算法步骤详解初始化模型参数 (\theta_0)变分参数 (\phi_0)用于参数化变分分布 (q(z; \phi))。迭代直至收敛 a.VB-E步变分推断步固定模型参数 (\theta \theta_n)优化变分参数 (\phi) 以最大化当前数据的ELBO [ \phi_{n1} \arg\max_{\phi} \mathbb{E}{q(Z;\phi)}[\log p(X, Z; \theta_n)] - \mathbb{E}{q(Z;\phi)}[\log q(Z; \phi)] ] 这一步的目标是让 (q(z; \phi_{n1})) 尽可能接近真实后验 (p(z|X; \theta_n))。对于平均场近似这通常导致对每个变分因子 (q_j) 的交替闭合更新。 b.VB-M步参数更新步固定变分分布 (q(Z) q(Z; \phi_{n1}))优化模型参数 (\theta)最大化期望完全数据对数似然 [ \theta_{n1} \arg\max_{\theta} \mathbb{E}{q(Z; \phi{n1})}[\log p(X, Z; \theta)] ] 这看起来和传统EM的M步一样但期望是基于近似的变分分布 (q) 而非真实后验 (p) 计算的。与随机梯度结合如公式(17.14)-(17.15)所示当数据量很大或模型复杂时我们也可以使用随机梯度上升来同时优化变分参数 (\phi) 和模型参数 (\theta)。这被称为随机变分推断SVI。其核心是计算ELBO关于 (\theta) 和 (\phi) 的梯度估计通常需要重参数化技巧或得分函数估计器来处理梯度期望然后用小批量数据更新参数。3.3 贝叶斯网络参数学习共轭先验与贝叶斯估计对于贝叶斯网络每个节点 (s) 的条件概率分布 (p(x(s) | x(\text{pa}(s)); \theta_s)) 是我们要学习的参数。在频率学派的MLE框架下这很简单对于每个父节点配置 (x(\text{pa}(s)))对应的条件概率 (p(x(s) | x(\text{pa}(s)))) 的MLE就是该配置下子节点状态 (x(s)) 出现的经验频率。问题当数据稀疏时某些父节点配置 (x(\text{pa}(s))) 可能从未在训练集中出现导致MLE未定义除零或极端不准确例如某配置只出现一次子节点状态就确定为该次观测值。贝叶斯解决方案引入狄利克雷先验Dirichlet Prior。狄利克雷分布是类别分布Categorical/Dirichlet的共轭先验。对于一个有 (K) 个状态的离散变量其概率向量 (\mathbf{p} (p_1, ..., p_K)) 的先验为 (\text{Dir}(\alpha_1, ..., \alpha_K))。在观察到数据计数 (\mathbf{n} (n_1, ..., n_K)) 后其后验分布仍然是狄利克雷分布(\text{Dir}(\alpha_1 n_1, ..., \alpha_K n_K))。在贝叶斯网络中的应用 对于网络中的每个节点 (s) 和其父节点的每一种配置 (\mathbf{u})我们都为其条件概率向量 (\mathbf{p}{s|\mathbf{u}}) 设置一个独立的狄利克雷先验 (\text{Dir}(\alpha{s, \mathbf{u}}))。这里的先验参数 (\alpha_{s, \mathbf{u}}) 可以理解为“伪计数”pseudo-counts它表达了我们在看到数据之前对每种可能结果出现次数的信念。最大后验估计后验分布的众数MAP估计给出了一个平滑的、数据驱动的参数估计 [ \hat{p}(x(s) | x(\text{pa}(s)) \mathbf{u}) \frac{N_{s, \mathbf{u}}(x(s)) \alpha_{s, \mathbf{u}}(x(s))}{N_{s, \mathbf{u}} \sum_{x}\alpha_{s, \mathbf{u}}(x)} ] 其中 (N_{s, \mathbf{u}}(x(s))) 是数据中“父节点配置为 (\mathbf{u}) 且子节点状态为 (x(s))”的观测次数(N_{s, \mathbf{u}} \sum_{x} N_{s, \mathbf{u}}(x))。先验参数的选择无信息先验通常设置所有 (\alpha_{s, \mathbf{u}}(x(s)) 1)均匀先验或 (\alpha_{s, \mathbf{u}}(x(s)) 1/|\text{states}(s)|)。等价样本量ESS一个更系统的方法是定义一个全局的“先验强度” (\nu)等价样本量然后将其均匀分配到每个父节点配置和子节点状态上如公式(18.3)所示(\alpha_{s, \mathbf{u}}(x(s)) \frac{\nu}{|F({s} \cup \text{pa}(s))|})。(\nu) 越大先验越强估计结果越趋向于均匀分布对数据的平滑作用越明显。实操心得设置狄利克雷先的等价样本量 (\nu) 是一个重要的超参数。一个经验法则是将其设置为一个较小的值比如 1 或 2相当于为每个可能的事件增加了一次“虚拟”观测这能有效防止零概率问题同时不会过度扭曲数据本身的信息。在交叉验证中可以将其作为一个超参数进行调优。3.4 马尔可夫随机场的最大似然学习与随机梯度对于如公式(18.5)所示的马尔可夫随机场MRF其对数似然为 (\ell(\theta) -\theta^T \bar{U}N - \log Z(\theta))其中 (Z(\theta)) 是配分函数。梯度为 (\nabla\theta \ell \mathbb{E}_{\theta}[U(X)] - \bar{U}_N)。MLE要求模型期望等于数据经验均值。难点计算 (\mathbb{E}_{\theta}[U(X)]) 需要对整个状态空间求和对于环状图这是NP难的。解决方案使用随机梯度上升并结合马尔可夫链蒙特卡洛来估计梯度。 如公式(18.10)和定理18.5所述算法流程如下初始化参数 (\theta_0)从任意初始状态 (x_0) 开始一个马尔可夫链如吉布斯采样。迭代对于 t0, 1, 2, ... a.采样步以当前参数 (\theta_t) 定义的MRF分布为目标运行一步或数步MCMC如吉布斯采样从当前状态 (x_t) 转移到新状态 (x_{t1})。随着迭代进行链会逐渐收敛到平稳分布 (\pi_{\theta_t})。 b.梯度步使用当前采样状态 (x_{t1}) 的充分统计量 (U(x_{t1})) 作为模型期望 (\mathbb{E}{\theta_t}[U(X)]) 的一个有偏但渐进无偏的估计。然后更新参数 [ \theta{t1} \theta_t \gamma_{t1} \left( U(x_{t1}) - \bar{U}_N \right) ] 其中 (\bar{U}N) 是数据经验均值常数(\gamma{t1}) 是递减的学习率如 (\gamma_t a/(bt))。为什么这样可行这个算法被称为随机近似-蒙特卡洛SA-MCMC。定理18.5保证了在温和条件下如学习率满足Robbins-Monro条件MCMC链混合速度足够快算法会收敛到MLE解。本质上它是在用动态变化的MCMC链去估计一个动态变化的目标分布的梯度。注意事项这是算法中最“不稳定”的环节之一。MCMC采样在参数 (\theta) 变化时可能混合得很慢导致梯度估计方差极大。实践中常采用以下技巧使用小批量数据每次梯度更新只基于一小部分数据计算经验均值 (\bar{U})并对应地只采样一个小子图的状态这能加速计算并引入噪声帮助逃离局部最优。采用自适应MCMC在参数更新后让MCMC链多运行几步以达到近似平稳而不是只运行一步。使用更先进的优化器如ADAM它能自适应调整学习率并缓解梯度噪声的影响。监控密切监控对数似然在验证集上和参数的变化。剧烈的波动通常意味着学习率过高或MCMC混合不佳。4. 常见问题、陷阱与实战排查指南在实际应用这些方法时你会遇到各种各样的问题。下面我整理了一份从原理到实现的常见问题清单和排查思路。4.1 收敛性问题问题1EM算法或VB-EM陷入局部最优。原因ELBO或似然函数通常是非凸的不同的初始化会导致收敛到不同的局部极大值。排查与解决多随机初始化这是最有效的方法。从多个不同的随机起点运行算法选择最终ELBO或似然最高的那个解。使用更智能的初始化例如用K-Means聚类结果初始化高斯混合模型的均值和权重而不是完全随机。在VB-EM中尝试不同的变分族。平均场假设可能限制太强导致ELBO的“盆地”很窄。可以考虑使用更灵活的变分族如正态化流。问题2随机梯度算法如SA-MCMC震荡剧烈或不收敛。原因学习率 (\gamma_t) 设置不当或MCMC梯度估计的方差太大。排查与解决学习率调度确保使用衰减的学习率如 (\gamma_t a / (b t))。参数 (a, b) 需要调优。开始时可以画一个简单的学习曲线目标函数 vs. 迭代次数来观察。梯度裁剪如果梯度更新步长过大进行裁剪可以稳定训练。增加MCMC采样数在每次参数更新前运行多次MCMC步骤而不是一步来获得更平稳的梯度估计。也可以使用多个并行的马尔可夫链用其平均统计量来估计期望。验证目标函数对于MRF精确似然难算但可以在一个固定的验证集上计算其近似似然例如用重要性采样或退火重要性采样估计配分函数比值监控其是否稳定上升。4.2 数值稳定性问题问题3计算中出现下溢Underflow或对数域计算错误。原因概率值通常非常小直接相乘会导致浮点数下溢为零。在EM/VB的E步计算后验概率 (p(z|x)) 时需要计算联合概率 (p(x, z))这涉及多个小概率的乘积。排查与解决全程在对数空间操作这是黄金法则。存储和计算 (\log p(x, z))而不是 (p(x, z))。使用Log-Sum-Exp技巧当需要计算 (\log \sum_i \exp(a_i)) 时例如从对数联合概率计算对数边际似然或归一化后验使用公式(\log \sum_i \exp(a_i) m \log \sum_i \exp(a_i - m))其中 (m \max_i a_i)。这能保证数值稳定。对于狄利克雷分布计算涉及Gamma函数 (\Gamma(\cdot)) 的对数。使用编程语言中提供的lgamma函数对数Gamma函数而不是先计算Gamma再取对数。问题4贝叶斯网络参数估计中某些条件概率估计为0或1。原因数据稀疏某些父节点配置在训练集中出现次数极少MLE给出了极端估计。排查与解决必须使用贝叶斯平滑狄利克雷先验如3.3节所述这是标准做法。调整先验强度如果平滑后概率仍然过于极端可以增大等价样本量 (\nu)让先验发挥更大的平滑作用。考虑网络结构简化如果某些父节点配置永远无法观测到或者变量状态太多可能需要重新审视网络结构合并某些父节点的状态或使用如Noisy-OR、Logistic等参数更少的条件概率表示形式CPD。4.3 模型选择与评估问题问题5如何确定隐变量的维度如高斯混合模型中的簇数K或贝叶斯网络的结构原因MLE倾向于选择更复杂的模型因为似然值随参数增加而单调上升会导致过拟合。排查与解决使用信息准则如贝叶斯信息准则或赤池信息准则。它们在似然值上增加了一个关于参数数量的惩罚项。选择BIC/AIC最小的模型。贝叶斯模型选择计算模型的边缘似然(p(\mathcal{D} | M))即证据它自动包含了奥卡姆剃刀原则。对于共轭指数族模型边缘似然常有闭合解如公式18.1.4中的贝叶斯分数。选择边缘似然最大的模型。交叉验证将数据分为训练集和验证集在训练集上学习参数在验证集上评估似然或下游任务性能。选择验证集性能最好的模型。这是最可靠但计算代价最高的方法。问题6变分推断的质量如何评估原因变分推断是近似方法我们需要知道近似的好坏。排查与解决监控ELBOELBO是真实对数证据的下界。在迭代优化中ELBO应该单调上升除非使用随机优化。收敛的ELBO值可以作为一个参考。估计差距虽然无法精确计算 (D_{KL}(q|p))但可以估计对数证据和ELBO的差距。一种方法是使用重要性采样从变分分布 (q) 中抽取样本用重要性重 (p(x,z)/q(z)) 来估计真实证据。这个估计的方差可以反映近似的质量方差小说明 (q) 和 (p) 接近。后验预测检查从学到的变分后验 (q(z)) 中采样 (z)再通过生成模型 (p(x|z)) 生成数据 (\tilde{x})。比较生成的 (\tilde{x}) 和真实数据 (x) 的统计量如均值、方差、直方图。如果两者匹配良好说明推断是合理的。4.4 实现效率问题问题7对于大规模贝叶斯网络条件概率表CPT的存储和计算开销巨大。原因CPT的大小随父节点个数指数增长。排查与解决使用确定性或参数化CPD如3.4节末尾所述用逻辑函数、Noisy-OR、神经网络等来参数化 (p(x(s) | x(\text{pa}(s))))将参数数量从指数级降为多项式级。利用条件独立性如果父节点间存在上下文特定的独立性可以使用决策树或规则列表来紧凑地表示CPT只为不同的重要父节点配置存储不同的概率分布。贝叶斯平滑的简化如公式(18.4)所示当使用简化参数模型时先验参数 (a_s(x_s, w)) 也可以相应简化不再需要为每个父节点配置单独设置降低了先验指定的复杂性。问题8在MRF的随机梯度学习中MCMC混合太慢导致学习效率低下。原因特别是在模型接近临界点如伊辛模型在相变温度附近或变量间耦合很强时吉布斯采样等局部MCMC方法会陷入局部模式混合时间极长。排查与解决使用更先进的采样器考虑哈密顿蒙特卡洛如果状态空间连续或并行回火Parallel Tempering它同时运行多个不同“温度”下的马尔可夫链并允许在链间交换状态有助于穿越概率壁垒。采用近似推断与其用昂贵的MCMC来为学习提供梯度不如在学习阶段也使用变分推断。即用一个推理网络推理模型来近似后验然后用随机梯度优化ELBO。这就是变分自编码器和唤醒-睡眠算法的思想。考虑不同的学习目标如果MLE太难可以考虑使用对比散度或伪似然等替代目标函数它们可能具有计算更简单的梯度。最后我想分享一点个人体会最大似然估计和变分近似这套方法论其强大之处在于提供了一个从问题定义模型和损失函数到解决方案优化算法的清晰框架。当你面对一个新的隐变量模型时首先尝试将其表述为指数族形式并写出其完全数据的对数似然。然后问自己E步可解吗如果可解EM是首选。如果不可解就转向变分推断并设计一个平衡表达能力和计算复杂度的变分族。对于图模型永远不要忘记贝叶斯平滑这把“利器”它是对抗过拟合和数据稀疏的基石。在实践中我通常会从一个简单的变分族如平均场和较强的先验开始快速验证模型假设的合理性然后再逐步增加模型的复杂度和推断的精度。记住没有一个方法是万能的但理解这些核心工具的优缺点能让你在解决复杂学习问题时游刃有余。