对于word embedding的输入,为什么要乘以 √d
转自:https://zhuanlan.zhihu.com/p/442509602
看看论文里的介绍
Similarly to other sequence transduction models, we use learned embeddings to convert the input tokens and output tokens to vectors of dimension 𝑑𝑚𝑜𝑑𝑒𝑙 . We also use the usual learned linear transformation and softmax function to convert the decoder output to predicted next-token probabilities. In our model, we share the same weight matrix between the two embedding layers and the pre-softmax linear transformation, similar to [24]. In the embedding layers, we multiply those weights by 𝑑𝑚𝑜𝑑𝑒𝑙 .
1.1 从Embedding开始讲起
对Embedding熟悉的可以直接跳到1.2 看结论
1.1.1 Why Embedding
Embedding在深度学习中的作用,就是构建了一个查找表。
对于一个容量为30000的字典,我们可以用 one-hot encoding 对字典中的每个字进行表示,但这样存在一些问题,比如one-hot 的表达是稀疏,因为对于其中的每一个字都需要维度为30000的向量进行唯一标识(表示)。
使用word embedding 可以将稀疏表达变为稠密表达,降低表征一个词所需要的空间维度,即
实现高纬度稀疏向量的到低纬度稠密向量的特征降维
1.1.2 How Embedding
假如,我需要将 (30000,30000) 的 one-hot matrix 降维成 (30000,512) 的 embedding matrix,那么我只需要对one-hot matrix 做矩阵乘法进行降维就好了:
(30000,30000)×(30000,512)=(30000,512)
即
𝑂𝑛𝑒𝐻𝑜𝑡∗𝑊=𝐸𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔
基于torch 中nn.Embedding
的实现方式,nn.Embeddig.weight
默认的初始化为 𝑁(0,1) 分布,即W矩阵中每个值服从𝑁(0,1) 分布。但根据该回答中的阐述(不确定是否正确,看过代码或者相关介绍的同学可以私信我,如果错了我会修改回答):
8.为何在获取输入词向量之后需要对矩阵乘以embedding size的开方?
embedding matrix的初始化方式是xavier init,这种方式的方差是1/embedding size,因此乘以embedding size的开方使得embedding matrix的方差是1,在这个scale下可能更有利于embedding matrix的收敛。
模型的初始化方式使得embedding matrix 的分布为 𝑁(0,1/𝑑𝑚𝑜𝑑𝑒𝑙)
1.2 为什么需要乘以 𝑑𝑚𝑜𝑑𝑒𝑙
基于Transformer的初始化方式,正态总体Embedding matrix 的抽样分布满足:
𝑒𝑙𝑒𝑚𝑒𝑛𝑡 𝑜𝑓 𝐸𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑣𝑒𝑐𝑡𝑜𝑟∼𝑁(0,1/𝑑𝑚𝑜𝑑𝑒𝑙)
这会导致一个问题,Embedding matrix 元素分布的方差会随着 𝑑𝑚𝑜𝑑𝑒𝑙 变化,如果 𝑑𝑚𝑜𝑑𝑒𝑙 较大,输出值的波动会比较小。通过乘以 𝑑𝑚𝑜𝑑𝑒𝑙 ,可以使embedding matrix的分布回调到 𝑁(0,1) ,有利于训练(为什么有利于以后再探讨,挖个坑先)。
2. 总结
embedding matrix 初始化后的方差为 1/𝑑𝑚𝑜𝑑𝑒𝑙 ,即 1/𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑠𝑖𝑧𝑒 ,乘以 𝑑𝑚𝑜𝑑𝑒𝑙 ,可以使embedding matrix的分布回到 𝑁(0,1) ,有利于训练。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理