智能计算系统复习第三章

摘要

第三章 深度学习应用

卷积神经网络(CNN)

网络结构

不是所有像素之间都有联系→没必要用全连接

image-20260612142135605

卷积层

卷积核(Filter/Kernel):一个小尺寸的权重矩阵,在输入图像上滑动进行局部连接权值共享

局部连接(Local Connectivity):每个神经元只与输入的一个局部区域(感受野)连接,而非全连接。

权值共享(Weight Sharing):同一个卷积核在整个图像上共享权重,大幅减少参数量。

可有效减少权重参数,避免过拟合,为增加卷积层数提供可能

image-20260612142353248

image-20260612142603337

卷积运算可转换为矩阵相乘:

  1. 卷积的相乘再相加过程可转换为向量内积
  2. 多输入输出通道卷积可转换为矩阵相乘

卷积层如何检测特征

卷积核的选择

image-20260612142858964

参数

参数 含义
卷积核大小(Kernel Size) 通常为3x3、5x5等
步长(Stride) 卷积核滑动的步长
填充(Padding) 在输入边缘填充像素(如零填充)

输入尺寸:$H \times W$,卷积核尺寸:$K \times K$,填充:$P$,步长:$S$

$$
output = \left( \left\lfloor \frac{H + 2p - K}{s} \right\rfloor + 1 \right) \times \left( \left\lfloor \frac{W + 2p - K}{s} \right\rfloor + 1 \right)
$$

池化层(Pooling Layer)

  • 降维:减少图片尺寸,降低计算量
  • 减少参数量和计算量,防止过拟合
  • 提供平移不变性
  • 不引入额外参数

最大池化(Max Pooling):取池化窗口内的最大值,可保留特征最大值,提高特征鲁棒性。

平均池化(Average Pooling):取池化窗口内的平均值。

全连接层

卷积层和池化层构成特征提取器,全连接层则为分类器
将特征提取得到的高维特征图映射成一维特征向量,该特征向量包含所有特征信息,可转化为各个类别的概率

Softmax

通常作为网络的最后一层,对输出进行归一化,输出分类概率

$$\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=0}^{K} e^{x_j}}$$

凸显其中最大的值并抑制远低于最大值的其他分量。Softmax层的输入、输出数据规模相同。

卷积神经网络结构(CNN)结构

为什么选择”深”而非”广”的结构:

即使只有一层隐层,只要有足够的神经元,神经网络理论上可以拟合任意连续函数。但深层网络更好,因为:

  • 深度网络可从局部到整体”理解图像”:浅层卷积层感受野小,学习局部特征;深层卷积层感受野大,学习整体特征
  • 深度网络可减少权重数量:以宽度换深度,用多个小卷积替代一个大卷积,获得更多样特征的同时所需权重数量也更少

初始化

随机初始化

均匀分布初始化:从均匀分布 U(-a, a) 中随机抽取值来初始化参数值。

正态分布初始化:通常使用均值为0、标准差为σ的正态分布 N(0, σ²) 生成参数值。

Xavier初始化

Glorot条件:为保证神经网络模型的稳定性和有效性,避免梯度消失或梯度爆炸,需满足两个条件:

  1. 前向传播时,每一层的输入的方差保持一致
  2. 反向传播时,每一层的梯度的方差保持一致

i 层权重 W_i 的方差需满足:

$$Var[W_i] = \frac{2}{n_i + n_{i+1}}$$

  • 满足均匀分布的权重初值:$$W \sim U\left[-\frac{\sqrt{6}}{\sqrt{n_i + n_{i+1}}}, \frac{\sqrt{6}}{\sqrt{n_i + n_{i+1}}}\right]$$
  • 满足正态分布的权重初值:$$W \sim N\left(0, \frac{2}{n_i + n_{i+1}}\right)$$

其中 n_i 表示第 i 层中包含的神经元个数。Xavier方法适用于关于0对称、在原点处具有单位导数的激活函数(如tanh)。

Kaiming初始化

对于ReLU、PReLU这种非对称的激活函数,Xavier方法效果并不好。Kaiming初始化在满足Glorot条件的基础上,考虑使用ReLU激活函数情况:

i 层权重 W_i 的方差需满足:

$$Var[W_i] = \frac{2}{n_i}$$

  • 均匀分布:$$W \sim U\left[-\frac{\sqrt{6}}{\sqrt{n_i}}, \frac{\sqrt{6}}{\sqrt{n_i}}\right]$$
  • 正态分布:$$W \sim N\left(0, \frac{2}{n_i}\right)$$

适用于具有ReLU激活函数的神经网络,在计算机视觉任务上应用较多

梯度下降

方法 更新梯度 计算梯度的样本 特点
GD theta <- theta - alpha * grad_theta L 全部训练样本 计算复杂度高
SGD theta <- theta - alpha * grad_theta L_i 随机抽取一个样本 随机性过大,优化效率低
Mini-batch SGD theta <- theta - alpha * (1/B)sum(grad_theta L_i) 随机抽取的mini-batch样本 计算复杂度低,优化效率高

梯度下降法GD

原理:损失函数关于参数𝐀的负梯度方向是损失函数下降最快的方向,因此用负梯度方向对参数进行更新

Mini-batch SGD

  • 目前深度学习领域的SGD通常指mini-batch随机梯度下降法
  • SGD的缺点:选择合适的学习率十分困难;容易收敛到局部最优点,可能困在鞍点

动量Momentum

  • 目的:通过积累历史梯度,减小梯度方向的改变,抑制梯度的震荡,加快收敛速度

image-20260612145441313

Nesterov Accelerated Gradient (NAG)

  • 添加矫正因子的Momentum
  • 原理:先用当前速度更新一遍参数,再用更新的临时参数计算梯度
  • 相比Momentum梯度方向更加稳定,进一步减少震荡

学习率

AdaGrad

使每个参数获得不同的学习率

原理:全局学习率除以历史梯度平方和的平方根,使得每个参数学习率不同

  • 对更新频率高的参数使用小学习率,更新频率低的参数使用大学习率
  • 优势:对稀疏梯度效果好,稳定性高
  • 局限性:训练后期学习率快速缩小,导致参数更新提前停止

AdaDelta

  • AdaGrad的改进:不是累积所有过去的梯度,而是将累积窗口限制在固定大小
  • 使用最近梯度的局部估计,缓解学习率快速衰减的问题

RMSProp

  • AdaGrad的改进:增加衰减系数控制历史梯度的积累量,对梯度计算指数衰减的移动平均
  • 优势:缓解AdaGrad训练后期学习率快速减小的问题,善于处理非平稳目标
  • 目前常用在训练RNN相关的深度学习模型中

Adam

带有动量项的RMSProp

利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率

  • 结合了AdaGrad善于处理稀疏梯度和RMSProp善于处理非平稳目标的优点
  • 适用于大多非凸优化、大数据集和高维空间,训练稳定,收敛速度快

AdamW

  • 改进版Adam:权重衰减与梯度更新步骤解耦
  • 解耦了权重衰减与优化器的更新过程(把权重衰减从梯度更新中拆出来单独做,权重衰减不再受自适应学习率缩放的影响),防止过拟合

图像分类的卷积神经网络

概览

网络 年份 层数 参数量 Top-5 错误率 主要贡献 存在的问题
LeNet-5 1998 5 首个手写字体识别 CNN
AlexNet 2012 8 60M 15.3% 使用 ReLU 激活函数(收敛速度快);LRN 局部归一化;MaxPool;Dropout 防止过拟合;数据增强 LRN 后来被研究者发现无明显效果,现很少使用
VGG16 2014 16 138M 7.5% (VGG) 规整的卷积-池化结构(kernel=3×3, stride=1, pad=SAME);多层小卷积替代大卷积减少参数,且相同感受野下决策区分能力更强;由浅网络预初始化深网络加速收敛 参数量大(138M),计算开销高
VGG19 2014 19 143M 同上,层数更深 参数量更大
GoogLeNet (Inception-v1) 2014 22 7M 6.67% 提出 Inception 结构叠加多种卷积/池化获得多尺度特征;1×1 卷积降维(瓶颈层)大幅减少参数量;Softmax 辅助分类器防止梯度消失 结构较复杂
BN-Inception 2015 4.82% 提出 Batch Normalization 替代 LRN/Dropout/L2;用两个 3×3 替代 5×5 卷积;提高收敛速度和训练速度,可用更高学习率
Inception-v3 2015 42 23.9M 3.5% Factorization 思想:将 3×3 卷积拆分为 1×3 和 3×1,减少参数并增加特征多样性;辅助分类器全连接层做 BN
Inception-v4 2016 3.08% Inception 模块化,结合 ResNet 的跳转结构
ResNet-18 2015 18 11.7M 提出残差学习(Residual Learning),跳转连接解决深层网络退化问题;残差块:CNN 拟合差值 output−input,对数据波动更灵敏
ResNet-152 2015 152 60.2M 3.57% 同上,极深网络也能有效训练 层数过多,推理延迟高

任务对比

分类 定位+分类 目标检测
输入 single and big object single and big object multi and small object
输出 label label & bounding box multi label & bounding box
评价 accuracy (top1/top5) IoU (交并比) mAP (平均精度均值)

目标检测

评测指标

IoU(交并比):衡量定位准确度,一般 IoU >= 0.5 可认为定位成功。

$$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}}$$

mAP(平均精度均值)

  • 召回率/查全率 (Recall) = TP / (TP + FN) = k / M
  • 精度/查准率 (Precision) = TP / (TP + FP) = k / N
  • 选择的样本数越多,召回率越高,查准率越低

AP:对每个 recall 值,取最大的 precision 求平均

mAP:所有类别的 AP 取均值

基于CNN的目标检测算法分类

  • 两阶段(Two-Stage)算法:基于候选区域方法,先产生边界框,再做 CNN 分类(R-CNN 系列)
  • 一阶段(One-Stage)算法:对输入图像直接处理,同时输出定位及其类别(YOLO 系列、SSD)

R-CNN

R-CNN 主要步骤

  1. 候选区域提取:Selective Search 从输入图片提取约2000个候选区域
  2. 特征提取:所有候选区域裁切缩放为固定大小后,用 AlexNet 提取图像特征
  3. 线性分类:特定类别的线性 SVM 对每个候选区域做分类
  4. BBox 回归:线性回归修正边界框位置与大小

R-CNN 缺点:重复计算(2000个候选框各自做 CNN);SVM 在数据充足时非最优选择;多个步骤分散,中间数据需保存;检测速度慢(GPU 13秒/帧,CPU 53秒/帧)。

非极大值抑制(NMS)

R-CNN问题:同一目标的位置可能产生多个候选框,而这些候选框之间可能会有重叠

按检测得分排序 → 选最高分框 $M$ 加入输出 → 计算 $M$ 与其余框的 IoU → 删除 IoU > 阈值的框 → 重复直至候选框列表为空。

Fast R-CNN 改进

  • 直接对整张图像做卷积,不再对每个候选区域分别做卷积,减少大量重复计算
  • 用 ROI Pooling 对不同候选框的特征进行尺寸归一化
  • 将边界框回归器放进网络一起训练,每个类别对应一个回归器
  • 用 Softmax 代替 SVM 分类器

ROI Pooling:将不同尺寸的 ROI 对应的卷积特征图转换为固定大小的特征图。输出尺寸与输入尺寸无关。

Faster R-CNN = 候选区域生成网络RPN + Fast R-CNN。引入 RPN 直接在特征图上生成候选区域。(选框也改成卷积)

  • Anchor机制:feature map 每个位置输出 9 个可能的候选框(3种面积 128x128/256x256/512x512 × 3种长宽比 2:1/1:2/1:1)
  • 每个位置输出 2k 个得分(前景/背景概率)和 4k 个框位置参数 [x, y, w, h]
  • RPN 步骤:3x3 卷积 → 分两路(softmax 二分类前景/背景 + bbox regression)→ NMS 去除冗余 → 输出候选区域

FPN(Feature Pyramid Networks)

  • 问题:卷积操作拥有固定感受野,难以稳健地面对尺度多变的目标
  • 方法:Backbone 自下而上生成多尺度特征图 → 自上而下融合高层语义特征与低层特征
  • 显著提升了 Faster R-CNN 在小目标和中目标上的性能

One-Stage:YOLO

YOLO(You Only Look Once):将目标检测问题转换为直接从图像中提取 bbox 和类别概率的单一回归问题。YOLO 开创了 one-stage 检测的先河,实现了端到端的目标检测,速度达到 45 帧/秒。

统一检测具体实现

  • 将输入图像分为 SxS 个格子
  • 每个格子预测 B 个 bbox
  • 每个 bbox 包含 5 个预测值:x, y, w, h 和 confidence
  • confidence 综合考虑目标存在可能性 Pr(Object) 和定位准确性 IoU(pred|truth)

$$\text{confidence} = \text{Pr}(\text{Object}) \times \text{IoU}_{\text{pred}}^{\text{truth}}$$

每个格子还要预测分别属于 C 种类别的条件概率 Pr(Class|Object)。最终某 bbox 的类别置信度为:

$$\text{Pr}(\text{Class}i|\text{Object}) \times \text{Pr}(\text{Object}) \times \text{IoU}{\text{pred}}^{\text{truth}} = \text{Pr}(\text{Class}i) \times \text{IoU}{\text{pred}}^{\text{truth}}$$

最终输出 tensor 维度:$S \times S \times (B \times 5 + C)$。PASCAL VOC 中 S=7, B=2, C=20,输出 7x7x30。

YOLO(v1)优点

  1. 检测速度快(Titan X GPU 上 45 FPS,Fast YOLO 可达 155 FPS)
  2. 背景误判少(每个 cell 使用全局信息做预测)
  3. 泛化性更好(学习到目标的泛化表示,能迁移到其他领域)

YOLO(v1)缺点

  1. 邻近物体检测精度低(每个 cell 只预测两个 bbox 和一个分类)
  2. 损失函数设计过于简单(用坐标和分类的 MSE 作为损失函数不合理)
  3. 训练不易收敛(直接预测 bbox 位置,相比预测偏移量,模型收敛不稳定)

YOLO v2/v3/v4 拓展

  • v2:提高训练图像分辨率,引入 anchor box 思想,使用 Darknet-19 网络
  • v3:类似 FPN 的多尺度预测,Darknet-53(结合 ResNet),Sigmoid 代替 Softmax 用于多标签分类
  • v4:FPN+PAN 多尺度结构,引入加权残差连接(WRC)、跨阶段部分连接(CSP)、跨批量标准化(CmBN)、自对抗训练(SAT)、Mish 激活函数等技巧

YOLOv5

  • Backbone:类似 ResNet,由 1 个 Stem Layer 和 4 个 Stage Layer 组成
  • Neck:FPN + PAN(FPN 自顶向下传递强语义特征,PAN 自底向上传递强定位特征)
  • Head:耦合检测头,使用共同的 MLP 层预测类别和回归包围框
  • CIoU 损失:最大化 IoU + 最小化中心距离 + 最小化长宽比差异
  • 最受欢迎的 YOLO 版本之一

YOLO系列演化总结

版本 问题 关键方法 意义
v1 二阶段检测器较为繁琐 直接在每个格点预测类别和回归框 提出首个一阶段检测器
v2 最后一层特征分辨率低,定位不准确 使用旁路层融合高分辨率和低分辨率特征 增强小物体检测能力
v3 对多尺度目标的稳健性差 引入残差网络架构和FPN 增强多尺度物体检测能力
v4 特征复用率低 用PAN替代FPN,引入CSPNet作为Backbone 保证计算量同时提升精度
v5 当预测框与GT框不重合时(IoU=0),无法计算损失 提出CIoU损失 良好整合各类方法,最受欢迎版本之一
X 类别和回归框都使用同一网络预测 解耦检测头 解耦检测头得到广泛应用
v7 需要更深的网络,传统辅助损失难以收敛 提出ELAN作为Backbone;设计Coarse to Fine标签分配 进一步提升性能
v8 对v5进行重构,进一步整合现有方法 C2F模块替换C3;解耦检测头;优化底层代码 成为现今主流项目的基检测器
v9 探索训练时更高效的梯度反传 提出可编程梯度信息模块PGI辅助训练 增强可解释性、鲁棒性和通用性
v10 NMS策略面临多对一困境,卷积无法建模全局关系 引入一对一检测头,匈牙利匹配;提出PSA融合卷积和Transformer 进一步提高训练效率和准确性

图像生成的卷积神经网络

Driving Example:图像风格迁移(Image Style Transfer)

  • 使用在 ImageNet 上训练好的 VGG19(去除最后的全连接层和 softmax)
  • 给定一张风格图像 $a$ 和一张内容图像 $p$,输入一张随机噪声图像 $x$
  • 损失函数希望 $x$ 既保持内容图像 $p$ 的内容,又有风格图像 $a$ 的风格

内容损失函数(只取 conv4 单层特征):

$$\mathcal{L}{\text{content}}(p, x, l) = \frac{1}{2}\sum{i,j}(F_{ij}^l - P_{ij}^l)^2$$

其中 $F_{ij}^l$ 为生成图片在第 $l$ 层第 $i$ 个特征图上位置 $j$ 处的特征值,$P_{ij}^l$ 为内容图片的对应特征值。

风格损失函数(取 conv1~conv5 共5层特征,使用 Gram 矩阵表示图像风格):

$$G_{ij}^l = \sum_k F_{ik}^l F_{jk}^l$$

$$\mathcal{L}{\text{style}}(a, x) = \sum{l=0}^L w_l \frac{1}{4N_l^2 M_l^2}\sum_{i,j}(G_{ij}^l - A_{ij}^l)^2$$

其中 $w_l$ 为各层权重(文中都取 0.2),$A_{ij}^l$ 为风格图片在第 $l$ 层的 Gram 矩阵。

Real-Time Image Style Transfer

  • 对每张待转换图片都要进行前馈和反馈调优过程,无法做到实时转换
  • 提前训练好图像转换网络(Image Transform Net),风格转换过程不需要进行反向训练
  • Image Transform Net 参考 DCGAN 设计:用步长卷积和小数步长卷积替代 pooling、每个卷积层后接 BatchNorm 和 ReLU、增加残差结构

图像生成模型概述

  • 判别模型:学习数据的模式/特征(图像识别)
  • 生成模型:学习数据的分布(图像生成)
  • 生成模型分类:GAN、VAE、Flow-based、Diffusion

image-20260612152437894

生成对抗网络(GAN)

解决的问题:从训练样本中学习出新样本。为无监督、预测学习提供算法框架

  • 生成器(伪装者):找出观测数据内部的统计规律,尽可能生成能够以假乱真的样本

  • 判别器(警察):判断输入数据是来自真实样本集还是生成样本集

训练过程

image-20260612152653022

  • 更新判别网络:输入真样本 $x$ 时输出接近1,输入生成样本 $G(z)$ 时输出接近0
  • 更新生成网络:生成的假样本 $G(z)$ 被判别器判断为接近1,即 $1 - D(G(z))$ 越小越好

GAN训练是极小极大博弈问题(或零和博弈)

$$\min_G \max_D V(D,G) = \mathbb{E}{x \sim p{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]$$

GAN问题

  • 梯度消失:当判别器以高置信度成功判断生成器生成的样本为假时,生成器的梯度会消失。应对方法:修改生成器的代价函数
  • 模式崩溃(Model Collapse):生成器只生成几种模式的样本,生成样本缺乏多样性。应对方法:采用更平滑的损失函数(如 Wasserstein GAN)

DCGAN:将全连接神经网络扩展到卷积神经网络。判别器用步长卷积,生成器用小数步长卷积取代池化层;使用 BatchNorm;生成器用 Tanh 输出,ReLU 其他层;判别器用 LeakyReLU

Conditional GAN(CGAN):生成器和判别器输入中加入辅助信息(类别标签或其他模态数据),获得预期的输出

  • 其他:ResGAN(图像恢复)、SRGAN(超分辨率)、CycleGAN(图像转换)、InfoGAN、BiGAN、VAE-GAN 等

GAN应用:人脸生成、风格转换、超分辨率等。

适合语音/文本处理的循环神经网络(RNN)

循环神经网络(RNN)(原始种)

语言模型

序列数据:有先后顺序的一组数据,数据间有相互依赖关系。

语言模型估计序列发生的概率分布:

$$P(x_1, x_2, \cdots, x_T) = \prod_{t=1}^{T} P(x_t | x_1, x_2, \cdots, x_{t-1})$$

文本处理流程

分词(Tokenization):将文本字符串划分为有意义的基本单元(词元/Token)。

Token 的不同粒度:

  • Character-level:token 为字符(序列较长,字符本身无意义)
  • Word-level:token 为单词(无法处理未见过的词,相近词划分成不相关 token,对无分隔符语言如中文难以划分)
  • Subword-level:token 为 subword。词表构建是动态的,频率高的 word 有自己的 token,频率低的被划分为 subword

BPE(Byte Pair Encoding,字节对编码):目前 LLM 中常用的词元化方法。

  1. 初始化词表,每个字符为一个词元
  2. 将频率最高的一对词元合并为一个词元,词表大小+1
  3. 根据合并后的词元对语料重新分词
  4. 重复第2-3步,直到词表大小达到要求

GPT词表 40478:478 base characters + 40000次合并。

词元化后处理:建立词元到词表索引的字典,将文本中的词元转换为索引。词表需添加特殊字符(unk, pad, bos, eos 等)。

嵌入(Embedding):将离散的 token 转化为固定维度的连续数值向量表示。

方法 特点
One-hot 长度为词表大小的向量,只有一个位置为1。缺陷:无法表达词间相似度,维度高,稀疏,计算不友好
Word2Vec 稠密表示,维度低,计算友好。能较准确表达不同词之间的相似性和关系。CBOW 和 Skip-gram 两种预训练方法
Embedding 矩阵(Transformer用) 输入 token 用 one-hot 编码,矩阵乘法简化为查表操作,在训练过程中学习权重

RNN结构

正向计算过程

初始时刻:$h_0$ 为输入的初始零向量。

$$h(t) = f(Wh(t-1) + Ux(t) + b)$$

$$o(t) = Vh(t) + c$$

$$\hat{y}(t) = \text{softmax}(o(t))$$

其中 $f$ 常用 tanh 或 ReLU 激活函数。$W$、$U$、$V$、$b$、$c$ 在时间序列上共享参数。

image-20260612153451309

三个核心特性

  • 时序(Sequence):前后输入数据 $x(t)$ 和 $x(t+1)$ 不独立,相互影响
  • 循环(Recurrent):对每个输入的操作都一样,循环往复,每时刻有相同参数(参数共享)
  • 记忆(Memory):隐藏层 $h(t)$ 捕捉所有时刻之前的信息,理论上记忆内容可以无限长

多种输入-输出结构:序列转化为序列、序列作为输出、序列作为输入、同步序列转化为序列。对序列的长度无要求,不用预先定义。

反向传播 BPTT(Back-Propagation Through Time)

单个时刻的损失函数:

$$E(t) = -y(t) \ln \hat{y}(t)$$

整个序列的损失函数:

$$E = \sum_{t=1}^{T} E(t) = -\sum_{t=1}^{T} y(t) \ln \hat{y}(t)$$

损失函数对 $W$ 的偏导为:

$$\frac{\partial E}{\partial W} = \sum_{t=1}^{T} \frac{\partial E(t)}{\partial \hat{y}(t)} \cdot \frac{\partial \hat{y}(t)}{\partial o(t)} \cdot \frac{\partial o(t)}{\partial h(t)} \cdot \frac{\partial h(t)}{\partial W}$$

RNN的梯度消失与梯度爆炸

  • 由于梯度爆炸或梯度消失的存在,循环神经网络实际上只能学习到短期的依赖关系
  • 梯度爆炸 → 梯度截断解决
  • 梯度消失 → 模型上的改进,如 LSTM、GRU 算法

当相关信息和预测位置的间隔拉长时,RNN 无法学会连接信息。

长短期记忆模型(LSTM)

隐藏状态:作为神经网络的记忆,保存着网络先前观察到的数据信息。引入”单元状态(Cell State)”$C(t)$ 作为信息传送带,通过三个门限管理信息的增加和删除。

image-20260612153750577

三个门限

遗忘门:记住前一时刻单元状态的多少内容

输入门:写入多少输入到当前单元

输出门:输出多少当前单元状态

LSTM cell输出

$$h_t = o_t \times \tanh(C_t)$$

LSTM变体

  • 窥视孔连接(Peephole Connection):门值不仅取决于 $h_{t-1}$ 和 $x_t$,也取决于上一个单元状态 $C_{t-1}$
  • 耦合输入门和遗忘门:不单独决定遗忘和新增信息,在输入时一起做决定($f_t = 1 - i_t$)

门控循环单元(GRU)

在 LSTM 基础上,将单元状态和隐藏状态合并,将遗忘门和输入门合并为更新门,无输出门。

更新门决定历史信息和当前信息如何相加;重置门决定保留多少历史信息。

LSTM与GRU对比:哪个模型更好无定论。GRU 参数量更少,训练速度快;数据充足时 LSTM 表征能力更强。

从深度学习到大模型

Seq2Seq模型

Sequence-to-Sequence:序列到序列模型,将一种时序数据转换为另一种时序数据。应用:机器翻译、对话系统、自动文摘。

结构:由编码器(Encoder)和解码器(Decoder)组成。

  • 编码器根据输入数据生成语义编码 $e$
  • 解码器根据该语义编码输出处理结果
  • 适用于输入序列和输出序列不等长的情况

传统 Seq2Seq 通常使用 RNN 或 LSTM 作为编码器和解码器。

Seq2Seq问题

  1. 固定长度的语义编码难以存储较长输入序列的所有信息,严重影响模型性能
  2. 语义编码中每个元素权重相同,模型无法区分各个元素的重要程度
    → 注意力机制解决

注意力机制

基本注意力机制

注意力机制可以抽取少量重要信息,并聚焦于这些重要信息,忽略大多数不重要的信息。通过对输入部分赋予不同的权重,有效抽取关键信息。有效地提升基于RNN(LSTM)的Seq2Seq模型的信息处理能力

计算过程

  1. 计算相似度:

$$a_{ij} = \text{softmax}(f(s_{i-1}, h_j))$$

其中 $f(Q, K) = V^T \tanh(WQ + UK)$

  1. 注意力汇聚:

$$c_i = \sum_{j} a_{ij} h_j$$

注意力的优势:聚焦关键信息使模型做出更准确的判断;可以并行运算,比 RNN 等序列化计算速度快。

缩放点积注意力(Scaled Dot-Product Attention)

输入:查询 $Q$、键 $K$、值 $V$,每个值 $V$ 都与一个键 $K$ 配对。

  • Q(查询,Query):代表当前要“问”的位置,例如当前要翻译的目标词或要预测的位置。它来自目标序列(解码器)或源序列(自注意力)。
  • K(键,Key):代表输入序列中每个位置的key,用于与 Q 匹配。在自注意力中,K 与 Q 来自同一个输入序列。在编码器-解码器注意力中,K 来自编码器输出。
  • V(值,Value):代表输入位置携带的“实际内容”,根据 Q 与 K 匹配的权重来加权求和,得到输出。

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + \text{Mask}\right) V$$

点积:查询向量 Q 与每个键向量 K 做点积,得到一个分数,表示当前查询与各个输入位置的“匹配程度”

缩放:除以 $\sqrt{d_k}$ 的原因:当 $d_k$ 较大时 $QK^T$ 内积值可能很大,除以 $\sqrt{d_k}$ 使 $QK^T$ 内积的方差变为1,获得较大的 softmax 梯度,防止梯度消失。

自注意力(Self-Attention)

$Q$、$K$、$V$ 都来源于同一组输入

自注意力 vs 传统注意力:

  • 自注意力:对输入自身进行计算,再把输入端的自注意力权重加入到对输出的影响中。不仅可以捕捉输入和输出的相关关系,还可以捕捉输入内部的相关关系
  • 传统注意力:基于输入和输出计算注意力权重。仅能捕捉输入和输出之间的相关关系

多头注意力(Multi-Head Attention)

基于相同的注意力机制学习不同的知识,再进行组合。

$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O$$

$$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$

  • 对 QKV 进行 $h$ 组不同的线性变换
  • 将 $h$ 组不同线性变换后的 QKV 并行计算注意力
  • 将 $h$ 组注意力计算结果拼接在一起,并进行线性映射

Transformer

整体架构

  • 遵循 Seq2Seq 结构编码器(Encoder)+ 解码器(Decoder)
  • 去掉了循环神经网络结构(效率低,无法并行训练)
  • 大量重复使用 attention 机制

词元嵌入:通过学习 Embedding 矩阵将 token ID 转换为向量。

位置编码(Position Encoding):使用波长从 $2\pi$ 到 $10000 \cdot 2\pi$ 的不同正弦和余弦函数计算。

image-20260612160409236

编码器(Encoder)

由 N个相同的层组成(N=6),每层包含两个子层:

  • 多头自注意力(Multi-Head Self-Attention):$Q$、$K$、$V$ 同源,无 mask
  • 前馈网络(Feed-Forward Network):先升维再降维(512→2048→512),使用 ReLU 引入非线性变换,序列中每个位置共享相同权重

每个子层增加残差连接和层归一化(Layer Norm)

  • 原理:将中间层的输入标准化为均值为0、方差为1的高斯分布
  • 沿 embedding 方向,对每个嵌入向量分别计算
  • 作用:缓解梯度消失问题,加快收敛速度;可以达到类似正则化的效果,防止过拟合;降低调参难度,可以使用较大的学习率

解码器(Decoder)

由 6 个相同的层组成,每层包含三个子层:

  • 带 mask 的多头自注意力:捕捉输出序列内部的相关关系。mask 去掉当前位置后面 token 的影响,满足自回归性质

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M\right) V$$

其中 mask 矩阵 $M$ 的右上角值设为 $-\infty$。

  • 交叉注意力(Cross-Attention):$Q$ 来自解码器自注意力子层的输出,$K$、$V$ 来自编码器输出,捕捉输入序列和输出序列之间的相关关系
  • 前馈网络

解码器的输入

  • 编码器的输出,以及上一个位置的解码器输出
  • 训练时:有编码器输入对应的 label(整体向右偏移一位),可以并行处理
  • 推理时:没有 label,需要逐个位置进行解码,无法并行

输出:先经过线性变换(全连接层)将输出映射为词汇表空间,再经过 softmax 输出下一个词元的概率分布。

推理过程

  • Prefill 阶段:输入提示词,生成第一个词元。分析全部提示词,用时较长,同时将注意力模块中的 K、V 缓存下来(KV-Cache)
  • Decode 阶段:自回归生成,直到生成终止符

输出

先经过一个线性变换(全连接层),将输出映射为词汇表空间
再经过softmax,输出下一个词元的概率分布

自然语言处理大模型

三种架构

架构 代表模型 适用场景
Encoder-Decoder 原始 Transformer, T5, GLM Seq2Seq 任务(机器翻译、生成对话)
Encoder-Only BERT 文本分类、情感分析等 NLU 任务
Decoder-Only GPT, Llama, DeepSeek 序列生成任务(从已有信息扩展出新内容)

BERT(Encoder-Only)

  • 采用 Transformer 编码器部分,双向 Block 连接(无 mask,每个位置可以看到序列前后的位置)

预训练:利用互联网上大量无标签的语料数据进行自监督训练:

  • 完形填空(Masked LM)
  • 判断两句话之间是否有上下文关系(NSP)

微调:利用下游任务的有标签数据进行微调,可快速应用于文本分类、序列标注、信息检索等多种下游任务。

优势:大量无标签文本上无监督预训练;挖掘了预训练阶段的潜力;可通过微调快速迁移到各种下游任务适合各种自然语言理解 NLU 任务

不足:由于只使用了编码器部分且没有解码器结构,不适合直接处理自然语言生成 NLG 任务;只适合处理句子和段落级别的任务,不适合文档级别的任务。

GPT系列

GPT:提出了 NLP 领域的预训练-微调统一框架。

采用 Transformer 解码器结构:带 mask 的自注意力 + FFN。

预训练(无监督):自回归,给定前 $k$ 个词预测第 $k+1$ 个词。

目标函数为语言模型:

$$\mathcal{L}1(\mathcal{U}) = \sum_i \log P(u_i | u{i-k}, \cdots, u_{i-1}; \Theta)$$

其中 $P$ 是 GPT 模型,使用 mask 保证仅利用前 $k$ 个词计算。

微调(有监督):使用下游任务的数据集和标签,新添加的层从头训练,其他参数微调。最终目标函数为预训练与微调目标函数的加权求和。

$$\mathcal{L}_3(\mathcal{C}) = \mathcal{L}_2(\mathcal{C}) + \lambda \cdot \mathcal{L}_1(\mathcal{C})$$

其中 $L_2(C)$ 为下游任务的目标函数。

GPT-2

  • 核心思想:无需特定任务的监督微调,在预训练阶段使用语言模型建模多种下游任务
  • 采用 Pre-LN(Layer Norm 放在子层前面),使各子层的梯度范数保持不变,有利于稳定优化
  • 更大的参数量(对标 BERT-large 1.5B),更多层,更多训练数据(40GB vs 5GB)

GPT-3

  • 无需微调,利用少量示例提升泛化能力(Few-Shot)
  • 96层/96头/12288维/175B参数,数据量 540GB(filter后)
GPT GPT-2 GPT-3
框架 预训练-微调 仅预训练,无需微调 仅预训练,无需微调
参数量 117M 1.5B 175B
数据量 5GB 40GB 540GB(filter后)
时间 2018.6 2019.2 2020.5
  • 尺度定律(Scaling Law):增加模型计算量、训练数据量、模型参数规模,Loss 都会单调降低,模型效果越来越好
  • 涌现能力(Emergent Ability):当模型规模大到一定程度(约60B),模型能力出现飞跃
  • Zero-shot/One-shot/Few-shot:零/一个/若干个示例,无参数更新。传统微调:样本用于参数更新

InstructGPT:使用来自人类反馈的强化学习(RLHF)对预训练大模型进行微调。

  1. 人类标注产生数据,监督方式微调 GPT-3
  2. 利用人类标注数据训练一个奖励模型
  3. 利用奖励模型提供 reward,利用 PPO 微调 step1 的 GPT-3
Llama系列

Llama 的改进

  • 前置 RMSNorm 作为层归一化方法,增强训练稳定性
  • 采用 SwiGLU 激活函数,提高模型性能
  • 采用旋转位置编码 RoPE,建模长序列数据
  • 部分模型采用分组查询注意力机制 GQA,平衡效率和性能

RoPE(旋转位置编码)

使用旋转矩阵编码绝对位置,在自注意力操作中加入相对位置信息,在每个 Transformer 层中注入位置信息。

$$f_{{q,k}}(x_m, m) = R^d_{\Theta,m} W_{{q,k}} x_m$$

任意偶数维的 RoPE 可以表示为二维形式的拼接。

优势:支持长序列,并且随着相对距离增加,词元间依赖下降。

DeepSeek系列

DeepSeek-V3

  • 671B 参数,每 token 激活 37B
  • 61层 Transformer layers,从第4层开始 FFN 替换为 MoE
  • hidden dimension = 7168,注意力头 128,单头维度 128
  • KV 压缩维度 512,Q 压缩维度 1536,旋转位置编码维度 64
  • SwiGLU 激活函数
  • MoE:1 shared expert + 256 routed experts,每 token 激活 8 个 routed experts

MLA(Multi-head Latent Attention):性能优于 MHA,KV cache 远低于 MHA(小 MoE 约14%,大 MoE 约4%)。

Decoder-Only成为主流的原因探讨
  • prompt 可以更加直接地作用于 decoder 每一层的参数,无需经过编码器的转换,微调的信号更强
  • 双向 attention 的注意力矩阵容易退化为低秩状态,而 causal attention 的注意力矩阵是下三角矩阵,必然是满秩的,建模能力更强
  • causal attention 具有隐式的位置编码功能
  • decoder-only 支持复用 KV-Cache,计算效率更高
  • Megatron 和 FlashAttention 等重要工具对 causal attention 支持更好
  • 实验表明 zero-shot 泛化性能和 in-context learning 能力更强

大模型中的函数/方法变体

激活函数

Swish激活函数

$$\text{Swish}(x) = x \cdot \text{sigmoid}(x)$$

更加平滑,可以更好的优化和更快的收敛,减少过拟合提高泛化性。

SwiGLU激活函数(Llama3, DeepSeek 等):

$$\text{SwiGLU}(x, W, V, b, c) = \text{SiLU}(xW + b) \odot (xV + c)$$

归一化

RMSNorm(均方根归一化)

Layer Norm 中包含平移和缩放不变性,RMSNorm 去除平移,只保留缩放。效果相当,计算更简单,更稳定。

注意力变体
类型 特点
MHA(Multi-Head Attention) 每个 head 有自己单独的 K、V
MQA(Multi-Query Attention) 所有 Q 共享 K、V
GQA(Grouped-Query Attention) Q 分成 N 个组,每个组共享 K、V

GQA 和 MHA 效果相当,取得了 performance 和速度的 trade-off。

KV cache

Test-time Scaling(TTS)

o1:通过延长推理时间使模型获得强大的推理能力。

R1 两大要素

  • 准确率奖励:有一个几乎完美的验证器(rule-based reward)
  • 格式奖励:Question + Think + Answer
  • 训练算法:GRPO、PPO 或其他强化学习算法

R1-Zero 训练现象

  • 仅通过两个简单的奖励(准确率奖励 + 格式奖励),模型似乎自己学会了 test-time scaling
  • 随着训练进行,准确率稳定上升,回答长度稳定上升
  • R1 的 “aha moment”:大模型在某个中间训练步骤,自己学会了反思
  • Budget forcing:强行给将要结束的回答添加 “wait”,模型会继续思考,并且准确率真的能继续提升

R1 完整训练流程

  1. 用 R1-zero 生成的 CoT 数据进行手工/规则改写 → SFT → 阶段一模型
  2. 准确率奖励 + 可读性奖励 → RL 训练
  3. 阶段一模型生成的推理数据 + V3 通用数据 → SFT
  4. RLHF 的奖励模型 → 最终微调

推理能力的通用性

  • 使用纯 Verilog R1 数据蒸馏能大幅提升代码模型的数学能力,达到非 R1 数学专用模型水平
  • 使用纯数学数据 RL 能大幅提升 Verilog 代码生成能力(32B 模型 performance 从 0.355 → 0.516)