程序员的数学【线性代数高级】(二)

简介: 本文其实值属于:程序员的数学【AIoT阶段二】 的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 线性代数高级

二、特征值分解

2.1 特征值分解定义与操作

🚩特征值分解,就是将矩阵A分解为如下式:

image.png

import numpy as np
A = np.array([[7, 8, 4, 3],
              [2, 9, 6, 8],
              [1, 6, 9, 6],
              [7, 9, 7, 3]])
# w(Σ)表示特征值,v(Q)表示特征向量
w, v = np.linalg.eig(A)
print('矩阵A的特征值和特征向量:')
display(w, v)
# 根据特征值分解公式可得
print('特征值和特征向量运算反推矩阵A:')
display(v.dot(np.diag(w)).dot(np.linalg.inv(v)))

image.png

image.png

# 实对称矩阵
import numpy as np
B = np.array([[1, 2, 3],
              [2, 5, 8],
              [3, 8, 9]])
# w(Σ)表示特征值,v(Q)表示特征向量
w,v = np.linalg.eig(B)
print('矩阵A的特征值和特征向量:')
display(w, v)
print('特征值和特征向量运算反推矩阵A:')
display(v.dot(np.diag(w)).dot(np.linalg.inv(v)))
display(v.dot(np.diag(w)).dot(v.T))
print('Q是正交矩阵:')
display(np.linalg.inv(v), v.T)

6.png

2.2 特征值分解意义

🚩一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。


当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向,我们通过特征值分解得到的前 N 大特征向量,那么就对应了这个矩阵最主要的 N 个变化方向。我们利用这前 N 个变化方向,就可以近似表达这个矩阵(变换)。也就是说的:提取这个矩阵最重要的特征。


总结一下,特征值分解可以得到特征值与特征向量,特征值大小表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。


不过,特征值分解也有很多的限制,比如说变换的矩阵必须是方阵


三、矩阵和向量求导公式

3.1 常见矩阵求导公式

🚩有六种矩阵求导公式如下:

image.png

3.2 向量求导公式

image.png

3.3 矩阵求导公式

image.png

转置公式如下:

image.png

四、奇异值分解(SVD)

4.1 什么是奇异值分解

🚩特征值分解是一个提取矩阵特征很不错的方法,但是它只适用于方阵。而在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有 m 个学生,每个学生有 n 科成绩,这样形成的一个 m ∗ n  的矩阵就可能不是方阵,我们怎样才能像描述特征值一样描述这样一般矩阵呢的重要特征呢?奇异值分解就是用来干这个事的,奇异值分解是一个能适用于任意的矩阵的一种分解的方法。

image.png

image.png

4.2 奇异值与特征值关系

🚩特征值分解:

image.png

奇异值分解:

image.png

那么奇异值和特征值是怎么对应起来的呢?首先,我们将矩阵 A 的转置 和 A做矩阵乘法,将会得到一个方阵,我们用这个方阵求特征值可以得到:

image.png

对 AAT以及ATA做特征值分解,即可得到奇异值分解的结果。但是样分开求存在一定的问题,由于做特征值分解的时候,特征向量的正负号并不影响结果,比如:

image.png

解决方案:

image.png

五、求解奇异值分解

5.1 方式一

🚩根据上面对应公式,进行奇异值分解:

import numpy as np
A = np.array([[ 3,  4,  5,  5],
              [ 7,  5,  3,  6],
              [ 6,  5,  7,  7],
              [ 4,  9,  8,  9],
              [ 5, 10,  5,  7]])
# 左奇异矩阵
sigma,U = np.linalg.eig(A.dot(A.T))
# 降序排列后,逆序输出
index = np.argsort(sigma)[::-1]
# 将特征值对应的特征向量也对应排好序
sigma = sigma[index]
U = U[:, index]
print('左奇异矩阵如下:')
display(U)
# 计算奇异值矩阵
sigma = np.sqrt([s if s > 0 else 0 for s in sigma])
print('奇异值为:')
display(sigma[:4])
# 计算右奇异矩阵
# 奇异值矩阵特殊,斜对角线有值,其余都是0
# 奇异值矩阵的逆矩阵
sigma_inv = np.diag([1 / s if s > 0 else 0 for s in sigma])
V = sigma_inv.dot((U.T).dot(A))
print('右奇异矩阵如下:')
display(V[:4])
print('使用奇异值分解还原矩阵A:')
U.dot(np.diag(sigma)).dot(V).round(0)

7.png

5.2 方式二

🚩根据,NumPy提供的方法,进行奇异值求解

import numpy as np
A = np.array([[ 3,  4,  5,  5],
              [ 7,  5,  3,  6],
              [ 6,  5,  7,  7],
              [ 4,  9,  8,  9],
              [ 5, 10,  5,  7]])
u, s, v =np.linalg.svd(A) # 奇异值分解
display(u, s, v)

image.png

六、奇异值分解性质

image.png

image.png

右边的三个矩阵相乘的结果将会是一个接近于 A  的矩阵,在这儿,r 越接近于 n ,则相乘的结果越接近于 A 。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵 A ,我们如果想要压缩空间来表示原矩阵 A ,我们存下这里的三个矩阵:U 、Σ 、V 就好了。


说句大白话,称作「奇异值」可能无法顾名思义迅速理解其本质,那咱们换个说法,称作「主特征值」,你可能就迅速了然了。


对于非奇异(满秩)矩阵,对应着特征值;对于奇异矩阵,就需要进行奇异值分解,对应着奇异值。对于奇异矩阵,将A与其转置相乘ATA将会得到一个方阵,再求特征值。值得注意的是,对于非奇异矩阵进行奇异值分解(S V D ),得到的奇异值,其实就是特征值。

import numpy as np
A = np.array([[ 3,  4,  5,  5],
              [ 7,  5,  3,  6],
              [ 6,  5,  7,  7],
              [ 4,  9,  8,  9],
              [ 5, 10,  5,  7]])
u, s, v =np.linalg.svd(A)
m, n = A.shape
Σ = np.concatenate([np.diag(s), np.full(shape = (m - n,n), fill_value = 0)])
print('通过奇异值分解还原原数据:')
display(u.dot(Σ).dot(v))
# 抽取一部分奇异值,近似表示
print('用前r大的奇异值来近似描述矩阵:')
r = 2
display(u[:, :r].dot(Σ[:r, :r]).dot(v[:r]).round(1))

8.png









目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
编码器-解码器架构详解:Transformer如何在PyTorch中工作
本文深入解析Transformer架构,结合论文与PyTorch源码,详解编码器、解码器、位置编码及多头注意力机制的设计原理与实现细节,助你掌握大模型核心基础。建议点赞收藏,干货满满。
1095 3
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】大模型的到来
大模型的兴起,让系统工程师能在前所未有的集群规模上解决复杂工程问题,显著降低成本和时间。本文探讨了大模型的发展历程、技术架构、支持模态及应用领域,特别分析了AI系统与AI基础设施的区别及其对大模型的影响。随着大模型进入爆发期,AI系统的重要性日益凸显,不仅影响着算法的选择与发展,也成为推动大模型研究与应用的关键力量。
1052 0
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】知识蒸馏原理
本文深入解析知识蒸馏(Knowledge Distillation, KD),一种将大型教师模型的知识高效转移至小型学生模型的技术,旨在减少模型复杂度和计算开销,同时保持高性能。文章涵盖知识蒸馏的基本原理、不同类型的知识(如响应、特征、关系知识)、蒸馏方式(离线、在线、自蒸馏)及Hinton的经典算法,为读者提供全面的理解。
1287 2
【AI系统】知识蒸馏原理
|
机器学习/深度学习 算法 Python
机器学习基础:用 Lasso 做特征选择
机器学习基础:用 Lasso 做特征选择
机器学习基础:用 Lasso 做特征选择
|
存储 机器学习/深度学习 缓存
MemLong: 基于记忆增强检索的长文本LLM生成方法
本文介绍了一种名为MemLong的创新长文本处理方法,该方法通过整合外部检索器显著增强了大型语言模型处理长上下文的能力。MemLong采用轻量级设计,利用不可训练的外部记忆库存储历史上下文和知识,并通过检索相关的块级键值对增强模型输入。其技术优势包括分布一致性、高效训练策略及扩展的上下文窗口,能够在单个GPU上处理长达80k个token的文本,同时保持计算效率和内存控制。实验结果显示,MemLong在多个长文本基准数据集上表现出色,显著提升了语言建模能力和上下文学习效果。
1127 1
|
机器学习/深度学习 算法
神经网络的激活函数(一)
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习实践篇 第五章:模型保存与加载
简要介绍pytorch中模型的保存与加载。
603 0
|
机器学习/深度学习 自然语言处理 并行计算
一文快速读懂Transformer
Transformer模型近年来成为自然语言处理(NLP)领域的焦点,其强大的特征提取能力和并行计算优势在众多任务中取得显著效果。本文详细解读Transformer的原理,包括自注意力机制和编码器-解码器结构,并提供基于PyTorch的代码演示,展示了其在文本分类等任务中的应用。
|
机器学习/深度学习 监控 API
基于云计算的机器学习模型部署与优化
【8月更文第17天】随着云计算技术的发展,越来越多的数据科学家和工程师开始使用云平台来部署和优化机器学习模型。本文将介绍如何在主要的云计算平台上部署机器学习模型,并讨论模型优化策略,如模型压缩、超参数调优以及分布式训练。
1772 2
|
机器学习/深度学习 人工智能 自然语言处理
NLP基础知识
自然语言处理(NLP)是计算机科学的交叉领域,涉及语言学、计算机科学和人工智能,用于让计算机理解、生成和处理人类语言。核心任务包括文本预处理、语言模型、文本分类、信息提取和机器翻译。常用工具有NLTK、spaCy和Hugging Face Transformers。深度学习,尤其是Transformer模型,极大地推动了NLP的进步。应用场景广泛,如搜索引擎、智能助手和医疗分析。未来趋势将聚焦多模态学习、跨语言理解和情绪识别,同时追求模型的可解释性和公平性。
1147 1