赞
踩
不难发现实际上自注意力机制的用途是是十分广泛的,不仅限于对文字,语言的处理,对各种向量序列都有一定的应用潜力。
并行运算
与长程依赖
问题是十分严重的。如上图,这样得到的结果不再是类似RNN技术下,只考虑小窗口信息的产物,而是完整考察了整个序列的上下文信息的结果。
self-attention可以叠加多次
看不懂没关系后面才是重点。
现在,self-attention似乎是一个黑盒子,它的效果大致如下图,输入输出是一一对应的,且输出是包含输入的上下文信息的。
以b1向量的生成为例来剖析self-attention。
- step1:找出输入序列里每个向量ai与a1之间的关联程度α1i(标量),例,α12表示a1与a2之间的关联度。
如何确定两个向量间的关联性?方法有很多,此处举两个常见的例子。
一般关联度α都是一个较大的数,为计算方便,一般会将它们通过softmax限制到一个较小的范围。- step2:根据关联分数来抽取上下文信息,即得到bi。
注:vi也是类似q和k一样是Wv*ai得到的。实际上获取vi的方法也有很多,但一定要保证是与ai有关的。
至此就得到了b1,类似的b2、b3、b4也可以算得。此时bi就可以替代ai了,bi融合了上下文信息与本义,相对于ai来说有很大优势。
与RNN系列不同,b1到b4的计算不用按顺序计算,因此可以并行运算。又b1到b4的生成与整个序列中的每个向量相关,可以有效的避免RNN系列的长程依赖问题。
上面所涉及的运算大多都是矩阵运算,Wq、Wk、Wv都是待训练参数矩阵,它们对每个输入向量都共享;q、k、v、a、b都是向量;只有α是标量。
step2:采用点乘方式求相关分数
step3:获得输出数据
注:O中的每一列就是一个bi。
看起来很难搞实际上要学的参数只有Wq、Wk、Wv三组参数矩阵。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。