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