当前位置: 首页 > news >正文

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

目录

一、线性代数的作用

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

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}B
X = 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)

这是最大奇异值:

http://www.lryc.cn/news/575646.html

相关文章:

  • 网络分层模型与协议体系技术研究报告
  • PDF Kit 使用示例(HarmonyOS)
  • dockers virbox 安装
  • 亚矩阵云手机多开赋能Snapchat矩阵运营:技术原理与场景化破局
  • Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示
  • Go语言与云原生:Kubernetes Operator开发全流程
  • 【钓鱼预警】HW主题,无需多言
  • LLM复杂记忆存储-多会话隔离案例实战
  • swiftUI iOS16和iOS15兼容
  • 设计模式 | 原型模式
  • 专线服务器具体是指什么?
  • Nginx配置文件介绍和基本使用
  • Excel处理控件Aspose.Cells教程:如何使用 Java 将图片添加到 Excel
  • 从零构建vue3项目(二)
  • 机器学习在智能农业中的创新应用与未来趋势
  • 永磁无刷电机旋转原理
  • 进程和线程的区别?
  • 128.最长连续序列
  • 本地开发Anchor智能合约:效率翻倍的秘密
  • windows下 tomcat的安装部署
  • 机器学习17-发展历史补充
  • 第一章-人工智能概述-机器学习基础与应用(1/36)
  • spring-ai 1.0.0 (1)模型调用能力
  • day43 复习日(猫狗图像分类)
  • 算法第48天|单调栈:42. 接雨水、84.柱状图中最大的矩形
  • 从零开始理解百度语音识别API的Python实现
  • 抖音图文带货和短视频带货有什么区别
  • 深入解析设备管理系统新趋势:物联网与云原生驱动的智能化实践
  • OpenBayes 一周速览丨Nanonets-OCR-s深度语义理解,精准结构化转换;HLE人类问题推理基准上线,含2.5k题目,助力封闭式评估体系构建
  • COZE API上传文件 直接从前端发送就可以,而通过后端发请求给CozeAPI就不行,为什么?