1. 从文字输入到输出第一个token的过程

2. 细节拆解
2.1 多头注意力(并行的关键点之一)
假定通过输入X,计算得到的Q,K,V分别为:
lua
Q矩阵
[[1.0, 0.0, 0.0, 9.0, 0.0, 8.0]
[0.0, 2.0, 2.0, 0.0, 6.0, 0.0]]
K矩阵
[[3.0, 0.0, 3.0, 0.0, 0.0, 5.0]
[0.0, 4.0, 0.0, 6.0, 2.0, 0.0]]
V矩阵
[[7.0, 0.0, 0.0, 7.0, 0.0, 1.0]
[0.0, 9.0, 8.0, 0.0, 2.0, 0.0]]
我们假定head 为2
那么矩阵Q K V 会被拆解为
lua
拆解后的
Q_1矩阵 Q_2矩阵
[[1.0, 0.0, 0.0] [[9.0, 0.0, 8.0]
[0.0, 2.0, 2.0]] [0.0, 6.0, 0.0]]
K_1矩阵 K_2矩阵
[[3.0, 0.0, 3.0] [[0.0, 0.0, 5.0]
[0.0, 4.0, 0.0]] [6.0, 2.0, 0.0]]
V_1矩阵 V_2矩阵
[[7.0, 0.0, 0.0] [[7.0, 0.0, 1.0]
[0.0, 9.0, 8.0]] [0.0, 2.0, 0.0]]
我们在使用attention公式(这里我们做了简化):

得到
ini
Head_1 =
[
[5.948, 1.353, 1.203],
[1.677, 6.843, 6.083]
]
Head_2 =
[
[0.002, 1.999, 0.0003],
[0.0069, 1.998, 0.0010]
]
然后Concat(Head_1, Head_2)得到如下:
csharp
[
[5.948, 1.353, 1.203, 0.002, 1.999, 0.0003],
[1.677, 6.843, 6.083, 0.0069, 1.998, 0.0010]
]