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. 向量
你前面已经开始学习点积,这正好是起点。
掌握:
向量加减:
点积:
向量长度:
余弦相似度:
你前面问过“向量和极坐标有没有很深的联系”,这个方向非常好。接下来重点应该转向:
向量 → 矩阵 → 线性变换 → 神经网络。
2. 矩阵
掌握:
矩阵乘法:
尤其理解:
和:
的维度变化。
3. 概率
只需要:
以及:
为什么神经网络特别喜欢 log?
因为乘法概率:
经过 log 以后:
更容易优化。
三、阶段 2:真正进入 Word2Vec
这里建议你先学 Skip-gram,不要同时学 CBOW。
Stanford CS224N 的 Word2Vec 教学也是从 word vectors → Skip-gram/Word2Vec → 梯度 → 优化逐步展开的。(Stanford University)
假设:
I love machine learning
建立:
machine → learning
首先给每个词一个向量:
例如:
如果:
那么词表:
I
love
machine
learning
就可以表示成一个矩阵:
这时候你已经第一次看到一个非常重要的神经网络结构:
四、阶段 3:理解 Word2Vec 的前向传播
这是整个课程最重要的一步。
假设:
上下文词:
计算:
这就是点积。
然后:
其中:
于是:
machine vector
↓
点积
↓
learning vector
↓
sigmoid
↓
probability
这已经是一个完整的神经网络前向过程:
只是 Word2Vec 极其简单。
五、阶段 4:理解 Loss
然后问:
模型预测错了多少?
对于正样本:
标签:
对于负样本:
标签:
因此可以使用 Binary Cross Entropy:
这个公式非常值得你手推一遍。
因为它会成为你以后理解:
- 二分类
- Logistic Regression
- Neural Network
- Transformer
- LLM loss
的重要基础。
D2L 的 Word2Vec 实现正是使用 sigmoid binary cross-entropy,并进一步用负采样训练 Skip-gram。(深度学习入门)
六、阶段 5:真正学习“神经网络”的核心——梯度
这里才是我认为你应该重点投入时间的地方。
Word2Vec 的前向传播:
现在问:
如果 loss 很大,应该如何修改 (v_i) 和 (v_o')?
答案就是:
和:
这就是梯度。
你应该亲手推导:
然后:
以及:
这一步一旦真正理解,你就理解了:
神经网络为什么可以“自己学习”。
Stanford CS224N 的 Word2Vec 课程特别强调 objective function gradients、optimization、gradient 和 chain rule,这正好与你现在的学习目标吻合。(YouTube)
七、阶段 6:理解反向传播
现在把计算画成计算图:
v_i ──────────┐
↓
dot
↓
z
↓
sigmoid
↓
p
↓
Loss
正向:
反向:
这就是:
你会发现:
Word2Vec 本身就是一个极小的反向传播神经网络。
所以我特别建议你不要直接跳过数学公式去使用 PyTorch。
八、阶段 7:学习 SGD
有了梯度之后:
代表模型参数。
最简单的梯度下降:
其中:
- (\theta):参数
- (\eta):learning rate
- (\nabla L):梯度
例如:
这就是“学习”。
整个神经网络训练其实可以浓缩成:
然后不断重复。
九、阶段 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
这里你应该亲自实现:
也就是经典 Word2Vec 的负采样分布。D2L 的中文实现也明确使用词频的 (0.75) 次方作为采样权重。(动手学深度学习)
十一、Version 3:用 PyTorch 重写
这一步才使用:
import torch
import torch.nn as nn
你会看到:
nn.Embedding(...)
实际上就是我们之前手写的:
而:
loss.backward()
实际上就是我们之前手推的:
而:
optimizer.step()
就是:
这时候 PyTorch 不再是黑盒。
你会知道每一行代码背后的数学。
D2L 提供了完整的 PyTorch Word2Vec/negative sampling 实现,并使用 PTB 数据集进行预训练,非常适合作为你 Version 3 的参考实现。(深度学习入门)
十二、训练完成以后,真正学习“推理”
这一部分非常重要,因为你明确希望学习:
模型训练 → 模型推理
Word2Vec 的推理和 LLM 不太一样。
训练结束以后:
就是一个词向量矩阵。
例如:
machine → [0.21, -0.42, 0.71, ...]
learning → [0.19, -0.38, 0.69, ...]
banana → [-0.72, 0.15, -0.44, ...]
推理 1:查词向量
embedding["machine"]
得到:
推理 2:计算相似度
例如:
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=5~20是一个工程上的折中,而不是一个神奇的固定数字。
实验 C:改变 window
比较:
window = 1
window = 2
window = 5
window = 10
然后观察:
window 小
→ 更偏局部句法关系
window 大
→ 更偏语义/主题关系
这会让你真正理解:
为什么“上下文”能够产生“语义”。
十四、学习资源:我建议只用这几个
不要一开始收集几十本书。
① 第一核心资源:Stanford CS224N
这是我最推荐你的主线。
尤其看:
Lecture 1:Word Vectors
Stanford CS224N — Introduction & Word Vectors
它恰好讲:
word meaning
↓
word vectors
↓
Word2Vec
↓
objective function
↓
gradient
↓
chain rule
↓
optimization
这与你要求的“数学 → 模型 → 训练”路线高度一致。(YouTube)
② 第二核心资源:D2L《动手学深度学习》
建议按照:
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 原论文页面
这篇论文非常值得在你完成手写实现以后再读,而不是现在一开始硬啃。论文提出了 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 后,你应该能够不用查资料解释下面这条链:
并且能够自己写出:
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 为什么会被更新。这样会比单独学线性代数和微积分更容易建立整体认知。

浙公网安备 33010602011771号