当你第一次在课本上见到矩阵乘法时,很可能觉得它只是一堆数字的复杂运算规则。但如果我们换一个视角,把它看成空间的变换,一切都会变得直观且优雅。
想象一个在二维平面上的向量:
$$ x = \begin{bmatrix} 1 \\ 0 \end{bmatrix} $$
它就是从原点指向坐标 (1, 0) 的一个箭头。
现在,我们用一个矩阵 $W$ 去乘它:
$$ y = Wx $$
这里的 $W$ 可以是任意的。比如:
$$ W = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix} $$
那么运算结果就是:
$$ y = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 2 \\ 0 \end{bmatrix} $$
发生了什么?向量 $x$ 在水平方向上被拉长到了原来的 2 倍,在垂直方向上因为初始值为 0 所以没变。如果换一个初始向量,比如 $\begin{bmatrix} 1 \\ 1 \end{bmatrix}$,它就会被拉到 $\begin{bmatrix} 2 \\ 3 \end{bmatrix}$ 的位置。
矩阵 $W$ 并不是单纯的一堆数,而是一个操作指令:它告诉空间该如何拉伸、挤压或旋转。
我们可以把任何一个矩阵看成两部分信息的组合:
来看一个更复杂的例子:
$$ W = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} $$
当它作用在向量 $x = \begin{bmatrix} 1 \\ 0 \end{bmatrix}$ 上时:
$$ y = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} $$
原来的 x 轴单位向量,被旋转到了 y 轴方向上。这是一个纯粹的90 度逆时针旋转,没有任何伸缩。
因此,$y = Wx$ 的直观含义就是:
向量 $x$ 在矩阵 $W$ 定义的新规则下,被映射到了空间中的另一个位置 $y$。这个映射可能是拉伸、压缩、旋转,或者三者兼有。
矩阵变换并不局限于同一个维度。
如果 $W$ 是一个 $3 \times 2$ 的矩阵,而 $x$ 是一个二维向量,那么这个乘法会把一个二维平面上的点,映射到三维空间中去。
比如:
$$ W = \begin{bmatrix} 1 & 0 \\ 0 & 2 \\ 1 & 1 \end{bmatrix}, \quad x = \begin{bmatrix} 1 \\ 1 \end{bmatrix} $$
$$ y = Wx = \begin{bmatrix} 1 \\ 2 \\ 2 \end{bmatrix} $$
原本平面上的点 (1, 1),被“抬”到了三维空间中的 (1, 2, 2)。这就是升维映射。
反过来,如果 $W$ 的行数小于列数,它就会把高维向量压缩到低维空间,比如把三维世界中的物体拍扁到一张二维照片上。
理解了这一点,你就抓住了线性代数中最核心的动态画面:矩阵就是空间变换的化身,向量就是空间中的行者。
这个看似抽象的数学概念,正是现代人工智能的运算基石。
在一个神经网络的全连接层(也叫线性层或 Dense 层)中,核心运算就是:
$$ y = Wx + b $$
抛开偏置 $b$ 不谈,$y = Wx$ 这一步到底在做什么?
它就是在对特征向量 $x$ 进行一次空间变换。
一个识别手写数字的网络,本质上就是在不断变换空间:
每一次 $y = Wx$,都是将数据从一个空间形态,重塑为另一个空间形态。
同一个公式 $y = Wx$,我们可以从三个层次去理解它:
| 层次 | 理解 |
|---|---|
| 代数计算 | 矩阵的行与向量的列做内积,得到新向量的各个分量 |
| 空间变换 | 对原向量进行旋转和拉伸,把它映射到新位置 |
| 神经网络 | 对输入特征进行空间重塑,抽取更高层级的语义信息 |
下次当你写下 torch.nn.Linear(in_features, out_features) 或 tf.keras.layers.Dense(units) 时,可以想象一下:你正在创造一把无形的“空间之手”,它在高维的宇宙中拨弄着数据的星辰,将它们推搡、旋转、拉伸,直至呈现出你想要的形状。这就是矩阵乘法的本质。

评论专区
评论加载中...登录后即可发表评论