AI解剖课堂 · Part 5 彻底搞懂注意力
第 48 章 先除再 Softmax
Q. 相关度分数直接做 Softmax 不行吗?为什么偏要先除一下?
- 第 47 章里“学校”打的分是 2、−1、3、1。咦?这和第 14 章的分数 3、2、1、−1 是同样的几个数。
- 直接做 Softmax,结果和第 14 章一模一样:去 65.7%、我 24.2%、学校 8.9%、今天 1.2%。
- 可是注意力在这之前还多做一步:把分数除以 √d。d 是 Q、K 向量的格数。
- 我们的例子是 2 格,所以除以 √2,约 1.41。2 变成 1.41,−1 变成 −0.71,3 变成 2.12,1 变成 0.71。
- 用除过的分数做 Softmax:去 55.7%、我 27.5%、学校 13.5%、今天 3.3%。没有刚才那么集中了。
- 为什么要除?格数一多,点积就会变大。用 128 格的向量试试,分数变成 20、−14 这么大,一个词几乎拿走 100%。
- 这么集中的话,分数稍微变一点结果也不动,训练就学不好(第 21 章)。除以 √128 ≈ 11.3,又能分得匀一些了。
- 现在“学校”看每个词的比例定下来了。下一章按这个比例把 Value 混在一起。
本章小结
- 先把分数除以 √d,再做 Softmax。d = Q、K 的格数。
- 格数一多点积就变大,不除的话一个词几乎拿走 100%。
- 除以 √d,不管格数多少,比例都分得合适,训练也顺利。