|
|
|
@ -4,7 +4,7 @@
|
|
|
|
|
|
|
|
|
|
### 前言
|
|
|
|
|
|
|
|
|
|
前面通过向量和位置编码后,我们已经得倒了一个数值矩阵,那么这个数值矩阵,怎么把数值矩阵用起来了。接下里就到了Transformer里最吸引人的一部分,注意力机制。
|
|
|
|
|
前面通过向量和位置编码后,我们已经得到了一个数值矩阵,那么这个数值矩阵,怎么把数值矩阵用起来了。接下里就到了Transformer里最吸引人的一部分,注意力机制。
|
|
|
|
|
|
|
|
|
|
放大语义关系学习(注意力机制)内部
|
|
|
|
|
|
|
|
|
@ -26,7 +26,7 @@
|
|
|
|
|
|
|
|
|
|
### 什么是矩阵相乘
|
|
|
|
|
|
|
|
|
|
一个值是标量(Scalar),一组值是向量(Vector),多组值是矩阵(Matrix)
|
|
|
|
|
一个值是标量(Scalar),一维数组是向量(Vector),多维数组是矩阵(Matrix)
|
|
|
|
|
|
|
|
|
|
<img src="../assets/scalar-vector-matrix.svg" alt="Scalar, Vector, Matrix" width="300" />
|
|
|
|
|
|
|
|
|
@ -127,7 +127,7 @@ $$
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240502132811665.png" alt="image-20240502132811665" width="550" />
|
|
|
|
|
|
|
|
|
|
如上图所示,Wq的也是[768, 768]维的矩阵,Wk、Wv同理,它们一开始会初始化值,训练过程会自动调整。
|
|
|
|
|
如上图所示,Wq也是一个[768, 768]维的矩阵,Wk、Wv同理,它们一开始会初始化值,训练过程会自动调整。
|
|
|
|
|
|
|
|
|
|
单独拿一个Q出来细看,[4, 16, 768]跟[768, 768]是怎么矩阵相乘的,实际上,相乘都是后两个维度跟768相乘,也就是[16,768]跟[768,768]。如下图所示:
|
|
|
|
|
|
|
|
|
@ -143,7 +143,7 @@ $$
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240502134443646.png" alt="image-20240502134443646" width="550" />
|
|
|
|
|
|
|
|
|
|
可以看到我们将768维的矩阵,切成了12分,每份是64维。另外,由于大模型都是后两位数矩阵相乘,所以我们把头跟长互换,即[4, 16, 12, 64]转为[4, 12, 16, 64]。
|
|
|
|
|
可以看到我们将768维的向量分成12个64维的向量。另外,由于大模型都是后两位数矩阵相乘,所以我们把头跟长互换,即[4, 16, 12, 64]转为[4, 12, 16, 64]。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -155,7 +155,7 @@ QKV分别获得后,QK则是根据路线进行矩阵相乘,如下图
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240502212200231.png" alt="image-20240502212200231" width="550" />
|
|
|
|
|
|
|
|
|
|
其中我们把K进行了翻转,方便相乘。矩阵相乘则是每个batch_size里的每个头进行矩阵相乘,即[16, 64]和[64, 16]进行矩阵相乘,相乘后则是变成了[16, 16]的矩阵。
|
|
|
|
|
其中我们对K矩阵进行了转置(transpose),方便相乘。矩阵相乘则是每个batch_size里的每个头进行矩阵相乘,即[16, 64]和[64, 16]进行矩阵相乘,相乘后则是变成了[16, 16]的矩阵。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -163,4 +163,4 @@ QKV分别获得后,QK则是根据路线进行矩阵相乘,如下图
|
|
|
|
|
|
|
|
|
|
本章节介绍了多头注意力机制中的QK矩阵相乘过程。在Transformer模型中,输入文本通过向量化和位置编码转换成数值矩阵,然后通过注意力机制放大语义关系。注意力机制的核心是QKV(Query, Key, Value)的计算,其中Q代表查询信息,K代表被查询的索引,V代表实际的内容信息。
|
|
|
|
|
|
|
|
|
|
多头注意力机制通过QK矩阵相乘放大了输入文本中词与词之间的语义关系,使得模型能够更好地捕捉文本的上下文信息,从而提高了模型对语言的理解能力。
|
|
|
|
|
多头注意力机制通过QK矩阵相乘,计算注意力分数,这些分数表示在给定查询(Query)的情况下,每个键(Key)的重要性,使得模型能够更好地捕捉文本的上下文信息,从而提高了模型对语言的理解能力。
|
|
|
|
|