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) )。
  • 路径概率的乘积
    从根节点到目标叶子节点的路径上,所有非叶子节点的条件概率相乘,得到该词元的最终预测概率:
    [
    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了

posted @   最爱丁珰  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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
点击右上角即可分享
微信分享提示