|
|
|
@ -71,33 +71,17 @@ $$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
等同于(Markdown展示):
|
|
|
|
|
$$
|
|
|
|
|
A矩阵*B矩阵=B长度*A长度*cos(\theta)
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
等同于(GitHub展示):$`A矩阵*B矩阵=B长度*A长度*cos(\theta)`$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
我们做一个浅绿色的垂线,它就变成一个直角三角形。在数学三角函数中,cos的邻边等于cos(θ)乘以斜边。也就是A的长度乘以cos(θ),等于黑色的线(B上的黑色线)
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240430191813984.png" alt="image-20240430191813984" width="300" />
|
|
|
|
|
|
|
|
|
|
也就是公式等同于,红色乘以黑色的部分(Markdown展示:)
|
|
|
|
|
$$
|
|
|
|
|
A矩阵*B矩阵=B长度*(A在B上的投影)
|
|
|
|
|
$$
|
|
|
|
|
那么A、B长度也就是模长,它的作用又是什么呢?可以理解为归一化处理。公式定理可知cosine最终的结果是[-1,+1]区间,我们来求一下,假设我们有两个向量A和B:
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240523102514832.png" alt="image-20240523102514832" width="300" />
|
|
|
|
|
|
|
|
|
|
(GitHub展示:)$`A矩阵*B矩阵=B长度*(A在B上的投影)`$
|
|
|
|
|
<img src="../assets/image-20240523102627330.png" alt="image-20240523102627330" width="300" />
|
|
|
|
|
|
|
|
|
|
也就是寻找两个向量的相似度,也就是看其中一个向量在另一个向量上的投影长度大小,也就是A越长 等同于 投影长度越长 等同于 两者越靠近(越相似),B是不变的。
|
|
|
|
|
计算表明,两个向量的余弦相似度为 1,这意味着它们的方向完全相同。也就是模长是把数值归一化到[-1,+1]区间,那么如果我直接点积相乘,然后再进行归一化是不是也可以呢?亦或者我们进行一次数值缩放呢?再回头看下我们的图
|
|
|
|
|
|
|
|
|
|
如果是C做垂线B,可能就是负数了。如果是三维平面或者四维屏幕,则是如下增加多条线
|
|
|
|
|
<img src="../assets/image-20240523103216329.png" alt="image-20240523103216329" width="500" />
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240430192046147.png" alt="image-20240430192046147" width="300" />
|
|
|
|
|
注意两个红框,QK矩阵相乘后进行数值缩放,而结果A在输出后,也进行也一次数值缩放。也就是**矩阵相乘后进行数值缩放** 等同于 **余弦公式结果** 等同于 **求得多个元素间的相似度** 等同于 **自注意力机制**
|
|
|
|
|
|
|
|
|
|
现在我们知道矩阵相乘能代表相似度的高低,回到实际中,过程图如下
|
|
|
|
|
|
|
|
|
|