当前位置: 华文星空 > 知识

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} 算单个注意力差不多,而且从拍脑袋的角度想相当于某种模型融合,效果应该至少不差于单个注意力,甚至可能更好,因此有了多头注意力。

当然,以上都是马后炮地讲的故事,事实上确实是更好,而且人家当初也未必这样想的。