为了更好地理解本课程内容,我们需要为涉及的数学对象和运算建立一个统一的符号表示。本节确立了各章中保持一致的符号。尽管我们尽可能遵守机器学习和深度学习文献中的标准约定,但本课程内的清晰度和一致性是首要考量。熟悉这些符号将有助于您理解描述模型架构、训练算法和评估指标的方程。
一般数学约定
标量: 用小写斜体字母表示(例如 a , x , λ , η a, x, \lambda, \eta a , x , λ , η )。它们通常表示单个数值,例如学习率、正则化参数,或向量/矩阵的单个元素。
向量: 用小写粗体字母表示(例如 x , y , w , b \mathbf{x}, \mathbf{y}, \mathbf{w}, \mathbf{b} x , y , w , b )。默认情况下,向量假定为列向量。我们将其维度记为 x ∈ R d \mathbf{x} \in \mathbb{R}^d x ∈ R d ,表示一个包含 d d d 个实数值元素的向量。x \mathbf{x} x 的第 i i i 个元素为 x i x_i x i 。
矩阵: 用大写粗体字母表示(例如 X , Y , W \mathbf{X}, \mathbf{Y}, \mathbf{W} X , Y , W )。我们将其维度记为 W ∈ R m × n \mathbf{W} \in \mathbb{R}^{m \times n} W ∈ R m × n ,表示一个包含 m m m 行 n n n 列的矩阵。第 i i i 行第 j j j 列的元素为 W i j W_{ij} W ij 或 w i j w_{ij} w ij 。单位矩阵用 I \mathbf{I} I 表示。
张量: 高阶数组(秩 > 2)有时用大写花体字母表示(例如 T \mathcal{T} T ),或者在上下文清晰表明维度时用大写粗体字母表示(例如一批矩阵)。维度会明确指定,例如 T ∈ R d 1 × d 2 × ⋯ × d k \mathcal{T} \in \mathbb{R}^{d_1 \times d_2 \times \dots \times d_k} T ∈ R d 1 × d 2 × ⋯ × d k 。
索引和求和: 通常用 i , j , k i, j, k i , j , k 来索引元素或维度。t t t 经常用于表示序列中的特定位置或时间步。求和用 ∑ \sum ∑ 表示。
集合: 用大写花体字母表示(例如数据集用 D \mathcal{D} D ,词汇表用 V \mathcal{V} V )。集合 S \mathcal{S} S 的大小或基数用 ∣ S ∣ |\mathcal{S}| ∣ S ∣ 表示。
函数: 标准数学函数使用斜体小写字母(例如 f ( ⋅ ) , g ( ⋅ ) f(\cdot), g(\cdot) f ( ⋅ ) , g ( ⋅ ) )。激活函数通常用希腊字母表示(例如 Sigmoid 函数用 σ ( ⋅ ) \sigma(\cdot) σ ( ⋅ ) ,ReLU 变体(如 GeLU)用 ϕ ( ⋅ ) \phi(\cdot) ϕ ( ⋅ ) )。L ( ⋅ ) L(\cdot) L ( ⋅ ) 或 J ( ⋅ ) J(\cdot) J ( ⋅ ) 通常表示损失函数或目标函数。
导数和梯度: 标量函数 J J J 对向量 w \mathbf{w} w 的梯度表示为 ∇ w J ( w ) \nabla_{\mathbf{w}} J(\mathbf{w}) ∇ w J ( w ) ,如果变量在上下文中明确,则简写为 ∇ J \nabla J ∇ J 。偏导数写为 ∂ f ∂ x \frac{\partial f}{\partial x} ∂ x ∂ f 。
语言模型专用符号
序列: 长度为 T T T 的输入序列通常表示为词元列表或元组 ( x 1 , x 2 , … , x T ) (x_1, x_2, \dots, x_T) ( x 1 , x 2 , … , x T ) 或其对应的嵌入向量 ( x 1 , x 2 , … , x T ) (\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_T) ( x 1 , x 2 , … , x T ) 。T T T 表示序列长度。
词汇表和分词: 唯一词元(单词、子词)的集合是词汇表 V \mathcal{V} V 。其大小为 ∣ V ∣ |\mathcal{V}| ∣ V ∣ 。x t x_t x t 通常表示位置 t t t 处词元的整数索引。
嵌入:
词元嵌入矩阵:E ∈ R ∣ V ∣ × d m o d e l \mathbf{E} \in \mathbb{R}^{|\mathcal{V}| \times d_{model}} E ∈ R ∣ V ∣ × d m o d e l ,其中 d m o d e l d_{model} d m o d e l 是模型的隐藏维度。
词元索引 i i i 的嵌入向量:e i \mathbf{e}_i e i ,它是 E \mathbf{E} E 的第 i i i 行。
位置 t t t 的位置编码向量:p t ∈ R d m o d e l \mathbf{p}_t \in \mathbb{R}^{d_{model}} p t ∈ R d m o d e l 。
位置 t t t 的输入表示:z t = e t + p t \mathbf{z}_t = \mathbf{e}_t + \mathbf{p}_t z t = e t + p t (或根据模型而异的变体)。
Transformer 组成部分:
序列的查询、键、值矩阵:Q , K , V ∈ R T × d k \mathbf{Q}, \mathbf{K}, \mathbf{V} \in \mathbb{R}^{T \times d_k} Q , K , V ∈ R T × d k (在单个注意力头内,或投影前为 R T × d m o d e l \mathbb{R}^{T \times d_{model}} R T × d m o d e l )。
相关联的权重矩阵:W Q , W K , W V ∈ R d m o d e l × d k \mathbf{W}^Q, \mathbf{W}^K, \mathbf{W}^V \in \mathbb{R}^{d_{model} \times d_k} W Q , W K , W V ∈ R d m o d e l × d k (每个头)或 R d m o d e l × d m o d e l \mathbb{R}^{d_{model} \times d_{model}} R d m o d e l × d m o d e l (整体投影)。
注意力得分矩阵:A ∈ R T × T \mathbf{A} \in \mathbb{R}^{T \times T} A ∈ R T × T 。
注意力输出:A t t e n t i o n ( Q , K , V ) = softmax ( Q K T d k ) V Attention(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}})\mathbf{V} A tt e n t i o n ( Q , K , V ) = softmax ( d k Q K T ) V 。
第 l l l 层的隐藏状态:H ( l ) ∈ R T × d m o d e l \mathbf{H}^{(l)} \in \mathbb{R}^{T \times d_{model}} H ( l ) ∈ R T × d m o d e l 。输入嵌入通常是 H ( 0 ) \mathbf{H}^{(0)} H ( 0 ) 。
前馈网络:FFN(⋅ \cdot ⋅ )。
模型参数: 所有可训练参数(权重和偏置)的集合用 θ \theta θ 表示。
数据与训练:
数据集:D \mathcal{D} D 。
训练示例:( x , y ) (\mathbf{x}, y) ( x , y ) ,其中 x \mathbf{x} x 是输入,y y y 是目标。
数据批次:B \mathcal{B} B 。批次大小 B = ∣ B ∣ B = |\mathcal{B}| B = ∣ B ∣ 。
损失函数:L ( θ ) \mathcal{L}(\theta) L ( θ ) 或 J ( θ ) J(\theta) J ( θ ) 。单示例损失 L ( y ^ , y ) L(\hat{y}, y) L ( y ^ , y ) 。
概率:
概率分布:P ( ⋅ ) P(\cdot) P ( ⋅ ) 。
条件概率:P ( Y ∣ X ) P(Y | X) P ( Y ∣ X ) 。
模型在给定上下文 c \mathbf{c} c 下对词元 y y y 的预测概率:P θ ( y ∣ c ) P_{\theta}(y | \mathbf{c}) P θ ( y ∣ c ) 。
超参数:
学习率:η \eta η 。
层数:L L L 。
模型隐藏维度:d m o d e l d_{model} d m o d e l 。
FFN 中间维度:d f f d_{ff} d ff 。
注意力头数量:h h h 。
每个头的维度:d k = d m o d e l / h d_k = d_{model} / h d k = d m o d e l / h 。
Dropout 概率:p d r o p p_{drop} p d ro p 。
权重衰减系数:λ \lambda λ 。
代码对应关系 (PyTorch 示例)
数学符号与 PyTorch 等框架中的张量运算直接对应。掌握这种对应关系有助于代码实现。
一个向量 x ∈ R d \mathbf{x} \in \mathbb{R}^d x ∈ R d :
import torch
d = 128
x = torch.randn(d) # 通常是一个一维张量
# 或者显式地表示为一个列向量(二维张量)
x_col = torch.randn(d, 1)
print(f"向量形状: {x.shape}, 列向量形状: {x_col.shape}")
一个矩阵 W ∈ R m × n \mathbf{W} \in \mathbb{R}^{m \times n} W ∈ R m × n :
m, n = 64, 128
W = torch.randn(m, n) # 一个二维张量
print(f"矩阵形状: {W.shape}")
矩阵-向量乘法 y = W x + b \mathbf{y} = \mathbf{W}\mathbf{x} + \mathbf{b} y = Wx + b ,其中 W ∈ R m × n \mathbf{W} \in \mathbb{R}^{m \times n} W ∈ R m × n ,x ∈ R n \mathbf{x} \in \mathbb{R}^n x ∈ R n ,b ∈ R m \mathbf{b} \in \mathbb{R}^m b ∈ R m ,y ∈ R m \mathbf{y} \in \mathbb{R}^m y ∈ R m :
# 假设 W 来自上方,并匹配 x, b
n = 128
m = 64
x = torch.randn(n)
b = torch.randn(m)
W = torch.randn(m, n)
# 使用 torch.matmul 或 @ 运算符
y = W @ x + b
# 替代方法:torch.nn.functional.linear
# import torch.nn.functional as F
# y_f = F.linear(x, W, b) # 注意:F.linear 有时隐式地需要 W^T,请查阅文档
print(f"输入 x 形状: {x.shape}")
print(f"权重 W 形状: {W.shape}")
print(f"偏置 b 形状: {b.shape}")
print(f"输出 y 形状: {y.shape}")
批处理:通常,第一个维度表示批次大小 B B B 。例如,一个序列批次的形状可能是 ( B , T , d m o d e l ) (B, T, d_{model}) ( B , T , d m o d e l ) 。
这些符号构成了我们后续讨论的根本。后续章节中引入的任何偏差或特定于上下文的符号都将在局部定义。在学习过程中请随时参考此部分。