nn.Embedding 根据索引生成的向量有权重吗

import torch

import torch.nn as nn

假设有一个大小为 10x3 的 Embedding 层,其中有 10 个单词,每个单词用一个长度为 3 的向量表示

num_words = 10

embedding_dim = 3

创建 Embedding 层

embedding_layer = nn.Embedding(num_words, embedding_dim)

print(embedding_layer.weight)

embedded_vectors = embedding_layer(torch.LongTensor([4]))

print(embedded_vectors)

embedded_vectors = embedding_layer(torch.LongTensor([5]))

print(embedded_vectors)

embedded_vectors = embedding_layer(torch.LongTensor([6]))

print(embedded_vectors)

nn.Embedding层单词转向量实测

1.nn.Embedding创建对象embedding_layer

2.可以看到embedding_layer创建完成,其属性weight已经有值了

3.embedding_layer方法传入分别torch.LongTensor([4]),torch.LongTensor([5]),(torch.LongTensor([6])生成的结果就是根据索引值去weight里取值。

打破猜测:

1.原以为embedding_layer里进行的一个乘法,传参*随机权重,如embedded_vectors =torch.LongTensor([4])*W,实际不是,没有乘法

2.实际是nn.Embedding(num_words, embedding_dim)根据参数已经随机生成了所有的向量,之后仅需根据索引取值

原始猜测:

1.由于程序每次重启embedding_layer.weight生成的参数随机,为供断点续训和预测用,这些参数不能每次都随机生成,所以这些应该是要保存在模型中。即断点续训或预测时,embedding层的向量不应是随机生成了,而是读取模型文件中存储的模型参数。

2.embedding_layer.weight参与梯度更新,一开始以为此处没有

3.一开始根据各种信息判断nn.Embedding的内部机制是,或许有一个随机参数,乘以输入单词索引,得到嵌入向量,并且这个参数不参加更新,潜意识是参数不保存。

1.为什么有或许有一个随机参数,乘以输入单词索引,得到嵌入向量这样的理解?
	因为看着是传入了索引,得到了一个随机向量,合理猜测应该是有个随即参数与传参相乘。
	所以这里第一步的猜测就错了。
	首先这个参数的确是有的,机制的实际是随机生成所有的可能的索引的向量,供直接取用。这里参数即嵌入向量

2.这个参数不参加更新?
	这种不参与更新的参数,模型会保存吗?猜测应该不会,如果不会,那每次重启的得到的嵌入向量都变了,怎么供续训和预测用?

对于transformer/bert,网络上的确对nn.Embedding这一步骤的机制讲解不够清晰,不知道嵌入向量是怎么得出的,不知道其中是否有需要训练的参数。

嵌入参数不参加更新这说法主要是来自李宏毅讲的注意力机制那块的误解,说是除了wq,wk,wv参数参与训练,没有别的参数了。这就和续训预测产生了极强的的矛盾,难以判断。

当你创建 nn.Embedding 层时,PyTorch 会随机初始化权重。这些权重在训练过程中会通过反向传播进行更新,以拟合模型的输入和输出数据,确保模型能够更好地进行预测或分类任务。

相关推荐
Purepisces32 分钟前
深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)
人工智能·笔记·python·深度学习·机器学习·分类
2301_795168581 小时前
昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分
人工智能·深度学习·学习
西西弗Sisyphus1 小时前
卷积层的输出
深度学习·神经网络·计算机视觉·卷积
及时行樂樂樂1 小时前
【PromptCC】遥感图像变化字幕的解耦范式
深度学习·算法·计算机视觉·transformer
魔云连洲2 小时前
UNet进行病理图像分割
python·深度学习·机器学习
@李思成2 小时前
动手学深度学习(Pytorch版)代码实践 -计算机视觉-40目标检测和边界框
pytorch·深度学习·计算机视觉
HyperAI超神经2 小时前
入选顶会ICML,清华AIR等联合发布蛋白质语言模型ESM-AA,超越传统SOTA
人工智能·深度学习·机器学习·语言模型·自然语言处理·清华大学·蛋白质语言模型
AI小白龙*2 小时前
LLM大模型实战 —— DB-GPT阿里云部署指南
阿里云·大模型·llm·prompt·embedding·ai大模型·大模型部署
Linux运维老纪2 小时前
通俗易懂的chatgpg的原理简介
深度学习·算法·机器学习·chatgpt·gpt-3
oscar9993 小时前
AI基本概念(人工智能、机器学习、深度学习)
人工智能·深度学习·机器学习·gai