word2vec 学习计划 一

目标

我想以 word2vec 为神经网络学习起点,从数学原理到模型训练到模型推理的学习计划。

计划

如果你的目标不是“会调用 Word2Vec”,而是把 Word2Vec 当成真正理解神经网络的第一块基石,我非常赞成这个路线。因为 Word2Vec 足够小:一个 embedding 层、一个点积、sigmoid、损失函数、梯度下降、反向传播,就构成了一个完整的神经网络训练闭环。学会它以后,再进入 RNN、Attention、Transformer,会容易很多。

我建议你不要按“先学完整高等数学 → 再学机器学习 → 再学深度学习”的传统路线走,而是采用:

Word2Vec 驱动数学 → 手写训练 → PyTorch 重写 → 理解推理 → 扩展到现代神经网络。


一、整个学习路线

我建议分成 8 个阶段,约 40~60 小时

阶段 1  向量与概率基础
       ↓
阶段 2  Word2Vec 数学模型
       ↓
阶段 3  前向计算 + Loss
       ↓
阶段 4  梯度 + 反向传播
       ↓
阶段 5  SGD / Mini-batch / Epoch
       ↓
阶段 6  手写 Word2Vec
       ↓
阶段 7  PyTorch 实现与训练
       ↓
阶段 8  推理、可视化、实验
       ↓
       RNN
       ↓
       Attention
       ↓
       Transformer
       ↓
       LLM

其中最重要的是前 6 个阶段。不要急着跳 Transformer。


二、阶段 1:先补齐 Word2Vec 所需要的数学

不用先学完整的高等数学,只学 Word2Vec 真正使用到的部分。

1. 向量

你前面已经开始学习点积,这正好是起点。

掌握:

\[\mathbf{x}= [x_1,x_2,\cdots,x_d] \]

向量加减:

\[\mathbf{x}+\mathbf{y} \]

点积:

\[\mathbf{x}\cdot\mathbf{y} = \sum_i x_i y_i \]

向量长度:

\[\|\mathbf{x}\| = \sqrt{\sum_i x_i^2} \]

余弦相似度:

\[\cos\theta = \frac{\mathbf{x}\cdot\mathbf{y}} {\|\mathbf{x}\|\|\mathbf{y}\|} \]

你前面问过“向量和极坐标有没有很深的联系”,这个方向非常好。接下来重点应该转向:

向量 → 矩阵 → 线性变换 → 神经网络。

2. 矩阵

掌握:

\[X\in\mathbb R^{m\times n} \]

矩阵乘法:

\[C=AB \]

尤其理解:

\[\mathbf{x}W \]

和:

\[W\mathbf{x} \]

的维度变化。

3. 概率

只需要:

\[P(x) \]

\[P(y|x) \]

\[\sum_xP(x)=1 \]

以及:

\[\log \]

为什么神经网络特别喜欢 log

因为乘法概率:

\[P_1P_2P_3\cdots P_n \]

经过 log 以后:

\[\log P_1+\log P_2+\cdots+\log P_n \]

更容易优化。


三、阶段 2:真正进入 Word2Vec

这里建议你先学 Skip-gram,不要同时学 CBOW

Stanford CS224N 的 Word2Vec 教学也是从 word vectors → Skip-gram/Word2Vec → 梯度 → 优化逐步展开的。(Stanford University)

假设:

I love machine learning

建立:

machine → learning

首先给每个词一个向量:

\[v_{machine}\in\mathbb R^d \]

例如:

\[v_{machine} = [0.2,-0.4,0.7,\cdots] \]

如果:

\[d=3 \]

那么词表:

I
love
machine
learning

就可以表示成一个矩阵:

\[W\in\mathbb R^{4\times3} \]

这时候你已经第一次看到一个非常重要的神经网络结构:

\[\boxed{\text{Embedding Matrix}} \]


四、阶段 3:理解 Word2Vec 的前向传播

这是整个课程最重要的一步。

假设:

\[v_i=v_{machine} \]

上下文词:

\[v_o'=v_{learning}' \]

计算:

\[z=v_o'^Tv_i \]

这就是点积

然后:

\[p=\sigma(z) \]

其中:

\[\sigma(z)=\frac1{1+e^{-z}} \]

于是:

machine vector
      ↓
    点积
      ↓
learning vector
      ↓
    sigmoid
      ↓
   probability

这已经是一个完整的神经网络前向过程:

\[\boxed{ x\rightarrow Wx\rightarrow\sigma\rightarrow y } \]

只是 Word2Vec 极其简单。


五、阶段 4:理解 Loss

然后问:

模型预测错了多少?

对于正样本:

\[(machine,learning) \]

标签:

\[y=1 \]

对于负样本:

\[(machine,banana) \]

标签:

\[y=0 \]

因此可以使用 Binary Cross Entropy:

\[L = -[y\log p+(1-y)\log(1-p)] \]

这个公式非常值得你手推一遍

因为它会成为你以后理解:

  • 二分类
  • Logistic Regression
  • Neural Network
  • Transformer
  • LLM loss

的重要基础。

D2L 的 Word2Vec 实现正是使用 sigmoid binary cross-entropy,并进一步用负采样训练 Skip-gram。(深度学习入门)


六、阶段 5:真正学习“神经网络”的核心——梯度

这里才是我认为你应该重点投入时间的地方。

Word2Vec 的前向传播:

\[z=v_o'^Tv_i \]

\[p=\sigma(z) \]

\[L=-\log p \]

现在问:

如果 loss 很大,应该如何修改 (v_i) 和 (v_o')?

答案就是:

\[\frac{\partial L}{\partial v_i} \]

和:

\[\frac{\partial L}{\partial v_o'} \]

这就是梯度

你应该亲手推导:

\[\frac{\partial L}{\partial z} \]

然后:

\[\frac{\partial L}{\partial v_i} \]

以及:

\[\frac{\partial L}{\partial v_o'} \]

这一步一旦真正理解,你就理解了:

神经网络为什么可以“自己学习”。

Stanford CS224N 的 Word2Vec 课程特别强调 objective function gradients、optimization、gradient 和 chain rule,这正好与你现在的学习目标吻合。(YouTube)


七、阶段 6:理解反向传播

现在把计算画成计算图:

v_i ──────────┐
              ↓
             dot
              ↓
              z
              ↓
           sigmoid
              ↓
              p
              ↓
             Loss

正向:

\[v_i,v_o' \rightarrow z \rightarrow p \rightarrow L \]

反向:

\[L \rightarrow \frac{\partial L}{\partial p} \rightarrow \frac{\partial L}{\partial z} \rightarrow \frac{\partial L}{\partial v_i}, \frac{\partial L}{\partial v_o'} \]

这就是:

\[\boxed{\text{Backpropagation}} \]

你会发现:

Word2Vec 本身就是一个极小的反向传播神经网络。

所以我特别建议你不要直接跳过数学公式去使用 PyTorch。


八、阶段 7:学习 SGD

有了梯度之后:

\[\theta \]

代表模型参数。

最简单的梯度下降:

\[\theta \leftarrow \theta-\eta\nabla_\theta L \]

其中:

  • (\theta):参数
  • (\eta):learning rate
  • (\nabla L):梯度

例如:

\[v_{machine} \leftarrow v_{machine} - \eta \frac{\partial L}{\partial v_{machine}} \]

这就是“学习”。

整个神经网络训练其实可以浓缩成:

\[\boxed{ Forward \rightarrow Loss \rightarrow Backward \rightarrow Update } \]

然后不断重复。


九、阶段 8:你应该亲手写一个 Word2Vec

这是整个路线中最重要的实践项目

不要第一步就:

from gensim.models import Word2Vec

这样你会“使用 Word2Vec”,但不会真正理解它。

建议按照三个版本实现。

Version 1:纯 Python + NumPy

不要 PyTorch。

自己实现:

词表
↓
one-hot
↓
embedding
↓
dot product
↓
sigmoid
↓
loss
↓
gradient
↓
SGD

最终实现:

train_word2vec()

输入:

"I love machine learning ..."

输出:

embedding matrix

十、Version 2:加入 Negative Sampling

然后实现:

Skip-gram
+
Negative Sampling

完整流程:

文本
 ↓
tokenization
 ↓
vocabulary
 ↓
sliding window
 ↓
(center, context)
 ↓
negative sampling
 ↓
forward
 ↓
loss
 ↓
backward
 ↓
SGD

这里你应该亲自实现:

\[P_n(w)\propto U(w)^{3/4} \]

也就是经典 Word2Vec 的负采样分布。D2L 的中文实现也明确使用词频的 (0.75) 次方作为采样权重。(动手学深度学习)


十一、Version 3:用 PyTorch 重写

这一步才使用:

import torch
import torch.nn as nn

你会看到:

nn.Embedding(...)

实际上就是我们之前手写的:

\[W\in R^{V\times d} \]

而:

loss.backward()

实际上就是我们之前手推的:

\[\frac{\partial L}{\partial W} \]

而:

optimizer.step()

就是:

\[\theta\leftarrow\theta-\eta\nabla L \]

这时候 PyTorch 不再是黑盒。

你会知道每一行代码背后的数学。

D2L 提供了完整的 PyTorch Word2Vec/negative sampling 实现,并使用 PTB 数据集进行预训练,非常适合作为你 Version 3 的参考实现。(深度学习入门)


十二、训练完成以后,真正学习“推理”

这一部分非常重要,因为你明确希望学习:

模型训练 → 模型推理

Word2Vec 的推理和 LLM 不太一样。

训练结束以后:

\[W \]

就是一个词向量矩阵。

例如:

machine → [0.21, -0.42, 0.71, ...]
learning → [0.19, -0.38, 0.69, ...]
banana → [-0.72, 0.15, -0.44, ...]

推理 1:查词向量

embedding["machine"]

得到:

\[v_{machine} \]


推理 2:计算相似度

\[sim(x,y) = \frac{x\cdot y}{\|x\|\|y\|} \]

例如:

similarity(machine, computer)
similarity(machine, banana)

然后比较。


推理 3:找最近邻

给:

machine

计算它与整个词表的 cosine similarity:

machine
 ↓
与 50,000 个词计算相似度
 ↓
排序
 ↓
Top 10

这里你会第一次看到一个非常有意思的区别:

训练时负采样是为了降低计算量;推理时如果要寻找最近邻,可以使用 ANN(Approximate Nearest Neighbor)进一步加速。

这会自然引向:

FAISS
HNSW
向量数据库
RAG

这与你以后学习 LLM 应用非常相关。


十三、然后做三个实验

不要只看 loss。

实验 A:改变 embedding dimension

比较:

d = 10
d = 50
d = 100
d = 300

观察:

训练速度
相似词效果
内存

实验 B:改变 negative samples

比较:

k = 1
k = 5
k = 10
k = 20

观察:

\[k \rightarrow 训练时间 \rightarrow embedding质量 \]

这样你会真正理解:

为什么 k=5~20 是一个工程上的折中,而不是一个神奇的固定数字。


实验 C:改变 window

比较:

window = 1
window = 2
window = 5
window = 10

然后观察:

window 小
→ 更偏局部句法关系

window 大
→ 更偏语义/主题关系

这会让你真正理解:

为什么“上下文”能够产生“语义”。


十四、学习资源:我建议只用这几个

不要一开始收集几十本书。

① 第一核心资源:Stanford CS224N

这是我最推荐你的主线。

Stanford CS224N 课程主页

尤其看:

Lecture 1:Word Vectors

Stanford CS224N — Introduction & Word Vectors

它恰好讲:

word meaning
↓
word vectors
↓
Word2Vec
↓
objective function
↓
gradient
↓
chain rule
↓
optimization

这与你要求的“数学 → 模型 → 训练”路线高度一致。(YouTube)


② 第二核心资源:D2L《动手学深度学习》

D2L:Word2Vec 章节

建议按照:

15.1 Word Embedding
        ↓
15.2 Approximate Training
        ↓
15.3 Dataset
        ↓
15.4 Pretraining word2vec

依次学习。

D2L 的优势是:数学解释 + PyTorch 实现结合得很好。(深度学习指南)


③ 第三核心资源:Word2Vec 原论文

Mikolov 等人的:

Efficient Estimation of Word Representations in Vector Space

Google Research:Word2Vec 原论文页面

arXiv:Word2Vec 原论文

这篇论文非常值得在你完成手写实现以后再读,而不是现在一开始硬啃。论文提出了 CBOW 和 Skip-gram 两种架构,并强调了大规模语料下的计算效率。(Google Research)


④ 第四资源:CS224N Lecture Notes

CS224N Word Vectors / Word2Vec Notes

这个非常适合你用来补数学推导


⑤ 第五资源:Jurafsky & Martin

现在已经有 2026 年的第三版草稿,其中 Chapter 5 专门讲 Embeddings。(Stanford University)

Speech and Language Processing 第三版

它适合作为“教材型参考”,不用从头到尾读。


十五、我给你设计成 12 次课

按照你之前喜欢的“短时间集中学习”方式,我会建议:

次数 学习主题 必须掌握的东西 实践
1 向量 点积、范数、cosine 手算向量相似度
2 矩阵 矩阵乘法、维度 NumPy
3 概率 softmax、log、概率 手算 softmax
4 Word2Vec distributional hypothesis 建立 Skip-gram
5 前向传播 dot + sigmoid 手算一次 forward
6 Loss BCE / log likelihood 手算 loss
7 导数 sigmoid 导数、链式法则 手推梯度
8 Backprop 参数梯度 手算一次更新
9 SGD learning rate / epoch / batch NumPy SGD
10 Negative Sampling 正负样本、(P_n(w)) 手写 Word2Vec
11 PyTorch Embedding / autograd / optimizer 重写 Word2Vec
12 推理 cosine / nearest neighbor 找相似词

这 12 次完成以后,再进入:

Word2Vec
   ↓
GloVe
   ↓
RNN
   ↓
LSTM/GRU
   ↓
Attention
   ↓
Transformer
   ↓
BERT
   ↓
GPT
   ↓
LLM

十六、最重要的是:不要把 Word2Vec 学成“一个 NLP 算法”

我建议你给自己设置一个更高的目标。

学完 Word2Vec 后,你应该能够不用查资料解释下面这条链:

\[\boxed{ \text{文本} \rightarrow \text{Token} \rightarrow \text{词表} \rightarrow \text{Embedding} \rightarrow \text{Skip-gram} \rightarrow \text{Negative Sampling} \rightarrow \text{Forward} \rightarrow \text{Loss} \rightarrow \text{Gradient} \rightarrow \text{Backpropagation} \rightarrow \text{SGD} \rightarrow \text{Embedding} } \]

并且能够自己写出:

for batch in dataloader:

    # 1. forward
    score = ...

    # 2. loss
    loss = ...

    # 3. backward
    loss.backward()

    # 4. update
    optimizer.step()

然后能够回答:

“这一行代码对应哪个数学公式?”

如果你能做到这一点,你学到的就已经不只是 Word2Vec,而是神经网络训练的基本范式

而这也是为什么我认为 Word2Vec 非常适合作为你的神经网络学习起点:模型小到可以完全拆开,但里面已经包含了 embedding、参数、前向传播、损失函数、梯度、反向传播、SGD、mini-batch、负采样、训练和推理这些后来贯穿深度学习的核心概念。

下一步我建议我们直接从第 1 课开始:不再泛泛讲数学,而是围绕一个极小的 Word2Vec 网络,从 one-hot → embedding → 点积 → sigmoid → loss 一步一步手算,最后手推出 v_machine 为什么会被更新。这样会比单独学线性代数和微积分更容易建立整体认知。

posted @ 2026-08-28 22:23  立体风  阅读(6)  评论(0)    收藏  举报