word2vec 反向传播 解读1

在 Word2Vec(特别是 Skip-gram 模型)中,反向传播与随机梯度下降(SGD)是训练的核心引擎。虽然现代实现通常使用“负采样”来加速,但理解原始 Softmax + 交叉熵损失的反向传播是掌握其数学原理的基石。

以下是对这一过程的详细拆解、数学推导及直观示例。


1. 简要模型架构回顾

假设我们有一个中心词 \(w_c\)(输入)和一个上下文词 \(w_o\)(目标输出)。

  • 输入向量\(v_c \in \mathbb{R}^d\) (对应矩阵 \(W\) 的第 \(c\) 行)
  • 输出向量\(u_o \in \mathbb{R}^d\) (对应矩阵 \(W'\) 的第 \(o\) 列)
  • 词汇表大小\(V\),嵌入维度:\(d\)

前向传播 (Forward Pass)

  1. 打分:计算中心词与所有词汇表中词的相似度分数:

    \[z_j = u_j^\top v_c \quad (\text{对所有 } j \in V) \]

  2. Softmax:将分数转化为概率分布:

    \[p(w_j | w_c) = \hat{y}_j = \frac{\exp(z_j)}{\sum_{k=1}^{V} \exp(z_k)} \]

  3. 损失函数:使用交叉熵衡量预测 \(\hat{y}\) 与真实标签 \(y\)(One-hot 向量,仅第 \(o\) 位为1)的差距:

    \[J = -\log p(w_o | w_c) = -z_o + \log \sum_{k=1}^{V} \exp(z_k) \]


2. 反向传播:链式法则求偏导

我们的目标是求出损失 \(J\) 对两个权重矩阵参数的梯度:\(\frac{\partial J}{\partial W'}\)\(\frac{\partial J}{\partial W}\)

关键中间变量:预测误差

定义预测概率与真实标签的差值向量 \(\delta \in \mathbb{R}^V\)

\[\delta_j = \hat{y}_j - y_j \]

直觉:当 \(j=o\)(目标词)时,\(\delta_o = \hat{y}_o - 1\)(预测多了多少);当 \(j \neq o\) 时,\(\delta_j = \hat{y}_j - 0\)(不该预测却预测了多少)。这个 \(\delta\) 就是反向传播的“误差信号”。

A. 对输出矩阵 \(W'\) 求导 (\(\frac{\partial J}{\partial u_w}\))

利用链式法则 \(\frac{\partial J}{\partial u_w} = \frac{\partial J}{\partial z_w} \cdot \frac{\partial z_w}{\partial u_w}\)

\[\frac{\partial J}{\partial u_w} = (\hat{y}_w - y_w) \cdot v_c = \delta_w \cdot v_c \]

  • 矩阵形式\(\frac{\partial J}{\partial W'} = \delta \cdot v_c^\top\) (外积,结果维度 \(V \times d\)

B. 对输入矩阵 \(W\) 求导 (\(\frac{\partial J}{\partial v_c}\))

注意 \(v_c\) 参与了所有 \(z_j\) 的计算,因此需要对所有词求和:

\[\frac{\partial J}{\partial v_c} = \sum_{j=1}^{V} \frac{\partial J}{\partial z_j} \cdot \frac{\partial z_j}{\partial v_c} = \sum_{j=1}^{V} (\hat{y}_j - y_j) \cdot u_j \]

\[\frac{\partial J}{\partial v_c} = \sum_{j=1}^{V} \delta_j \cdot u_j = {W'}^\top \delta \]

核心洞察\(v_c\) 的梯度是所有输出向量 \(u_j\) 的加权平均,权重恰好是预测误差 \(\delta_j\)。这意味着:预测错的词对应的输出向量会“拉扯”输入向量,使其远离或靠近。


3. SGD 更新规则

有了梯度后,使用学习率 \(\eta\) 进行更新:

\[u_w^{\text{new}} \leftarrow u_w^{\text{old}} - \eta \cdot \delta_w \cdot v_c \]

\[v_c^{\text{new}} \leftarrow v_c^{\text{old}} - \eta \cdot \sum_{j=1}^{V} \delta_j \cdot u_j \]

⚠️ 实际工程注记:由于 \(\sum_{j=1}^{V}\) 计算量太大(\(V\) 通常百万级),实际 Word2Vec 使用 Negative SamplingHierarchical Softmax 替代全量 Softmax,此时求和仅涉及 1 个正样本 + K 个负样本(如 K=5~20),使训练成为可能。但上述数学原理完全一致。


4. 简单数值例子说明数学原理

📐 例1:一维极简情况(直觉验证)

\(d=1, V=2\),词汇={猫, 狗}。当前参数:

  • \(v_{\text{猫}} = 0.5\), \(u_{\text{猫}} = 0.8\), \(u_{\text{狗}} = -0.3\)
  • 目标:给定"猫",预测"猫"(即 \(y = [1, 0]\)

前向

  • \(z_{\text{猫}} = 0.8 \times 0.5 = 0.4\), \(z_{\text{狗}} = -0.3 \times 0.5 = -0.15\)
  • \(\hat{y}_{\text{猫}} = \frac{e^{0.4}}{e^{0.4}+e^{-0.15}} \approx 0.634\)
  • \(\hat{y}_{\text{狗}} \approx 0.366\)
  • 损失 \(J = -\log(0.634) \approx 0.456\)

反向传播

  • \(\delta_{\text{猫}} = 0.634 - 1 = -0.366\) (预测不足,需要增大)
  • \(\delta_{\text{狗}} = 0.366 - 0 = +0.366\) (预测过多,需要减小)

梯度

  • \(\frac{\partial J}{\partial u_{\text{猫}}} = -0.366 \times 0.5 = -0.183\) → 更新后 \(u_{\text{猫}}\) 增大
  • \(\frac{\partial J}{\partial u_{\text{狗}}} = +0.366 \times 0.5 = +0.183\) → 更新后 \(u_{\text{狗}}\) 减小
  • \(\frac{\partial J}{\partial v_{\text{猫}}} = (-0.366)(0.8) + (0.366)(-0.3) = -0.403\) → 更新后 \(v_{\text{猫}}\) 增大

解读:三个参数都在朝着让 \(z_{\text{猫}}\) 变大、\(z_{\text{狗}}\) 变小的方向调整,下次 \(\hat{y}_{\text{猫}}\) 会更接近 1。

📐 例2:为什么 \(v_c\) 的梯度是所有 \(u_j\) 的加权和?

假设 \(d=2\),当前 \(v_c = [1, 0]\),有三个词的输出向量:

  • \(u_A = [1, 0]\)(与 \(v_c\) 同向)
  • \(u_B = [-1, 0]\)(与 \(v_c\) 反向)
  • \(u_C = [0, 1]\)(与 \(v_c\) 正交)

若模型过度预测了 B(\(\delta_B > 0\)),而对 A 预测不足(\(\delta_A < 0\)),C 预测准确(\(\delta_C \approx 0\)):

\[\frac{\partial J}{\partial v_c} = \underbrace{\delta_A}_{<0} \cdot [1,0] + \underbrace{\delta_B}_{>0} \cdot [-1,0] + \underbrace{\delta_C}_{\approx 0} \cdot [0,1] \]

两项都产生负的第一分量,SGD 减去负梯度 = 增加第一分量。同时第二分量几乎不变。

几何直觉\(v_c\) 被“推离”被过度预测的词(B),同时被“拉向”预测不足的词(A)。正交的词(C)不影响移动方向。这就是 Word2Vec 能在向量空间中自动组织语义关系的根本机制。

📐 例3:完美预测时梯度为零

\(\hat{y}_o = 1.0\),则 \(\delta_o = 0\),且对所有 \(j \neq o\)\(\hat{y}_j = 0 \Rightarrow \delta_j = 0\)

\[\frac{\partial J}{\partial W'} = \vec{0}, \quad \frac{\partial J}{\partial v_c} = \vec{0} \]

网络已经学会了这个 pair,不再更新——这正是收敛的标志。


5. 总结:反向传播在 Word2Vec 中的本质

组件 数学表达 语义解释
误差信号 \(\delta\) \(\hat{y} - y\) “哪些词被多/少预测了”
\(W'\) 的梯度 \(\delta_w \cdot v_c\) 按误差比例缩放输入向量
\(W\) 的梯度 \({W'}^\top \delta\) 所有输出向量的误差加权组合
SGD 更新 \(\theta \leftarrow \theta - \eta \nabla J\) 沿损失下降最快方向微调

一句话总结:Word2Vec 的反向传播本质上是一个 “推拉系统” ——预测误差 \(\delta\) 作为力的大小,输出向量 \(u\) 作为力的方向,共同作用于输入向量 \(v_c\),使其在嵌入空间中不断移动到能正确反映共现关系的位置。每一次 SGD 更新都是一次微小的语义校准。

posted @ 2026-08-31 23:02  立体风  阅读(7)  评论(0)    收藏  举报