> 技术文档 > 【机器学习&深度学习】线性代数_线性代数与机器学习

【机器学习&深度学习】线性代数_线性代数与机器学习

目录

一、线性代数的作用

二、 线性代数到底“干了什么”?

2.1 你在学的神经网络:全是线性代数!

2.2 图像处理:图是矩阵,滤波是卷积乘法

2.3 自然语言处理(NLP):词向量是高维向量

2.4 搜索推荐系统:矩阵分解

2.5 物理工程建模

2.6 机器学习核心算法(PCA / SVM / 线性回归)

三、为什么要学它?

四、线性代数操作示例

4.1 执行代码

4.2 运行结果

4.3 代码解析

初始矩阵

 基本运算

高级运算

使用新的特征值计算方法

解线性方程组

奇异值分解

矩阵范数


一、线性代数的作用

✅ 一句话回答:

线性代数是理解现代科技(AI、图像、数据、物理、工程)最基础的语言工具。


二、 线性代数到底“干了什么”?

2.1 你在学的神经网络:全是线性代数!

y = Wx + b
  • W:权重矩阵

  • x:输入向量

  • b:偏置向量

  • 这就是矩阵乘法!

➡️ 所有前向传播、反向传播,通通是线性代数。


2.2 图像处理:图是矩阵,滤波是卷积乘法

  • 一张图片是 H×W×C的张量

  • 模糊、锐化、边缘检测,本质是线性代数里的 卷积核操作

  • 图像压缩(比如 JPEG)背后是奇异值分解(SVD)


2.3 自然语言处理(NLP):词向量是高维向量

  • “苹果” 和 “香蕉” 都是 300 维向量

  • 判断它们是否相似 → 向量点积、夹角 → 线性代数


2.4 搜索推荐系统:矩阵分解

  • 用户-商品评分矩阵 → 用 SVD 分解 → 推荐新商品给用户


2.5 物理工程建模

  • 电路、力学、弹性系统、图结构,都能用线性代数建模

  • 大型工业仿真:用稀疏矩阵、线性方程组模拟


2.6 机器学习核心算法(PCA / SVM / 线性回归)

  • PCA(主成分分析):降维,用的是协方差矩阵的特征值分解

  • SVM 最大间隔超平面:点积、投影、线性变换


三、为什么要学它?

原因 解释 📐 理解几何 向量、线性变换、投影、旋转、缩放 💡 打通 AI 底层原理 矩阵乘法、求导、梯度下降、SVD、PCA 🧰 成为“算法工程师”必修技能 你不会线代,很多模型你只能调,不会造 💻 代码抽象 你写的 torch.mm(A, B) 背后就是线代的乘法规则 📊 数据处理 几乎所有数据都要用矩阵形式存储和处理

 

🧭 一个比喻:

如果数学是科学的语言,那线性代数就是工程和智能的语法。

不懂它,就像不会语法的人在看英文小说,全靠猜。

学习线性代数不是为了考试、也不是为了照搬公式,
而是让你能看懂数据、图像、模型背后的世界——它们其实都是线性的!


四、线性代数操作示例

4.1 执行代码

import torch# ==============================# 线性代数# ==============================print(\"\\n\" + \"=\" * 50)print(\"线性代数操作示例\")print(\"=\" * 50)# 矩阵运算A = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)B = torch.tensor([[5, 6], [7, 8]], dtype=torch.float32)# 基本运算print(f\"矩阵加法:\\n{A + B}\")print(f\"元素乘法:\\n{A * B}\")print(f\"矩阵乘法:\\n{torch.mm(A, B)}\")# 高级运算print(f\"\\n行列式: {torch.det(A):.2f}\")print(f\"逆矩阵:\\n{torch.inverse(A)}\")# 使用新的特征值计算方法eigenvalues = torch.linalg.eigvals(A)print(f\"特征值:\\n{eigenvalues}\")# 解线性方程组# AX = B → X = A^{-1}BX = torch.mm(torch.inverse(A), B)print(f\"\\n解线性方程组 AX=B:\\n{X}\")# 奇异值分解U, S, Vh = torch.linalg.svd(A)print(f\"\\n奇异值分解:\")print(f\"U:\\n{U}\\nS:\\n{torch.diag(S)}\\nVh (共轭转置):\\n{Vh}\")# 矩阵范数print(f\"\\nFrobenius范数: {torch.linalg.matrix_norm(A, ord=\'fro\'):.2f}\")print(f\"谱范数: {torch.linalg.matrix_norm(A, ord=2):.2f}\")

4.2 运行结果

==================================================线性代数操作示例==================================================矩阵加法:tensor([[ 6., 8.], [10., 12.]])元素乘法:tensor([[ 5., 12.], [21., 32.]])矩阵乘法:tensor([[19., 22.], [43., 50.]])行列式: -2.00逆矩阵:tensor([[-2.0000, 1.0000], [ 1.5000, -0.5000]])特征值:tensor([-0.3723+0.j, 5.3723+0.j])解线性方程组 AX=B:tensor([[-3., -4.], [ 4., 5.]])奇异值分解:U:tensor([[-0.4046, -0.9145], [-0.9145, 0.4046]])S:tensor([[5.4650, 0.0000], [0.0000, 0.3660]])Vh (共轭转置):tensor([[-0.5760, -0.8174], [ 0.8174, -0.5760]])Frobenius范数: 5.48谱范数: 5.46

4.3 代码解析

初始矩阵
A = [[1, 2], [3, 4]]B = [[5, 6], [7, 8]]

 基本运算

1. 🔸 矩阵加法 A + B

2. 🔸 元素乘法 A * B

(不是矩阵乘法,是对应元素相乘)

3. 🔸 矩阵乘法 torch.mm(A, B)


高级运算

4. 🔸 行列式 torch.det(A)

5. 🔸 逆矩阵 torch.inverse(A)

▲第一步:原A矩阵

▲第二步:二阶矩阵求逆公式

对一个二维矩阵

只要它的行列式不为 0,就可以求逆,公式如下:

代入 A 的值:

▲第三步:计算行列式

▲第四步:套用公式求逆

详细写法:

▲验证

A × A⁻¹ 应该是单位矩阵


使用新的特征值计算方法

6. 🔸 特征值 torch.linalg.eigvals(A)

PyTorch 使用数值方法求解:

手动求解:

化简得:

约为:


解线性方程组

7. 🔸 解线性方程组 AX = B


奇异值分解

总结(一句话记忆):

奇异值分解就是把一个矩阵拆成:先旋转 → 再拉伸 → 再旋转回来的过程。

 📦 举个例子直观对比:

内容 说明 原始矩阵 把单位向量“旋转”成 A 的主方向 A 在两个主方向上的“拉伸强度” 原始坐标要如何旋转才能对齐 A 的方向

8. 🔸 奇异值分解 U, S, Vh = torch.linalg.svd(A)

得到了三个结果:

  • U 是一个正交矩阵(左奇异向量)

  • S 是一个一维向量(奇异值)

  • Vh 是另一个正交矩阵的共轭转置(右奇异向量的转置)

手动分解

对矩阵:

用奇异值分解拆成:

我们要知道:

  • Σ:主对角线是两个奇异值

  • V:来自 的特征向量

  • U:由 的特征向量组成

  • 所有特征值的平方根就是奇异值

🧮 步骤一:计算 

🧮 步骤二:对 求特征值

设:

展开:

推导公式

解:

🧮步骤三:奇异值就是特征值的平方根!

这就得到了:

这和 PyTorch 给出的数完全一致!

🧮步骤四:找 V(右奇异向量)

它们就是 对应的特征向量。你可以用如下方法算:

假设特征值是 λ=29.87,代入:

我们已经求出:

我们要解这个特征方程:

比如对于最大特征值 ,我们要求解:

解出这个方程组,可以得到 v1,v2比例关系,比如:

再进行单位化(模长为 1),就组成了 V的列向量。

解这个线性方程组即可得到 v1, v2,再正交化就是 V。过程与特征向量计算一样。

🧮步骤五:找 U(左奇异向量)

使用公式:

这也能求出 U 的列向量。

S = [5.4649, 0.3659] # 奇异值Vh = [[-0.5760, -0.8174], [-0.8174, 0.5760]] # V 的转置

 

🎉 最终理解:

步骤 数字来源 Σ 来自 的特征值开根号 V 是 的特征向量 U 用公式 计算
初始矩阵:A = [[1, 2], [3, 4]]B = [[5, 6], [7, 8]]奇异值分解:U:tensor([[-0.4046, -0.9145], [-0.9145, 0.4046]])S:tensor([[5.4650, 0.0000], [0.0000, 0.3660]])Vh (共轭转置):tensor([[-0.5760, -0.8174], [ 0.8174, -0.5760]])

矩阵范数

9. 🔸 Frobenius范数 torch.linalg.matrix_norm(A, ord=\'fro\')

10. 🔸 谱范数(2范数) torch.linalg.matrix_norm(A, ord=2)

这是最大奇异值: