One-hot(独热编码)
一种向量编码方式:向量中只有一个位置是 1,其余全是 0。常用于表示分类标签或词表中的 token 位置。例如词表大小 50,000 时,第 3,127 个 token 的 one-hot 向量就是第 3,127 位为 1、其余 49,999 位为 0 的 50,000 维向量。
直觉
想象一排 50,000 个灯泡,每个灯泡对应词表中的一个 token。要表示某个 token,就把它对应位置的灯泡点亮,其余全灭。这就是 one-hot 编码——只有一个(one)是热的(hot)。
one-hot("猫")=[0,0,…,1,…,0,0]为什么需要 one-hot?
机器学习模型只能处理数字,不能直接处理"猫""狗"这样的文字。one-hot 把每个离散类别变成一个唯一的数字向量,让模型能用数学运算处理它。
one-hot 的问题
虽然简单,但 one-hot 有三个严重缺陷:
- 维度爆炸:词表有多大,向量就有多长。50,000 个 token → 每个向量 50,000 维,绝大部分是 0,极其浪费
- 没有语义信息:在 one-hot 空间里,"猫"和"狗"的距离 = "猫"和"桌子"的距离——都是 2。模型无法从编码本身知道哪些词意思接近
- 无法计算相似度:任意两个不同 token 的 one-hot 向量做点积 = 0。模型看来所有词之间都"毫无关系"
从 one-hot 到 Embedding
Embedding 层就是为了解决这些问题而存在的。它本质上是一个权重矩阵 WE(维度为 d_model × vocab_size),把 one-hot 向量变换成低维稠密向量:
embedding=WE×one-hot50,000 维的稀疏 one-hot → 768 维的稠密语义向量。训练过程会让语义接近的词在 768 维空间中距离更近——"猫"和"狗"靠在一起,"猫"和"桌子"离得远。
在 Softmax 输出中的角色
模型输出端也和 one-hot 相关。Softmax 把模型的原始输出(logits)转换成概率分布,可以理解为"软化的 one-hot"——不是只有一个位置为 1,而是所有位置都有概率值,最高的那个就是模型的预测。训练时的目标就是让 Softmax 输出越来越接近正确答案的 one-hot 分布。
引用本术语的文章