3Blue1Brown线性代数课程笔记:从几何视角彻底搞懂矩阵乘法

张开发
2026/4/16 1:25:13 15 分钟阅读

分享文章

3Blue1Brown线性代数课程笔记:从几何视角彻底搞懂矩阵乘法
从几何动画到代码实践矩阵乘法的可视化探索与Python实现线性代数中矩阵乘法的定义常让初学者困惑——为什么行与列要如此对应相乘3Blue1Brown的《线性代数的本质》系列通过几何动画给出了令人醍醐灌顶的解释矩阵乘法本质上是空间变换的叠加。本文将结合该课程的几何视角用Python代码还原关键动画演示带你从图形变换、神经网络权重计算等实际场景中真正理解矩阵运算的物理意义。1. 矩阵乘法的几何本质空间变换的合成想象一张网格纸上的所有点同时运动的过程。当我们将二维平面看作由无数向量组成的空间时任何线性变换都可以表示为基向量的重新定位。设原始基向量î (1,0)和ĵ (0,1)经过变换后分别移动到(2,1)和(-1,1)这个变换过程可以用矩阵表示为import numpy as np # 定义变换矩阵 transformation np.array([[2, -1], [1, 1]])此时向量(3,2)的变换结果可通过矩阵乘法计算vector np.array([3, 2]) transformed transformation vector # 结果为 [4, 5]几何解释这个运算等价于将原始向量分解为3î 2ĵ然后使用变换后的新基向量进行重组3*(新î) 2*(新ĵ)。以下表格对比了变换前后的坐标变化组件原始值变换后新基向量贡献量î分量3(2,1)3*(2,1)(6,3)ĵ分量2(-1,1)2*(-1,1)(-2,2)合计(3,2)-(6-2,32)(4,5)关键理解矩阵乘法保留了原始向量的线性组合关系只是更换了组合所用的基向量2. 组合变换的矩阵实现从旋转到剪切现实中的复杂变换往往由多个简单变换组合而成。例如在计算机图形学中一个物体可能需要先旋转再缩放。设旋转矩阵为M1剪切矩阵为M2则组合变换对应的矩阵就是M2×M1注意顺序# 定义45度旋转和水平剪切矩阵 theta np.pi/4 M_rotate np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]) M_shear np.array([[1, 0.5], [0, 1]]) # 组合变换矩阵先旋转后剪切 M_combined M_shear M_rotate动画演示原理创建网格点阵grid_points [np.array([x,y]) for x in np.linspace(-5,5,20) for y in np.linspace(-5,5,20)]分步应用变换并记录轨迹用Matplotlib的FuncAnimation生成变换过程动画技术细节矩阵乘法从右向左应用的顺序正对应着变换在时间上的先后顺序3. 神经网络中的矩阵乘法权重变换的几何视角在神经网络的全连接层中矩阵乘法实现了特征空间的高维变换。假设输入向量x∈ℝ³隐藏层权重矩阵W∈ℝ⁴׳则输出hWx∈ℝ⁴可以理解为原始输入空间是3维的如RGB颜色空间经过W变换后映射到4维特征空间权重矩阵的每一行定义了新空间的一个基向量# 模拟神经网络层的变换 W np.random.randn(4,3) # 权重矩阵 x np.array([0.2, 0.5, 0.3]) # 输入向量 h np.tanh(W x) # 激活函数处理后的输出几何解释当输入数据在原始空间形成特定分布时矩阵乘法将其扭曲旋转到新的空间配合非线性激活函数如tanh实现复杂分类边界4. 行列式的可视化空间压缩与膨胀行列式定量描述了线性变换对空间的缩放程度。通过动画展示以下三种典型情况行列式1空间膨胀如det2表示面积变为2倍0det1空间压缩det0降维如3D空间被压扁成平面def plot_transformation(M): # 绘制单位正方形变换前后的对比 square np.array([[0,0], [1,0], [1,1], [0,1], [0,0]]).T transformed M square plt.plot(square[0], square[1], b-) plt.plot(transformed[0], transformed[1], r-) plt.title(fDet {np.linalg.det(M):.2f}) # 示例剪切变换行列式保持1 plot_transformation(np.array([[1, 0.5], [0, 1]]))关键发现当行列式为负时表示空间发生了翻转类似镜像在神经网络中梯度消失/爆炸问题与权重矩阵的行列式密切相关正交矩阵如旋转矩阵的行列式绝对值为1保持空间体积不变5. 特征向量的动态演示变换中的不变量特征向量揭示了线性变换中保持方向不变的轴线。通过以下代码可以可视化寻找特征向量的过程def find_eigen(M, n_vectors20): # 随机生成多个向量观察变换前后方向变化 vectors np.random.randn(2, n_vectors) vectors / np.linalg.norm(vectors, axis0) # 归一化 plt.figure(figsize(10,5)) plt.subplot(121) plt.quiver(*np.zeros_like(vectors), *vectors, anglesxy, scale_unitsxy, scale1) plt.xlim(-1.5,1.5); plt.ylim(-1.5,1.5) transformed M vectors plt.subplot(122) plt.quiver(*np.zeros_like(vectors), *transformed, anglesxy, scale_unitsxy, scale1) plt.xlim(-1.5,1.5); plt.ylim(-1.5,1.5) # 计算并绘制特征向量 eigvals, eigvecs np.linalg.eig(M) for vec in eigvecs.T: plt.plot([0, vec[0]], [0, vec[1]], r-, lw3) # 示例观察剪切矩阵的特征向量 find_eigen(np.array([[1, 0.5], [0.5, 1]]))应用场景主成分分析(PCA)中协方差矩阵的特征向量指向数据方差最大的方向谷歌PageRank算法将网页链接关系表示为矩阵其特征向量对应网页重要性评分量子力学中算符的本征态就是特征向量概念在无限维空间的推广6. 从二维到三维更高维度的几何直觉虽然人类难以直接可视化高维空间但通过二维类比可以建立直觉。在3D图形渲染中模型变换常涉及4×4矩阵包含3D变换和透视投影# 3D旋转矩阵示例绕z轴旋转 def rotation_3d(theta): return np.array([ [np.cos(theta), -np.sin(theta), 0], [np.sin(theta), np.cos(theta), 0], [0, 0, 1] ]) # 组合3D变换旋转缩放 M_3d rotation_3d(np.pi/4) np.diag([1, 0.5, 2])高维理解技巧将矩阵分块处理如4×4矩阵可视为3D变换平移关注行列式的绝对值表示体积变化比例在机器学习中奇异值分解(SVD)提供了分析高维变换的工具7. 交互式学习工具推荐为了加深理解建议通过以下工具进行动手实验可交互的线性代数可视化平台ObservableHQ上的线性代数笔记本GeoGebra的矩阵变换工具Python动画制作要点from matplotlib.animation import FuncAnimation def update(frame): # 计算中间变换矩阵在0到1之间插值 alpha frame / n_frames M alpha * M_final (1-alpha) * np.eye(2) # 更新变换后的图形数据 transformed M original_points line.set_data(transformed[0], transformed[1]) return line, ani FuncAnimation(fig, update, framesn_frames, blitTrue) HTML(ani.to_jshtml())Jupyter Notebook调试技巧使用%matplotlib notebook获得交互式图形结合IPython的display函数实时展示矩阵运算中间结果理解矩阵乘法就像获得了一种数学超能力——当你看到矩阵乘法时眼前能自动浮现空间变形的动态画面。这种几何直觉不仅让公式变得生动更能帮助我们在深度学习、计算机图形学等领域做出更优的设计决策。试着用Python重现文中的代码示例你会发现自己对线性代数的理解将发生质的飞跃。

更多文章