Scaled Dot-Product Attention 的公式中为什么要除以 dk

Scaled Dot-Product Attention 的公式中为什么要除以 dk

在学习 Scaled Dot-Product Attention 的过程中,遇到了如下公式

Attention(Q,K,V)=softmax(QKdk)V

不禁产生疑问,其中的 dk 为什么是这个数,而不是 dk 或者其它的什么值呢?

Attention Is All You Need 中有一段解释

We suspect that for large values of dk, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients. To counteract this effect, we scale the dot products by dk.

这说明,两个向量的点积可能很大,导致 softmax 函数的梯度太小,因此需要除以一个因子,但是为什么是 dk 呢?

文章中的一行注释提及到

To illustrate why the dot products get large, assume that the components of q and k are independent random variables with mean 0 and variance 1. Then their dot product, qk=i=1dkqiki has mean 0 and variance dk.

本期,我们将基于上文的思路进行完整的推导,以证明 dk 的在其中的作用.

基本假设

假设独立随机变量 U1, U2, , Udk 和独立随机变量 V1, V2, , Vdk 分别服从期望为 0,方差为 1 的分布,即

E(Ui)=0, Var(Ui)=1

E(Vi)=0, Var(Vi)=1

其中 i=1,2,, dkdk 是个常数.

计算 UiVi 的方差

由随机变量方差的定义可得 UiVi 的方差为

Var(UiVi)=E[(UiViE(UiVi))2]=E[(UiVi)22UiViE(UiVi)+E2(UiVi)]=E[(UiVi)2]2E[UiViE(UiVi)]+E2(UiVi)=E(Ui2Vi2)2E(UiVi)E(UiVi)+E2(UiVi)=E(Ui2Vi2)E2(UiVi)

因为 UiVi 是独立的随机变量,所以

E(UiVi)=E(Ui)E(Vi)

从而

Var(UiVi)=E(Ui2)E(Vi2)(E(Ui)E(Vi))2=E(Ui2)E(Vi2)E2(Ui)E2(Vi)

又因为 E(Ui)=E(Vi)=0,所以

Var(UiVi)=E(Ui2)E(Vi2)

计算 E(Ui2)

因为

E(Ui)=0

Var(Ui)=1

Var(Ui)=E(Ui2)E2(Ui)

所以

E(Ui2)=1

同理,

E(Vi2)=1

计算 qk 的方差

如果 q=[U1,U2,,Udk]Tk=[V1,V2,,Vdk]T,那么

qk=i=1dkUiVi

qk 的方差

Var(qk)=Var(i=1dkUiVi)=i=1dkVar(UiVi)=i=1dkE(Ui2)E(Vi2)=i=1dk11=dk

到这里就可以解释为什么在最后要除以 dk,因为

Var(qkdk)=Var(qk)dk=dkdk=1

可见这个因子的目的是让 qk 的分布也归一化到期望为 0,方差为 1 的分布中,增强机器学习的稳定性.

参考文献/资料

posted @   赤川鹤鸣  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示