整体架构模型的输入自然语言转换为数字的常见方法----独热编码不合适直接使用词嵌入法对应的词向量计算过程假设我们的世界非常简单词汇表里只有 4 个词[篮球, 鸡, 苹果, 跑步]词表大小 **v4我们想训练的词向量维度d3为了方便手算实际中可能是300维第一步右侧的“独热向量”One-hot给这 4 个词编号并生成独热向量对应图片右侧篮球(索引 0):[1, 0, 0, 0]^T鸡(索引 1):[0, 1, 0, 0]^T苹果(索引 2):[0, 0, 1, 0]^T跑步(索引 3):[0, 0, 0, 1]^T第二步中间“词嵌入矩阵”Embedding Matrix第三步矩阵乘法运算图中的等号“词嵌入矩阵”是怎么做迭代更新的位置编码i的具体含义是什么—— 区分sin和cos观察上面算出的三个向量你会发现几个绝妙的设计绝对位置独一无二每个位置生成的向量都不一样这样模型就能区分“第一个词”和“第二个词”。高低频搭配类比二进制你看第 0、1 维i0i0数值变化非常剧烈0 - 0.84 - 0.91就像二进制里的最低位频繁翻转。你看第 2、3 维i1i1数值变化极其缓慢0 - 0.01 - 0.02就像二进制里的最高位很少变化。通过不同频率的 sin/cos 组合可以用有限的维度表示出无限长的位置信息。相对位置关系虽然这里没展示但三角函数有个特性PE(posk) 可以由 PE(pos) 线性表示。这意味着模型不仅知道“我在第 3 个位置”还能很容易地学到“我距离上一个词隔了 2 个位置”。在 Transformer 中怎么用实际计算时过程非常简单粗暴就是直接相加假设“鸡”这个词经过词嵌入矩阵查表得到向量是词向量 [0.2, 0.5, 0.1, 0.8]而“鸡”在句子的第 1 个位置pos1pos1我们上面算出的位置编码是位置编码 [0.84, 0.54, 0.01, 0.99]那么最终输入给 Transformer 的向量就是最终向量 [0.2 0.84, 0.5 0.54, 0.1 0.01, 0.8 0.99] [1.04, 1.04, 0.11, 1.79]