矩阵乘法、点乘、点积与bmm

在机器学习和深度学习中,向量和矩阵运算是核心的数学操作。PyTorch作为一个流行的深度学习框架,提供了高效的张量操作接口,包括点乘、点积和矩阵乘法。下面详细讲解这些概念及其在PyTorch中的实现和应用。

点乘 (Element-wise Product)

概念: - 点乘是指两个相同形状的向量或矩阵对应元素逐个相乘,得到一个相同形状的向量或矩阵。 - 也称为哈达玛积(Hadamard Product)。

公式: - 如果 ( ) 和 ( ) 是形状相同的矩阵(或向量),则点乘的结果是一个矩阵 ( ),其中 ( C_{ij} = A_{ij} B_{ij} )。

PyTorch实现:

1
2
3
4
5
6
7
8
9
import torch

# 创建两个相同形状的张量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 进行点乘(元素级别相乘)
elementwise_product = a * b
print(elementwise_product) # 输出: tensor([4, 10, 18])

点积 (Dot Product)

概念: - 点积是两个相同长度的向量间的运算,结果是一个标量。 - 在几何上,点积可以用于计算两个向量的夹角和相似度。

公式: - 如果 ( ) 和 ( ) 是两个向量,点积 ( ) 为: [ = _{i=1}^{n} a_i b_i ]

PyTorch实现:

1
2
3
4
5
6
7
# 创建两个相同长度的向量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 计算点积
dot_product = torch.dot(a, b)
print(dot_product) # 输出: tensor(32)

矩阵乘法 (Matrix Multiplication)

概念: - 矩阵乘法是线性代数中的基本运算,将两个矩阵相乘以得到一个新矩阵。 - 矩阵 ( ) 的列数必须等于矩阵 ( ) 的行数。 - 在机器学习中,矩阵乘法用于计算神经网络的加权和。

公式: - 如果 ( ) 是一个 ( m n ) 矩阵,( ) 是一个 ( n p ) 矩阵,则乘积矩阵 ( ) 是一个 ( m p ) 矩阵,且 [ C_{ij} = {k=1}^{n} A{ik} B_{kj} ]

PyTorch实现:

1
2
3
4
5
6
7
8
9
# 创建两个可相乘的矩阵
A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])

# 进行矩阵乘法
matrix_product = torch.mm(A, B)
print(matrix_product)
# 输出: tensor([[19, 22],
# [43, 50]])

bmm计算

在PyTorch中,bmm是用于执行批量矩阵乘法的函数。方法是torch.bmm,适用于形状为 (b, n, m)(b, m, p) 的张量的批量矩阵乘法运算,输出为 (b, n, p) 形状的张量。其中,b 是批次大小,nmp 是矩阵的维度。

torch.bmm 主要用于对一批 2D 矩阵进行乘法操作,这对需要在多个样本上同时进行线性代数运算的情况特别有用。

torch.bmm 在以下场景中特别有用:

  1. 神经网络的批处理操作:在神经网络中,处理多个样本的批量数据时,使用 bmm 可以高效地进行矩阵乘法。
  2. 时间序列数据的处理:处理时间序列数据时,常常需要对时间步长上的数据进行操作,这也可以通过 bmm 来实现。
  3. 多元线性代数计算:在对多对矩阵进行线性代数运算时,bmm 提供了一种简洁而高效的实现方式。

应用场景

  1. 神经网络中的线性变换:
    • 在神经网络的全连接层(Fully Connected Layer)中,输入和权重矩阵的乘法用于线性变换。
  2. 损失函数的计算:
    • 矩阵乘法用于批量计算预测值和真实值之间的差异,特别是在训练期间。
  3. 数据的相似度计算:
    • 在自然语言处理(NLP)等领域,点积用于计算词向量之间的相似性。

矩阵乘法、点乘、点积与bmm
https://linxkon.github.io/矩阵乘法、点乘、点积与bmm.html
作者
linxkon
发布于
2021年5月8日
许可协议