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

为何nn.Embedding多次运行输出不同?权重计算机制解析

关于nn.Embedding权重的常见疑问解答

1. 多次运行结果不同的原因

PyTorch的nn.Embedding层默认采用随机初始化权重,每次运行程序时,随机数生成器的初始种子不一致,导致初始化出的权重矩阵自然不同。如果需要固定结果,可在代码开头设置全局随机种子:

import torch
torch.manual_seed(42)  # 固定CPU随机种子
torch.cuda.manual_seed_all(42)  # 使用GPU时需额外设置

2. 权重值的计算方式(初始化逻辑)

默认情况下,nn.Embedding的权重从均匀分布中随机采样,取值范围是[-sqrt(1/vocab_size), sqrt(1/vocab_size)]。你也可以手动指定初始化策略,比如改用正态分布加载预训练词嵌入。

3. 所用的公式/函数

默认初始化的核心逻辑可简化为以下伪代码:

import math
bound = 1.0 / math.sqrt(vocab_size)
weights = torch.empty(vocab_size, dim).uniform_(-bound, bound)

若需自定义初始化,可借助nn.init模块的工具函数修改权重,例如:

nn.init.normal_(self.embeddings.weight, mean=0, std=0.01)

4. 是否会使用softmax生成权重?

不会。nn.Embedding本质是一个静态查找表,权重矩阵直接存储每个词对应的嵌入向量,和softmax无关联。softmax通常用于分类任务的输出层计算概率分布,和词嵌入的初始化、查找过程无关。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:43