
目录
[1.1 线性代数(深度学习的底层语言)](#1.1 线性代数(深度学习的底层语言))
[🔹 1.1.1 向量、矩阵、张量的概念](#🔹 1.1.1 向量、矩阵、张量的概念)
[✔ 向量(Vector)](#✔ 向量(Vector))
[✔ 矩阵(Matrix)](#✔ 矩阵(Matrix))
[✔ 张量(Tensor)](#✔ 张量(Tensor))
[🔹 1.1.2 矩阵乘法、张量 reshape / transpose / broadcast](#🔹 1.1.2 矩阵乘法、张量 reshape / transpose / broadcast)
[✔ 矩阵乘法(核心)](#✔ 矩阵乘法(核心))
[第一步:计算 c11](#第一步:计算 c11)
[第二步:计算 c12](#第二步:计算 c12)
[第三步:计算 c21](#第三步:计算 c21)
[第四步:计算 c22](#第四步:计算 c22)
[✔ 张量 reshape(改变形状)](#✔ 张量 reshape(改变形状))
[reshape 操作:](#reshape 操作:)
[✔ transpose(转置、维度交换)](#✔ transpose(转置、维度交换))
[✔ broadcast(广播机制)](#✔ broadcast(广播机制))
[🔹 1.1.3 特征值、奇异值分解 SVD(理解模型的重要工具)](#🔹 1.1.3 特征值、奇异值分解 SVD(理解模型的重要工具))
[✔ 特征值(Eigenvalue)](#✔ 特征值(Eigenvalue))
[✔ 奇异值分解 SVD](#✔ 奇异值分解 SVD)
[🔹 1.1.4 点积(Dot product)与范数(Norm)](#🔹 1.1.4 点积(Dot product)与范数(Norm))
[✔ 点积(Attention 的灵魂)](#✔ 点积(Attention 的灵魂))
[✔ 范数(Norm)](#✔ 范数(Norm))
[1.2 概率与统计(理解 Loss 和 Training 的关键)](#1.2 概率与统计(理解 Loss 和 Training 的关键))
[1.2.1 概率分布](#1.2.1 概率分布)
[✔ 常见分布:](#✔ 常见分布:)
[1. 生成文本的数学基础](#1. 生成文本的数学基础)
[2. 与人类语言学习的类比](#2. 与人类语言学习的类比)
[3. 与神经网络的完美结合](#3. 与神经网络的完美结合)
[1.2.2 最大似然估计 MLE(训练神经网络的数学本质)](#1.2.2 最大似然估计 MLE(训练神经网络的数学本质))
[🔹 1.2.3 KL 散度(Transformer 的 Loss 本质)](#🔹 1.2.3 KL 散度(Transformer 的 Loss 本质))
[🔹 1.2.4 联合概率 / 条件概率](#🔹 1.2.4 联合概率 / 条件概率)
[1.3 微积分(模型训练的引擎)](#1.3 微积分(模型训练的引擎))
[🔹 1.3.1 偏导数、链式法则](#🔹 1.3.1 偏导数、链式法则)
[🔹 1.3.2 梯度下降(Gradient Descent)](#🔹 1.3.2 梯度下降(Gradient Descent))
[🔹 1.3.3 损失函数的优化](#🔹 1.3.3 损失函数的优化)
深度学习数学基础------线性代数、线性代数和微积分
每一小节都包含:是什么 → 为什么重要 → 深度学习中的关键用法 → 示例或公式。
我会尽量讲得"刚刚好深入",既不会太浅,也不会让你一下看不懂。
1.1 线性代数(深度学习的底层语言)
🔹 1.1.1 向量、矩阵、张量的概念
✔ 向量(Vector)
-
一组有序的数
-
通常记作一维数组 shape = (d,)
-
可以理解为"表示某种特征的一条记录"
示例:
假设我们正在记录一个人的身高、体重和年龄这三个特征,那么这一组有序的数可以表示为一个一维数组(向量):
python
person_features = [175, 68, 30]
shape = (3,):表示这个数组有 3 个元素。- 每个位置对应一个特定的特征(比如:[身高(cm), 体重(kg), 年龄(岁)])。
- 这就是"表示某种特征的一条记录"。
在机器学习或数据分析中,这样的向量通常代表数据集中的一行(一个样本)。例如,在一个包含多个人的数据表中,每个人都可以用这样一个一维数组来表示。
✔ 矩阵(Matrix)
-
二维数据结构,shape = (m, n)
-
可以表示:
-
多条样本 → 每行一个样本
-
神经网络参数(如全连接层的权重)
-
示例:
全连接层:
其中 W 是矩阵,shape = (输出维度, 输入维度)
✔ 张量(Tensor)
-
可以理解为"任意维度的数组"
-
深度学习中所有数据都是张量
-
图像: (Batch, Channel, H, W) → 4维
-
NLP 模型输入: (Batch, SeqLen, Hidden) → 3维
-
张量是向量和矩阵的拓展版本。
🔹 1.1.2 矩阵乘法、张量 reshape / transpose / broadcast
✔ 矩阵乘法(核心)
矩阵乘法就是多个向量点积组成的新矩阵。
如果
A: (m × k)
B: (k × n)
C = AB: (m × n)
神经网络中几乎所有线性层都是矩阵乘法。
示例:
给定矩阵:
设
那么
C=A B shape: (2×2)
计算过程(按点积理解):
矩阵乘法中,结果矩阵 C 的每个元素 cij 是 A 的第 i 行 与 B 的第 j 列 的点积。
第一步:计算 c11
- A 的第 1 行:[1,2,3]
- B 的第 1 列:
- 点积:1⋅7+2⋅9+3⋅11=7+18+33=58
第二步:计算 c12
- A 的第 1 行:[1,2,3]
- B 的第 2 列:
- 点积:1⋅8+2⋅10+3⋅12=8+20+36=64
第三步:计算 c21
- A 的第 2 行:[4,5,6]
- B 的第 1 列:
- 点积:4⋅7+5⋅9+6⋅11=28+45+66=139
第四步:计算 c22
- A 的第 2 行:[4,5,6]
- B 的第 2 列:
- 点积:4⋅8+5⋅10+6⋅12=32+50+72=154
最终结果:
✔ 张量 reshape(改变形状)
reshape不改变数据,只改变形状。
就像把一排积木重新摆成不同行列的矩形,积木本身没变,只是摆放形状变了。
示例:
把 3D tensor (batch, seq, hidden)
分成多头:(batch, seq, n_heads, head_dim)
Transformer 的多头注意力 全靠 reshape。
假设我们有一个张量(tensor):
python
x.shape = (2, 4, 12) # (batch=2, seq_len=4, hidden_dim=12)
这表示:
- 2 个样本(比如两句话)
- 每句话有 4 个词(token)
- 每个词用 12 维向量表示
现在我们要做 多头注意力 ,比如分成 3 个头(n_heads=3),那么每个头的维度就是:
head_dim = hidden_dim // n_heads = 12 // 3 = 4
目标:把 (2, 4, 12) → reshape 成 (2, 4, 3, 4)
reshape 操作:
python
x_reshaped = x.reshape(2, 4, 3, 4) # 或者用 .view() in PyTorch
这一步没有复制数据,也没有改变数值,只是告诉程序:"现在请把每 12 维看成 3 组,每组 4 维"。
为什么这对多头注意力有用?
在 Transformer 中,Q、K、V 都是通过线性变换得到的,比如:
python
Q = x @ W_Q # shape: (batch, seq, hidden) = (2, 4, 12)
但我们希望 每个 attention head 独立计算自己的 Q、K、V。
所以:
- 先让
W_Q输出 12 维(其实是 3 个头 × 每个头 4 维) - 然后
reshape成(2, 4, 3, 4) - 再 transpose 成
(2, 3, 4, 4)------ 把 head 维度提到前面 - 这样就可以对每个 head 单独做矩阵乘(attention)
python
# PyTorch 风格伪代码
Q = x @ W_Q # (2, 4, 12)
Q = Q.reshape(2, 4, 3, 4) # (batch, seq, n_heads, head_dim)
Q = Q.transpose(1, 2) # (batch, n_heads, seq, head_dim)
现在,Q[0, 1] 就是第 0 个样本、第 1 个 attention head 的所有 token 的 query 向量(shape: 4×4)。
✔ transpose(转置、维度交换)
常见:
(batch, seq, heads, dim) → (batch, heads, seq, dim)
多头注意力要计算:
Q 与 Kᵀ 的点积
所以 transpose 非常常用。
✔ broadcast(广播机制)
让小张量自动扩展到大张量的维度。
示例:
加上 bias:
(batch, seq, hidden) + (hidden)
→ 自动扩展 bias 维度
→ 深度学习中加权、加偏置都依赖 broadcast。
🔹 1.1.3 特征值、奇异值分解 SVD(理解模型的重要工具)
✔ 特征值(Eigenvalue)
矩阵 A 对向量 x 做线性变换时,如果满足:
则 x 是特征向量,λ 是特征值。
深度学习中的作用:
-
模型的稳定性分析
-
Hessian 矩阵的主方向
-
卷积核的特征分析
✔ 奇异值分解 SVD
矩阵 A 分解为:
其中
-
U/V 为正交矩阵
-
Σ 为奇异值对角矩阵(重要!)
深度学习用处:
-
矩阵低秩近似:LLM 量化的基础
-
LoRA 本质:对 W 做低秩分解(r 很小)
-
判断模型训练不稳定:奇异值过大 → 梯度爆炸
🔹 1.1.4 点积(Dot product)与范数(Norm)
✔ 点积(Attention 的灵魂)
两个向量 a, b 的点积:
在自注意力中:
点积越大 → Token 越相似(因为这里余弦值的原因,可以理解为方向相似) → 注意力权重越高。
✔ 范数(Norm)
衡量向量大小。
常见:
L2 范数:
深度学习用途:
-
权重衰减(Weight Decay)
-
归一化(Normalization)
-
稳定模型训练
1.2 概率与统计(理解 Loss 和 Training 的关键)
1.2.1 概率分布
✔ 常见分布:
-
高斯分布:模型噪声假设
-
伯努利分布:分类任务
-
多项分布 Softmax:Transformer 输出分布
语言模型最后一层输出:
这本质是 多项分布 multinomial distribution。
语言模型最后一层的输出确实是多项分布,这正是Transformer等现代语言模型能够生成自然文本的核心数学原理。
为什么是多项分布?
在语言模型中,模型会预测下一个词的概率分布。具体来说:
-
模型输出:一个长度为V的向量(V是词汇表大小),每个元素是该词的logits(未归一化的得分)
z = [z₁, z₂, ..., zᵥ] -
Softmax转换:将logits转换为概率分布
P(yₜ=i) = e^{zᵢ} / Σⱼ e^{zⱼ} -
结果:得到一个概率向量,其中每个元素表示对应词被选中的概率
p = [p₁, p₂, ..., pᵥ], 且 Σpᵢ = 1
这就是典型的多项分布:在V个互斥类别(词汇)中,每个类别被选中的概率。
用实际例子说明
假设词汇表大小V=5,模型预测下一个词的概率分布为:
p = [0.6, 0.25, 0.1, 0.04, 0.01]
# 对应词汇:["今天", "天气", "真", "好", "啊"]
这意味着:
- 模型认为"今天"最可能出现在下一个位置(60%概率)
- "天气"有25%概率
- "真"有10%概率
- 依此类推
这完全符合多项分布的定义:
- 有V个可能的结果(5个词汇)
- 每个结果有对应的概率
- 所有概率之和为1
为什么多项分布如此重要?
1. 生成文本的数学基础
- 模型通过采样(如多项式采样)从这个分布中选择下一个词
- 这就是为什么我们能通过调整参数(如温度、Top-K)控制生成的多样性和确定性
2. 与人类语言学习的类比
- 就像人类学习语言时,听到"今天天气"后,大脑会预测"真好"的概率高于"真坏"
- 模型通过学习大量文本,将这种概率关系编码为多项分布
3. 与神经网络的完美结合
- 神经网络通过训练,学习到如何将上下文映射为正确的多项分布
- 这正是Transformer的核心能力:预测下一个词的概率分布
为什么不是其他分布?
- 高斯分布:连续变量,不适合离散的词汇预测
- 伯努利分布:只有两个结果,无法表示多词汇选择
- 多项分布:完美匹配词汇选择问题(多个离散类别,概率和为1)
实际应用示例
在PyTorch中,我们这样实现语言模型的输出:
import torch
# 模型输出的logits
logits = torch.tensor([2.0, 1.0, 0.5, 0.1, -1.0])
# 转换为概率分布(多项分布)
probs = torch.softmax(logits, dim=0)
print(probs)
# 输出: tensor([0.6592, 0.2415, 0.0721, 0.0216, 0.0056])
# 从多项分布中采样
next_token = torch.multinomial(probs, num_samples=1)
print(next_token)
# 输出: tensor([0]) # 选择了第一个词("今天")
1.2.2 最大似然估计 MLE(训练神经网络的数学本质)
神经网络"训练"就是求参数 θ,让训练数据出现概率最大:
θ\*=argmaxθp(x∣θ)\theta^\* = \arg\max_\theta p(x|\theta)θ\*=argmaxθp(x∣θ)
通常取负对数:
这就是 交叉熵损失的来源。
训练深度学习 = 最大似然估计 = 最小化交叉熵
🔹 1.2.3 KL 散度(Transformer 的 Loss 本质)
KL 散度用于衡量两个分布的差异:
语言模型的训练目标:
-
P:真实分布(one-hot / dataset)
-
Q:模型预测分布(softmax 输出)
所以 LLM 的 loss 实际就是 KL 散度。
🔹 1.2.4 联合概率 / 条件概率
条件概率:
P(A∣B)=P(A,B)P(B)P(A|B)=\frac{P(A,B)}{P(B)}P(A∣B)=P(B)P(A,B)
语言模型本质是预测下一个词:
P(x_t∣x1,x2,...,xt−1)P(x\t | x_1, x_2, ..., x{t-1})P(x_t∣x1,x2,...,xt−1)
自回归模型 (如 GPT) 的数学基石:
P(x)=∏t=1TP(xt∣x<t)P(x) = \prod_{t=1}^{T} P(x_t | x_{<t})P(x)=∏t=1TP(xt∣x<t)
理解这个式子,你就懂语言模型。
📘 1.3 微积分(模型训练的引擎)
🔹 1.3.1 偏导数、链式法则
偏导数:
测量某个变量改变一点会让函数改变多少。
链式法则:
神经网络层层相连,梯度必须一层层往回传:
∂L∂x=∂L∂y∂y∂x\frac{\partial L}{\partial x}=\frac{\partial L}{\partial y} \frac{\partial y}{\partial x}∂x∂L=∂y∂L∂x∂y
Backpropagation 的数学核心就是链式法则。
🔹 1.3.2 梯度下降(Gradient Descent)
神经网络训练,就是不断沿着负梯度方向走:
θ←θ−η∂L∂θ\theta \leftarrow \theta - \eta \frac{\partial L}{\partial \theta}θ←θ−η∂θ∂L
-
η:学习率
-
∂L/∂θ:梯度
方向对 → loss 会下降。
🔹 1.3.3 损失函数的优化
常见 Loss:
-
MSE(回归)
-
CrossEntropy(分类 / NLP)
-
KL Loss(模型蒸馏)
-
NLL Loss(语言模型)
优化就是:
找参数 θ,让损失 L(θ) 最小。