这份笔记依据第 13、14 课课堂录音和第 16 课深度学习复习课整理,目标是回答两个问题:
- 哪些内容必须真正理解?
- 哪些计算必须能够脱离代码手算?
老师在复习课中反复强调:考试和实际使用都更看重对计算流程的理解,不要求机械背诵大量公式。最需要形成的“脑内流程图”是:
本部分的掌握优先级如下。
| 优先级 | 内容 | 要求 |
|---|
| ★★★ | 神经网络前向传播 | 会根据权重、偏置和激活函数逐层手算 |
| ★★★ | CNN 卷积计算 | 会移动卷积核并计算特征图 |
| ★★★ | CNN 输出尺寸 | 会根据输入、卷积核、步幅、填充计算空间尺寸 |
| ★★★ | CNN 参数量 | 会计算单通道、多通道、多卷积核情况下的参数量 |
| ★★★ | 自注意力 | 会计算 QKT、缩放、Softmax 权重与对 V 的加权和 |
| ★★☆ | 反向传播与参数更新 | 理解链式法则,会做简单的一层或两层梯度计算 |
| ★★☆ | 损失函数 | 会计算 MSE、MAE、交叉熵,知道如何选择 |
| ★★☆ | RNN 隐藏状态和梯度问题 | 会做简单状态递推,理解梯度消失与爆炸 |
| ★☆☆ | Adam、正则化、BatchNorm | 重点掌握作用和使用逻辑,复杂手算要求较低 |
| ★☆☆ | BERT、GPT、ViT、LLM 流程 | 以概念辨析为主 |
WARNING老师在复习课中明确提示,本部分大致会出现一道计算题和一道概念题。因此不能只背结论,应至少能够独立完成:
- 前向传播;
- 卷积核滑动、输出尺寸和参数量;
- 注意力分数、Softmax 权重与加权输出。
一、神经网络前向传播与损失函数#
1. 单个人工神经元#
单个人工神经元先计算输入的加权和,再经过激活函数:
z=i=1∑Dwixi+b=wTx+ba=f(z)其中:
- D:输入特征的数量;
- xi:第 i 个输入;
- wi:第 i 个输入对应的权重;
- b:偏置;
- z:预激活值,即激活函数之前的线性组合;
- f(⋅):激活函数;
- a:神经元最终输出,也称激活值;
- x:输入向量;
- w:权重向量。
整体意义:
神经元先判断各输入应占多大权重,再把这些信息加总,最后通过非线性函数决定输出。
生物神经元与人工神经元可以做松散类比:
| 生物神经元 | 人工神经元 |
|---|
| 树突接收信号 | 输入 xi |
| 突触强度 | 权重 wi |
| 细胞体整合信号 | 加权求和 |
| 神经元是否激活 | 激活函数 |
| 轴突输出 | 输出 a |
2. 多层网络的前向传播#
第 l 层的一般形式是:
z[l]=W[l]a[l−1]+b[l]a[l]=f[l](z[l])其中:
- l:网络层编号;
- a[l−1]:上一层的输出,也是当前层的输入;
- W[l]:第 l 层的权重矩阵;
- b[l]:第 l 层的偏置向量;
- z[l]:第 l 层预激活向量;
- f[l]:第 l 层激活函数;
- a[l]:第 l 层激活值。
第一层输入通常记为:
a[0]=x最后一层输出为模型预测:
y^=a[L]其中 L 是网络总层数。
做题顺序必须固定:
- 先算 z[1];
- 再算 a[1];
- 把 a[1] 作为下一层输入;
- 重复直到得到 y^;
- 用 y^ 和真实值 y 计算损失。
3. 为什么必须使用非线性激活函数#
若各层都没有非线性激活函数,则:
a[1]=W[1]xa[2]=W[2]a[1]=W[2]W[1]x令:
W′=W[2]W[1]则:
a[2]=W′x即使堆叠很多层,最终仍然只是一次线性变换。
TIP老师在课堂和复习课中多次强调:
没有非线性激活函数,多层神经网络会退化为线性模型,无法学习复杂的非线性关系。
4. 常用激活函数#
ReLU#
ReLU(z)=max(0,z)导数:
ReLU′(z)={1,0,z>0z<0在 z=0 处通常按实现约定取 0。
特点:
- 计算简单;
- 正数区域梯度为 1;
- 负数区域输出和梯度均为 0;
- 可能出现“死亡 ReLU”。
Sigmoid#
σ(z)=1+e−z1导数:
σ′(z)=σ(z)[1−σ(z)]特点:
- 输出范围为 (0,1);
- 常用于二分类概率输出;
- ∣z∣ 很大时梯度接近 0,容易发生梯度消失。
Tanh#
tanh(z)=ez+e−zez−e−z导数:
dzdtanh(z)=1−tanh2(z)特点:
- 输出范围为 (−1,1);
- 以 0 为中心;
- 也会发生梯度消失。
Softmax#
对 C 个类别的 logits z1,…,zC:
pi=∑j=1Cezjezi其中:
- zi:第 i 类的原始得分;
- pi:第 i 类的预测概率;
- C:类别总数;
- 所有 pi 均大于 0,且 ∑ipi=1。
5. 损失函数#
均方误差 MSE#
单样本:
LMSE=(y−y^)2也常写成:
L=21(y−y^)2加入 21 是为了求导时抵消平方产生的 2。
多样本:
LMSE=N1i=1∑N(yi−y^i)2适用:回归任务。
平均绝对误差 MAE#
LMAE=N1i=1∑N∣yi−y^i∣特点:对异常值比 MSE 更稳健。
二元交叉熵 BCE#
LBCE=−[ylogp+(1−y)log(1−p)]其中:
- y∈{0,1}:真实类别;
- p:模型预测属于正类的概率。
多分类交叉熵#
若真实类别为 c:
L=−logpc更一般地,用 one-hot 标签 yi 表示:
L=−i=1∑Cyilogpi
例题 1:单神经元与 ReLU#
已知:
x=[23],w=[0.5−1],b=1激活函数为 ReLU,求输出。
先计算预激活值:
z=wTx+bz=0.5×2+(−1)×3+1z=1−3+1=−1经过 ReLU:
a=max(0,−1)=0答案:
a=0理解: 加权和为负,ReLU 将其截断为 0,因此该神经元在这个输入下没有被激活。
例题 2:两层网络前向传播#
已知输入:
x=[12]第一层:
W[1]=[10.5−10.5],b[1]=[00]使用 ReLU。第二层:
W[2]=[2−1],b[2]=0.5第二层不使用激活函数,求 y^。
第一步:第一层线性变换#
z[1]=W[1]x+b[1]=[10.5−10.5][12]+[00]=[1−20.5+1]=[−11.5]第二步:ReLU 激活#
a[1]=ReLU([−11.5])=[01.5]第三步:输出层#
y^=W[2]a[1]+b[2]=[2−1][01.5]+0.5=2×0−1×1.5+0.5=−1答案:
y^=−1WARNING前向传播最常见错误:
- 忘记加偏置;
- 先激活再线性变换;
- 矩阵维度写反;
- 忘记 ReLU 会把负值变成 0。
例题 3:Softmax 与多分类交叉熵#
某三分类模型输出 logits:
z=210真实类别为第 1 类,求 Softmax 概率和交叉熵损失。
第一步:计算指数#
为提高数值稳定性,可先减去最大值 2:
z′=0−1−2于是:
ez′=1e−1e−2≈10.36790.1353总和:
1+0.3679+0.1353=1.5032第二步:计算概率#
p1=1.50321≈0.6652p2=1.50320.3679≈0.2447p3=1.50320.1353≈0.0900因此:
p≈0.66520.24470.0900第三步:交叉熵#
真实类别为第 1 类:
L=−logp1L=−log(0.6652)≈0.4076答案:
p≈(0.6652,0.2447,0.0900)L≈0.4076
例题 4:MSE、MAE 与二元交叉熵#
(1)回归损失#
真实值 y=5,预测值 y^=3。
MSE:
LMSE=(5−3)2=4MAE:
LMAE=∣5−3∣=2(2)二分类损失#
真实标签 y=1,模型预测正类概率 p=0.8。
LBCE=−[1log0.8+(1−1)log(1−0.8)]=−log0.8≈0.2231结论:
- 回归误差越大,MSE 增长得比 MAE 更快;
- 对正确类别给出较高概率时,交叉熵较小;
- 若 y=1 而 p 接近 0,交叉熵会非常大。
二、反向传播、梯度下降与训练方法#
1. 反向传播的本质#
反向传播的任务是:
从损失函数开始,沿计算图反向应用链式法则,计算损失对每个参数的偏导数。
它解决的是:
∂W∂L,∂b∂L反向传播只负责计算梯度。
优化器负责根据梯度更新参数。
这两个概念必须严格区分。
反向传播:我应该往哪个方向改?每个参数影响损失多少?
2. 链式法则#
若:
y=f(g(x))则:
dxdy=dgdfdxdg深度网络可视为很多函数的嵌套,因此:
∂W[l]∂L=∂a[L]∂L∂a[L−1]∂a[L]⋯∂W[l]∂a[l]3. 梯度下降#
基本更新式:
θt+1=θt−η∇θL其中:
- θ:待学习参数,可代表权重或偏置;
- t:迭代步;
- η:学习率;
- ∇θL:损失对参数的梯度;
- 负号:沿梯度反方向更新,因为梯度方向是损失增长最快的方向。
学习率过大:
- 越过最优点;
- 损失震荡;
- 可能发散或出现 NaN。
学习率过小:
4. SGD 与 mini-batch#
全批量梯度下降:
∇θL=N1i=1∑N∇θLi每次使用全部样本,梯度稳定,但计算代价高。
随机梯度下降 SGD:
θt+1=θt−η∇θLi每次只使用一个样本,更新快但噪声大。
mini-batch:
∇θLB=∣B∣1i∈B∑∇θLi实际训练通常使用小批量,在速度、稳定性和 GPU 并行效率之间折中。
5. Momentum#
课堂讲义采用的形式:
mt+1=βmt+(1−β)gtθt+1=θt−ηmt+1其中:
- gt=∇θLt:当前梯度;
- mt:累计的运动方向;
- β:动量系数,常接近 1;
- η:学习率。
作用:
- 平滑随机梯度中的噪声;
- 减少狭长损失谷中的左右震荡;
- 在梯度方向长期一致时加速前进。
6. Adam#
Adam 同时维护梯度的一阶矩和二阶矩。
一阶矩:
mt=β1mt−1+(1−β1)gt二阶矩:
vt=β2vt−1+(1−β2)gt2偏差修正:
m^t=1−β1tmtv^t=1−β2tvt参数更新:
θt=θt−1−ηv^t+εm^t其中:
- β1:一阶矩衰减率;
- β2:二阶矩衰减率;
- ε:防止分母为 0 的小常数;
- gt2:逐元素平方。
老师复习课中的使用结论:
- Adam:大多数深度学习任务的安全默认选择;
- 带 Momentum 的 SGD:模型已经较稳定、需要精细微调时常有优势,尤其常见于视觉任务。
7. 正则化与 Batch Normalization#
L2 正则化 / 权重衰减#
Ltotal=Ldata+2λ∥W∥22其中:
- Ldata:原始数据损失;
- λ:正则化强度;
- ∥W∥22:权重平方和。
它惩罚过大的权重,降低过拟合风险。
Dropout#
训练时以一定概率把神经元输出置零,减少神经元之间的共适应。
- 训练时:随机丢弃部分神经元;
- 测试时:使用完整网络。
Batch Normalization#
对一个 mini-batch 中某一特征:
μB=m1i=1∑mxiσB2=m1i=1∑m(xi−μB)2标准化:
x^i=σB2+εxi−μB再进行可学习的缩放和平移:
yi=γx^i+β其中:
- m:批次大小;
- μB:批均值;
- σB2:批方差;
- γ,β:可学习参数。
作用:
- 稳定各层输入分布;
- 允许使用较大学习率;
- 改善梯度传播;
- 带来一定正则化效果。
例题 1:单层线性模型反向传播#
模型:
y^=wx+b损失:
L=21(y^−y)2已知:
x=2,w=1,b=0,y=5学习率 η=0.1,完成一次前向传播和参数更新。
第一步:前向传播#
y^=1×2+0=2第二步:计算损失#
L=21(2−5)2=21×9=4.5第三步:计算梯度#
先求:
∂y^∂L=y^−y=2−5=−3因为:
∂w∂y^=x=2所以:
∂w∂L=∂y^∂L∂w∂y^=(−3)×2=−6又因为:
∂b∂y^=1所以:
∂b∂L=−3第四步:更新参数#
wnew=w−η∂w∂L=1−0.1×(−6)=1.6bnew=0−0.1×(−3)=0.3答案:
wnew=1.6,bnew=0.3更新后对同一输入:
y^new=1.6×2+0.3=3.5它比原来的 2 更接近真实值 5,说明更新方向正确。
例题 2:两层线性网络的链式法则#
网络:
a=w1xy^=w2aL=21(y^−y)2已知:
x=2,w1=0.5,w2=3,y=5求 ∂w1∂L 和 ∂w2∂L。
前向传播#
a=w1x=0.5×2=1y^=w2a=3×1=3L=21(3−5)2=2计算 w2 的梯度#
∂y^∂L=y^−y=−2∂w2∂y^=a=1∂w2∂L=(−2)×1=−2计算 w1 的梯度#
根据链式法则:
∂w1∂L=∂y^∂L∂a∂y^∂w1∂a分别有:
∂a∂y^=w2=3∂w1∂a=x=2所以:
∂w1∂L=(−2)×3×2=−12答案:
∂w2∂L=−2,∂w1∂L=−12理解: w1 位于更前面,损失对它的影响需要经过 a 和 y^ 两个中间节点,因此要连续乘多个局部导数。
例题 3:ReLU 导数与死亡 ReLU#
已知:
z=wx+ba=ReLU(z)取:
x=−2,w=1,b=0上游梯度为:
∂a∂L=3求 ∂w∂L。
第一步:前向传播#
z=1×(−2)+0=−2a=ReLU(−2)=0第二步:ReLU 的局部导数#
因为 z<0:
∂z∂a=0第三步:链式法则#
∂w∂L=∂a∂L∂z∂a∂w∂z=3×0×(−2)=0答案:
∂w∂L=0此时权重无法更新。若一个 ReLU 神经元对所有训练样本长期满足 z<0,它会持续输出 0,形成“死亡 ReLU”。
例题 4:Momentum 与 Adam 的一步更新#
(1)Momentum#
已知:
θ0=2,m0=0,η=0.1,β=0.9第 1 步梯度:
g1=4采用:
m1=βm0+(1−β)g1所以:
m1=0.9×0+0.1×4=0.4参数更新:
θ1=2−0.1×0.4=1.96若第 2 步梯度为 g2=2:
m2=0.9×0.4+0.1×2=0.56θ2=1.96−0.1×0.56=1.904Momentum 没有只看当前梯度 2,还保留了上一轮梯度方向的信息。
(2)Adam 的第 1 步#
设:
g1=4,β1=0.9,β2=0.999,η=0.001初始 m0=v0=0。
一阶矩:
m1=0.9×0+0.1×4=0.4二阶矩:
v1=0.999×0+0.001×42=0.016偏差修正:
m^1=1−0.90.4=4v^1=1−0.9990.016=16参数改变量约为:
Δθ=ηv^1+εm^1≈0.001×44=0.001因此:
θ1≈θ0−0.001TIPAdam 的复杂手算通常不是本课程最优先的计算目标。重点掌握:
- 一阶矩平滑方向;
- 二阶矩估计梯度尺度;
- 对不同参数自适应调整实际步长;
- 通常作为默认优化器。
三、卷积神经网络必须掌握的计算#
1. 二维卷积#
给定输入矩阵 X 和卷积核 K,输出位置 (i,j) 的值为:
Yi,j=u=0∑Kh−1v=0∑Kw−1XiSh+u−Ph,jSw+v−PwKu,v+b其中:
- X:输入特征图;
- Y:输出特征图;
- K:卷积核;
- Kh,Kw:卷积核高度和宽度;
- Sh,Sw:垂直和水平方向步幅;
- Ph,Pw:填充;
- b:该输出通道的偏置。
手算时可按更直观的方法:
- 把卷积核盖在输入局部区域上;
- 对应元素相乘;
- 将所有乘积相加;
- 加偏置;
- 按步幅移动卷积核。
TIP深度学习框架中的 Conv2d 实际常执行互相关,即卷积核不翻转。课程计算题一般直接按课件中的“对应元素相乘后求和”处理。
2. 输出尺寸公式#
输入高度为 Hin,卷积核大小为 Kh,步幅为 Sh,填充为 Ph,则:
Hout=⌊ShHin+2Ph−Kh⌋+1宽度:
Wout=⌊SwWin+2Pw−Kw⌋+1其中 ⌊⋅⌋ 表示向下取整。
若考虑 dilation D,有效卷积核大小为:
Keff=D(K−1)+1本课程基础题通常令 D=1。
常见情况#
Valid 卷积:
P=0输出通常缩小。
Same 卷积:
当 K 为奇数、S=1 时,取:
P=2K−1可保持输入和输出空间尺寸相同。
3. 卷积层参数量#
若:
- 输入通道数:Cin;
- 输出通道数:Cout;
- 卷积核:Kh×Kw;
- 每个输出通道有一个偏置;
则参数量:
Nparam=(KhKwCin+1)Cout不使用偏置时:
Nparam=KhKwCinCout为什么乘 Cout?
每个输出通道都有一组独立卷积核,而每组卷积核必须覆盖全部输入通道。
4. 参数共享为什么高效#
卷积核在图像所有位置复用同一组参数。
因此,卷积层参数量取决于:
通常不直接取决于图像的高度和宽度。
一句话:
同一个卷积核在整张图像上滑动并共享权重,使参数量只由局部滤波器及通道数决定,远少于把每个像素与每个输出神经元全部连接的全连接层。
5. 池化层#
若池化窗口大小为 K,步幅为 S,填充为 P,输出尺寸公式与卷积相同:
Hout=⌊SHin+2P−K⌋+1最大池化:
Yi,j=(u,v)∈Ωi,jmaxXu,v平均池化:
Yi,j=∣Ωi,j∣1(u,v)∈Ωi,j∑Xu,v池化层通常没有可学习参数。
例题 1:完整计算一次二维卷积#
输入:
X=1021212003111102卷积核:
K=[100−1]步幅 S=1,填充 P=0,偏置 b=0。
第一步:确定输出尺寸#
Hout=14−2+1=3Wout=3所以输出为 3×3。
第二步:计算左上角#
取输入左上角 2×2:
[1021]对应相乘:
1×1+2×0+0×0+1×(−1)=0所以 Y1,1=0。
第三步:卷积核向右移动#
取:
[2103]2×1+0×0+1×0+3×(−1)=−1所以 Y1,2=−1。
继续计算所有位置,得到:
Y=0−22−101−13−1答案:
Y=0−22−101−13−1
例题 2:计算卷积输出尺寸#
输入图像大小:
7×7卷积核:
3×3步幅:
S=2填充:
P=1求输出尺寸。
Hout=⌊27+2×1−3⌋+1=⌊26⌋+1=3+1=4宽度同理:
Wout=4答案:
4×4直观检查#
填充后输入从 7 变成 9,长度为 3 的卷积核每次移动 2 格,可放置位置为:
0,2,4,6共 4 个位置,与公式一致。
例题 3:计算多通道卷积参数量#
输入:
32×32×3卷积层:
- 卷积核大小:3×3;
- 输出通道数:16;
- 每个输出通道有偏置。
求参数量。
每一个输出通道#
每个卷积核需要覆盖 3 个输入通道:
3×3×3=27加一个偏置:
27+1=28共 16 个输出通道#
Nparam=28×16=448答案:
448WARNING常见错误是只算 3×3×16,遗漏输入通道数;或者只加一个总偏置。实际上通常每个输出通道各有一个偏置。
例题 4:比较卷积层与全连接层参数量#
输入图像:
224×224×3希望生成 64 个特征。
方案一:全连接层#
将图像展平:
224×224×3=150528连接到 64 个神经元,含偏置:
NFC=(150528+1)×64=9633856方案二:3×3 卷积层#
输入通道 3,输出通道 64:
NConv=(3×3×3+1)×64=28×64=1792NConvNFC≈5376全连接层参数量约为卷积层的 5376 倍。
原因:
- 全连接层为每个输入像素到每个输出神经元设置独立权重;
- 卷积层只学习局部卷积核,并在所有空间位置共享。
四、RNN、LSTM 与 GRU 的计算和判断#
1. RNN 隐藏状态#
基本 RNN:
ht=f(Wxhxt+Whhht−1+bh)输出:
yt=g(Whyht+by)其中:
- t:时间步;
- xt:当前输入;
- ht−1:上一时间步隐藏状态;
- ht:当前隐藏状态,可理解为当前“记忆”;
- Wxh:输入到隐藏状态的权重;
- Whh:上一隐藏状态到当前隐藏状态的权重;
- Why:隐藏状态到输出的权重;
- f:隐藏状态激活函数,常用 Tanh;
- g:输出激活函数,分类时可用 Softmax。
最重要的特点:
不同时间步共享同一组参数。
2. 通过时间反向传播#
由于:
ht=f(Whhht−1+⋯)较早时刻隐藏状态对较晚时刻的影响包含多个雅可比矩阵乘积:
∂ht−k∂ht=j=t−k+1∏t∂hj−1∂hj如果每一步的导数因子大多小于 1,连乘后趋近 0;大多大于 1,连乘后迅速增大。
3. 梯度消失与梯度爆炸#
用标量近似理解:
gearly≈λkglate其中:
- λ:每一步反向传播的平均放缩因子;
- k:跨越时间步数量。
若:
∣λ∣<1则梯度消失。
若:
∣λ∣>1则梯度爆炸。
梯度消失的后果:
- 早期输入几乎收不到学习信号;
- 模型难以学习长距离依赖;
- 参数更新接近 0。
梯度爆炸的后果:
- 参数更新过大;
- 损失剧烈震荡;
- 可能出现无穷大或 NaN。
解决思路:
- 梯度裁剪:主要解决梯度爆炸;
- LSTM、GRU:缓解长序列中的梯度消失;
- 注意力:让远距离位置直接建立联系。
4. LSTM 的细胞状态更新#
遗忘门:
ft=σ(Wf[ht−1,xt]+bf)输入门:
it=σ(Wi[ht−1,xt]+bi)候选状态:
C~t=tanh(WC[ht−1,xt]+bC)细胞状态:
Ct=ft⊙Ct−1+it⊙C~t输出门:
ot=σ(Wo[ht−1,xt]+bo)隐藏状态:
ht=ot⊙tanh(Ct)其中:
- ft:保留多少旧记忆;
- it:写入多少新信息;
- C~t:候选新记忆;
- Ct:细胞状态;
- ot:输出多少记忆;
- ⊙:逐元素乘法。
老师强调的核心:
LSTM 用门控和加法式细胞状态更新,为信息与梯度提供更稳定的长期通路。
5. LSTM 与 GRU 的选择#
| 项目 | LSTM | GRU |
|---|
| 门 | 遗忘、输入、输出门 | 更新、重置门 |
| 状态 | 隐藏状态与细胞状态分开 | 合并 |
| 参数量 | 更多 | 更少 |
| 长序列能力 | 通常更强 | 通常足够 |
| 计算成本 | 较高 | 较低 |
| 推荐场景 | 很长、复杂序列 | 资源受限、边缘设备、较短序列 |
例题 1:RNN 隐藏状态递推#
标量 RNN:
ht=tanh(Wxxt+Whht−1+b)已知:
Wx=1,Wh=0.5,b=0,h0=0输入序列:
x1=1,x2=0求 h1,h2。
第 1 个时间步#
h1=tanh(1×1+0.5×0)=tanh(1)≈0.7616第 2 个时间步#
h2=tanh(1×0+0.5×0.7616)=tanh(0.3808)≈0.3634答案:
h1≈0.7616,h2≈0.3634虽然 x2=0,h2 仍不为 0,因为它继承了 h1 中的历史信息。
例题 2:判断梯度消失#
假设反向传播跨越每个时间步时,梯度都乘以 0.5。跨越 8 步后,梯度还剩原来的多少?
0.58=2561=0.00390625即只剩:
0.390625%结论:
经过 8 步后梯度已非常小,早期时间步几乎无法收到有效学习信号,属于梯度消失。
例题 3:判断梯度爆炸与梯度裁剪#
假设每步反向传播把梯度放大 1.5 倍,跨越 6 步:
1.56=11.390625若末端梯度为 2,则早期梯度近似:
2×11.390625=22.78125若设置梯度范数上限为 5,则可将梯度按比例缩放:
gclip=g∥g∥5若标量梯度为 22.78125,则裁剪后为:
gclip=5结论:
- 裁剪限制了更新幅度;
- 它能控制爆炸;
- 它不能从根本上恢复已经消失的梯度。
例题 4:LSTM 细胞状态更新#
已知某一维上的门值:
ft=0.8,Ct−1=0.5,it=0.3,C~t=0.6,ot=0.7求 Ct 和 ht。
细胞状态#
Ct=ftCt−1+itC~t=0.8×0.5+0.3×0.6=0.4+0.18=0.58隐藏状态#
ht=ottanh(Ct)=0.7tanh(0.58)由于:
tanh(0.58)≈0.5227所以:
ht≈0.7×0.5227=0.3659答案:
Ct=0.58,ht≈0.3659
1. Q、K、V 的含义#
对输入矩阵 X 做三组线性变换:
Q=XWQK=XWKV=XWV其中:
- X:输入 token 的嵌入矩阵;
- WQ,WK,WV:可学习投影矩阵;
- Q:Query,表示“我正在寻找什么”;
- K:Key,表示“我包含什么可供匹配的信息”;
- V:Value,表示“如果被关注,我实际提供什么内容”。
信息检索类比:
- Query:检索请求;
- Key:索引标签;
- Value:真正返回的内容。
2. 缩放点积注意力#
Attention(Q,K,V)=softmax(dkQKT)V分四步:
第一步:相似度分数#
S=QKT每个元素 Sij 表示第 i 个 Query 与第 j 个 Key 的点积相似度。
第二步:缩放#
S~=dkS其中 dk 是 Key/Query 向量维数。
第三步:Softmax#
A=softmax(S~)Softmax 通常逐行计算。每一行代表一个 Query 对所有 Key 的注意力权重,行和为 1。
第四步:对 Value 加权求和#
O=AV其中 O 是上下文化后的输出。
3. 为什么除以根号 (d_k)#
若 Query 和 Key 各维分量近似独立、均值为 0、方差为 1,则点积:
q⋅k=r=1∑dkqrkr其方差随 dk 增大,典型尺度约为 dk。
若不缩放:
- dk 较大时点积绝对值很大;
- Softmax 输出会非常接近 one-hot;
- Softmax 进入饱和区;
- 梯度变小;
- 训练变得不稳定。
除以 dk 可把分数保持在较合适的范围。
4. Softmax 的关键性质#
对分数 si:
αi=∑jesjesi性质:
- αi>0;
- ∑iαi=1;
- 分数越大,权重越大;
- 分数为 0 不等于权重为 0;
- 只要分数有限,Softmax 输出通常严格大于 0;
- 给所有分数同时加同一个常数,Softmax 结果不变。
WARNING老师在复习课中特别提出:
Query 与 Key 内积为 0 时,attention score 为 0;但经过 Softmax 后,对应注意力权重通常不为 0。
这是非常容易出概念题的地方。
5. 多头注意力与位置编码#
若模型维数为 dmodel,有 h 个头,通常:
dk=dv=hdmodel第 r 个头:
headr=Attention(QWQ(r),KWK(r),VWV(r))拼接:
MultiHead(Q,K,V)=Concat(head1,…,headh)WO多头的意义:
- 不同头可学习不同关系;
- 有的关注语法;
- 有的关注语义相似性;
- 有的关注共指或长距离依赖。
自注意力本身不知道 token 顺序,因此需要位置编码:
Xinput=Xtoken+Xposition课程重点是理解作用,不要求死记正弦位置编码的完整公式。
例题 1:一个 Query 对两个 Key 的注意力#
给定:
q=[10]k1=[10],k2=[01]v1=[20],v2=[04]dk=2,求注意力输出。
第一步:点积分数#
qTk1=1qTk2=0所以:
S=[10]第二步:缩放#
S~=21[10]=[0.70710]第三步:Softmax#
α1=e0.7071+e0e0.7071≈0.6698α2=e0.7071+11≈0.3302第四步:对 Value 加权#
o=0.6698v1+0.3302v2=0.6698[20]+0.3302[04]=[1.33961.3208]答案:
o≈[1.33961.3208]
例题 2:分数为零时注意力是否为零#
一个 Query 对两个 Key 的缩放分数均为 0:
S~=[00]求 Softmax。
α1=e0+e0e0=21α2=21所以:
softmax([00])=[0.50.5]结论:
score=0 不代表 attention weight=0它只表示原始相似度为 0;Softmax 会根据所有候选分数的相对大小分配概率。
若希望某位置权重真正接近 0,通常需要:
- 它的分数远小于其他位置;
- 或使用 mask,把对应分数设为一个极大的负数。
例题 3:矩阵形式完整计算自注意力#
设:
Q=[1001],K=[1001],V=[1324]且 dk=2。
第一步:计算 (QK^T)#
由于 KT=K:
QKT=[1001]第二步:缩放#
S~=21[1001]≈[0.7071000.7071]第三步:逐行 Softmax#
第一行:
[0.7071,0]→[0.6698,0.3302]第二行:
[0,0.7071]→[0.3302,0.6698]所以:
A≈[0.66980.33020.33020.6698]第四步:计算 (AV)#
O=AV第一行:
0.6698[1,2]+0.3302[3,4]=[1.6604,2.6604]第二行:
0.3302[1,2]+0.6698[3,4]=[2.3396,3.3396]因此:
O≈[1.66042.33962.66043.3396]理解:
- 第一个 Query 更关注第一个 Value;
- 第二个 Query 更关注第二个 Value;
- 输出仍是两个 token,但每个 token 已融合另一个位置的信息。
例题 4:多头注意力的维度#
已知:
dmodel=512多头数量:
h=8求每个头的 dk,并说明拼接后的维度。
每个头#
dk=hdmodel=8512=64每个头的 Query、Key、Value 通常维度均为 64。
8 个头各输出 64 维:
8×64=512拼接后重新回到:
512 维再经过输出投影矩阵 WO,仍保持 dmodel=512。
六、必须掌握的概念辨析#
1. 反向传播与优化器#
| 概念 | 作用 |
|---|
| 反向传播 | 通过链式法则计算损失对各参数的梯度 |
| 梯度下降 / 优化器 | 根据梯度更新参数 |
| 损失函数 | 定义“预测有多差” |
| 学习率 | 控制每次参数更新幅度 |
正确表达:
反向传播求梯度,优化器使用梯度更新参数。
2. SGD、Momentum 与 Adam#
SGD#
- 结构简单;
- 每个 mini-batch 计算一次梯度;
- 噪声较大;
- 可能在损失谷中来回震荡。
Momentum#
- 累积过去方向;
- 抑制震荡;
- 在持续一致方向上加速;
- 微调阶段常有效。
Adam#
- 同时估计梯度均值和平方均值;
- 对各参数自适应调整步长;
- 对初始学习率相对不敏感;
- 常作为默认优化器。
3. BERT 与 GPT#
| 项目 | BERT | GPT |
|---|
| Transformer 部分 | 编码器 | 解码器 |
| 上下文方向 | 双向 | 单向 / 因果 |
| 预训练目标 | 掩码语言建模等 | 下一个 token 预测 |
| 擅长任务 | 理解、分类、命名实体识别、抽取 | 文本生成、续写、对话 |
| 是否可看未来 token | 预训练时可利用左右文 | 生成时不能看未来 token |
为什么 BERT 适合命名实体识别?
判断一个词属于人名、地点或机构时,左右两侧上下文都可能重要;BERT 的双向编码能同时利用前文和后文。
为什么 GPT 适合生成?
GPT 使用因果 mask,只根据已经出现的 token 预测下一个 token,与自然语言从左到右生成的过程一致。
4. CNN 与 ViT#
CNN#
- 用卷积核局部滑动;
- 强调局部连接和参数共享;
- 逐层扩大感受野;
- 具有较强图像结构先验。
ViT#
- 将图像切成固定大小 patch;
- 每个 patch 展平;
- 线性映射成 token 向量;
- 加位置编码;
- 输入 Transformer 编码器;
- 用自注意力学习不同 patch 的全局关系。
若图像大小为 H×W,patch 大小为 P×P,则 patch 数量:
N=PHPW例如:
224×224使用:
16×16patch:
N=14×14=1965. LLM 的训练流程#
第一阶段:预训练#
- 使用互联网规模文本;
- 目标通常是预测下一个 token;
- 学习语言规律、知识和一般能力。
第二阶段:监督微调 SFT#
- 使用高质量“指令—回答”数据;
- 让模型学习遵循人类指令;
- 改善回答格式和任务适配。
第三阶段:RLHF 或 DPO#
- RLHF:从人类偏好训练奖励模型,再优化语言模型;
- DPO:直接使用偏好对优化模型;
- 目标是提高有用性、安全性和与人类偏好的对齐程度。
6. 训练中常见问题#
| 现象 | 可能原因 | 处理 |
|---|
| 损失不下降 | 学习率太小、梯度断裂、代码错误 | 检查梯度,适当增大学习率 |
| 损失震荡 | 学习率过大、SGD 噪声大 | 降低学习率,使用 Momentum / Adam |
| 损失爆炸或 NaN | 梯度爆炸、数值不稳定 | 梯度裁剪,降低学习率 |
| 训练集好、验证集差 | 过拟合 | Dropout、权重衰减、数据增强、早停 |
| 激活大量为 0 | 死亡 ReLU | 调整初始化或学习率,使用 Leaky ReLU |
| 深层网络难训练 | 梯度消失 / 爆炸 | 合理初始化、BatchNorm、残差连接 |
| RNN 记不住远处信息 | 长距离梯度消失 | LSTM、GRU、注意力、Transformer |
七、考前速查表#
1. 前向传播#
z[l]=W[l]a[l−1]+b[l]a[l]=f[l](z[l])必须检查:
- 矩阵维度;
- 偏置;
- 激活函数;
- 最后一层任务类型。
2. 常用损失#
回归:
LMSE=N1i∑(yi−y^i)2多分类:
L=−logptrue二分类:
L=−[ylogp+(1−y)log(1−p)]3. 梯度下降#
θ←θ−η∂θ∂L4. CNN 输出尺寸#
Hout=⌊SHin+2P−K⌋+1宽度同理。
5. CNN 参数量#
Nparam=(KhKwCin+1)Cout6. RNN#
ht=f(Wxhxt+Whhht−1+bh)7. LSTM 核心状态更新#
Ct=ft⊙Ct−1+it⊙C~t8. 自注意力#
Q=XWQ,K=XWK,V=XWVAttention(Q,K,V)=softmax(dkQKT)V计算顺序:
9. 模型选择#
| 数据 / 任务 | 典型模型 |
|---|
| 表格数据 | MLP |
| 图像 | CNN / ViT |
| 时间序列 | RNN / LSTM / GRU / Transformer |
| 文本理解 | BERT |
| 文本生成 | GPT |
| 超长复杂序列 | LSTM / Transformer |
| 资源受限序列任务 | GRU |
八、自测题#
以下题目先独立完成,再对照前文。
自测 1:前向传播#
x=[2−1],W=[1−121],b=[01]使用 ReLU,求输出。
答案
z=[1−121][2−1]+[01]=[0−2]ReLU 后:
a=[00] 自测 2:卷积输出尺寸#
输入 32×32,卷积核 5×5,步幅 1,填充 2。
答案
132+4−5+1=32输出为:
32×32 自测 3:卷积参数量#
输入通道 32,输出通道 64,卷积核 3×3,有偏置。
答案
(3×3×32+1)×64=(288+1)×64=18496 自测 4:注意力#
q=[1,1],k1=[1,0],k2=[0,1]不考虑缩放,求两个 score 和 Softmax 权重。
答案
q⋅k1=1,q⋅k2=1因此:
softmax([1,1])=[0.5,0.5] 自测 5:概念判断#
“反向传播就是梯度下降。”
答案
错误。
反向传播负责计算梯度;梯度下降或 Adam 等优化器利用梯度更新参数。
自测 6:概念判断#
“Query 与 Key 的点积为 0,因此对应的 Softmax 注意力权重一定为 0。”
答案
错误。
点积为 0 只代表原始 score 为 0;Softmax 根据所有分数的相对大小分配正权重。例如:
softmax([0,0])=[0.5,0.5]
最终掌握标准#
复习完成后,应能够不看答案完成以下任务:
- 给出一个小型网络,逐层计算 z、a 和最终预测;
- 根据真实值计算 MSE 或交叉熵;
- 对简单标量网络用链式法则求梯度并更新参数;
- 对矩阵与卷积核做完整卷积;
- 计算任意基础卷积层的输出尺寸;
- 计算卷积层参数量并解释参数共享;
- 根据 RNN 递推式计算隐藏状态;
- 用连乘解释梯度消失或爆炸;
- 根据 Q,K,V 计算缩放点积注意力;
- 解释分数为 0 为什么不代表 Softmax 权重为 0;
- 区分反向传播、SGD、Momentum、Adam;
- 区分 BERT 与 GPT、CNN 与 ViT、LSTM 与 GRU。
TIP真正可靠的复习方法是:遮住答案,独立把每道例题完整写一遍。只“看懂”计算过程并不能保证考场上能够完成。