花书《深度学习》代码实现:01 线性代数:基本概念+代码实现基本运算

简介: 当机器学习问题中零和非零元素之间的差异非常重要时,在这些情况下,转而使用在各个位置斜率相同,通常会使用L1范数,也经常作为表示非零元素数目的替代函数。

1 标量、向量、矩阵和张量


2 矩阵和向量相乘


3 单位矩阵和逆矩阵


3.0 单位矩阵


a = np.identity(3) # 三行三列单位矩阵


3.1 矩阵的逆


A = [[1.0,2.0],[3.0,4.0]]
A_inv = np.linalg.inv(A)
print("A 的逆矩阵", A_inv)


3.1 转置


A = np.array([[1.0,2.0],[1.0,0.0],[2.0,3.0]])
A_t = A.transpose()
print("A:", A)
print("A 的转置:", A_t)


3.2 矩阵相加


 a = np.array([[1.0,2.0],[3.0,4.0]])
b = np.array([[6.0,7.0],[8.0,9.0]])
print("矩阵相加: ", a + b)


3.3 矩阵乘法


m1 = np.array([[1.0,3.0],[1.0,0.0]])
m2 = np.array([[1.0,2.0],[5.0,0.0]])
print("按矩阵乘法规则: ", np.dot(m1, m2))
print("按逐元素相乘: ", np.multiply(m1, m2))
print("按逐元素相乘: ", m1*m2)
v1 = np.array([1.0,2.0])
v2 = np.array([4.0,5.0])
print("向量内积: ", np.dot(v1, v2))


4 线性相关和生成子空间


5 范数


5.0 代码实现


5.0.1 向量的L1 L2 无穷范数


a = np.array([1.0,3.0])
print("向量 2 范数", np.linalg.norm(a,ord=2))
print("向量 1 范数", np.linalg.norm(a,ord=1))
print("向量无穷范数", np.linalg.norm(a,ord=np.inf))


5.0.2 矩阵的F范数


a = np.array([[1.0,3.0],[2.0,1.0]])
print("矩阵 F 范数", np.linalg.norm(a,ord="fro"))


5.1 范数的总定义


范数是将向量映射到非负值的函数。直观上来说,向量 x 的范数衡量从原点到点 x 的距离。


5.1.1 定义


d7b2f3f36372405d84b5f53193f91cb0.png


5.1 L1范数


5.1.1 定义


当机器学习问题中零和非零元素之间的差异非常重要时,在这些情况下,转而使用在各个位置斜率相同,通常会使用L1范数,也经常作为表示非零元素数目的替代函数。


5.1.2 数学表达


c539e2a662ae41eba13f33cd7e2358e0.png


5.2 L2范数/欧几里得范数


表示从原点出发到向量 x 确定的点的欧几里得距离。


5.2.1 平方 L2 范数


也经常用来衡量向量的大小,可以简单地通过点积计算,在原点附近增长得十分缓慢。


5.2.2 平方L2范数与L2 范数对比


平方L2范数对x中每个元素的导数只取决于对应的元素。


L2范数对每个元素的导数却和整个向量相关。


5.3 最大范数


5.3.1 含义


表示向量中具有最大幅值的元素的绝对值:


5.3.2 定义


5afe14b444354e21b8112ce01f26ce23.png


5.4 F范数


5.4.1 含义


F范数用来衡量矩阵的大小


5.4.2 数学定义


710c720d21b546aea91a41b5460a46df.png


5.5 用范数表示点积


d9a3be6a951b4fbf93a7de6426734c72.png


6 特殊矩阵


6.1 对角矩阵


只在主对角线上含有非零元素,其他位置都是零。


6.1.1 对角矩阵的含义


通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。


6.1.2 非标准对角矩阵的乘法计算


9a1dd5538ac54ceeb14a832b95cfe4e6.png


6.2 对称矩阵


0604fe92f9124d0eb1583d9ff53946d9.png


6.3 正交矩阵


行向量和列向量是分别标准正交的方阵:


f365cfe1cf274f09815bfd3c75abe7c6.png


6.4 单位向量与正交


75fdfea8a1264e2c8e96dc02188c86db.png


6.5 标准正交


如果这些向量不仅互相正交,并且范数都为1,那么我们称它们是标准正交。


7 特征分解


7.0 代码实现:特征分解


A = np.array([[1.0,2.0,3.0],
[4.0,5.0,6.0],
[7.0,8.0,9.0]])
# 计算特征值
print("特征值:", np.linalg.eigvals(A))
# 计算特征值和特征向量
eigvals,eigvectors = np.linalg.eig(A)
print("特征值:", eigvals)
print("特征向量:", eigvectors)


7.1 定义


将矩阵分解成一组特征向量和特征值。


7.2 计算方法


095fcaa4f5944747b32c6a7272546924.png


7.3 Tip


不是每一个矩阵都可以分解成特征值和特征向量。


每个实对称矩阵都可以分解成实特征向量和实特征值。


c24f8710f28344e782167f188f4b1f05.png



7.4 正定、半正定、负定、半负定矩阵


1.所有特征值都是正数的矩阵被称为正定矩阵。


2.所有特征值都是非负数的矩阵被称为半正定矩阵。


3.所有特征值都是负数的矩阵被称为负定矩阵。


4.所有特征值都是非正数的矩阵被称为半负定矩阵。


8 奇异值分解(singular value decomposition, SVD)


8.0 代码实现奇异值分解


A = np.array([[1.0,2.0,3.0],
[4.0,5.0,6.0]])
U,D,V = np.linalg.svd(A)
print("U:", U)
print("D:", D)
print("V:", V)


8.1 含义


将矩阵分解为奇异向量和奇异值。


8.1 分解计算方法


36d92d200bfa44e78e5932dc5cd87c20.png


9 伪逆


9.1 解决的问题


efeec8692dd14b0fbbd02d90e15929e3.png


如果矩阵A的行数大于列数,那么上述方程可能没有解。如果矩阵A的行数小于列数,那么上述矩阵可能有多个解。


9.2 计算过程


173dad958809417e99bcfaf87812993f.png


10 迹运算


10.1 迹的定义



34d6d5f4cd73458ca2a3581df519edf8.png


10.2 迹运算提供了描述矩阵Frobenius范数的方式:


10cc5d686126422da86086ba0fedc5c8.png


10.3 运算规则


10.3.1 迹运算在转置运算下是不变的


71f2646f0aea4d55a5597246b94bcb15.png


10.3.2 多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的。


f0725dc844b0451180d1dcd8b219e75b.png


10.3.3 循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。


935181a643324a4ebc24ba10a6307b0f.png


10.3.4 标量在迹运算后仍然是它自己


9e26e773316a4ae7b2066a142072da6d.png


11 行列式


11.1 定义


行列式,记作det(A),是一个将方阵A映射到实数的函数。


11.2 行列式的特点


1.行列式等于矩阵特征值的乘积。


2.行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小多少。


3.如果行列式是0,那么空间至少沿着某一维完全收缩,使其失去所有的体积。


4.如果行列式是1,那么这个转换保持空间体积不变。

目录
相关文章
|
9天前
|
机器学习/深度学习 算法 安全
从方向导数到梯度:深度学习中的关键数学概念详解
方向导数衡量函数在特定方向上的变化率,其值可通过梯度与方向向量的点积或构造辅助函数求得。梯度则是由偏导数组成的向量,指向函数值增长最快的方向,其模长等于最速上升方向上的方向导数。这两者的关系在多维函数分析中至关重要,广泛应用于优化算法等领域。
59 36
从方向导数到梯度:深度学习中的关键数学概念详解
|
20天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
44 8
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
170 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
118 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
21天前
|
机器学习/深度学习 算法框架/工具 Python
深度学习的奥秘与实践:从理论到代码
本文将探索深度学习的世界,揭示其背后的原理,并分享如何将这些理论应用到实际编程中。我们将一起踏上一段旅程,从神经网络的基础概念出发,逐步深入到复杂的模型训练和优化技术。你将看到,即使是初学者,也可以实现自己的深度学习项目。
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
89 2
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
通过深度学习实践来理解深度学习的核心概念
通过实践,不仅可以加深对深度学习概念的理解,还能发现理论与实际之间的差距,进而对模型进行改进和优化。实践中遇到的问题(如梯度消失、过拟合、训练效率低等)能促使你深入思考,进而更加全面地掌握深度学习的核心概念。
51 4
|
2月前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码示例
【9月更文挑战第32天】本文将深入探讨深度学习在图像识别领域的应用,包括其原理、技术、优势以及挑战。我们将通过一个简单的代码示例,展示如何使用深度学习技术进行图像识别。无论你是初学者还是有经验的开发者,都可以从中获得启发和帮助。让我们一起探索这个充满无限可能的领域吧!
81 8
|
3月前
|
机器学习/深度学习 分布式计算 数据可视化
对深度学习概念的基础理解与认识
一、神经网络的组成 人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。 这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。神经网络类型众多,其中最为重要的是多层感知机。为了详细地描述神经网络,我们先从最简单的神经网络说起。 感知机 感知机是1957年,由Rosenblatt提出会,是神经网络和支持向量机的基础。 感知机是有生物学上的一个启发,他的参照对象和理论依据可以参照下图:(我们的大脑可以认为是一个神经网络,
对深度学习概念的基础理解与认识
|
3月前
|
机器学习/深度学习 算法框架/工具 Python
深度学习在图像识别中的应用及其代码实现
【9月更文挑战第24天】本文将探讨深度学习在图像识别领域的应用,并展示如何通过代码实现这一过程。我们将介绍深度学习的基本原理,以及它在图像识别中的优势和挑战。然后,我们将通过一个简单的代码示例,展示如何使用深度学习进行图像识别。最后,我们将讨论深度学习在未来图像识别中的潜力和可能的发展方向。