矩阵乘法的分析

1. 分类

矩阵的乘法运算分为点乘和矩阵乘

点乘

矩阵点乘的运算如上图,对应点相乘的运算。如果相乘后再相加的话就是卷积运算。可以看到第一个两个矩阵的点并不能一一对应,一个维数是(2,1),一个维数是(2,3),最后结果的维数是(2,3),维数是1的那一维被复制后和后面的矩阵做点乘,这种方式被称作广播。

广播语义

广播可以扩展两个形状不同的矩阵使之成为相同形状的矩阵让那些需要形状相同的操作可执行,例如点乘操作。

http://pytorch.apachecn.org/cn/0.3.0/notes/broadcasting.html

这是pytorch的广播语义:

如果两个张量满足如下规则, 那么就认为其是 broadcastable :

  • 每个张量至少存在维度.
  • 在遍历维度大小时, 从尾部维度开始遍历, 并且二者维度必须相等, 它们其中一个要么是1要么不存在

以上面的为例,形状(2,1)*(2,3),从尾部开始遍历,第一维是1,3,有1那么将1扩展。第二维都是2,符合广播语义。

2. 矩阵乘

矩阵乘就是我们中学时学的矩阵乘法,在TensorFlow和pytorch中的API是matmul,它对形状的要求为

shape A:(m,n) shape B:(n,k)

第一个矩阵的行*第二个矩阵的列,最后矩阵的形状是(m,k)

3. 浅析矩阵乘

https://www.zhihu.com/question/21351965

矩阵乘的几何意义是线性空间中的线性变换,它的操作蕴含着一个向量运动至另一个方向的含义。下图很形象的解释了这点

preview

如上图所示,将d看做一个向量的话,它的值是在一个坐标系下的值,那么A的操作就是在一个新的坐标系下对d的映射。这样神经网络中的y=wx+b就很好理解了,本质就是通过w的映射不断调整向量x的方向。

4. 点乘的意义

了解了矩阵乘后,再回头来看看点乘的意义。很可惜,对于点乘的意义很少有人说,大概就是a\cdot b=abcos(\theta ),计算投影。这里给一个解释,如果有错误或者有更好的答案欢迎指教。

https://math.stackexchange.com/questions/805954/what-does-the-dot-product-of-two-vectors-represent

点乘反映的是两个向量之间的相似性,正如向量点乘的时候,如果正交为0,相反为负,同向为正,其反映的是两个向量之间的相关性。如在attention模型中,以机器翻译为例,我们用点乘来比较语义向量与翻译词的相关性,通过softmax选出最相关的来。

猜你喜欢

转载自blog.csdn.net/gt362ll/article/details/83134948