深度学习作为一门前沿的、应用广泛的学科,对于数学基础的要求非常高。
线性代数
线性代数在深度学习中扮演着至关重要的角色。它不仅是描述和理解数据的基础工具,也是构建和训练神经网络的核心组件。例如,在深度学习中,我们经常需要将图片、文本或其他类型的数据转换为数值向量或矩阵,以便输入到神经网络中进行处理。这些数值向量或矩阵就是线性代数中的基本概念。
此外,线性代数中的矩阵运算、特征值和特征向量等概念,在神经网络的权重更新、数据降维、主成分分析等方面都有着广泛的应用。因此,掌握线性代数的基础知识对于理解深度学习的工作原理和实现深度学习算法都是非常重要的。
标量(Scalar)
标量是一个单一的数值,只有大小没有方向。例如,房间的温度、银行的存款、秤上的体重和头发的根数等,这些都可以被表示为标量。在数学上,标量通常用小写字母(如a, b, c, x, y, z等)表示,而不强调其书写方式(斜体或写体)。在描述标量时,我们通常会说明其数值类型和取值范围,例如实数(real number)或自然数(natural number)。
向量(Vector)
向量是一组有序的标量集合,具有大小和方向。当我们将一组标量排成一行或一列时,就得到了一个向量。这些标量被称为向量的元素或分量。在数学上,向量通常用粗体的小写字母(如a, b, c)或带箭头的字母(如→a, →b, →c)表示。
向量的元素可以通过下标来访问,例如,向量a的第一个元素可以表示为a₁,第二个元素可以表示为a₂,依此类推。假设我们有一个表示班级考试成绩的向量s,其中s₁表示学号为1的同学的成绩,s₂表示学号为2的同学的成绩,依此类推。如果班级有n个同学,则向量s可以表示为[s₁, s₂, ..., sₙ]。
向量的长度(或模)
向量的长度(或模)是一个非负的标量,表示向量在空间中的大小。对于二维向量,其长度可以通过勾股定理计算;对于更高维度的向量,其长度可以通过欧几里得范数(Euclidean norm)来计算,即向量所有元素平方和的平方根。在数学上,向量a的长度或模表示为‖a‖。
向量的方向
除了长度外,向量还具有方向性。方向可以通过向量的元素之间的比例关系来确定。例如,在二维平面上,一个向量的方向可以用它与x轴的夹角来表示;在三维空间中,则需要两个夹角(如与x轴和y轴的夹角)来确定方向。然而,在深度学习和机器学习的很多应用中,我们更多地关注向量的长度和元素之间的相对关系,而不是其具体的方向。
向量的范数(Norm)
向量的范数是衡量向量“大小”或“长度”的一种方式。在深度学习和线性代数中,我们经常使用L2范数(也称为欧几里得范数),它对应于向量在欧几里得空间中的长度。
单位向量(Unit Vector)
单位向量是长度为1的向量。它表示向量在空间中的方向,而不考虑其大小。对于任意非零向量a,其单位向量u可以通过将a除以其范数来得到:
import numpy as np # 定义一个二维向量
a_2d = np.array([3, 4]) # 计算二维向量的L2范数(欧几里得范数)
norm_2d = np.linalg.norm(a_2d)
print(f"The L2 norm of {a_2d} is: {norm_2d}") # 计算二维向量的单位向量
unit_vector_2d = a_2d / norm_2d
print(f"The unit vector of {a_2d} is: {unit_vector_2d}") # 定义一个三维向量
a_3d = np.array([1, 2, 3]) # 计算三维向量的L2范数(欧几里得范数)
norm_3d = np.linalg.norm(a_3d)
print(f"The L2 norm of {a_3d} is: {norm_3d}") # 计算三维向量的单位向量
unit_vector_3d = a_3d / norm_3d
print(f"The unit vector of {a_3d} is: {unit_vector_3d}")
这段代码首先定义了两个向量(一个二维向量和一个三维向量),然后分别计算了它们的L2范数(欧几里得范数)和单位向量,并打印了结果。
内积
几何意义
物理意义
相关性
当两个向量被规范化(即转换为单位向量)后,它们的内积等于它们夹角的余弦值。这可以用来衡量两个向量的相关性:
示例
import numpy as np # 定义两个向量
A = np.array([1, 2])
B = np.array([2, -1]) # 计算内积
dot_product = np.dot(A, B)
print(f"The dot product of A and B is: {dot_product}")
输出将是 0
,与我们的手动计算结果一致。
您正确地指出了向量的外积(叉积)与内积的不同之处。外积(Cross Product)是向量运算中另一个重要的概念,它只在三维空间中定义,并且其结果是一个向量,与原来的两个向量都垂直。
外积(Cross Product)
外积的计算公式
外积的几何意义
示例
import numpy as np # 定义两个三维向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6]) # 计算外积
C = np.cross(A, B) print(f"The cross product of A and B is: {C}")
输出将是外积的坐标表示。
矩阵(Matrix)
矩阵(Matrix)是线性代数中的一个核心概念,它表示为一个矩形数组,其中的元素可以是数字、符号或函数等。
在 Python 的 NumPy 库中,可以使用 numpy.transpose()
函数或简单地使用 .T
属性来进行矩阵转置。例如:
import numpy as np # 创建一个矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 使用 .T 属性进行转置
A_transpose = A.T print("Original matrix A:")
print(A)
print("Transposed matrix A^T:")
print(A_transpose)
对于矩阵乘法,它并不像普通数的乘法那样直观。矩阵乘法要求左侧矩阵的列数必须与右侧矩阵的行数相等,且结果矩阵的行数等于左侧矩阵的行数,列数等于右侧矩阵的列数。乘法运算通过对应行和列的元素乘积求和来进行。
矩阵乘法在 NumPy 中同样可以通过 numpy.dot()
函数或简单的 *
运算符(当操作对象是 NumPy 数组且满足矩阵乘法条件时)来实现。
哈德玛积(Hadamard Product)或元素对应相乘(Element-wise Product)是矩阵或数组的一种特定运算方式。这种运算要求两个矩阵(或数组)具有相同的维度,然后将其对应位置的元素相乘,生成一个新的矩阵(或数组)。
具体来说,如果A和B是两个同阶矩阵,那么A和B的哈德玛积C的每个元素c_{ij}都等于A的对应元素a_{ij}与B的对应元素b_{ij}的乘积,即c_{ij} = a_{ij} × b_{ij}。
哈德玛积与矩阵的普通乘法(如矩阵乘积)不同。普通乘法是将两个矩阵的对应元素分别相乘后再相加,而哈德玛积只是简单地将对应位置的元素相乘,并生成一个新的矩阵。
在Python的NumPy库中,没有直接的函数来执行哈德玛积,但可以通过简单的广播(broadcasting)操作或逐个元素相乘来实现。
张量(Tensor)
张量是更高维度的数组的抽象概念。在零维时,它就是一个标量;一维时,它就是一个向量;二维时,它就是一个矩阵。当维度数超过2时,我们通常称之为张量。在物理和工程领域,张量常用于描述多变量之间的关系,如应力、应变、电磁场等。在深度学习中,张量用于表示多维数据,如图像、文本、音频等。
-
维度与轴:在谈论张量时,我们经常提到“维度”和“轴”。这两个概念有时候会被混淆,但实际上它们是有区别的。维度是指张量中元素的个数(即数组的阶数),而轴则是指张量中的每一个维度(即数组的每一维)。例如,一个3x4的矩阵有2个维度(行和列),每个维度都是一个轴。
-
张量的几何意义:向量可以看作是空间中的一个有方向的量,而矩阵则可以看作是空间中的一个线性变换。张量则可以看作是高位空间中的量,它包含了更多的维度信息。在物理中,张量常用于描述不同物理量之间的关系,如应力张量、电磁张量等。在深度学习中,张量则是我们处理多维数据的基本工具。
-
运算方法:由于向量和矩阵都可以看作是张量的特例(分别是1维和2维的张量),因此向量和矩阵的运算方法也可以推广到张量上。例如,张量也可以进行加法、减法、乘法等运算。这些运算在深度学习中有着广泛的应用。
-
在深度学习中的应用
在深度学习中,张量是数据的基本表示形式。神经网络中的输入、输出和中间层的输出通常都是以张量的形式存在的。例如,在图像识别任务中,输入图像可以被表示为一个3阶张量(高度、宽度和颜色通道);在自然语言处理任务中,文本可以被表示为一个2阶张量(句子长度和词向量维度)。神经网络通过学习和优化这些张量之间的复杂关系来完成各种任务。
总结
-
标量(Scaler):没有方向或大小的一维数据,可以理解为0维张量。
-
向量(Vector):具有大小和方向的量,通常表示为有序数列。在线性代数中,向量可以被看作是一维数组,也可以看作是1维张量。
-
矩阵(Matrix):二维数组,其中每个元素都可以是标量、向量或其他数据。矩阵表示线性变换,也可以看作是2维张量。
-
张量(Tensor):多维数组,可以看作是矩阵的扩展。张量是N维张量,当N > 2时,它不再具有直观的几何解释,但可以表示高位空间中的复杂数据关系。深度学习中的数据,特别是图像、语音、文本等,通常使用张量来表示。
-
深度学习:通过神经网络学习数据中的模式。神经网络中的计算本质上是张量之间的运算。TensorFlow等深度学习框架的名字来源于张量(Tensor),强调了深度学习中的核心计算对象。
-
学习建议:深入理解张量的概念对于学习深度学习至关重要。熟练掌握向量和矩阵的运算有助于理解更复杂的张量运算。此外,要具备一些空间想象力和抽象思维能力,以便理解高位空间中的数据关系。
-
后续内容:下一节将学习关于维基分解(可能是指特征分解、奇异值分解SVD或其他与矩阵分解相关的内容)的知识,这是线性代数和深度学习中非常重要的概念。