14.2.2 层序softmax
在层序softmax中,不是只有叶子节点才代表一个词元吗?那么为什么计算条件概率的时候要去看非叶子节点?非叶子节点代表什么?为什么非叶子节点有词向量?对此,deepseek的解释如下
在层序Softmax(Hierarchical Softmax)中,非叶子节点虽然不直接代表词元,但它们通过构建二叉树的路径结构来间接影响词元的概率计算。以下是逐步解释:
1. 层序Softmax的基本结构
- 二叉树构建:词表中的每个词元(叶子节点)被组织成一棵二叉树(通常为哈夫曼树,按词频构建)。
- 节点角色:
- 叶子节点:每个叶子节点唯一对应一个词元。
- 非叶子节点:作为路径中的决策点,每个非叶子节点存储一个向量,用于计算路径选择的概率。
2. 非叶子节点的作用
-
路径决策:
预测某个词时,从根节点到该词对应叶子节点的路径上,每一步需要选择向左或向右子树移动。非叶子节点的向量用于计算这些路径选择的概率。- 例如,非叶子节点 ( n ) 的向量 ( \mathbf{v}_n ) 与中心词向量 ( \mathbf{v}_c ) 计算点积,通过逻辑函数(如sigmoid)得到向左子树的概率:
[
P(\text{左} | n, \mathbf{v}_c) = \sigma(\mathbf{v}_n^\top \mathbf{v}_c)
] - 向右的概率则为 ( 1 - \sigma(\mathbf{v}_n^\top \mathbf{v}_c) )。
- 例如,非叶子节点 ( n ) 的向量 ( \mathbf{v}_n ) 与中心词向量 ( \mathbf{v}_c ) 计算点积,通过逻辑函数(如sigmoid)得到向左子树的概率:
-
路径概率的乘积:
从根节点到目标叶子节点的路径上,所有非叶子节点的条件概率相乘,得到该词元的最终预测概率:
[
P(w_o | w_c) = \prod_{n \in \text{Path}(w_o)} P(\text{dir}(n) | n, \mathbf{v}_c)
]
其中,( \text{Path}(w_o) ) 是路径上的非叶子节点集合,( \text{dir}(n) ) 表示在节点 ( n ) 处的方向(左/右)。
3. 非叶子节点向量的意义
-
决策参数:
非叶子节点的向量 ( \mathbf{v}_n ) 是模型需要学习的参数,它们不直接表示某个词,而是编码了“如何根据中心词 ( w_c ) 选择路径方向”。- 例如,若某非叶子节点的向量与中心词向量点积较大,模型会更倾向于向左子树移动。
-
与词向量的区别:
- 叶子节点:直接关联词元的向量(如Skip-Gram中的输入向量 ( \mathbf{v}_w ))。
- 非叶子节点:仅用于路径决策的辅助向量,与词义无关,本质是二分类器的权重。
4. 为什么需要非叶子节点的向量?
-
降低计算复杂度:
传统Softmax需要对所有词计算归一化概率,复杂度为 ( O(|V|) )。层序Softmax通过二叉树路径将复杂度降至 ( O(\log |V|) ),每一步只需计算一个二分类概率。- 每个二分类步骤依赖非叶子节点的向量来建模决策边界。
-
分解多分类问题:
将全局的多分类问题(所有词的概率)分解为多个局部二分类问题(路径上的方向选择),每个二分类由非叶子节点的向量参数化。
5. 示例说明
假设词表为 {A, B, C, D},构建的二叉树如下:
Root
/ \
n1 n2
/ \ / \
A B C D
- 预测词 A 时,路径为 Root → n1 → A。
- 在 Root 处,用向量 ( \mathbf{v}_{\text{Root}} ) 计算向左(n1)的概率:
[
P(\text{左} | \text{Root}, \mathbf{v}c) = \sigma(\mathbf{v}{\text{Root}}^\top \mathbf{v}_c)
] - 在 n1 处,用向量 ( \mathbf{v}_{n1} ) 计算向左(A)的概率:
[
P(\text{左} | n1, \mathbf{v}c) = \sigma(\mathbf{v}^\top \mathbf{v}_c)
] - 最终概率为两者的乘积:
[
P(A | w_c) = \sigma(\mathbf{v}_{\text{Root}}^\top \mathbf{v}c) \cdot \sigma(\mathbf{v}^\top \mathbf{v}_c)
]
6. 非叶子节点向量的训练
- 反向传播:
训练时,模型根据目标词的真实路径调整非叶子节点的向量:- 若路径在某个节点应向左,则增大 ( \sigma(\mathbf{v}_n^\top \mathbf{v}_c) );
- 反之则减小该概率。
- 参数更新:
非叶子节点的向量通过梯度下降更新,以最大化正确路径的概率。
总结
- 非叶子节点不直接代表词元,而是路径决策的中间节点,其向量用于建模路径选择的概率。
- 计算条件概率时需涉及非叶子节点:因为词元的最终概率是路径上所有节点决策概率的乘积。
- 非叶子节点的向量本质是二分类器参数,与词义无关,但通过训练可有效指导路径选择。
那么这种构造二叉树的方式如何从直观上理解呢?实际上,这个东西就没有什么道理,之所以构造二叉树,纯粹是因为要降低复杂度。如果说负采样变化了优化目标的话,层序softmax啥也没变化,只是为了加速,或者说,这么计算出来的嵌入向量,可能根本不能让跳元模型的损失函数最小化。简而言之,就是找到了一种计算比较快的方法还可以联系中心词和上下文词,所以就用层序softmax了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2024-03-05 方伯伯的商场之旅
2024-03-05 Weird LCM Operations
2024-03-05 XOR Break — Game Version
2024-03-05 Find a Mine
2024-03-05 Yet Another Coin Problem
2024-03-05 Too Min Too Max