Add. QKV机制的数学逻辑

master
ben.guo 6 months ago
parent 2d701745d9
commit b0c99eaf2a

BIN
assets/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

@ -52,7 +52,7 @@ $$
将上面的值转成0到1直接的值即百分比的概率分布。它会放大分数较高的元素并抑制分数较低的元素。在注意力机制中这意味着模型可以更加集中地关注那些与当前查询Query最相关的键Key从而获取对应的值Value
<img src="../assets/image-20240502150841107.png" alt="image-20240502150841107" style="zoom:50%;" />
<img src="../assets/image-20240502212834597.png" alt="image-20240502212834597" style="zoom:50%;" />
Softmax函数的公式如下
$$
@ -60,10 +60,68 @@ $$
$$
这里就不做详解你就简单理解为它可以将一批值转换为一个概率分布其中每个元素的值介于0和1之间并且所有元素的和为1。
<img src="../assets/image-20240502152450856.png" alt="image-20240502152450856" style="zoom:50%;" />
<img src="../assets/image-20240502214058704.png" alt="image-20240502214058704" style="zoom:50%;" />
可以看到`LL`对其它文本信息的概率总和是1`M`对其它文本信息的概率总和也是1。以此类推此时整个矩阵的形状是没有变的。
可以看到`LL`对全部文本信息包括它本身的概率总和是1`M`对全部文本信息的概率总和也是1。以此类推此时整个矩阵的形状是没有变的。
> 为什么是包括它本身?
>
> 1.**完整的上下文信息**:一个元素的含义往往不仅取决于它与其他元素的关系,也取决于它自身的特性。
>
> 2.**自引用的重要性**:在某些情况下,元素自身可能是理解其上下文中最重要的部分。即代词“它”指代前文提到的名词。
>
> 3.**灵活性和泛化能力**:自注意力机制不对元素之间的关系做任何先验假设,它允许模型在训练过程中学习到元素之间的复杂关系,包括元素与自身的关系。
>
> 4.**简化模型结构**:不做过多的代码处理,使得模型更易于实现和优化。
### QK与V矩阵相乘
前面我们QK矩阵相乘并经过了Scale、Mask和Softmax接下来就要跟V去做矩阵相乘
<img src="../assets/image-20240502223139032.png" alt="image-20240502223139032" style="zoom:50%;" />
如上图所示V跟一开始的QK一样都是[4, 12, 16, 64]即64维前面的矩阵相乘我们知道只要第一个矩阵的第二个维度值 跟 第二个矩阵的第一个维度值一样,它们就能相乘。即[16, 16]跟[16, 64]是可以矩阵相乘的得出的矩阵A。
A就代表着我们这个Attention关注度计算。
### QKV机制的数学逻辑
<img src="../assets/image-20240502223231828.png" alt="image-20240502223231828" style="zoom:50%;" />
我们先看Q@K的结果里面是每一个token文字的信息对应其它文字token的权重关系且是一个百分比的形式。V是原始形状[16, 64]每行就是每个文字随机初始化的数字矩阵如果是推理截断这些值则是训练好的即每个token对应的64维的向量数据64维。两者矩阵相乘是矩阵A。
这里建议大家回到第四章,再看一遍“什么是矩阵相乘”以及“为什么是矩阵相乘-几何解释”。看完后你再确定矩阵相乘,就是第一个矩阵的第一行 跟 第二个矩阵的第一列相乘求和,以此类推。伪代码如下
~~~python
# 我随便造一点数据
import numpy as np
np.random.seed(0)
matrix_A = np.random.rand(3, 3)
matrix_B = np.random.rand(3, 6)
product_matrix = np.dot(matrix_A, matrix_B)
print("Matrix A (3x3):")
print(matrix_A)
print("\nMatrix B (3x6):")
print(matrix_B)
print("\nProduct Matrix (3x6):")
print(product_matrix)
~~~
<img src="../assets/image-20240502222706741.png" alt="image-20240502222706741" style="zoom:50%;" />
可以看到A1的结果是QK矩阵的第一行跟V矩阵的第一列相乘的结果。而第一行是QK最终通过softmax输出的`LL`对全部文本信息的概率总和而V矩阵的第一列则是全部文字向量化后在64维里的第一个维度的数值。即`LL`的概率总和(向量) 与 `LLM with me.郭同学热爱AI喜欢游戏`的一维向量 相乘。等于`LL`在这个维度里(第一维),对所有文本(包括它本身)的关注度的总权重(权重总和)。
当然我们的V还有第二维如下所示
<img src="../assets/image-20240502224309316.png" alt="image-20240502224309316" style="zoom:50%;" />
A矩阵里的第一行第二列的值则是QK矩阵第一行跟V的第二列 相乘的结果,也就是`LL`对于在第二维,对所有文本的总权重。后续的值则以此类推。
也就是最终的矩阵A里面就是每个文本对所有文本的关注度的总权重权重总和并且有64个维度每个头和每个批次里。在训练过程中通过不断的训练后推理阶段就能得出输入文字中哪些文字的权重比较高重要性

Loading…
Cancel
Save