嵌入层是文本变成数学的地方。每个LLM都从将离散token(词、子词)转换为神经网络可以处理的连续向量开始。嵌入表也是小模型最大的组件之一——128K词汇表配4096维嵌入就是5.12亿个参数。理解这一点有助于你推理模型大小和词汇表设计。
嵌入层就是一个形状为(vocab_size, model_dim)的矩阵E。对于token ID i,嵌入就是E[i]——简单的行查找,无需计算。但这些嵌入是在训练中学习的:出现在相似上下文中的token获得相似的嵌入。经典例子:"king"的嵌入 − "man" + "woman" ≈ "queen",表明嵌入空间捕获了语义关系。
许多模型将嵌入矩阵与输出层("反嵌入"或"语言模型头")共享(绑定)。输出层通过计算与每个token嵌入的点积将隐藏状态转换回词汇概率。绑定这些层意味着同一嵌入既在输入时表示token,又在输出时预测token,节省参数并通常提高质量。大多数现代LLM使用共享嵌入。
完整的输入表示通常是:token_embedding + positional_encoding。Token嵌入捕获token的含义。位置编码捕获它在序列中的位置。在具有学习位置嵌入的模型(BERT)中,这是第二个按位置索引的嵌入表。在具有RoPE的模型(LLaMA)中,位置信息以不同方式注入(通过旋转Q和K向量),嵌入层只处理token身份。