矩阵是线性代数的主角之一,深度学习领域中常常包含有大量的矩阵运算。不同于基本的数值乘法运算,矩阵的乘法运算有多种不同类型,本文主要介绍几种矩阵乘法。
1.矩阵与标量的乘法:标量乘法(scalar multiplication)
这是一种简单的乘法,运算方式顺应直觉。将矩阵的每个元素乘以固定的数值即完成了运算,这种计算方式不改变矩阵的形状。
该计算一般用 “\(\times\)“表示。
例如:
\[2 \times \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} = \begin{bmatrix} 2 & 4 \\ 6 & 8 \\ 10 & 12 \end{bmatrix}\]标量乘法:
- 满足交换律
- 满足结合律
这是一种常见的乘法运算,常用于对矩阵进行缩放。
2. 矩阵乘法之一:矩阵乘法 (matrix multiplication)
也被叫做矩阵叉乘。
该计算一般省略其运算符号
这是一种最核心的矩阵乘法运算。提到矩阵之间的乘法,如果不做特殊说明,一般是指这种运算。这种运算相对其他乘法来说比较反直觉。
- 并不是任意两矩阵之间都可以进行矩阵乘法,要进行矩阵乘法,第一个矩阵 A 的列数必须等于第二个矩阵 B 的行数。如果 A 是一个 m × n 的矩阵,B 是一个 n × p 的矩阵,那么 A * B 的结果将是一个 m × p 的矩阵。
- 结果矩阵的元素计算规则:结果矩阵 C 的第 i 行第 j 列的元素 \(c_{ij}\) 是通过将 A 的第 i 行和 B 的第 j 列进行内积计算得到的。
上述描述比较抽象,具体计算我们看一个例子:
\[\begin{bmatrix} 1 & 3 & 5 \\ 7 & 9 & 11 \end{bmatrix} \begin{bmatrix} 2 & 4 \\ 6 & 8 \\ 10 & 12 \end{bmatrix} = \begin{bmatrix} c_{11} & c_{12} \\ c_{21} & c_{22}\end{bmatrix}\] \[\begin{align} c_{11} &= 1 * 2 + 3 * 6 + 5 * 10 = 70 \\ c_{12} &= 1 * 4 + 3 * 8 + 5 * 12 = 88 \\ c_{21} &= 7 * 2 + 9 * 6 + 11 * 10 = 178 \\ c_{22} &= 7 * 4 + 9 * 8 + 11 * 12 = 232 \\ \end{align}\]所以
\[\begin{bmatrix} 1 & 3 & 5 \\ 7 & 9 & 11 \end{bmatrix} \begin{bmatrix} 2 & 4 \\ 6 & 8 \\ 10 & 12 \end{bmatrix} = \begin{bmatrix} 70 & 88\\ 178 & 232\end{bmatrix}\]矩阵乘法:
- 不满足交换律
- 满足结合律
矩阵乘法存在广泛的应用,在许多场景都发挥着重要的作用:
- 线性方程组的求解:矩阵乘法可以用于解决线性方程组。通过将线性方程组转化为矩阵形式,可以使用矩阵乘法和逆矩阵来求解方程组的解。这在工程、物理学和经济学等领域中非常常见,例如在电路分析、结构力学和线性回归等问题中。
- 数据转换和特征提取:矩阵乘法在数据分析和机器学习中扮演着重要的角色。通过将数据表示为矩阵形式,可以通过矩阵乘法来进行数据转换、特征提取和降维等操作。例如,主成分分析(PCA)和奇异值分解(SVD)等技术就是基于矩阵乘法的方法。
- 线性变换和几何变换:矩阵乘法用于描述线性变换和几何变换。通过将变换表示为矩阵,可以使用矩阵乘法来进行点的变换、向量的旋转和平移等操作。这在计算机图形学、物理模拟和机器人学等领域中非常重要。
- 系统动力学和控制论:矩阵乘法在系统动力学和控制论中起着重要作用。通过将系统的状态和输入表示为矩阵,可以使用矩阵乘法来描述系统的动态行为和控制方案。这在工程控制、自动化和飞行器导航等领域中有广泛应用。
3. 矩阵乘法之一:阿达玛乘积(Hadamard product)
也被叫做哈达玛乘积,舒尔乘积(Schur product),逐项乘积(entrywise product)。
该计算一般用符号 “\(\circ\)“表示
- 并不是任意两矩阵之间都可以进行点乘,要进点乘,第一个矩阵 A 的形状必须与第二个矩阵 B 的形状相同。
- 结果矩阵的元素计算规则:结果矩阵 C 的第 i 行第 j 列的元素 \(c_{ij}\) 是通过将 A 的第 i 行第 j 列的元素 \(a_{ij}\)和 B 的第 i 行第 j 列的元素 \(b_{ij}\)相乘得到。
这种运算比较简单且符合直觉,以下是一个简单的例子:
\[\small \begin{bmatrix} 1 & 3 & 5 \\ 7 & 9 & 11 \end{bmatrix} \circ \begin{bmatrix} 2 & 4 & 6 \\ 8 & 10 & 12 \end{bmatrix} = \begin{bmatrix} 2 & 12 & 30\\56 & 90 & 132\end{bmatrix}\]阿达玛乘积:
- 满足交换律
- 满足结合律
如果将阿达玛乘积的结果矩阵的每个元素加起来,得到的结果即为矩阵A与B的内积,计作\(<A,B>\)
\[<A,B> = 2 + 12 + 30 + 56 + 90 + 132 = 322\]阿达玛乘积的结果是一个矩阵,而内积一般是一个标量。
4. 矩阵乘法之一:克罗内克积(Kronecker product)
尽管没有明显证据证明德国数学家利奥波德·克罗内克是第一个定义并使用这一运算的人,克罗内克积还是以其名字命名。在历史上,克罗内克积曾被叫做Zehfuss矩阵。
计算符号一般由”\(\otimes\)“表示。
运算方式是将前一个矩阵的每个元素乘上后一个完整的矩阵,然后按顺序拼接为结果矩阵。数学定义比较冗长,看一个例子就能准确理解克罗内克积的计算方式:
\[\small \begin{align} \begin{bmatrix} 1 & 3 \\ 5 & 7 \end{bmatrix} \otimes \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} &= \begin{bmatrix} 1 \times \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} & 3 \times \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} \\ 5 \times \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} & 7 \times \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} 2 & 4 & 6 & 12 \\ 6 & 8 & 18 & 24 \\ 10 & 20 & 14 & 28 \\ 30 & 40 & 42 & 56 \end{bmatrix} \end{align}\]克罗内克积:
- 不满足交换律
- 满足结合律
向量的外积是矩阵的克罗内克积的特殊情况:当克罗内克积的输入A与B分别为列向量与行向量,则此时的克罗内克积就是A与B的外积,又叫做张量积。