Transformer中自注意力的计算

        对于输入X=\begin{bmatrix} x_{1} \\ x_{2}\\ ... \\ x_{m} \end{bmatrix},X\epsilon R^{m*n},代表输入了m个长度为n的序列。

        首先,要算出这m个序列的Keys,Queries和Values。这里使用三个矩阵,即:W_{K}^{n*d_{k}}W_{Q}^{n*d_{k}}W_{V}^{n*d_{v}},分别计算如下:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Keys=X*W_{K} , Keys\epsilon R^{m*d_{k}}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     Queries=X*W_{Q},Queries\epsilon R^{m*d_{k}}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      Values=X*W_{V},Values\epsilon R^{m*d_{v}}

        此处 W_{K}W_{Q}的大小应保持一致,W_{K}^{n*d_{k}},W_{Q}^{n*d_{k}},W_{V}^{n*d_{v}}三个矩阵中的值都是可以学习的。

        由此,得到了对应m个序列的Keys,Queries和Values。下一步要做的是,由Keys,Queries和Values计算出自注意力的分数,(为了简便,以下将Keys,Queries和Values简写为Q,K,V),计算方法如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        score=softmax(\frac{Q*K^{T}}{\sqrt{d_{k}}}),score\epsilon R^{m*m}

        这个score即为m个序列的权重系数,接下来只需将score与V相乘,即可得到最终输出:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​          ​​​​​​​        Output=score*V

        所以,最终输出矩阵的尺寸为:输入序列的数量x  d_{v}(单个Value向量的维度),不过Transfor-mer的作者在原文中将d_{k}d_{v}设置为了同样的数值。

 

你可能感兴趣的:(transformer,深度学习,人工智能,nlp,计算机视觉)