标准回答
它在做什么
Embedding 层把离散的整数 id(如词表索引、用户 id、类别)映射成固定维度的稠密实数向量。实现上是一张形状为 [词表大小, 嵌入维度] 的可学习权重矩阵,前向时按 id 取出对应行——所以它等价于一次「查表」,也等价于 one-hot 向量乘以该矩阵。
为什么需要它
直接用 one-hot 表示离散变量维度极高且稀疏,向量间彼此正交、无法表达相似性。Embedding 把它压缩到低维稠密空间,既省参数又能让语义/行为相近的 id(如「猫」和「狗」、相似商品)落在相近位置,便于下游网络学习。
怎么学到的
嵌入矩阵就是模型参数,随整个网络一起反向传播更新。训练中共现、相似上下文的 id 会被推到相近向量,从而自动学出有语义结构的表示。也可以加载预训练词向量(如 Word2Vec)做初始化。
常见误区
⚠️ 常见踩坑
以为 Embedding 是固定不变的查表——它是可训练参数,会随任务一起优化;也别把它和 one-hot 等同,二者表达能力差别很大。
追问
追问 1:Embedding 维度该怎么选?
维度是超参数,需在表达能力与过拟合/算力间权衡。词表越大、关系越复杂可用更高维(几百维);高基数但数据有限的类别特征常用较小维度。经验法则之一是取约为类别数的四次方根量级,最终以验证集效果调优。
追问 2:Embedding 和全连接层有什么关系?
用 one-hot 输入接一个无偏置全连接层,数学上等价于 Embedding 查表:取出的那一行就是对应权重列。区别在实现效率——Embedding 直接按 id 索引,避免了与稀疏 one-hot 的大矩阵乘法,速度和内存都更优。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。