Add. 什么是矩阵相乘

master
ben.guo 1 year ago
parent 29a214add1
commit d2c53c9d17

@ -22,4 +22,75 @@ QKV会结果一个线形层也就是X会变成3份分别去乘以不同的
### 为什么是矩阵相乘
### 什么是矩阵相乘
一个值是标量Scalar一组值是向量Vector多组值是矩阵Matrix
<img src="../assets/scalar-vector-matrix.svg" alt="Scalar, Vector, Matrix" style="zoom:50%;" />
矩阵也就是多维的向量矩阵是可以多种维度的如3列2行上面图的亦或者2行3列。
矩阵相乘(又叫点积相乘)如下:
<img src="../assets/matrix-multiply-a.svg" alt="矩阵乘法" style="zoom:50%;" />
~~~markdown
"点积" 是把 对称的元素相乘,然后把结果加起来:
(1, 2, 3) • (7, 9, 11) = 1×7 + 2×9 + 3×11 = 58
~~~
要更加深入了解计算的,可以跳转到这个网址[数学乐](https://www.shuxuele.com/algebra/matrix-multiplying.html)
这里顺便补充下, 我们平时说的线形变换,其实就是一种特殊的矩阵相乘,即,矩阵乘以一个向量
<img src="../assets/419801703.png" alt="L15.png" style="zoom:30%;" />
最终输出的是[3,1]的矩阵,即一个向量`[16 4 7]`。
### 为什么是矩阵相乘-几何解释
假设我们有两个矩阵A [1 2] 和 B [3 3]两个矩阵,画到象限表,如下图
<img src="../assets/image-20240430191643501.png" alt="image-20240430191643501" style="zoom:50%;" />
我们说A和B相似如何判断相似就看它们离的近不近或者两个向量的夹角a比较小。并且我们肉眼看A和C离的相对更远。
在线性代数中,如何判断两个顶点是否相似,可以用余弦相似度来计算(定理)。余弦相似度 = 两个矩阵相乘 除以 两条线的长度。结果越大(分子)表示相似度越高,这里我们只需要关注矩阵的值即可,因为分母(线的长度)变长,对应着矩阵的值也会增加,所以矩阵相乘的结果增幅永远大于分母的增幅。
公式变换:
$$
cos(\theta) = \frac{A矩阵*B矩阵}{A长度*B长度}
$$
等同于
$$
A矩阵*B矩阵=B长度*A长度*cos(\theta)
$$
我们做一个浅绿色的垂线它就变成一个直角三角形。在数学三角函数中cos的邻边等于cos(θ)乘以斜边。也就是A的长度乘以cos(θ)等于黑色的线B上的黑色线
<img src="../assets/image-20240430191813984.png" alt="image-20240430191813984" style="zoom:50%;" />
也就是公式等同于,也就是红色乘以黑色的部分
$$
A矩阵*B矩阵=B长度*(A在B上的投影)
$$
也就是寻找两个向量的相似度也就是看其中一个向量在另一个向量上的投影长度大小也就是A越长 等同于 投影长度越长 等同于 两者越靠近越相似B是不变的。
如果是C做垂线B可能就是负数了。如果是三维平面或者四维屏幕则是如下增加多条线
<img src="../assets/image-20240430192046147.png" alt="image-20240430192046147" style="zoom: 33%;" />
现在我们知道矩阵相乘能代表相似度的高低,回到实际中,过程图如下
<img src="../image-20240430194452839.png" alt="image-20240430194452839" style="zoom:50%;" />
上面我放的文字,实际传给机器的时候是数值。
<img src="../assets/image-20240430194746805.png" alt="image-20240430194746805" style="zoom:50%;" />
通过矩阵相乘,即`LLM`和`me`的相似度是23最终它们都会被投射到多维平面上。
<img src="../assets/image-20240430194034870.png" alt="image-20240430194034870" style="zoom:50%;" />
当然时间向量的值一般是[-1,+1]区间的而不是整数型这里是一个简单的示例。而且还会经过不断的训练循环来不断的调整每个文本的多维表达数值分别是多少也就是LLM初始值假设是[1,2,3],可能训练的下一轮是[-1,3,1]下一轮又是[3,1,2],直到最终训练结束。
Loading…
Cancel
Save