从词表示到 Transformer:沿着信息流重读 NLP 图示

1. 先建立问题地图

例如,把“我昨天去了公园”翻译成英文:系统先把文字转成 token ID,再得到向量;编码器处理源句,解码器结合已经生成的前缀预测下一个 token,直到结束标记。研究问题随之出现:词与词如何共享统计信息?前文如何保留?生成某个词时如何找到相关输入?训练与推理能否并行?

阶段表示或信息通路解决的问题仍需处理的局限
One-hot / n-gram离散身份、局部组合把文本变成可计算特征稀疏、组合增长、共享能力有限
Word2Vec共享低维词向量从上下文学习词之间的统计关系静态词向量不能独自区分多义词
RNN / LSTM / GRU随时间更新的状态累积前文信息顺序依赖与长距离优化困难
带注意力的 Seq2Seq每步读取源序列状态缓解单个固定向量的信息瓶颈循环主干仍需逐步计算
Transformer位置表示与注意力连接缩短跨位置的信息路径稠密注意力成本、掩码与生成依赖

这不是“后一种模型在所有任务上替代前一种”的排行榜,而是一张设计取舍表。

2. n-gram:先区分特征集合与语言模型

资料中的 2-gram、3-gram 图展示了“切片—组合—去重”。以序列 [1,3,2,1,5,3] 为例,滑动二元窗口得到 (1,3)、(3,2)、(2,1)、(1,5)、(5,3)。对于长度 T、不加边界标记的序列,窗口数是 max(T-n+1, 0)。

这里必须区分两个目标。构造 n-gram 词表时可以去重;统计语言模型估计概率时需要频次。若原文中某个二元组出现十次,先转成集合会丢掉这十次出现的信息。

二元语言模型的最大似然估计是:

P(w_t | w_(t-1)) = count(w_(t-1), w_t) / count(w_(t-1))

实际使用还要处理边界与未见组合。更大的 n 保留了更长的局部上下文,也需要更多数据覆盖组合。资料中给组合分配新编号的做法属于特征编码,不能据此认定系统已经训练了概率语言模型。

研究切入点:固定数据划分与分类器,比较 unigram、unigram+bigram 和加入 trigram 的特征。除任务指标外,还记录词表大小、低频特征比例和跨域表现,检验提升是否只来自训练集中的短语记忆。

3. 从 One-hot 到 Embedding:查表不等于学会语义

One-hot 表达“这是词表中的哪一项”。在标准内积下,不同词的 One-hot 向量相互正交,这种编码本身没有表达“猫和狗比猫和火车更接近”。

设词表大小为 V,嵌入维度为 d,嵌入表为 E ∈ R^(V×d)。token i 的向量是 E[i]。One-hot 行向量乘 E 与查出第 i 行等价;实现时通常直接查表。输入 ID 的形状 [B,T] 因而变成 [B,T,d]。Embedding 的基础接口可以对照 PyTorch Embedding 文档。

需要分清:Embedding 是参数化映射,Word2Vec 是学习这种表示的一类训练方法。随机初始化的嵌入表并没有天然语义;维度也不是预先指定的“水果程度”“动物程度”。资料中的六维数值适合解释形状,不足以证明表示质量。

CBOW 与 Skip-gram 的监督方向

在资料的 “Hope can set you free” 例子里,以 set 为中心、窗口半径为 1:CBOW 用 can 和 you 预测 set;Skip-gram 用 set 分别预测 can 与 you。这两种训练方向来自 Mikolov 等人的 Word2Vec 论文。

统一采用行向量记法,CBOW 的完整 softmax 示意为:

h = (E[can] + E[you]) / 2       # [d]
z = h U                       # U: [d,V],z: [V]
p = softmax(z)                 # [V]
L = -log p[set]                # 标量损失

资料把预测与标签之间的差写成“残差”。这个差不是完整的标量训练目标。对 softmax 交叉熵,关于 logits 的梯度为 p-y;负号如何出现取决于是在写梯度还是更新方向。图中还混用了行列向量与矩阵朝向,不能把所写的连乘式直接照搬进代码。

Skip-gram 的完整 softmax 示意目标是 -log P(can|set)-log P(you|set)。负采样则采用不同的二分类式目标,不应把完整词表 softmax 当成所有 Word2Vec 实现的必经步骤。可继续阅读 Distributed Representations of Words and Phrases。

4. RNN、LSTM 与 GRU:状态如何传递

RNN 把“之前读过什么”压入隐藏状态。用列向量写一个普通 RNN 单元:

h_t = tanh(W_x x_t + W_h h_(t-1) + b)

图上沿时间展开的多个单元共享参数;它们不是各自独立训练的网络。隐藏状态也不一定就是最终任务输出,分类或生成通常还需要预测头。

资料将 DNN 输入画成 [B×T,d]、RNN 输入画成 [B,T,d]。这可以解释某种按 token 展平的实现,但不是 DNN 的统一输入要求。展平若丢失了位置与句子分组,模型无法自动知道哪些 token 属于同一句话。

研究上更关键的是梯度路径:普通循环网络的远距离影响需经过多步状态变换,反向传播包含多次雅可比相乘,可能衰减或放大。门控结构改变了状态更新方式,但不等于保证无限长记忆。

LSTM 显式维护细胞状态 c 和隐藏状态 h,其核心更新是:

c_t = f_t ⊙ c_(t-1) + i_t ⊙ g_t
h_t = o_t ⊙ tanh(c_t)

遗忘门控制旧状态保留,输入门控制候选内容写入,输出门控制状态如何形成当前隐藏表示。门值是连续数值,而不是只有“开”和“关”。具体门方程与返回值见 PyTorch LSTM 文档。

GRU 不单独维护 c,利用更新门与重置门管理隐藏状态。不同材料会交换更新门在插值式中的命名约定;比较时要检查“门值接近 1 时保留哪一项”。PyTorch 文档也说明其候选状态计算与原始形式存在实现差异。参见 GRU 文档 与 Cho 等人的原论文。

5. Seq2Seq 的瓶颈:从一次压缩到按需读取

不带注意力的简化 Seq2Seq 将源句编码成固定大小的上下文,再据此生成目标句。困难不是固定维度向量“绝对装不下长句”的数学定理,而是源句的信息必须经过同一压缩接口,给表示与优化带来压力。

注意力保留源句各位置的状态。每个解码时间步计算相关性分数,经 softmax 得到权重,再形成上下文向量:

e_(t,i) = score(s_(t-1), h_i)
α_(t,i) = softmax_i(e_(t,i))
c_t = Σ_i α_(t,i) h_i

这样生成不同目标词时可以读取不同的源信息。资料中“固定 C 变成 c₁、c₂、c₃”的对照抓住了这一点。Bahdanau 等人在 Neural Machine Translation by Jointly Learning to Align and Translate 中提出了相应方法。

但注意力权重只是模型内部的加权系数,不能仅凭某个词权重大,就认定它是预测的唯一原因。若研究的是解释性,应加入遮蔽、替换或干预实验,观察输出变化。

6. Transformer:用张量形状检查图是否读对

资料主要描述原始编码器—解码器 Transformer。编码器使用自注意力与逐位置前馈层;解码器增加因果自注意力以及读取编码器输出的交叉注意力。缩放点积注意力写为:

Attention(Q,K,V) = softmax(QKᵀ/√d_k + M)V

M 表示掩码。自注意力的 Q、K、V 由同一序列投影得到;交叉注意力的 Q 来自解码端,K、V 来自编码端。原始结构、位置编码与残差归一化顺序参见 Attention Is All You Need,第 3 节。

下面是依据公式做的形状推导示例,数值不是原论文配置。取 B=2、T=5、d_model=12、H=3、d_k=d_v=4:

对象形状核查含义
输入 X[2,5,12]每条序列五个位置
分头后的 Q、K、V[2,3,5,4]三个头,各四维
分数及权重矩阵[2,3,5,5]每个查询位置对五个键分配权重
单头读取结果[2,3,5,4]加权聚合 value
拼接并投影[2,5,12]回到可与输入做残差相加的宽度

若源序列长度 S=7、目标长度 T=5,交叉注意力分数应为 [2,3,5,7],不是方阵。softmax 沿最后的键位置维归一化。这一检查能直接暴露轴次序错误。

多头不是把同一个注意力结果简单复制三份,也不保证每个头都学到可命名的语法关系。研究头的作用,可以做逐头消融,但要同时控制模型宽度和训练预算。

位置、前馈层与掩码分别承担什么

位置表示向模型提供顺序信息;逐位置前馈层在每个位置上共享参数、变换特征;注意力负责跨位置聚合。残差相加要求两路形状兼容,不能把 [B,T,d_ff] 直接与 [B,T,d_model] 相加。

区分两类掩码:padding mask 防止读取补齐位置,causal mask 防止读取未来目标。目标右移与因果掩码必须共同正确。训练时目标已知,可批量计算各位置的预测;自回归推理仍依赖已生成前缀,不能据此说整句会一次生成。

7. 从结构笔记变成研究方案

结构图解释了数据如何流动,却不能证明某结构在自己的数据上更好。下面的方案尚未执行,目的在于把直觉改写为可检验问题。

问题对照与控制观测指标需要排除的替代解释
局部短语是否贡献分类效果?相同划分和分类器,改变 n-gram 阶数Macro-F1、词表规模、跨域分数高频模板泄漏、参数规模增长
门控是否改善长距离记忆?RNN/LSTM/GRU 在复制或延迟检索任务上比较;记录参数量与训练预算随依赖距离变化的准确率、梯度范数模型更大、训练更多、测试长度未超训练分布
动态读取是否缓解压缩压力?相同分词及编码解码主干,开关注意力按源长度分桶的生成指标、遗漏率解码策略或参数量变化
模型是否使用顺序信息?全局可见的编码器任务,对比有无位置表示并置乱 token原始与置乱后的任务分数因果掩码本身带来的位置信号
注意力热图能否解释预测?遮蔽高权重与随机位置,多次配对比较目标概率变化、预测翻转率遮蔽引入分布外输入

至少记录数据来源、划分方式、去重规则、随机种子、超参数、硬件和推理设置。先用小批量过拟合检查训练链路,再检查 padding 与未来信息泄漏;之后才讨论跨模型结果。多随机种子实验报告均值与波动,不用单次最好结果代表稳定提升。

8. 阅读这组资料时应保留的校核清单

  • n-gram 去重适合构建集合;估计概率要保留计数。
  • Embedding 查表与 One-hot 乘矩阵等价,但查表本身不保证语义质量。
  • CBOW / Skip-gram 图中的向量差不能替代明确的损失函数。
  • RNN 时间展开共享参数;隐藏状态不必等于任务输出。
  • LSTM / GRU 缓解部分优化困难,不保证长距离任务一定成功。
  • 注意力权重不是充分的因果解释。
  • Transformer 图要同时追踪 Q/K/V 来源、softmax 轴和两种掩码。
  • 《二叉树》仅凭节点与数字无法确认是 Huffman 树,不宜直接解释成分层 softmax。

下一步最值得动手的是把形状推导写成断言:检查右移目标、有效 token 数量,以及修改未来 token 后过去位置的输出是否保持不变。先证明实现符合设想,再用实验判断设想是否有效。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇