查看全课大纲(第 66 / 82 节)
  1. 1.函数与数据泛化
  2. 2.向量:从几何直觉到高维空间
  3. 3.矩阵与张量
  4. 4.特征值与特征向量:矩阵变换的不动方向
  5. 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
  6. 6.概率与统计:机器学习的数学基础
  7. 7.独立性与随机变量:贝叶斯公式与二项分布
  8. 8.期望、方差与协方差:随机变量的数字画像
  9. 9.联合概率:当一条轴不够用的时候
  10. 10.概率分布(一):从伯努利到伽马函数
  11. 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
  12. 12.机器学习的模型:找输入与输出的关系
  13. 13.机器学习的应用
  14. 14.过拟合
  15. 15.机器学习的分类
  16. 16.有监督学习:从房价预测说起
  17. 17.损失函数
  18. 18.梯度下降(上):更新规则与学习速率
  19. 19.梯度下降(2)
  20. 20.牛顿方法
  21. 21.KNN简介
  22. 22.距离测算
  23. 23.朴素贝叶斯
  24. 24.朴素贝叶斯的实际应用
  25. 25.信息熵:决策树构建的度量基础
  26. 26.信息增益与决策树的构建
  27. 27.ID3算法
  28. 28.决策树节点的划分
  29. 29.CART树
  30. 30.Bagging
  31. 31.Boosting:自适应提升算法
  32. 32.Gradient Boosting
  33. 33.线性模型:回归与分类的同一副骨架
  34. 34.最小二乘:把最优参数直接解出来
  35. 35.最小二乘法的几何与概率视角
  36. 36.极大似然:给最小二乘一个概率出身
  37. 37.逻辑回归(1):把线性模型接到分类上
  38. 38.逻辑回归(2):损失函数与多分类
  39. 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
  40. 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
  41. 41.优化方法(1):坐标下降与前向选择
  42. 42.优化方法(2):前向策略与最小角回归
  43. 43.拉格朗日乘子法(1):从无约束到等式约束
  44. 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
  45. 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
  46. 46.最大间隔:把分类问题变成优化问题
  47. 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
  48. 48.支持向量:边界上的少数派
  49. 49.SVM 计算过程:一笔到底算完,再走进核方法
  50. 50.贝叶斯公式:概率即信念
  51. 51.隐含变量和概率模型:给看不见的原因建模
  52. 52.EM 算法:期望与最大化的迭代
  53. 53.琴生不等式:EM 的数学钥匙
  54. 54.三个硬币问题:EM 的复盘与衔接
  55. 55.高斯混合模型:用隐变量解释双峰数据
  56. 56.隐马尔可夫模型
  57. 57.隐马尔可夫模型(2):前向算法与动态混合模型
  58. 58.隐马尔可夫模型在 NLP 中的运用
  59. 59.EM 算法:把「为什么收敛」推到底
  60. 60.HMM 在 NLP 中的运用:从分词到机器翻译
  61. 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
  62. 62.高维下的高斯模型
  63. 63.主题模型:从词袋到隐含主题
  64. 64.Dirichlet 分布(1)
  65. 65.Dirichlet 分布(2)
  66. 66.统计学习内容回顾
  67. 67.K-means 算法
  68. 68.PCA 降维
  69. 69.SVD 降维
  70. 70.从聚类到流形
  71. 71.局部线性嵌入
  72. 72.随机邻域嵌入:SNE 与 t-SNE
  73. 73.无参模型:让数据自己说话
  74. 74.高斯过程:函数空间里的正态分布
  75. 75.高斯过程(2):噪声、正则化与核的线性组合
  76. 76.神经网络简介:从感知器到自编码器
  77. 77.反向传播:把误差一层层传回去
  78. 78.卷积神经网络(CNN):让特征自己学出来
  79. 79.循环神经网络(RNN):给网络装上记忆
  80. 80.深度学习回顾:静态一类,动态一类
  81. 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
  82. 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传

统计学习内容回顾

约 24 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 机器学习算法精讲

前一段时间我们讲了 statistical learning(统计学习)。这一节先把它作为一整块内容回顾一遍——它到底在机器学习里处在什么位置、多层概率模型的一般形式长什么样;然后把上次课 topic model 没讲完的尾巴补上:β\boldsymbol{\beta} 也可以交给狄利克雷分布;最后看 topic model 真正买来的东西——把文本压缩进语义空间,以及怎么衡量两篇文本的语义距离(KL 散度)。这也正是无监督学习这一章的开场。

💡 核心导读

  • 统计学习的定位:它严格意义上并不是一种具体的算法,而是一大类机器学习——数据被看作背后完美情况的采样,概率与统计理论因此进入机器学习。
  • 多层概率模型的一般形式:P(x)=∑z∑ϕP(x∣z) P(z∣ϕ) P(ϕ∣α)P(x) = \sum_z \sum_\phi P(x \mid z)\, P(z \mid \phi)\, P(\phi \mid \alpha)——一层隐含变量,就多一层连加。
  • 补尾巴:β\boldsymbol{\beta} 也交给狄利克雷:topic-词分布不再当参数,而是随机变量 ϕ\phi,由超参 β\boldsymbol{\beta} 的狄利克雷分布生成——模型从此有 α\boldsymbol{\alpha}、β\boldsymbol{\beta} 两个狄利克雷超参。
  • 语义空间:每个 topic 是词分布单纯形上的一个点,每篇文档是 topic 平面上的一个点——一种「语义压缩」的表示方式。
  • KL 散度:衡量两个分布之间距离的标准工具,但它非对称——求两个方向的平均,才能当真正的距离用。

统计学习:一大类机器学习

先想清楚统计学习是什么。严格意义上来讲,它并不是完全是一种所谓的算法,它实际上是一个大类的机器学习的东西。处理任何机器学习问题的时候,我们看到的总是一些现实的数据;而 statistical 的方法、统计的方法,一般认为我们看到的这些数据,是背后完美的情况的一个采样。在这样的情况下——处理不确定性的这些数学理论,尤其是概率和统计,就都可以应用到机器学习和数据挖掘里边。

我们建一个模型、看到这些数据的时候,可以把它认为是统计里边的参数估计的问题,因为很多模型都属于参数模型。参数模型常用的形式是 P(x∣θ)P(x \mid \theta),θ\theta 是里边的参数。而我们机器学习这边一般都属于贝叶斯学派(还记得第 12 章的两个学派吗)——这种主观概率认为,一般参数来讲也可以是一个随机变量。这样的话一般都写成 x∣θx \mid \theta 这样的概率形式,θ\theta 可以服从某种不同的分布。

多层概率模型的一般形式

有了「参数也可以是随机变量」这个想法,我们就可以不断地建出不同层数的概率模型:比如观测 xx 由隐含变量 zz 控制,zz 又由 θ\theta 控制,θ\theta 也许又由 α\alpha 控制——可以建立稍微复杂一点的、有很多层状结构的概率模型。而整个模型,其实可以看成是一个特别复杂的分布。

这个复杂分布可以一层层推出来。首先,P(x)P(x) 跟谁相关?跟 zz 相关——那我们就加上一个 zz 的连加。再一个,zz 又跟谁相关?又跟 θ\theta 相关——写上 P(z∣θ)P(z \mid \theta),而 θ\theta 又是一个隐含变量,可以把 θ\theta 再进行相加。最后,θ\theta 跟谁相关?跟 α\alpha 相关。一步步写下来(这里讲师把中间隐含变量的参数记作 ϕ\phi,θ\theta 泛指各种参数——zz、ϕ\phi、α\alpha 这样一些形式):

P(x)=∑ϕ∑zP(x∣z)  P(z∣ϕ)  P(ϕ∣α)P(x) = \sum_{\phi} \sum_{z} P(x \mid z)\; P(z \mid \phi)\; P(\phi \mid \alpha)

其中 α\boldsymbol{\alpha} 是超参数(super parameter)——它是给定的、需要被估计的,真的是一个最后的参数;ϕ\phi 是中间隐含变量的参数,看它有几种可能就往哪儿连加。如果是连续的形式,我们就把整个概率描述成乘积链:P(x∣z)⋅P(z∣ϕ)⋅P(ϕ∣α)P(x \mid z) \cdot P(z \mid \phi) \cdot P(\phi \mid \alpha)。

这就是我们的多层、有隐变量的模型。我们学过的 LDA、topic model,都是想去学一个比较复杂的这种多层模型。

复习:topic model 的结构

上次课我们讲过这个结构,因为只讲了一次比较难,先用点时间复习(下角标的精读见上一节)。观察到的变量是词 ww;ww 由隐含变量 zz 生成;每一个 zz 从 θ\theta 这样的分布里采出来;而 θ\theta 代表任何一个文本里有多少个 topic 的混合程度,由 α\alpha 生成——θd\theta_d 服从给定 α\alpha 的狄利克雷分布,α\alpha 的维数决定了 θ\theta 的维数。dd 从 1 到 MM(MM 篇文档),每篇文档内部 ii 从 1 到 NdN_d(不同文本有不同的词长度)。整个模型里唯一能被观察到的数据,就是词。

还有一部分我们没有仔细讲:给定任何一个 zz(topic)的时候,具体这些 ww 的分布。以前如果假设 P(w∣z)P(w \mid z) 是一个正态分布,一个系数就描述完了;但这里 zz 和 ww 都是离散的,这个分布很长——w1,w2,…,wVw_1, w_2, \ldots, w_V 每个词都有概率,是一个离散的列表,可以把它当成一个巨大的系数矩阵。这个矩阵我们管它叫 β\boldsymbol{\beta}:一维是 VV(词),一维是 KK(kk 从 1 到大 KK 个 topic)。

β\boldsymbol{\beta} 是非常重要的矩阵。你会发现,ww 是两者共同的作用:β\boldsymbol{\beta} 给它的作用是——它是一个整个的大矩阵;而 zz 给它的作用是告诉它,在这个大矩阵里面我取哪一小块。zz 等于某个具体的值时,就取出它对应的那部分向量——关于 ww 的分布;在这个向量里采样,就得到我们的 ww。

这就是 Latent Dirichlet Allocation(LDA)。全名拆开看:Latent——它是一个有隐含变量的模型;Dirichlet——因为我们用了 α\alpha 的狄利克雷分布;Allocation——分配。

补上尾巴:把 β\boldsymbol{\beta} 也交给狄利克雷

后来,包括 Tom Griffiths 在内的研究者,把这个问题解释得更完美了一些。他们看着 β\boldsymbol{\beta} 想:它本身是一个大矩阵,任何一行向量加在一起总和仍然是 1——给定任何一个 topic,它所有词的分布加起来等于 1。那这种情况下,我们能不能把这个分布,看成是由高阶的狄利克雷分布而产生的呢?

可以。这样一来模型就变成两类狄利克雷分布生成的样子。重新描述:观察到的还是 ww;对任何一个 ww,它都有一个隐含变量 zz,zz 由 θ\theta 确定,θ\theta 由 α\alpha 从狄利克雷分布里采样出来(这部分有 MM 个文档、每篇 NdN_d 个词)。而现在再取另一个方向:任何一个 topic 的词分布,也是由一个狄利克雷分布产生的。在任何给定一个 zz 的时候,它里边的变量仍然是一个混合变量,我们叫它 ϕ\phi。这个 ϕ\phi 就像 θ\theta 一样——θ\theta 代表给定任何一个文档时 topic 的组合是什么,ϕ\phi 代表给定其中任何一个 topic 的时候,这里边词的分布是什么。

所以 ϕ\phi 仍然是一堆分布,这组分布由一个高阶的狄利克雷分布生成。我们把这个矩阵 β\boldsymbol{\beta} 重新看待:它不再看成是一个参数了,看成也是一个随机变量,由更上层的超参所控制(板书上讲师把这个超参同样记作 β\boldsymbol{\beta})——ϕ\phi 就是一个混合系数,代表给定超参的其中一行的分布,ϕ\phi 由以 β\boldsymbol{\beta} 为参数的狄利克雷分布生成。这样,作为一个普通的 topic model,就有了两个超参:一个 α\boldsymbol{\alpha}、一个 β\boldsymbol{\beta},都是对应的狄利克雷参数;最后得到的 ww,是通过这两个方向采样得到的。

这里讲师留了一个很好的思考题:β\boldsymbol{\beta} 的 cardinality(维数)和 α\boldsymbol{\alpha} 的 cardinality,两者谁的维度高?大家能想象得到吗?——一定是 β\boldsymbol{\beta} 高。为什么?因为 β\boldsymbol{\beta} 的混合代表着词的分布,它要跟整个词典的维度一样;而 α\boldsymbol{\alpha} 的维度代表任何一个文本的 topic 混合——α\boldsymbol{\alpha} 就等于 KK,我们有 KK 个 topic 而已;β\boldsymbol{\beta} 应该等于 VV。注意 NN 代表具体某一个文本的长度,VV 代表所有字典这些词的长度(讲师板书时先写了个大 NN,随即自我纠正:不应该叫大 NN,应该叫大 VV)。

语义空间:词的单纯形、topic 的平面

有了这种表示,我们可以想象一件事:给定的这些词,比如现在有三个词 w1w_1、w2w_2、w3w_3——每一个 topic 就是一些词的分布。把词的分布画出来,类似于我们有一个面(三个分量的单纯形):这个面里边的任何一个点,就是其中的一个 topic。比如我们选一个点叫 T1T_1,它就是某一个 topic,服从某种关于 ww 的分布;再取一个 T2T_2、T3T_3——任何的 topic 都是这些词的分布。

那一个文本又是什么呢?任何一个文本 dd,实际上是关于 topic 的一个分布。假设有三个 topic,把它们混合到一起:在三个 topic 所构成的平面里边取一个点(讲师画了个星号),这个点就是我们其中的一个文档。给定这个文本 dd,它可以描述成 topic 的一个分布——比如 t1t_1 占 0.3、t2t_2 占 0.5、t3t_3 占 0.2。而 t1t_1 又是词的分布:w1w_1 概率 0.4、w2w_2 也是 0.4、w3w_3 变成 0.2;t2t_2 取另外一种分布:w1w_1 为 0、w2w_2 为 0.8、w3w_3 等于 0.2;t3t_3 的分布是 w1w_1 等于 0.8、w2w_2 等于 0.1、w3w_3 等于 0.1。用代码把这三个数落下来:

# GT 数字例:3 个词 W1/W2/W3,3 个 topic T1/T2/T3
# 每个 topic 是词上的一个分布——词的单纯形面上的一个点
T1 = [0.4, 0.4, 0.2]   # topic 1 的词分布
T2 = [0.0, 0.8, 0.2]   # topic 2 的词分布
T3 = [0.8, 0.1, 0.1]   # topic 3 的词分布

# 一篇文档:topic 平面上的一个点(三个 topic 的混合权重)
d = [0.3, 0.5, 0.2]

# 文档的词分布 = 三个 topic 词分布的加权和
doc = [d[0]*T1[i] + d[1]*T2[i] + d[2]*T3[i] for i in range(3)]

print('topic 的词分布(词单纯形上的三个点):')
for name, t in zip(['T1', 'T2', 'T3'], [T1, T2, T3]):
    print(f'  {name}: W1={t[0]:.1f}  W2={t[1]:.1f}  W3={t[2]:.1f}')
print(f'文档 d 的 topic 权重: T1={d[0]:.1f}  T2={d[1]:.1f}  T3={d[2]:.1f}')
print('文档 d 合成出的词分布:')
print(f'  W1={doc[0]:.2f}  W2={doc[1]:.2f}  W3={doc[2]:.2f}')
print(f'  概率总和检查: {sum(doc):.2f}')
print(f'生成走查: 按 d 最可能采到 T2(概率 {d[1]:.1f}),T2 里最可能采出 W2(概率 {T2[1]:.1f})')
topic 的词分布(词单纯形上的三个点):
  T1: W1=0.4  W2=0.4  W3=0.2
  T2: W1=0.0  W2=0.8  W3=0.2
  T3: W1=0.8  W2=0.1  W3=0.1
文档 d 的 topic 权重: T1=0.3  T2=0.5  T3=0.2
文档 d 合成出的词分布:
  W1=0.28  W2=0.54  W3=0.18
  概率总和检查: 1.00
生成走查: 按 d 最可能采到 T2(概率 0.5),T2 里最可能采出 W2(概率 0.8)

现在给定一个文本,里边不有好多个词吗——w1,w3w_1, w_3、w1,w2w_1, w_2、w3w_3……这里边的词是怎么生成的呢?首先根据给定文本的概率分布,选择是哪一个 topic:比如我们选到了 T2T_2;T2T_2 这个 topic 里边,词有这样的分布——一选,哦,又把 w2w_2 采样出来了。第一个词,就是 w2w_2。

所以大家可以明白,topic model 所想做的事情,就是一种全新的、不同的表示方式和方法:我们把隐含变量的 topic 作为词的概率分布的形式,实际所做的事情,是把任何一个文本压缩到以 topic 为主的、以 topic 为基线(baseline)的空间里边。在这个空间里边,任何文本都可以作为 topic 的组合。所以某种程度来讲,它起到的是一种语义空间上的压缩——真实场景里词表 VV 是两万维,而 topic 只有 KK 个(比如 20 个),一篇文档从两万维的词袋子,压缩成了 KK 个数的主题配比。

语义距离:KL 散度

压缩进语义空间之后,就能做一件新事情:衡量文本之间的距离。假设有三个文本 d1d_1、d2d_2、d3d_3——比如 d1d_1 讲 Harry Potter 的第一部《Philosopher’s Stone(魔法石)》,d2d_2 还是 Harry Potter(《Order of Phoenix,凤凰社》),但 d3d_3 完全不一样了,它是夏洛克·福尔摩斯。直观上,d1d_1 和 d2d_2 在用语、词的分布上更相近,d1d_1 和 d3d_3 肯定离得更远(讲师口播时把两处大小关系说反了,这里按语义直觉与正确方向写:D(d1,d2)D(d_1, d_2) 更小)。

这个距离怎么衡量?别忘了 d1d_1、d2d_2 都是概率分布,所以可以用两个分布之间的距离——KL divergence(KL 散度)。对分布 PP 和 QQ,它定义为:

DKL(P∥Q)=∑iP(i)log⁡P(i)Q(i)D_{KL}(P \Vert Q) = \sum_i P(i) \log \frac{P(i)}{Q(i)}

讲师板书时先写成了「log⁡P\log P 乘上 log⁡\log 这样 PP 比 QQ」,马上自我纠正——正确的是 PP 乘上 log⁡PQ\log \frac{P}{Q},再连加。

但 KL 散度是非对称的:DKL(P∥Q)≠DKL(Q∥P)D_{KL}(P \Vert Q) \ne D_{KL}(Q \Vert P)。所以一般来讲,要用真正的 distance measure 的话,我们用它两个方向的 average:

Davg(P,Q)=12(DKL(P∥Q)+DKL(Q∥P))D_{avg}(P, Q) = \frac{1}{2}\Big( D_{KL}(P \Vert Q) + D_{KL}(Q \Vert P) \Big)

把两个方向所有的 KL 散度求加和、除以二。用代码把非对称和平均都算出来:

import math

def kl(p, q):
    """离散分布 P、Q 的 KL 散度(本例数据无零概率,直接求和)"""
    return sum(pi * math.log(pi / qi) for pi, qi in zip(p, q))

def avg_kl(p, q):
    """两个方向求平均,得到对称的距离"""
    return 0.5 * (kl(p, q) + kl(q, p))

# 第一部分:非对称性——同一对分布,两个方向不一样
P = [0.8, 0.2]
Q = [0.5, 0.5]
print(f'KL(P||Q) = {kl(P, Q):.4f}   KL(Q||P) = {kl(Q, P):.4f}   (同一对分布,两个方向的值不相等)')

# 第二部分:三个文档的语义距离(K=3:魔法 / 冒险 / 侦探)
D1 = [0.5, 0.4, 0.1]   # 哈利波特与魔法石
D2 = [0.4, 0.5, 0.1]   # 哈利波特与凤凰社
D3 = [0.1, 0.2, 0.7]   # 福尔摩斯探案集

print(f'KL(D1||D3) = {kl(D1, D3):.4f}   KL(D3||D1) = {kl(D3, D1):.4f}   (换方向,值又不同)')
print(f'平均KL(D1, D2) = {avg_kl(D1, D2):.4f}   (同属哈利波特系列,距离小)')
print(f'平均KL(D1, D3) = {avg_kl(D1, D3):.4f}   (换到福尔摩斯,距离大)')
KL(P||Q) = 0.1927   KL(Q||P) = 0.2231   (同一对分布,两个方向的值不相等)
KL(D1||D3) = 0.8874   KL(D3||D1) = 1.0626   (换方向,值又不同)
平均KL(D1, D2) = 0.0223   (同属哈利波特系列,距离小)
平均KL(D1, D3) = 0.9750   (换到福尔摩斯,距离大)

三件事都看见了:同一对分布换个方向,KL 值就不一样(0.1927 vs 0.2231);Harry Potter 系列内部的两本书,平均 KL 只有 0.0223——几乎贴在一起;换成福尔摩斯,跳到 0.9750,差出四十多倍。topic model 就可以这样衡量、计算语义之间不同的距离。

📝 动手练一练

  1. 概念辨析:LDA 的全名 Latent Dirichlet Allocation 三个词各对应模型的哪个部分?补上「β\boldsymbol{\beta} 也交给狄利克雷」这一层之后,模型有哪两个狄利克雷超参、各控制什么?两者谁的维度高,为什么?
👉 点击查看参考答案
  • Latent:模型有隐含变量(zz,还有 θ\theta、ϕ\phi 这些被当成随机变量的参数层);
  • Dirichlet:用了狄利克雷分布做先验;
  • Allocation:分配——把词分配给主题、把主题按权重分配给文档。
  • 两个超参:α\boldsymbol{\alpha} 控制每篇文档的主题分布 θd\theta_d;β\boldsymbol{\beta} 控制每个主题的词分布 ϕk\phi_k。
  • β\boldsymbol{\beta} 的维度高:β\boldsymbol{\beta} 的维数等于词典大小 VV(两万量级),α\boldsymbol{\alpha} 的维数等于主题数 KK(几十量级)。因为 β\boldsymbol{\beta} 的混合代表词的分布,要跟整个词典的维度一样;α\boldsymbol{\alpha} 只代表一个文本里 topic 的混合,有 KK 个 topic 而已。
  1. 手算验证:给定 P=(0.8,0.2)P = (0.8, 0.2)、Q=(0.5,0.5)Q = (0.5, 0.5),手算 DKL(P∥Q)D_{KL}(P \Vert Q) 与 DKL(Q∥P)D_{KL}(Q \Vert P),再算平均距离。两个方向的值相等吗?这说明了什么?
👉 点击查看参考答案
  • DKL(P∥Q)=0.8ln⁡0.80.5+0.2ln⁡0.20.5=0.8ln⁡1.6+0.2ln⁡0.4≈0.1927D_{KL}(P \Vert Q) = 0.8 \ln\frac{0.8}{0.5} + 0.2 \ln\frac{0.2}{0.5} = 0.8 \ln 1.6 + 0.2 \ln 0.4 \approx 0.1927
  • DKL(Q∥P)=0.5ln⁡0.50.8+0.5ln⁡0.50.2=0.5ln⁡0.625+0.5ln⁡2.5≈0.2231D_{KL}(Q \Vert P) = 0.5 \ln\frac{0.5}{0.8} + 0.5 \ln\frac{0.5}{0.2} = 0.5 \ln 0.625 + 0.5 \ln 2.5 \approx 0.2231
  • 平均距离 =12(0.1927+0.2231)≈0.2079= \frac{1}{2}(0.1927 + 0.2231) \approx 0.2079

两个方向不相等(0.1927 vs 0.2231)——KL 散度是非对称的:它衡量的是「用 QQ 去近似 PP」的代价,方向一换,代价就不同。所以要把它当真正的距离(distance measure)用,需要像本节那样把两个方向求平均。

本章小结

这节我们最后强调一遍:topic model 所做的事情,是把一个文本表示成主题(topic)的分布,任何一个主题又是词的分布。LDA 里的 β\boldsymbol{\beta} 给定每个 topic 的词分布,而且 β\boldsymbol{\beta} 还可以当成一个随机变量,由上面一层的狄利克雷分布控制——这样普通的 topic model 就有两个超参 α\boldsymbol{\alpha} 和 β\boldsymbol{\beta},最后得到的 ww 通过这两个方向的采样得到。而多层概率模型的一般形式 P(x)=∑ϕ∑zP(x∣z)P(z∣ϕ)P(ϕ∣α)P(x) = \sum_\phi \sum_z P(x \mid z) P(z \mid \phi) P(\phi \mid \alpha),把「参数也可以是随机变量」这个贝叶斯想法推到了任意层数。记住「一个文本是主题的分布,主题是词的分布」这一点,就可以比较形象地理解整个模型。到这里,上次课的尾巴也讲完了。

📋 行动清单

  • 默写全名拆解:不借助资料说出 Latent Dirichlet Allocation 三个词各自对应模型的哪个部分。
  • 画出两层结构:从两个超参 α\boldsymbol{\alpha}(控制 θd\theta_d)和 β\boldsymbol{\beta}(控制 ϕk\phi_k)出发,画出「超参 → 隐变量分布 → 隐变量 → 词」的两条采样链,并说出 α\boldsymbol{\alpha} 与 β\boldsymbol{\beta} 谁的维度高、为什么。
  • 手算 KL:对 P=(0.9,0.1)P=(0.9, 0.1)、Q=(0.6,0.4)Q=(0.6, 0.4) 手算 DKL(P∥Q)D_{KL}(P \Vert Q)、DKL(Q∥P)D_{KL}(Q \Vert P) 和平均值,验证两个方向不相等。
  • 体会压缩:想一篇你熟悉的文章,把它从「两万维词袋」压到「三个主题配比」之后,丢掉了什么、保住了什么。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第16章课件:无监督学习(k-means/PCA/SVD/Isomap)
    下载