簡單說法是為了讓方差到1,推公式也好推。但是沒幾個人說為什么方差要到1.
如果不除以根號dk,顯然QK有可能很大,這就讓softmax更有能力得到接近one-hot的結果。這本應是好的,但是從實踐來看,我們并不要求一定要輸出one-hot,這有點over-fitting的感覺了。差不多就行。
還有更重要的理由。softmax求導是 a ? a 2 a-a^2 a?a2, a a a是softmax的結果。如果 a a a太one-hot了,這里的梯度直接全部到0,就太小了。我愿稱之為softmax陷阱,就和sigmoid一樣,你以為one-hot好,事實上誰知道呢,比起任由self-attention只關注一個v,還是看看遠方的其他v吧。這樣看,如果淺層網絡已經提取到足夠的信息了,后面的所有v都將與最有價值的v趨于一致,否則就會因為根號dk強制多see幾個而引入不必要的v。除非readout的softmax不用根號dk,實際上也確實是這么做的。