Fix. Attention——QKV权重运算

master
ben.guo 6 months ago
parent d2c53c9d17
commit 1de03d01db

BIN
.DS_Store vendored

Binary file not shown.

BIN
assets/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

@ -8,9 +8,9 @@
放大语义关系学习(注意力机制)内部
<img src="../assets/0*0KPEV8QidHkteKeY.png" alt="A step-by-step breakdown of self attention | by fishingalone | Medium" style="zoom:50%;" />
<img src="../assets/image-20240501143058994.png" alt="image-20240501143058994" style="zoom:50%;" />
> Linear线性层。数学表达式是 `y = wx + b`,其中 `x` 是输入向量,`W`是权重矩阵,`b` 是偏置向量,`y` 是输出向量。
> Wq/Wk/WvLinear:线性层。数学表达式是 `y = wx + b`,其中 `x` 是输入向量,`W`是权重矩阵,`b` 是偏置向量,`y` 是输出向量。
>
> MatMul: 矩阵相乘。一种线性代数运算,用于计算两个矩阵的乘积。如果有两个矩阵 A 和 B它们的乘积 C 通过将 A 的行与 B 的列对应元素相乘然后求和来计算。
>
@ -18,7 +18,7 @@
>
> Softmax软最大值。oftmax用于将注意力分数经过缩放的矩阵乘法结果转换为概率值这些概率值表示每个头在给定输入时应该关注的程度。
QKV会结果一个线形层也就是X会变成3份分别去乘以不同的权重W。变成QKV经过各种层后最终输出上面说的缩放好的点积注意力机制也就是除开Scale、Maks、Softmax外是包裹了两次的矩阵相乘。这也是最重要的部分为什么是矩阵相乘呢矩阵相乘能代表词之间的关注度高低吗
输入矩阵X会变成3份分别去乘以不同的权重W。变成QKV经过各种层后最终输出上面说的缩放好的点积注意力机制也就是除开Scale、Maks、Softmax外是包裹了两次的矩阵相乘。这也是最重要的部分为什么是矩阵相乘呢矩阵相乘能代表词之间的关注度高低吗
@ -45,7 +45,7 @@ QKV会结果一个线形层也就是X会变成3份分别去乘以不同的
<img src="../assets/419801703.png" alt="L15.png" style="zoom:30%;" />
最终输出的是[3,1]的矩阵,即一个向量`[16 4 7]`。
最终输出的是[3,1]的矩阵,即一个向量`[16 4 7]`。从上面我们也知道,只要[3,2]里的这个2能够对应上另外一个矩阵的行就能够相乘。即[3,2]对应上面的[2,1]2跟2对应。即第一个矩阵的第二个数 能跟 第二个矩阵的第一个数对应上,就能相乘。
@ -93,4 +93,28 @@ $$
<img src="../assets/image-20240430194034870.png" alt="image-20240430194034870" style="zoom:50%;" />
当然时间向量的值一般是[-1,+1]区间的而不是整数型这里是一个简单的示例。而且还会经过不断的训练循环来不断的调整每个文本的多维表达数值分别是多少也就是LLM初始值假设是[1,2,3],可能训练的下一轮是[-1,3,1]下一轮又是[3,1,2],直到最终训练结束。
当然时间向量的值一般是[-1,+1]区间的而不是整数型这里是一个简单的示例。而且还会经过不断的训练循环来不断的调整每个文本的多维表达数值分别是多少也就是LLM初始值假设是[1,2,3],可能训练的下一轮是[-1,3,1]下一轮又是[3,1,2],直到最终训练结束。
### Attention——QKV权重运算
接下来我们逐层拆解来到本章节重点QKV。上一章文本结果向量化再加上位置编码输出的矩阵是[1,4,768]然而我们不可能只有一个句子或者是长度只有3个字符。
比如现在我们有4句话同时我们复用GPT-2的768维向量
<img src="../assets/image-20240501154039606.png" alt="image-20240501154039606" style="zoom:50%;" />
[4, 16, 768] = [batch_size, max_length, d_model]batch_size就是我们可以做并行的设置做算法建模的同学应该对这个比较熟悉越大的batch_size意味着需要越大的内存和显存。max_length则是我们设置的最大长度超过则截断因为资源也是有限的我们一般取能获取到绝大多数完整句子的长度即可。768则是GPT-2的默认向量维度。
看上面的图,[4, 16, 768]复制成3份分别去与Wq、Wk和Wv矩阵相乘。
<img src="../assets/image-20240501155804590.png" alt="image-20240501155804590" style="zoom:50%;" />
如上图所示Wq的也是[768, 768]维的矩阵Wk、Wv同理它们一开始会初始化值训练过程会自动调整。
单独拿一个Q出来细看[4, 16, 768]跟[768, 768]是怎么矩阵相乘的实际上相乘都是后两个维度跟768相乘也就是[16,768]跟[768,768]。如下图所示:
<img src="../assets/image-20240501162941113.png" alt="image-20240501162941113" style="zoom:50%;" />
把4个[16, 768]维的矩阵分别拿出来,去与[768, 768]维的矩阵相乘。原矩阵里的数值经过W权重后出来的Q里的值会不一样。即最终出来的QKV三个矩阵里的值都跟原始的有所变化。
Loading…
Cancel
Save