深度学习入门教程(三)- 线性代数教程

深度学习入门教程(三)- 线性代数教程

1. 特征值、特征向量基础概念

1.1 什么是特征向量和特征值

理论: 对于一个方阵A,如果存在非零向量v和标量λ,使得Av = λv,那么v称为A的特征向量,λ称为对应的特征值。

数学案例:

矩阵 A = [[3, 1], [0, 2]],向量 v = [1, 0]

计算:Av = [[3, 1], [0, 2]] × [1, 0] = [3, 0] = 3 × [1, 0] = 3v

因此,v = [1, 0] 是特征向量,λ = 3 是特征值。

物理意义: 特征向量表示矩阵变换中"方向不变"的向量,特征值表示该方向上的缩放倍数。

案例:

  • 在人脸识别中,特征向量代表主要面部特征方向
  • 在数据压缩中,特征值大的方向保留更多信息
  • 在机器学习中,PCA主成分分析就是基于特征值分解

1.2 特征向量的几何理解

理论: 当矩阵作用在向量上时,大多数向量的方向会发生改变,但特征向量只是被拉伸或压缩,方向保持不变。

数学案例:

矩阵 A = [[2, 1], [1, 2]]

  • 普通向量 u = [1, 2]:Au = [4, 5](方向改变)
  • 特征向量 v = [1, 1]:Av = [3, 3] = 3[1, 1](方向不变,只是缩放)

案例: 想象一个椭圆变换:

  • 红色向量:方向和大小都改变 - 不是特征向量
  • 绿色向量:只改变大小,方向不变 - 是特征向量

2. 标量运算

2.1 标量基础

理论: 标量是只有大小、没有方向的量,是0维张量。

数学案例:

标量 a = 5, b = 3

  • 加法:a + b = 5 + 3 = 8
  • 乘法:a × b = 5 × 3 = 15
  • 除法:a ÷ b = 5 ÷ 3 = 1.67

案例: 温度、重量、价格等都是标量。

python 复制代码
import torch
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print(x + y)  # 加法
print(x * y)  # 乘法
print(x / y)  # 除法
print(x ** y) # 幂运算

输出:

复制代码
tensor([5.])
tensor([6.])
tensor([1.5000])
tensor([9.])

应用场景: 学习率、损失函数值、准确率等都是标量。

3. 向量运算

3.1 向量基础概念

理论: 向量是具有大小和方向的量,是1维张量。向量可以表示为有序的标量序列。

数学案例:

向量 v = [3, 4]

  • 长度:|v| = √(3² + 4²) = √(9 + 16) = √25 = 5
  • 方向:从原点(0,0)指向点(3,4)
  • 单位向量:v/|v| = [3/5, 4/5] = [0.6, 0.8]

几何意义: 向量可以看作从原点指向某个点的箭头。

案例:

  • 物理:力、速度、加速度
  • 机器学习:特征向量、词向量、梯度向量

3.2 向量的标量倍数

理论: 向量与标量相乘,结果是一个与原向量方向相同(或相反)的向量,长度发生改变。

数学表示: c = αb,其中α是标量,b是向量

数学案例:

向量 b = [2, 3],标量 α = 2.5

  • 结果:c = 2.5 × [2, 3] = [5, 7.5]
  • 原向量长度:|b| = √(2² + 3²) = √13 ≈ 3.6
  • 新向量长度:|c| = √(5² + 7.5²) = √81.25 ≈ 9.0 = 2.5 × 3.6

案例:

  • α > 1:向量拉长
  • 0 < α < 1:向量缩短
  • α < 0:向量反向

4. 矩阵运算

4.1 矩阵基础概念

理论: 矩阵是二维数组,可以看作是向量的向量。矩阵用于表示线性变换。

数学案例:

矩阵 A = [[1, 2], [3, 4]]

  • 行向量:第1行 = [1, 2],第2行 = [3, 4]
  • 列向量:第1列 = [1, 3],第2列 = [2, 4]
  • 元素:A[1,2] = 2,A[2,1] = 3

应用场景:

  • 图像处理:图像是像素矩阵
  • 神经网络:权重矩阵
  • 数据分析:数据表格

4.2 矩阵范数

理论: 矩阵的范数用于衡量矩阵的"大小"或"长度",是矩阵元素的某种度量。

数学案例:

矩阵 A = [[3, 4], [0, 5]]

  • F范数:||A||_F = √(3² + 4² + 0² + 5²) = √(9 + 16 + 0 + 25) = √50 ≈ 7.07
  • L1范数:||A||_1 = |3| + |4| + |0| + |5| = 12
  • L2范数:||A||_2 = √(3² + 4² + 0² + 5²) = √50 ≈ 7.07

重要性: 在机器学习中,范数常用于正则化,防止过拟合。

案例:

  • L1范数:权重稀疏化
  • L2范数:权重平滑化
  • F范数:整体矩阵大小度量

5. 线性代数PyTorch实现

5.1 标量操作

理论: 标量由只有一个元素的张量表示。

数学案例:

标量 x = 3.0, y = 2.0

  • 加法:x + y = 3.0 + 2.0 = 5.0
  • 乘法:x * y = 3.0 * 2.0 = 6.0
  • 除法:x / y = 3.0 / 2.0 = 1.5
  • 幂运算:x ** y = 3.0 ** 2.0 = 9.0

实际应用: 损失函数计算、学习率设置、阈值判断。

python 复制代码
import torch
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print(x + y)
print(x * y)
print(x / y)
print(x ** y)

5.2 向量操作

5.2.1 创建向量

理论: 可以将向量视为标量值组成的列表。

数学案例:

向量 x = [0, 1, 2, 3]

  • 包含4个元素
  • 第1个元素:x[0] = 0
  • 第4个元素:x[3] = 3
  • 向量长度:4

案例: 创建特征向量、标签向量、权重向量等。

python 复制代码
import torch
x = torch.arange(4)
print(x)

输出:

复制代码
tensor([0, 1, 2, 3])
5.2.2 访问向量元素

理论: 通过索引访问向量中的特定元素。

数学案例:

向量 x = [10, 20, 30, 40]

  • 访问第1个元素:x[0] = 10
  • 访问第3个元素:x[2] = 30
  • 访问最后一个元素:x[3] = 40
  • 索引从0开始计数

实际应用: 提取特定特征、获取预测结果、调试模型参数。

python 复制代码
import torch
x = torch.arange(4)
print(x[3])  # 索引从0开始

输出:

复制代码
tensor(3)
5.2.3 向量长度

理论: 向量的长度表示向量中元素的个数。

数学案例:

向量 x = [1, 2, 3, 4, 5]

  • 向量长度:len(x) = 5
  • 表示这个向量有5个元素
  • 注意:这里的"长度"是元素个数,不是向量的几何长度

应用: 确定特征维数、批处理大小、序列长度。

python 复制代码
import torch
x = torch.arange(4)
print(len(x))

输出:

复制代码
4
5.2.4 向量维度

理论: 向量的shape属性显示其维度信息。

数学案例:

向量 x = [1, 2, 3, 4]

  • 形状:x.shape = (4,)
  • 表示这是一个4维向量(4个元素)
  • 括号中的逗号表示这是一个1维张量

重要性: 在深度学习中,维度匹配是关键,防止维度不匹配错误。

python 复制代码
import torch
x = torch.arange(4)
print(x.shape)

输出:

复制代码
torch.Size([4])

5.3 矩阵操作

5.3.1 创建矩阵

理论: 通过指定行数m和列数n创建m×n矩阵。

数学案例:

创建3×4矩阵:

A = [[0, 1, 2, 3],

4, 5, 6, 7\], \[8, 9, 10, 11\]

  • 3行4列,共12个元素
  • 元素按行优先顺序排列:0到11

应用场景: 创建权重矩阵、数据批次、图像矩阵。

python 复制代码
import torch
A = torch.arange(20).reshape(5,4)
print(A)

输出:

复制代码
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
5.3.2 矩阵转置

理论: 矩阵转置是将矩阵的行和列互换。

数学表示: AT,其中(AT){ij} = A{ji}

数学案例:

矩阵 A = [[1, 2, 3], [4, 5, 6]]

转置 A^T = [[1, 4], [2, 5], [3, 6]]

  • 原矩阵:2×3矩阵
  • 转置后:3×2矩阵
  • 验证:A[1,3] = 3,A^T[3,1] = 3

应用: 神经网络中的权重转置、协方差矩阵计算。

python 复制代码
import torch
A = torch.arange(20).reshape(5,4)
print(A)
print(A.T)  # 矩阵转置

输出:

复制代码
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
tensor([[ 0,  4,  8, 12, 16],
        [ 1,  5,  9, 13, 17],
        [ 2,  6, 10, 14, 18],
        [ 3,  7, 11, 15, 19]])
5.3.3 对称矩阵

理论: 对称矩阵等于其转置,即A = A^T。

数学案例:

对称矩阵 A = [[2, 1, 3], [1, 4, 2], [3, 2, 5]]

  • 转置 A^T = [[2, 1, 3], [1, 4, 2], [3, 2, 5]]
  • 验证:A = A^T,A[1,2] = A[2,1] = 1,A[1,3] = A[3,1] = 3

重要性: 在机器学习中,许多矩阵(如协方差矩阵、核矩阵)都是对称的。

特性: 对称矩阵的特征值都是实数,特征向量相互正交。

python 复制代码
import torch
B = torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(B)
print(B.T)
print(B == B.T)  # 检查是否对称

输出:

复制代码
tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])
tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])
tensor([[True, True, True],
        [True, True, True],
        [True, True, True]])
5.3.4 多维张量

理论: 就像向量是标量的推广,矩阵是向量的推广一样,可以构建更多轴的数据结构。

数学案例:

3维张量 X = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

  • 形状:(2, 2, 2) - 2个2×2的矩阵
  • 访问元素:X[0,1,0] = 3,X[1,0,1] = 6
  • 可以理解为2张2×2的图像或特征图

应用:

  • 3维:批处理的图像数据 (批次×高×宽)
  • 4维:彩色图像批次 (批次×通道×高×宽)
  • 5维:视频数据 (批次×时间×通道×高×宽)
python 复制代码
import torch
X = torch.arange(24).reshape(2,3,4)
print(X)

输出:

复制代码
tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])
5.3.5 矩阵克隆

理论: 克隆创建矩阵的独立副本,修改副本不会影响原矩阵。

数学案例:

原矩阵 A = [[1, 2], [3, 4]]

克隆矩阵 B = A.clone() = [[1, 2], [3, 4]]

  • 修改B[0,0] = 10 → B = [[10, 2], [3, 4]]
  • 原矩阵A不变:A = [[1, 2], [3, 4]]

重要性: 在深度学习中,避免意外修改原始数据或模型参数。

python 复制代码
import torch
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = A.clone()  # 创建独立副本
print(A)
print(A+B)

输出:

复制代码
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.],
        [12., 13., 14., 15.],
        [16., 17., 18., 19.]])
tensor([[ 0.,  2.,  4.,  6.],
        [ 8., 10., 12., 14.],
        [16., 18., 20., 22.],
        [24., 26., 28., 30.],
        [32., 34., 36., 38.]])
5.3.6 哈达玛积(逐元素相乘)

理论: 两个矩阵的逐元素相乘,也称为哈达玛积,符号为⊙。

数学案例:

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

哈达玛积:A⊙B = [[1×5, 2×6], [3×7, 4×8]] = [[5, 12], [21, 32]]

  • 对应位置元素相乘:A[i,j] × B[i,j] = C[i,j]

应用:

  • 注意力机制中的权重应用
  • 特征选择和屏蔽
  • 激活函数的逐元素操作
python 复制代码
import torch
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = A.clone()
print(A)
print(A*B)  # 逐元素相乘

输出:

复制代码
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.],
        [12., 13., 14., 15.],
        [16., 17., 18., 19.]])
tensor([[  0.,   1.,   4.,   9.],
        [ 16.,  25.,  36.,  49.],
        [ 64.,  81., 100., 121.],
        [144., 169., 196., 225.],
        [256., 289., 324., 361.]])
5.3.7 广播机制

理论: 广播允许不同形状的张量进行运算,自动扩展较小的张量。

数学案例:

矩阵 A = [[1, 2], [3, 4]],标量 b = 5

广播相加:A + b = [[1+5, 2+5], [3+5, 4+5]] = [[6, 7], [8, 9]]

  • 标量5自动扩展为 [[5, 5], [5, 5]] 参与运算

应用:

  • 为整个矩阵添加偏置
  • 标准化操作
  • 节省内存和计算资源
python 复制代码
import torch
a = 2
X = torch.arange(24).reshape(2,3,4)
print(a + X)
print((a * X).shape)

输出:

复制代码
tensor([[[ 2,  3,  4,  5],
         [ 6,  7,  8,  9],
         [10, 11, 12, 13]],

        [[14, 15, 16, 17],
         [18, 19, 20, 21],
         [22, 23, 24, 25]]])
torch.Size([2, 3, 4])

5.4 求和与平均值操作

5.4.1 向量求和

理论: 计算向量中所有元素的和。

数学案例:

向量 x = [1, 2, 3, 4]

求和:sum(x) = 1 + 2 + 3 + 4 = 10

  • 这是一个标量结果

应用: 损失函数计算、统计分析、特征聚合。

python 复制代码
import torch
X = torch.arange(4,dtype=torch.float32)
print(X)
print(X.sum())

输出:

复制代码
tensor([0., 1., 2., 3.])
tensor(6.)
5.4.2 矩阵求和

理论: 计算任意形状张量的所有元素和。

数学案例:

矩阵 A = [[1, 2], [3, 4]]

矩阵求和:sum(A) = 1 + 2 + 3 + 4 = 10

  • 把所有元素加起来得到单个标量值

应用: 计算总损失、数据统计、模型评估。

python 复制代码
import torch
A = torch.arange(20*2).reshape(2,5,4)
print(A.shape)
print(A.sum())

输出:

复制代码
torch.Size([2, 5, 4])
tensor(780)
5.4.3 按轴求和(降维)

理论: 指定轴进行求和,会减少该轴的维度。

重要概念:

  • axis=0:对第一个维度求和
  • axis=1:对第二个维度求和
  • axis=[0,1]:对多个维度求和

数学案例:

矩阵 A = [[1, 2], [3, 4]]

  • axis=0求和:[1+3, 2+4] = [4, 6](按列求和)
  • axis=1求和:[1+2, 3+4] = [3, 7](按行求和)
  • 全部求和:1+2+3+4 = 10

应用:

  • 计算每个特征的总和
  • 数据聚合
  • 注意力权重归一化
python 复制代码
import torch
A = torch.arange(20*2).reshape(2,5,4)
print(A)
A_sum_axis0 = A.sum(axis=0)  # 对第一个维度求和
print(A_sum_axis0)
print(A_sum_axis0.shape)

输出:

复制代码
tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11],
         [12, 13, 14, 15],
         [16, 17, 18, 19]],

        [[20, 21, 22, 23],
         [24, 25, 26, 27],
         [28, 29, 30, 31],
         [32, 33, 34, 35],
         [36, 37, 38, 39]]])
tensor([[20, 22, 24, 26],
        [28, 30, 32, 34],
        [36, 38, 40, 42],
        [44, 46, 48, 50],
        [52, 54, 56, 58]])
torch.Size([5, 4])
5.4.4 平均值计算

理论: 平均值等于元素和除以元素个数。

数学案例:

矩阵 A = [[1, 2], [3, 4]]

  • 总平均值:(1+2+3+4)/4 = 10/4 = 2.5
  • 按列平均:[(1+3)/2, (2+4)/2] = [2, 3]
  • 按行平均:[(1+2)/2, (3+4)/2] = [1.5, 3.5]

应用:

  • 数据标准化
  • 性能指标计算
  • 特征统计
python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.mean())
print(A.numel())
print(A.sum()/A.numel())

输出:

复制代码
tensor(9.5000)
20
tensor(9.5000)
5.4.5 保持维度的求和

理论: 使用keepdims=True保持原始维度,便于后续广播操作。

数学案例:

矩阵 A = [[1, 2], [3, 4]]

  • 普通按行求和:[1+2, 3+4] = [3, 7](形状:[2])
  • 保持维度求和:[[1+2], [3+4]] = [[3], [7]](形状:[2,1])
  • 便于后续广播:A/sum_A 可以直接进行

重要性: 在深度学习中,维度一致性非常重要,特别是在归一化和注意力机制中。

python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdims=True)
print(sum_A)
print(sum_A.shape)

输出:

复制代码
tensor([[ 6.],
        [22.],
        [38.],
        [54.],
        [70.]])
torch.Size([5, 1])
5.4.6 广播应用示例

理论: 利用keepdims保持的维度进行广播操作。

数学案例:

矩阵 A = [[1, 2], [3, 4]],行和 sum_A = [[3], [7]]

广播除法:A/sum_A = [[1/3, 2/3], [3/7, 4/7]] = [[0.33, 0.67], [0.43, 0.57]]

  • 每行都除以该行的总和,实现行归一化

应用:

  • 行归一化
  • 列归一化
  • 概率分布归一化
python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdims=True)
print(A/sum_A)  # 每行归一化

输出:

复制代码
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
        [0.1818, 0.2273, 0.2727, 0.3182],
        [0.2105, 0.2368, 0.2632, 0.2895],
        [0.2222, 0.2407, 0.2593, 0.2778],
        [0.2286, 0.2429, 0.2571, 0.2714]])
5.4.7 累积求和

理论: 计算某个轴上的累积和,保持原始形状。

数学案例:

矩阵 A = [[1, 2], [3, 4]]

按行累积和(axis=0):

  • 第1行:[1, 2]
  • 第2行:[1+3, 2+4] = [4, 6]
  • 结果:[[1, 2], [4, 6]]

应用:

  • 时间序列的累积统计
  • 前缀和计算
  • 渐进式数据分析
python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.cumsum(axis=0))

输出:

复制代码
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  6.,  8., 10.],
        [12., 15., 18., 21.],
        [24., 28., 32., 36.],
        [40., 45., 50., 55.]])

5.5 向量和矩阵的乘积运算

5.5.1 向量点积

理论: 点积是两个向量对应元素相乘后求和的结果。

数学表示: x·y = Σ(x_i * y_i)

数学案例:

向量 x = [1, 2, 3],向量 y = [4, 5, 6]

点积:x·y = 1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32

  • 几何验证:|x| = √14 ≈ 3.74,|y| = √77 ≈ 8.77
  • 夹角:cos(θ) = 32/(3.74×8.77) ≈ 0.976

几何意义: 点积等于两向量长度的乘积再乘以夹角的余弦值。

应用:

  • 相似度计算
  • 投影长度计算
  • 神经网络中的线性变换
python 复制代码
import torch
x = torch.arange(4,dtype=torch.float32)
y = torch.ones(4, dtype=torch.float32)
print(x)
print(y)
print(torch.dot(x,y))

输出:

复制代码
tensor([0., 1., 2., 3.])
tensor([1., 1., 1., 1.])
tensor(6.)

等价计算:

python 复制代码
import torch
x = torch.arange(4,dtype=torch.float32)
y = torch.ones(4, dtype=torch.float32)
print(torch.sum(x*y))  # 等价于点积

输出:

复制代码
tensor(6.)
5.5.2 矩阵-向量乘积

理论: 矩阵A(m×n)与向量x(n×1)的乘积得到向量(m×1)。

计算方式: 结果的第i个元素是A的第i行与向量x的点积。

数学案例:

矩阵 A = [[1, 2], [3, 4]],向量 x = [2, 1]

矩阵-向量乘积:Ax = [[1×2 + 2×1], [3×2 + 4×1]] = [[4], [10]]

  • 第1行:[1, 2]·[2, 1] = 1×2 + 2×1 = 4
  • 第2行:[3, 4]·[2, 1] = 3×2 + 4×1 = 10

应用:

  • 线性变换
  • 神经网络的前向传播
  • 线性回归预测
python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
x = torch.arange(4,dtype=torch.float32)
print(A.shape)
print(x.shape)
print(torch.mv(A,x))  # 矩阵-向量乘积

输出:

复制代码
torch.Size([5, 4])
torch.Size([4])
tensor([ 14.,  38.,  62.,  86., 110.])
5.5.3 矩阵-矩阵乘积

理论: 矩阵乘法是线性代数的核心操作,A(m×k)乘以B(k×n)得到C(m×n)。

计算规则: C[i,j] = Σ(A[i,k] * B[k,j])

数学案例:

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

矩阵乘积:C = A×B = [[1×5+2×7, 1×6+2×8], [3×5+4×7, 3×6+4×8]]

= [[5+14, 6+16], [15+28, 18+32]]

= [[19, 22], [43, 50]]

应用:

  • 多层神经网络的权重组合
  • 数据变换
  • 图像处理中的卷积操作
python 复制代码
import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = torch.ones(4,3)
print(A)
print(B)
print(torch.mm(A,B))  # 矩阵-矩阵乘积

输出:

复制代码
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.],
        [12., 13., 14., 15.],
        [16., 17., 18., 19.]])
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
tensor([[ 6.,  6.,  6.],
        [22., 22., 22.],
        [38., 38., 38.],
        [54., 54., 54.],
        [70., 70., 70.]])

5.6 向量和矩阵的范数

5.6.1 L2范数(欧几里得范数)

理论: L2范数是向量元素平方和的平方根。

数学表示: ||x||₂ = √(Σx²ᵢ)

数学案例:

向量 x = [3, 4, 5]

L2范数:||x||₂ = √(3² + 4² + 5²) = √(9 + 16 + 25) = √50 ≈ 7.07

  • 这表示向量x的长度约为7.07个单位

几何意义: 表示向量的长度或距离。

应用:

  • 梯度裁剪
  • 权重衰减
  • 距离度量
python 复制代码
import torch
u = torch.tensor([3.0,-4.0])
print(torch.norm(u))  # L2范数

输出:

复制代码
tensor(5.)
5.6.2 L1范数(曼哈顿范数)

理论: L1范数是向量元素绝对值的和。

数学表示: ||x||₁ = Σ|xᵢ|

数学案例:

向量 x = [3, -4, 5]

L1范数:||x||₁ = |3| + |-4| + |5| = 3 + 4 + 5 = 12

  • 这表示从原点到目标点,沿坐标轴走的最短距离为12个单位

几何意义: 表示沿坐标轴的"城市街区"距离。

应用:

  • 稀疏性正则化
  • 特征选择
  • 鲁棒性统计
python 复制代码
import torch
u = torch.tensor([3.0,-4.0])
print(torch.abs(u).sum())  # L1范数

输出:

复制代码
tensor(7.)
5.6.3 弗罗贝尼乌斯范数

理论: 矩阵的弗罗贝尼乌斯范数是所有元素平方和的平方根。

数学表示: ||X||_F = √(ΣΣx²ᵢⱼ)

数学案例:

矩阵 X = [[1, 2], [3, 4]]

弗罗贝尼乌斯范数:||X||_F = √(1² + 2² + 3² + 4²) = √(1 + 4 + 9 + 16) = √30 ≈ 5.48

  • 这相当于把矩阵展开成向量[1, 2, 3, 4]再计算L2范数

应用:

  • 矩阵相似度度量
  • 矩阵正则化
  • 低秩近似误差评估
python 复制代码
import torch
print(torch.norm(torch.ones((4,9))))  # 弗罗贝尼乌斯范数

输出:

复制代码
tensor(6.)

6. 线性代数在机器学习中的应用

6.1 数据表示

向量化:

  • 文本:词向量、句子向量
  • 图像:像素向量、特征向量
  • 用户行为:行为向量、偏好向量

6.2 模型参数

权重矩阵:

  • 神经网络:每层的权重矩阵
  • 线性回归:系数向量
  • 支持向量机:权重向量

6.3 优化算法

梯度向量:

  • 梯度下降:使用梯度向量更新参数
  • 反向传播:计算损失函数的梯度
  • 正则化:使用范数约束参数

6.4 数据处理

矩阵运算:

  • 数据标准化:使用均值和标准差矩阵
  • 特征工程:特征变换矩阵
  • 降维:PCA变换矩阵

6.5 深度学习应用

核心操作:

  • 线性层:矩阵-向量乘积
  • 批处理:矩阵-矩阵乘积
  • 注意力机制:点积计算相似度
  • 归一化:使用范数标准化

总结

线性代数是机器学习和深度学习的数学基础,掌握以下核心概念至关重要:

  1. 基本概念:标量、向量、矩阵、张量的定义和性质
  2. 运算规则:加法、乘法、转置、求和、范数等操作
  3. 特殊矩阵:对称矩阵、单位矩阵、零矩阵等
  4. 实际应用:在数据处理、模型训练、优化算法中的具体应用

通过PyTorch等深度学习框架,我们可以高效地实现这些线性代数操作,为构建复杂的机器学习模型奠定坚实基础。

相关推荐
mit6.8241 小时前
[Meetily后端框架] Whisper转录服务器 | 后端服务管理脚本
c++·人工智能·后端·python
Baihai IDP1 小时前
AI 系统架构的演进:LLM → RAG → AI Workflow → AI Agent
人工智能·ai·系统架构·llm·agent·rag·白海科技
沫儿笙1 小时前
弧焊机器人气体全方位节能指南
网络·人工智能·机器人
LONGZETECH1 小时前
【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】
人工智能·科技·汽车·汽车仿真教学软件·汽车教学软件
看到我,请让我去学习2 小时前
OpenCV 与深度学习:从图像分类到目标检测技术
深度学习·opencv·分类
jndingxin2 小时前
OpenCV 图像哈希类cv::img_hash::AverageHash
人工智能·opencv·哈希算法
加油加油的大力2 小时前
入门基于深度学习(以yolov8和unet为例)的计算机视觉领域的学习路线
深度学习·yolo·计算机视觉
Jamence2 小时前
多模态大语言模型arxiv论文略读(153)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记
晨曦5432102 小时前
量子计算突破:8比特扩散模型实现指数级加速
人工智能
Albert_Lsk2 小时前
【2025/07/11】GitHub 今日热门项目
人工智能·开源·github·开源协议