第11讲 概率模型(二)
监督学习方法与 K 近邻法
监督学习中的经典思路包括模板匹配、结构模式识别、统计模式识别和神经网络。结构模式识别不是直接比较整幅样本,而是对基元及其关系建模。文字识别的发展能很好地说明这些路线的演变:1929 年,奥地利工程师 Gustav Tauschek 发明了利用机械、光电装置和模板凹槽比对输入字符的“阅读机”;1968 年出现了第一个专为机器识别设计的 OCR-A 字体,它刻意拉开数字 1 与字母 l 等相似字符的形状差异。1974 年 Raymond Kurzweil 推出第一个商业化多字体 OCR 产品,1976 年的 Kurzweil Reading Machine 又把印刷文本识别与语音合成结合起来,为视障人士提供阅读帮助。1989 年,清华大学电子工程系率先在国内推出主要采用统计模式识别方法的中文 TH-OCR 软件。
K 近邻法(K-nearest neighbor,KNN)是一种监督学习方法。它把样本看成 \(d\) 维空间中的点,归纳偏好是“相近的点具有相似性”。对待识别样本 \(x\),先找出训练集中距离最近的 \(k\) 个样本,再用近邻中的多数标签给 \(x\) 赋值。若 \(k\) 为偶数,可能出现票数相同,因此实际通常结合验证集选择 \(k\),并优先取奇数。
KNN 方法简捷而有效,在复杂分类边界上也可能取得较好结果。其误识率 \(R\) 与贝叶斯决策的最小错误率 \(R^*\) 满足 Cover–Hart 界,课件参考 Cover 与 Hart 发表在 IEEE Transactions on Information Theory 1967 年第 13 卷第 1 期、21–27 页的 “Nearest neighbor pattern classification”:
\(k\) 太小时,判决容易被个别样本和噪声左右,表现为过拟合;\(k\) 适中时通常效果较好;\(k\) 太大时,局部结构被整体多数类淹没,容易欠拟合。因此应观察验证集性能随 \(k\) 的变化来优选参数。
KNN 还隐含了两项较强假设:近处样本相似,而且所有特征维度作用相同。若不同维度的量纲或尺度相差很大,距离会被数值较大的维度支配。常见改进是逐维标准化,例如把每一维处理为均值 0、标准差 1。
非监督学习:K 均值
本讲讨论的非监督学习方法包括用 K 均值(K-Means)完成聚类,以及用高斯混合模型和期望最大化算法估计概率密度。K 均值按照误差平方和准则,把样本分成 \(k\) 个子集 \(C_i\)。若第 \(i\) 类有 \(n_i\) 个样本,其中心为
相应的类内误差平方和为
输入是聚类数 \(k\) 和 \(n\) 个样本,输出是使 \(J_e\) 尽可能小的 \(k\) 个聚类中心。算法过程如下:
- 为每一类指定一个初始中心,得到 \(k\) 个初始聚类中心。
- 按最小距离原则,把每个样本分配给最近的中心。
- 用每类样本的均值更新该类中心。
- 重复分配和更新,直到聚类中心不再变化。
- 输出最终的 \(k\) 个中心。
课件中的二维例子共有 20 个样本,取 \(K=2\):
| 样本 | \(x_1\) | \(x_2\) | 样本 | \(x_1\) | \(x_2\) |
|---|---|---|---|---|---|
| \(x_1\) | 0 | 0 | \(x_{11}\) | 8 | 6 |
| \(x_2\) | 1 | 0 | \(x_{12}\) | 6 | 7 |
| \(x_3\) | 0 | 1 | \(x_{13}\) | 7 | 7 |
| \(x_4\) | 1 | 1 | \(x_{14}\) | 8 | 7 |
| \(x_5\) | 2 | 1 | \(x_{15}\) | 9 | 7 |
| \(x_6\) | 1 | 2 | \(x_{16}\) | 7 | 8 |
| \(x_7\) | 2 | 2 | \(x_{17}\) | 8 | 8 |
| \(x_8\) | 3 | 2 | \(x_{18}\) | 9 | 8 |
| \(x_9\) | 6 | 6 | \(x_{19}\) | 8 | 9 |
| \(x_{10}\) | 7 | 6 | \(x_{20}\) | 9 | 9 |
初始中心选为
第一次按最近中心分配后,第二类包含 18 个样本,中心更新为
继续迭代,两个稳定聚类中心为 \((1.25,1.13)^T\) 和 \((7.67,7.33)^T\),分别对应左下角和右上角的紧致样本簇。
K 均值简单、快速,对类内紧致且类间分离明显的数据效果较好;但它只适用于“均值”有定义的属性,不适合直接处理符号属性;必须事先给定 \(K\);结果依赖初始中心;并且对噪声和孤立点敏感。为减轻初始化依赖,可以尝试多组初值后比较结果,但会增加时间和资源开销。若类别数 \(K\) 不确定,可采用 ISODATA(Iterative Self-Organizing Data Analysis Technique),通过类别的自动分裂和合并得到较合理的类别数。
高斯混合模型与 EM 算法
混合分布密度估计考虑如下不完全信息:样本来自已知的 \(K\) 个类别;各类先验 \(P(\omega_j)\) 未知;类条件分布 \(p(x\mid\omega_j,\theta_j)\) 的数学形式已知而参数 \(\theta_j\) 未知;样本的类别标记缺失。总体密度为
单高斯未必能描述真实字符特征。MNIST 含 60,000 个训练样本和 10,000 个测试样本,图像统一为 \(28\times28\);把数字 0–9 的特征投影到前两个主成分平面后,可以看到分布明显不是简单的单峰高斯。高斯混合模型(Gaussian mixture model,GMM)用多个高斯分量提高描述能力:
GMM 比单高斯表达力强,但参数量也成倍增加,因此实际常约束协方差结构,可选一般的无约束协方差、每个分量各自的对角协方差,或所有分量共享对角协方差。
若每个观测 \(x\) 属于哪个高斯分量已知,可直接作最大似然估计。对第 \(k\) 类,记样本数为 \(N_k\),则
无监督情形下,分量归属是隐藏变量,采用期望最大化(Expectation-Maximization,EM)算法。先初始化 \(K\) 组 \(\mu_k,\Sigma_k\) 和满足 \(\sum_k\pi_k=1\) 的混合系数。E 步根据当前参数计算样本 \(x_n\) 属于第 \(k\) 个分量的责任度:
M 步先计算每个分量的有效样本数,再重新估计参数:
交替执行 E、M 两步,直到参数满足收敛条件或停止条件。课件用二维混合分布的迭代图示说明:E 步给出软归属,M 步据此移动均值、调整协方差和混合权重。
高斯混合模型也用于计算成像问题。事件视界望远镜(EHT)项目利用甚长基线干涉(VLBI)协调世界各地射电望远镜,形成口径等效于地球直径的虚拟望远镜,把角分辨率提升到可观测事件视界尺度结构的程度。2019 年 4 月 10 日,EHT 发布了人类历史上第一张黑洞图像。对应的计算问题是根据观测值推测图像像素;课件列出了 Katherine L. Bouman 等人在 CVPR 2016 发表的 “Computational Imaging for VLBI Image Reconstruction”。
EM 与 K 均值的关键差别是软、硬判决。设 GMM 各分量协方差均为 \(\alpha I\),则
当 \(\alpha\to0\) 时,离 \(x_n\) 最近的均值对应责任度趋于 1,其余趋于 0,于是 EM 的软分配退化为 K 均值的硬分配。此时最大化 EM 的似然等价于最小化 K 均值的失真:
相关实现可使用 scikit-learn:neighbors 对应 KNN,sklearn.cluster.KMeans 对应 K 均值,sklearn.mixture 对应高斯混合与 EM。
马尔可夫过程与隐含马尔可夫模型
隐含马尔可夫模型(hidden Markov model,HMM)把可观测序列与不可直接观测的状态序列联系起来,隐状态序列用马尔可夫过程建模。经典参考是 Rabiner 的 “A tutorial on hidden Markov models and selected applications in speech recognition”,发表于 Proceedings of the IEEE 1989 年第 77 卷第 2 期,257–286 页。
马尔可夫过程是无后效性的随机过程:已知“现在”后,“将来”的条件分布不再依赖“过去”。设随机过程为 \(\{X(t),t\in T\}\),状态空间为 \(S\),当 \(t_1<t_2<\cdots<t_n\) 时,马尔可夫性写成
参数集与状态空间都离散的马尔可夫过程称为马尔可夫链。对 \(T=\{0,1,2,\ldots\}\),可记为 \(\{X_n,n\geq0\}\),此时
天气例子用三个状态 \(S_1\)(雨)、\(S_2\)(多云)、\(S_3\)(晴)描述状态转移,课件给出的转移矩阵为
HMM 是一个双重随机过程:第一层是隐状态的马尔可夫链,由状态转移矩阵描述;第二层是每个状态产生观测的随机过程。观测可以是离散的,用发射概率矩阵表示;也可以是连续的,用各状态下的概率密度表示,例如正态分布。模型写成三元组 \(\lambda=(\pi,A,B)\):\(\pi=(p_1,\ldots,p_N)\) 是初始状态分布,\(A=[a_{ij}]\) 是与时刻无关的状态转移矩阵,\(B\) 是给定状态下的观测分布。
HMM 的三个基本假设是:
- 状态序列满足一阶马尔可夫性,即 \(P(q_{t+1}\mid q_t,\ldots,q_1)=P(q_{t+1}\mid q_t)\)。
- 状态转移具有齐次性,对任意 \(s,t\),\(P(q_{t+1}=j\mid q_t=i)=P(q_{s+1}=j\mid q_s=i)\)。
- 给定状态序列后,各时刻观测条件独立:
“按转移概率选择罐子,再按罐内比例抽取彩球”是对双重随机过程的直观类比。围绕 HMM 有三个基本问题:给定 \(\lambda\) 和观测 \(O=(o_1,\ldots,o_T)\),计算 \(P(O\mid\lambda)\) 的评估问题;求最优隐状态序列 \(Q^*\) 的解码问题;给定训练观测,估计 \(\lambda=(A,B,\pi)\) 的学习问题。
评估问题:前向、后向与前向—后向算法
直接枚举所有状态路径时,观测序列概率为
其复杂度为 \(O(TN^T)\)。引入前向变量与后向变量后,复杂度降为 \(O(TN^2)\):
前向算法先初始化,再递推,最后对终点状态求和:
课件中的三状态例子令 \(\pi_1=1\),三个状态产生 \(x,y\) 的概率分别为 \((0.7,0.3)\)、\((0.4,0.6)\)、\((0.8,0.2)\)。对 \(O=\{xyxy\}\),各时刻前向量的数值为:
| 状态 | \(t=1\),\(x\) | \(t=2\),\(y\) | \(t=3\),\(x\) | \(t=4\),\(y\) |
|---|---|---|---|---|
| \(S_1\) | 0.7 | 0.084 | 0.02352 | 0.0028224 |
| \(S_2\) | 0 | 0.252 | 0.1008 | 0.0568512 |
| \(S_3\) | 0 | 0 | 0.04032 | 0.012096 |
因此
后向算法从末时刻向前递推:
前向和后向变量还可在任意时刻合并:
解码问题:Viterbi 算法
Viterbi 算法用动态规划求最可能的隐状态路径,定义
它与前向算法的区别在于:前向算法累加所有路径的概率,Viterbi 只保留到达当前状态的最优路径。完整递推为
DNA 例子包含碱基 A、C、G、T 和两个隐状态。转移概率为 \(P(S_1\mid S_1)=0.7\)、\(P(S_2\mid S_1)=0.3\)、\(P(S_1\mid S_2)=0.2\)、\(P(S_2\mid S_2)=0.8\);初始概率均为 0.5。发射概率如下:
| 状态 | A | C | G | T |
|---|---|---|---|---|
| \(S_1\) | 0.4 | 0.1 | 0.4 | 0.1 |
| \(S_2\) | 0.1 | 0.4 | 0.1 | 0.4 |
对观测 \(x=ACT\),前向递推得到
所以 \(P(x\mid\lambda)=0.00185+0.0146=0.01645\)。Viterbi 计算则为
对应回溯指针为 \(\varphi_2(1)=\varphi_2(2)=1\)、\(\varphi_3(1)=1\)、\(\varphi_3(2)=2\),故 \(P^*=0.00768\),最优状态序列是 \((S_1,S_2,S_2)\)。
学习问题:Baum–Welch 算法
Baum–Welch 是用于 HMM 参数估计的 EM 算法。样本特征序列与隐状态序列的对齐关系未知,因此先选择初始参数 \(\lambda_0\);E 步用当前模型求状态对齐和中间变量;M 步作最大似然估计并更新 \(A,B,\pi\);反复迭代,直到
其中 \(d\) 是预设阈值。定义 \(\xi_t(i,j)\) 为时刻 \(t\) 在 \(S_i\)、时刻 \(t+1\) 在 \(S_j\) 的后验概率,\(\gamma_t(i)\) 为时刻 \(t\) 在 \(S_i\) 的后验概率:
根据齐次性重新估计模型参数:
基于 HMM 的语音识别
语音是典型的非平稳信号,但通常认为 10–30 ms 内近似平稳。语音识别常用帧长为 20–30 ms、帧移为 10 ms,并在短时分析中加汉明窗:
若窗口中心随帧位置 \(\tau\) 移动,可写成 \(s_\tau(n)=s(n)w(n-\tau)\)。课件把这里写成 \(\sum_m s(m)w(n-m)\),那是信号与窗函数的卷积,不是通常所说的逐点加窗,应视为公式误排。
梅尔频率倒谱系数(MFCC)是语音识别中应用广泛的声学特征。梅尔频率与实际频率近似为对数关系,对低频比对高频敏感:
倒谱用于把声音激励与声道系统解卷积。时域卷积在频域变为乘法,取对数后乘法变成加法,再对 \(\log|X(\omega)|\) 作低通或高通“倒频谱滤波”即可分离成分:
MFCC 的提取流程是:先去直流分量 \(s(n)\leftarrow s(n)-\bar s\);再预加重高频,\(s(n)\leftarrow s(n)-0.95s(n-1)\),其作用类似外耳道;按 20–30 ms 分帧、10 ms 帧移加汉明窗,在时域与频域分辨率之间折中;作 FFT 并求能量谱;用通常含 26–40 个通带的 Mel 带通滤波器滤波,对每个通带内能量求和、取对数;对全部通带输出作 DCT 得到倒谱系数;最后保留前 12–16 维。课件示例取 13 维,并加上一阶差分与二阶差分,形成 39 维 MFCC。
语音 HMM 的拓扑与任务有关:无跨越的从左到右模型用于一般语音识别;允许跨越的从左到右模型可处理连读、吞音;全连接模型可用于说话人识别。课件把数字“9”表示成三个发音状态 \(s_1,s_2,s_3\),分别对应 j、i、u;自环概率依次为 0.7、0.8、1.0,向下一状态的概率为 0.3、0.2。\(A(i,j)\) 表示从状态 \(i\) 跳到状态 \(j\) 的概率,\(B(i,j)\) 表示第 \(i\) 帧属于状态 \(j\) 的概率。
以中文数字识别为例,分别建立 0–9 的语音 HMM。对输入语句,用 Viterbi 解码计算它与各模型的相似度,取相似度最高者作为识别结果。其核心是在路径约束下把各帧分配到状态,使总概率最大。采用对数概率时,动态规划递推为
训练时,一种左到右路径只估计 \(A(i,i)\) 与 \(A(i,i+1)\),其余转移为 0。课件示例统计得到 \(A(1,1)=3/4\)、\(A(1,2)=1/4\),\(A(2,2)=4/5\)、\(A(2,3)=1/5\),\(A(3,3)=1\)。同一路径上的发射统计为:状态 1 中 \(B(1,1)=1/4\)、\(B(2,1)=1/4\)、\(B(3,1)=2/4\);状态 2 中 \(B(1,2)=3/5\)、\(B(2,2)=2/5\);状态 3 中 \(B(2,3)=2/6\)、\(B(4,3)=4/6\)。若第 \(i\) 帧对应符号 \(k=O(i)\),则该帧属于状态 \(j\) 的概率记为 \(B(k,j)=B(O(i),j)\)。
HMM 实现中还要处理初始模型选择和概率连乘导致的数据下溢,可加入比例因子或转到对数域。语言模型中的 N 元语法(N-Gram)同样采用马尔可夫假设,认为当前字或词只与前面 \(N-1\) 个字或词有关;参数估计常有数据稀疏问题,需要平滑。
hmmlearn 原先属于 scikit-learn,后来成为独立 Python 包,官方教程给出了用法,可用 pip install --upgrade --user hmmlearn 安装。课件示例设置初始概率 \((0.6,0.3,0.1)\),转移矩阵 \([[0.7,0.2,0.1],[0.3,0.5,0.2],[0.3,0.3,0.4]]\),均值 \([[0,0],[3,-3],[5,10]]\),三个二维单位协方差,建立 full-covariance GaussianHMM 并采样 100 个点;再用 n_components=3、covariance_type=full、n_iter=100 的模型调用 fit 训练、predict 预测隐状态。
本讲应掌握 KNN,K 均值和 GMM–EM,以及 HMM 这个适合序列建模的双重随机过程;能够说清 \(\pi,A,B\)、前向与后向评估、Viterbi 解码、Baum–Welch 学习,并理解马尔可夫链和状态转移矩阵。编程实践对应第 11 讲的 hmm.ipynb 与 baum-welch.ipynb。
思考与讨论
- K 均值可能因初始中心不同得到不同结果,如何设计一种优于随机选择的初始化策略?
- EM 是处理不完全数据的重要迭代参数估计方法,它是否收敛,迭代是否可能让效果越来越差?课件指定参考邱锡鹏《神经网络与深度学习》第 11.2.2.1 节“EM 算法”。
- 为什么语音识别需要 HMM 来建模语音信号,它的优势在哪里?