Add. QK矩阵相乘

master
ben.guo 1 year ago
parent 1de03d01db
commit 471440d224

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

@ -99,6 +99,20 @@ $$
### Attention——QKV权重运算 ### Attention——QKV权重运算
> - **Q的权重矩阵**用于将输入转换为Query向量这些向量代表了要查询的信息或者关注的点。
> - **K的权重矩阵**用于将输入转换为Key向量这些向量代表了可以被查询的信息或者关注点的索引。
> - **V的权重矩阵**用于将输入转换为Value向量这些向量代表了与Key相关联的实际信息内容。
>
> 想象你在一个聚会上Query想找人聊天。你环顾四周试图找出谁Key可能和你兴趣相投。你找到了几个人然后根据他们的兴趣Value你决定和谁聊得更投机。
>
> 在Transformer模型中这个过程是这样的
>
> - **QueryQ**:就像你想找的聊天对象。
> - **KeyK**:就像聚会上每个人的兴趣标签。
> - **ValueV**:就像根据兴趣标签找到的人,你实际上会和他们聊天。
>
> 模型通过比较每个Query和所有Key来决定哪些Value最相关然后把这些信息结合起来帮助模型更好地理解整个场景。
接下来我们逐层拆解来到本章节重点QKV。上一章文本结果向量化再加上位置编码输出的矩阵是[1,4,768]然而我们不可能只有一个句子或者是长度只有3个字符。 接下来我们逐层拆解来到本章节重点QKV。上一章文本结果向量化再加上位置编码输出的矩阵是[1,4,768]然而我们不可能只有一个句子或者是长度只有3个字符。
比如现在我们有4句话同时我们复用GPT-2的768维向量 比如现在我们有4句话同时我们复用GPT-2的768维向量
@ -117,4 +131,26 @@ $$
<img src="../assets/image-20240501162941113.png" alt="image-20240501162941113" style="zoom:50%;" /> <img src="../assets/image-20240501162941113.png" alt="image-20240501162941113" style="zoom:50%;" />
把4个[16, 768]维的矩阵分别拿出来,去与[768, 768]维的矩阵相乘。原矩阵里的数值经过W权重后出来的Q里的值会不一样。即最终出来的QKV三个矩阵里的值都跟原始的有所变化。 把4个[16, 768]维的矩阵分别拿出来,去与[768, 768]维的矩阵相乘。原矩阵里的数值经过W权重后出来的Q里的值会不一样。即最终出来的QKV三个矩阵里的值都跟原始的有所变化。
### Attention——QKV多头机制
上面我们看到单个头的是[4, 16, 768]前面我们也一直提到QKV的多头机制如果按照GPT里的12头Transformer原文是4头那么会这么切分如下图
<img src="../assets/image-20240501171813234.png" alt="image-20240501171813234" style="zoom:50%;" />
可以看到我们将768维的矩阵切成了12分每份是64维。另外由于大模型都是后两位数矩阵相乘所以我们把头跟长互换即[4, 16, 12, 64]转为[4, 12, 16, 64]。
### QK矩阵相乘
> 再次补充一下Q是要查询的文本的信息K则是被查询的信息或索引。即要查询文本的向量跟其它文本的向量的相似度。
QKV分别获得后QK则是根据路线进行矩阵相乘如下图
<img src="../assets/image-20240501173316308.png" alt="image-20240501173316308" style="zoom:50%;" />
其中我们把K进行了翻转方便相乘。矩阵相乘则是每个batch_size里的每个头进行矩阵相乘即[16, 64]和[64, 16]进行矩阵相乘,相乘后则是变成了[16, 16]的矩阵。
Loading…
Cancel
Save