You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch中nn.Embedding与nn.Linear的区别及训练方式解析

nn.Embedding 与 nn.Linear 的核心区别及训练逻辑解析

一、本质功能差异

  • nn.Embedding 是查表式映射:它本质是一个可学习的“离散索引→向量”字典,参数是形状为(num_embeddings, embedding_dim)的矩阵。前向传播时,输入是离散整数索引(比如词ID),直接取出矩阵中对应索引的行向量作为输出,没有复杂的加权计算。
  • nn.Linear 是线性变换:输入是连续维度的向量,通过权重矩阵(形状(out_features, in_features))执行线性运算y = x @ W.T + b,每个输出维度都是输入所有维度的加权求和,属于全局的线性组合操作。

二、关于 nn.Embedding 的训练逻辑

PyTorch 的 nn.Embedding 本身只是一个可训练的参数容器,它并不自带 CBOW、Skip-Gram 这类预训练逻辑——这些是需要你在外部构建的训练任务,和 Embedding 层本身完全分离:

  • 为什么没有窗口大小参数?因为窗口大小是 CBOW/Skip-Gram 这类无监督预训练任务的设计,不是 Embedding 层的属性。比如用 Skip-Gram 训练时,你需要自己写代码提取中心词周围窗口内的上下文词,构建“预测中心词对应的上下文词”的任务,再用这个任务的损失反向更新 nn.Embedding 的参数。
  • 当你把 nn.Embedding 放到下游任务(比如文本分类)中直接训练时,它确实会通过最小化下游损失来更新参数,这看起来和 nn.Linear 的更新逻辑类似,但两者的输入输出逻辑依然有本质区别:Embedding 处理的是离散索引,Linear 处理的是连续向量。

三、预训练 vs 下游训练的不同目标

  • 用 CBOW/Skip-Gram 预训练 Embedding,是利用“相似词出现在相似语境”的假设,通过无监督任务让 Embedding 学到通用的语义表示;
  • 下游任务中直接训练 Embedding,是让它适配当前任务的特定目标(比如分类准确率),学到的是任务相关的特征,而非通用语义。

内容的提问来源于stack exchange,提问作者humanlearning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:24