矩阵乘法有3中,分别为*,multiply和dot。其中dot是真正意义上的线性代数中的矩阵乘法。而*和multiply都是对应位置元素相乘。
如果矩阵维度不一样则采用广播机制,例如
a = torch.randn((2, 512, 8, 8)) b = torch.randn((2, 1, 8, 8)) c = a * b # c.shape = (2, 512, 8, 8)
此时会将b矩阵在dim=1维度上repeat成(2, 512, 8, 8)的矩阵,然后对应位置相乘。在attention实现中经常采用这种方法。



