欢迎光临散文网 会员登陆 & 注册

67 自注意力【动手学深度学习v2】

2023-07-11 22:11 作者:層林尽染  | 我要投稿

关于自注意力层和全连接层(以下简称MLP层)的区别,我觉得可以这样思考:


首先,的确二者很相似,最终输出时都是矩阵乘以矩阵,但是还是有所不同的。


MLP层间乘的那个权重W虽然算在做“加权”,但是这个W和SA层的Q-K矩阵是不一样的


从机制上讲,Q-K注意力权重矩阵会考虑序列各元素之间的关系,而MLP层的W没有任何机制来保证这一点。


所以,尽管从数学架构上二者在输出时都是矩阵乘矩阵,但是效果是不同的(更何况自注意力还多了$ QK^T $这个乘法,参数量也是比单纯MLP层要多的)


这里我们还可以发散地想一个问题,可不可以直接设计一个$ W_{qkd} $这样的一个三阶张量权重来对$ V_{kd} $来做全连接乘法?也就是说,“用一个大张量来让所有元素互相关联”,这样一来不仅可以照顾到不同元素之间的关系,还可以针对不同的d特征采用不同的权重。


但实际上这样会麻烦,这种设计的公式可以写为:

$$

Output_{qk} = Σ_{j} W_{qkd} · V_{kd}

$$

这样一来,虽然也矩阵乘法可以并行,但实际计算时,需要先把 V_{kd} 广播成 V_{qkd},就是在q的这个分量上重复q的个数次,然后再和 W_{qkd} 做元素积,其结果可以理解为一个三维立方体,然后再对k分量求和,消去k,把立方体压缩为矩阵Output_{qk},再输出。


要注意,这里的计算量比自注意力层要大,虽然复杂度依然为O(n^2d)(需要做n×n×d次元素积,或者说q×k×d次元素积),但多了一个对k的求和;内存占用上,由于做元素积之前要对$ V_{kd} $进行广播,V的内存占用显著增加,序列越长越明显。而自注意力层就没有这个问题。


所以,自注意力机制在尽可能减少算力压力的情况下,达到近似三阶张量全连接层参数量的效果,并且序列内部互相关联的机制使得它更能把握序列的特征。与二阶张量(矩阵)形式的MLP是不同的。

67 自注意力【动手学深度学习v2】的评论 (共 条)

分享到微博请遵守国家法律