《PyTorch面试精华》


1 前言
    1.1  PyTorch安装

    1.2  显卡驱动的困惑

    1.3  CUDA安装注意事项

    1.4  cuDNN的介绍

    1.5  Pytorch Lightning介绍

    1.6  PyTorch学习之道

    1.7  PyTorch快速入门

    1.8  PyTorch调参之道

    1.9  PyTorch调参套件

    1.10  手动创建虚拟环境

2 深度学习之数学基础
    2.1  希腊字母解读

    2.2  梯度的物理意义

    2.3  图解梯度下降法

    2.4  图解梯度上升法

    2.5  自然梯度

    2.6  泰勒公式的介绍

    2.7  信息与信息熵

    2.8  重要性采样

    2.10  欧几里得范数

    2.11  特征值和特征向量

    2.12  似然函数的理解

    2.13  矩阵秩的深刻理解

3 PyTorch入门疑难点
4 PyTorch全局设置
    4.1  全局设置当前设备

    4.2  全局设置浮点精度

5 PyTorch GPU分布式训练
    5.1  PyTorch GPU基础操作

    5.2  DataParallel用法详解

    5.3  GPU分布式训练模型

    5.4  CUDA_VISIBLE_DEVICES

    5.5  device详细说明

    5.6  to(device)和.cuda()

    5.7  CUDA设备索引

    5.8  GPU设备索引

6 向量的基础与核心
    6.1  Tensor的组成与存储

    6.2  Tensor的grad属性

    6.4  Tensor的叠加

    6.5  禁用梯度计算

    6.6  向量的保存和加载

    6.7  参数向量

    6.8  叶子节点

    6.9  detach原理

    6.10  requires_grad属性

    6.11  Tensor与Numpy互换

    6.12  张量cat操作

    6.13  零维张量

    6.15  squeeze/unsqu...函数

    6.16  argmax和max的区别

    6.17  torch.as_tensor的应用

7 神经网络基础
    7.2  PyTorch计算图

    7.3  查看网络权重参数

    7.4  保存模型

    7.5  Adam相关面试题

    7.6  Train模式和Eval模式

    7.7  线性网络

    7.8  双线性网络

    7.9  惰性线性层

    7.10  PyTorch中的自动微分

    7.12  Dropout机制

    7.13  半精度训练

    7.14  Xavier初始化

    7.15  注意力机制

    7.16  Dataset数据处理

    7.17  StepLR学习率调度器

    7.18  词嵌入的理解

    7.19  TensorDataset的使用

    7.20  模型的保存与加载

    7.21  ModuleList和Sequential

    7.22  Batch Normalization介绍

8 计算机视觉基础知识
    8.1  通道的深刻理解

    8.2  1x1卷积的作用

    8.3  特征提取和可视化

    8.4  反卷积的推导

    8.5  理解卷积

    8.7  空洞卷积

    8.8  池化层的作用

    8.9  感受野与特征图

    8.10  NMS算法

    8.11  特征图尺寸计算

9 循环神经网络基础
    9.2  RNN的介绍

10 注意力机制
    10.1  位置编码的作用

    10.2  位置编码的种类

    10.4  Embedding本质理解

    10.6  Transformer VS CNN/RNN

    10.7  ELMo介绍

11 PyTorch归一化
    11.2  层归一化技术详解

12 激活函数相关内容
    12.1  激活函数简介

    12.2  万能逼近定理

    12.3  指数函数的学习

    12.4  Sigmoid函数的介绍

    12.5  Tanh函数的介绍

    12.6  Softmax函数的实现

    12.7  ReLU函数的介绍

    12.8  Leaky Relu函数的介绍

    12.9  ReLu与非线性的理解

    12.10  Parametric ReLU函数

    12.11  ELU函数介绍

    12.12  神经元死亡的问题

13 思考题的答案
    13.1  思考题的答案解密

矩阵的秩:直观与深入的理解

创建时间:2025-11-11 更新时间:2026-01-18 阅读次数:1252 次

1、一句话理解“秩”

矩阵的秩,衡量的是一个矩阵中“真正”有用的信息(线性无关的信息)有多少。 它揭示了矩阵所代表线性变换的核心维度。

  • 秩越高,包含的信息越多,变换能力越强;

  • 秩越低,包含的信息越冗余,变换能力越弱。

2、直观理解“秩”(三种视角)

我们可以从三个最常用的角度来直观感受“秩”到底是什么。


视角1:行视角(独立方程的个数)

想象一个线性方程组。每个方程对应矩阵的一行。

方程组:

$$\left \{ \begin{array}{l} x+y=3 \\ 2x+2y=6 \end{array} \right. $$

对应的系数矩阵是:

$$ \left[ \begin{array}{c} 1 & 1 \\ 2 & 2 \end{array} \right] $$

你会发现,方程2其实就是方程1的2倍。所以这两个方程本质上说的是同一件事,第二个方程没有提供任何新信息。因此,这个矩阵线性无关的行只有1个,它的秩就是1。这意味着,虽然看起来有两个方程,但“真正有效”的方程只有一个。


视角2:列视角(空间的维度)

$$ A = \left[ \begin{array}{c} 1 & 2 \\ 3 & 4 \end{array} \right] $$

它有两个列向量: $$ v_1 = \left[ \begin{array}{c} 1 \\ 3 \end{array} \right] v_2 = \left[ \begin{array}{c} 2 \\ 4 \end{array} \right] $$

这两个向量不在同一条直线上(不是倍数关系),它们是线性无关的。它们可以张成整个二维平面。所以这个矩阵的秩是2。

再看一个秩为1的例子:

$$ B = \left[ \begin{array}{c} 1 & 2 \\ 2 & 4 \end{array} \right] $$

它有两个列向量: $$ v_1 = \left[ \begin{array}{c} 1 \\ 2 \end{array} \right] v_2 = \left[ \begin{array}{c} 2 \\ 4 \end{array} \right] $$

你会发现,它们在同一条直线上。无论你怎么组合它们,都只能得到这条直线上的向量。它们张成的空间是一条一维的直线。所以这个矩阵的秩是1。

重要结论:对于任何矩阵,其行秩(视角1)永远等于其列秩(视角2)。


视角3:变换视角(像空间的维度)

从线性变换的角度看,一个 m×n 的矩阵 A 代表一个从 n 维空间到 m 维空间的变换。秩 = 变换后像空间的维度。什么意思?你把整个 n 维空间里的所有向量都用 A 去乘(变换),得到的所有结果向量会构成一个新的空间,这个新空间叫做“像空间”或者“列空间”(其实就是视角2里列向量张成的空间!)。

3、如何求矩阵的秩?

最常用的方法是高斯消元法(行初等变换),将矩阵化为行最简形或行阶梯形。行最简形/行阶梯形矩阵中,非零行的行数就是矩阵的秩。

求矩阵C的秩,C如下所示: $$ C = \left[ \begin{array}{c} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{array} \right] $$

行变换:R2←R2−4R1R3←R3−7R1,得到如下矩阵:

$$ \left[ \begin{array}{c} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & -6 & -12 \end{array} \right] $$

继续变换:R3←R3−2R2

$$ \left[ \begin{array}{c} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & 0 & 0 \end{array} \right] $$

这就是行阶梯形了。数一下非零行的个数:有2行是非零的。所以,矩阵 C 的秩为2。

这验证了我们之前的理解:虽然矩阵有3行3列,但第三行其实是前两行的线性组合(R3=2R2−R1),是冗余的。真正独立的信息只有2维。

4、秩的重要性质:行秩永远等于其列秩

对于任何矩阵,其行秩(视角1)永远等于其列秩(视角2)

这是一个线性代数中非常基本且重要的问题,其核心思想是:行运算与列运算的对称性

矩阵的行秩定义为矩阵的行向量组张成的向量空间的维度;列秩定义为矩阵的列向量组张成的向量空间的维度。它们的相等性源于一个关键事实:初等行变换不改变行空间和列空间之间的线性关系

我们可以通过矩阵的简化行阶梯形式,这是最常用也是最直观的证明思路。

1、化简矩阵

对任意一个 \( m \times n \) 矩阵 \( A \),我们都可以通过一系列初等行变换将其化为行最简形矩阵 \( R \)。

2、观察行最简形

在行最简形 \( R \) 中,非零行的个数 就是矩阵 \( A \) 的行秩。因为这些非零行是线性无关的,并且构成了 \( A \) 的行空间的一组基。同样在行最简形 \( R \) 中,主元列(即包含主元的列,通常是单位向量 \( e_1, e_2, \cdots \) 的形式)的个数也等于非零行的个数。这些主元列是线性无关的。

3、 关键联系

初等行变换虽然会改变列向量本身,但不会改变列向量之间的线性关系。也就是说,如果在原始矩阵 \( A \) 中,一组列向量是线性相关的(或无关的),那么在变换后的矩阵 \( R \) 中,对应的那组列向量也同样是线性相关的(或无关的)。因此,在 \( R \) 中,那些主元列对应的 \( A \) 中的原始列向量,在 \( A \) 中也是线性无关的。同时,\( R \) 中的任何非主元列都可以由主元列线性表出,这意味着在 \( A \) 中,对应的非主元列也可以由那些与主元列对应的原始列向量线性表出。

4、得出结论

所以,在原始矩阵 \( A \) 中,存在一个由 \( r \) 个列向量组成的极大线性无关组(这些就是与 \( R \) 中主元列对应的列),这个数量 \( r \) 正好等于行最简形 \( R \) 中非零行的个数,也就是 \( A \) 的行秩。因此,列秩(极大线性无关列向量的个数) = 主元列的个数 = 非零行的个数 = 行秩。我们把这个共同的值称为矩阵 \( A \) 的(Rank)。

本教程共117节,当前为第23节!
本教程最新修订时间为:2026-05-08 11:10:53