當前位置: 華文星空 > 知識

BERT中,multi

2021-02-25知識

有一個實用上的原因大家不知道是否考慮到了。

以BERT base為例,最大長度512(實際使用時長度通常還沒有512),此時 Q,K\in\mathbb{R}^{512\times 768} ,如果直接 QK^{\top} 得到一個 512\times 512 的Attention矩陣,這其實是有些「浪費」的,因為任何 512\times 512 矩陣理論上都只需要 Q,K\in\mathbb{R}^{512\times 512} 透過 QK^{\top} 就能算出來,你用了 Q,K\in\mathbb{R}^{512\times 768} ,本身參數就存在冗余。

另外,照我們的直觀想象(以及事後的一些觀察),我們可以發現每個token通常只是註意到有限的若幹個token,這說明Attention矩陣通常來說是很「稀疏」的(這個稀疏指的是很多機率值非常接近於0,而不是等於0,因為softmax的結果理論上不能嚴格等於0),而稀疏意味著我們就算降到 Q,K\in\mathbb{R}^{512\times 512} 也是一種浪費,它可能只是兩個更低維矩陣的乘積,即所謂的低秩分解。

從SVD的角度來看,就是說每個實用的Attention矩陣,SVD分解後接近於0的奇異值占了多數。而BERT base相當於假設了:每個 512\times 512 的Attention矩陣,其明顯不等於0的奇異值不超過64個。這樣每個Attention矩陣,我們都可以用 Q,K\in\mathbb{R}^{512\times 64} 來透過 QK^{\top} 擬合。

所以,根據上述假設,你直接 Q,K\in\mathbb{R}^{512\times 768} 算註意力矩陣,很可能跟 Q,K\in\mathbb{R}^{512\times 64} 效果是差不多的,但計算量大很多。這時候倒不如用某種方式將 Q,K\in\mathbb{R}^{512\times 768} 分割為12個 Q,K\in\mathbb{R}^{512\times 64} ,然後算12次Attention矩陣,再以某種方式整合,這樣一來計算量其實跟直接 Q,K\in\mathbb{R}^{512\times 768} 算單個註意力差不多,而且從拍腦袋的角度想相當於某種模型融合,效果應該至少不差於單個註意力,甚至可能更好,因此有了多頭註意力。

當然,以上都是馬後炮地講的故事,事實上確實是更好,而且人家當初也未必這樣想的。