概述
这一章的核心是:
深度学习把模型写成由多层线性变换和非线性激活函数组成的函数族,再通过数据和优化算法学习其中的参数,使模型能够完成预测、分类、生成等任务。
本章的主线可以概括为:
- 神经网络是什么:输入经过加权求和、偏置、激活函数,逐层变成输出。
- 为什么需要深度:浅层网络理论上能逼近连续函数,但深层网络通常更有参数效率,也更适合处理层次化数据。
- 网络如何训练:先定义损失函数,再用反向传播高效求梯度,最后用 SGD、Momentum、Adam 等方法更新参数。
- 如何评价与防止过拟合:训练集、验证集、测试集分工明确;偏差、方差、噪声共同决定测试误差。
- 典型模型结构:CNN 处理图像,RNN/LSTM/GRU 处理序列,Transformer 处理长距离依赖并支撑大语言模型。
- 生成式模型与现代深度学习:GAN、VAE、扩散模型、LLM、多模态模型、高效训练和负责任 AI。
在海洋人工智能场景中,深度学习尤其常用于两大类任务:
- 海洋环境感知:水下机器人、海洋生物识别、海底目标检测、海洋安防等。
- 海洋能源与资源勘探:海底地貌分析、地震图像分割、油气与矿产相关结构识别等。
老师课上举的例子包括:从海底成像中寻找沉船、考古材料或其他目标;利用深度学习对海底地貌进行目标检测;从三维地震图像中分割出古河道等地下结构,为油气和矿产勘探解释提供依据。
目录
- 概述
- 目录
- 深度学习的背景与课程主线
- 神经网络基础
- 浅层神经网络
- 深度神经网络
- 网络参数学习
- 网络性能评估与正则化
- 卷积神经网络 CNN
- 序列模型:RNN、LSTM、GRU
- Transformer
- 深度生成模型
- 现代深度学习与前沿
- PyTorch 实践框架
- 本章总结
- 参考文献
深度学习的背景与课程主线
人工智能、机器学习与深度学习
人工智能是一个很大的概念。早期人工智能更多依赖规则、逻辑和专家系统;机器学习强调从数据中学习规律;深度学习则是机器学习中的一类方法,它用多层神经网络从原始数据中自动学习特征表示。
深度学习的核心特征:
- 使用多层人工神经网络;
- 能从原始数据中自动提取层次化特征;
- 适合端到端训练;
- 在图像、语音、文本、科学计算和海洋数据分析中都有广泛应用。
TIP端到端学习可以理解成:输入原始数据,输出任务结果,中间特征由模型自己学出来。
例如图像分类中,传统方法可能要人工设计边缘、纹理、颜色直方图等特征;深度学习通常直接输入图像像素,由网络逐层学习边缘、纹理、局部结构和物体语义。
深度学习发展快的原因
老师课上强调,深度学习在近十多年快速发展的原因主要有三点:
- 数据规模变大:互联网和移动设备产生了海量文本、图像、视频、传感器和交互数据。
- 计算能力提升:GPU / TPU 能高效处理矩阵和张量运算,适合深度网络中的大规模并行计算。
- 开源生态成熟:PyTorch、TensorFlow、JAX 以及大量公开代码、模型和教程显著降低了学习和应用门槛。
其中 GPU 原本主要用于图形渲染,后来被发现非常适合深度学习中反复出现的矩阵乘法和张量计算,由此推动了深度学习训练效率的大幅提升。
深度学习时间线
课件给出的发展线索如下:
- 1943:McCulloch-Pitts 神经元,提出早期神经元数学模型。
- 1950:图灵测试,提出“机器能否思考”的经典问题。
- 1956:达特茅斯会议,“人工智能”概念正式出现。
- 1958:Rosenblatt 感知器,可处理线性可分分类问题。
- 1969:Minsky 与 Papert 指出单层感知器无法解决 XOR 问题,引发早期神经网络低潮。
- 1986:Rumelhart、Hinton、Williams 推动反向传播训练多层网络。
- 1990s-2000s:统计机器学习占主导,如 SVM、随机森林、核方法等。
- 1997:LSTM 被提出,用于缓解序列模型的梯度消失问题。
- 2006:深度信念网络推动“深度学习”重新受到关注。
- 2012:AlexNet 在 ImageNet 上取得突破,GPU、ReLU、Dropout 等方法共同推动计算机视觉发展。
- 2015:ResNet 使非常深的网络训练成为可能。
- 2017:Transformer 提出,成为现代 NLP 和大模型的基础。
- 2018 以后:BERT、GPT 系列、大语言模型、多模态模型快速发展。
本章与课程安排
本部分课程共 6 次课,主线为:
- 神经网络基础:神经元、层、激活、前向传播、损失函数、PyTorch 入门。
- 网络训练:反向传播、优化器、正则化、初始化、BatchNorm、训练调试。
- CNN:卷积、池化、LeNet / AlexNet / VGG / ResNet、迁移学习。
- 序列模型:RNN、LSTM、GRU、词嵌入、seq2seq、注意力的引入。
- Transformer:自注意力、多头注意力、位置编码、BERT、GPT。
- 现代深度学习:LLM、多模态模型、ViT、CLIP、扩散模型、高效训练、负责任 AI。
神经网络基础
生物神经元与人工神经元
人工神经网络受到生物神经元的启发,但二者的关系主要停留在结构类比上。
对应关系可以粗略理解为:
- 树突接收信号 → 输入变量;
- 突触连接强度 → 权重;
- 细胞体综合信号 → 加权求和;
- 超过阈值后释放信号 → 激活函数输出;
- 轴突传出信号 → 输出值。
WARNING生物神经元和人工神经元只是松散类比。学习人工神经网络时,更重要的是把它看成一种可训练的数学函数。
单个神经元的计算
单个神经元的基本计算是:
然后经过激活函数:
其中:
- 是输入;
- 是权重;
- 是偏置;
- 是预激活值;
- 是激活函数;
- 是激活后的输出。
图示理解:
x1 -- w1 --\x2 -- w2 ----> Σ + b ---> a(·) ---> yx3 -- w3 --/为什么需要非线性激活函数
如果网络每一层只有线性变换,那么多层叠加后仍然只是一个线性变换:
这时堆叠很多层也无法表达复杂的非线性关系。
激活函数的作用就是在层与层之间引入非线性,使网络可以表示复杂函数。课上老师也强调:如果没有非线性激活函数,整个网络框架就会退化成线性回归式的模型。
常见激活函数
| 激活函数 | 表达式 / 特点 | 优点 | 问题 |
|---|---|---|---|
| Sigmoid | 输出范围 | 平滑,可解释为概率 | 容易梯度消失,输出不以 0 为中心 |
| Tanh | 输出范围 | 以 0 为中心 | 仍容易梯度消失 |
| ReLU | 计算快,正半轴梯度为 1 | 负半轴梯度为 0,可能出现死亡 ReLU | |
| Leaky ReLU | 负半轴保留小斜率 | 缓解死亡 ReLU | 多一个超参数 |
| PReLU | 负半轴斜率可学习 | 更灵活 | 参数更多 |
| GELU / SiLU / Swish | 平滑非线性 | 常用于现代模型 | 计算稍复杂 |
ReLU 的直观效果是:正值保留,负值截断为 0。
TIP课件建议:一般可以从 ReLU 开始;Transformer 类模型中常见 GELU。
前向传播
前向传播就是数据从输入层逐层流向输出层的过程。
对第 层,可以写成:
其中 。网络最后输出 logits、概率或回归值,再与真实标签计算损失函数。
一个两层全连接网络可以写为:
import torch.nn as nn
class TwoLayerNet(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super().__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes)
def forward(self, x): x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x这段代码对应的就是:线性层 → ReLU → 线性层。
浅层神经网络
标量输入输出的浅层网络
浅层神经网络可以表示为一个函数:
教材中给出的单输入、单输出、三个隐藏单元的例子为:
计算过程分三步:
- 输入 与不同参数形成多个线性组合;
- 每个线性组合经过激活函数,得到隐藏单元 ;
- 隐藏单元再加权求和,加上输出偏置得到 。
ReLU 与分段线性函数
如果激活函数使用 ReLU,每个隐藏单元会把一条线性函数的一部分截断。多个隐藏单元的结果加权相加后,得到的输出函数通常是一个分段线性函数。
对单输入情况来说:
- 每个 ReLU 隐藏单元会引入一个分界点,也叫 joint(关节);
- 个隐藏单元最多引入 个关节;
- 因此输出函数最多包含 个线性区域。
教材图 6.2 的意思是:
- 输入 先生成三条不同的线性函数;
- ReLU 把每条线性函数的负值部分截断;
- 截断后的函数再分别乘以输出权重;
- 最后相加得到一个分段线性函数。
TIP可以把浅层 ReLU 网络理解成:用很多小段直线去拼接一个复杂曲线。隐藏单元越多,可用的小段越多,局部近似能力越强。
万能逼近定理
万能逼近定理说明:
只要隐藏单元数量足够多,具有单个隐藏层的前馈网络可以以任意精度逼近紧集上的连续函数。
这个定理的重要含义是:神经网络在表达能力上不存在根本障碍。
但要注意三点:
- 它说明“存在”这样的网络,通常不告诉我们怎样找到参数。
- 所需隐藏单元数量可能非常大,尤其在高维输入时可能不现实。
- 深度网络通常可以用更少参数表达某些复杂函数。
对于多输入情况,每个 ReLU 隐藏单元引入的是一个超平面。多个超平面把输入空间切分成多个线性区域,每个区域对应一组隐藏单元激活状态。
若输入维度为 ,隐藏单元数为 ,且 ,浅层网络最大线性区域数量为:
浅层网络的一般形式
设输入 ,隐藏单元 ,输出 。
每个隐藏单元:
输出单元:
其中 和 都是网络参数。
深度神经网络
深度网络的基本形式
浅层网络只有一个隐藏层;深度神经网络包含多个隐藏层。
用层数和宽度描述:
- 深度:隐藏层数量;
- 宽度:每层隐藏单元数量;
- 模型容量:由深度、宽度和结构共同决定。
组合网络:深度的直观来源
教材用两个浅层网络组合的例子解释深度网络。
第一个浅层网络把 映射到 :
第二个浅层网络再把 映射到 。把第一个网络的输出代入第二个网络后,就等价于一个有两个隐藏层的深度网络。
关键理解:
深度网络可以看成多个简单函数的组合。前一层把输入空间折叠、变换、重表示,后一层在新的表示空间里继续处理。
在 ReLU 网络中,这种组合能显著增加线性区域数量。例如教材例子中,两个小网络组合后可以产生 9 个线性区域,而同样 6 个隐藏单元的浅层网络最多产生 7 个线性区域。
矩阵表示
对于具有 个隐藏层的深度网络,前向传播可以写为:
其中:
- :第 层隐藏单元向量;
- :第 层权重矩阵;
- :第 层偏置向量;
- :逐元素作用的激活函数。
深度网络相对浅层网络的优势
参数效率
浅层网络也能拟合复杂函数,但可能需要极宽的隐藏层。深度网络通过组合简单变换,常常能用更少参数产生更多线性区域。
深度效率
有些函数用浅层网络近似时需要指数级数量的神经元,而深层网络可以用较少层数和单元实现相近精度。
层次化处理
图像、语音、文本等数据通常具有层次结构。
例如图像:
边缘 -> 纹理 -> 局部结构 -> 物体部件 -> 整体物体这种从局部到整体的处理天然适合多层结构。
训练与泛化
适度加深的网络往往比极宽浅层网络更容易训练,并且在新数据上表现更好。但层数继续增加后也可能出现梯度消失、梯度爆炸等问题,因此需要残差连接、归一化和合理初始化等技术。
网络参数学习
损失函数
训练神经网络的目标是从数据集中学习参数:
找到一组参数 ,使模型 的预测尽可能接近真实标签。
损失函数 用来衡量预测结果和真实结果之间的差异。训练可以写成优化问题:
常见损失函数:
| 任务 | 常用损失 | 说明 |
|---|---|---|
| 回归 | MSE | 对大误差惩罚更重 |
| 回归 | MAE | 对异常值更鲁棒 |
| 二分类 | Binary Cross Entropy | 输出通常是一个 logit 或概率 |
| 多分类 | Cross Entropy | 通常与 softmax 搭配使用 |
最大似然、负对数似然与交叉熵
实际问题中,相同输入 下的输出 可能受噪声和未观测因素影响,所以可以用条件概率分布描述:
最大似然思想是:让模型参数使已观测训练数据出现的概率最大。
若假设训练样本相互独立,并且神经网络输出的是分布参数,则有:
实际计算中常取负对数,把最大化概率转成最小化负对数似然:
例:正态分布假设推出最小二乘损失
若回归任务中假设:
则:
代入负对数似然后,和 无关的常数项可忽略,得到:
这就是最小二乘损失。
TIP交叉熵和负对数似然在监督学习分类任务中常常得到同一个训练目标。最大似然来自概率估计视角,交叉熵来自信息论视角。
梯度下降、SGD 与 mini-batch
梯度下降的基本更新公式为:
其中 是学习率。
全量梯度下降每一步都使用全部训练数据,计算成本高。深度学习中通常使用 随机梯度下降 SGD 或 mini-batch SGD:
- 每次抽取一小批样本;
- 用这一批样本估计梯度;
- 计算更快;
- 梯度噪声有时还能帮助跳出尖锐区域或局部不良区域。
Momentum
普通 SGD 只看当前梯度,容易在狭长山谷中来回震荡。Momentum 引入“速度”或“惯性”:
其中 是动量系数。
直观理解:
- 在梯度方向持续一致的方向上加速;
- 在正负来回变化的方向上相互抵消;
- 更新路径更平滑,收敛更快。
Adam 优化器
Adam = Momentum + 自适应学习率。
它同时维护:
- 梯度的一阶矩估计:类似动量;
- 梯度平方的二阶矩估计:用于调整不同参数的步长。
更新形式可写为:
其中 是防止分母为 0 的小常数。
Adam 的优势是对学习率相对不那么敏感,训练初期通常比较稳。现代训练中也常用 AdamW,它将权重衰减与 Adam 更新解耦,实践效果更好。
反向传播
反向传播的目标是高效计算每个参数的梯度。
它的本质是:
链式法则 + 动态规划。
完整过程分两步:
- 前向传播:计算并保存每层的预激活值和激活值。
- 反向传播:从输出层损失开始,逐层向前计算梯度,并复用已经算出的中间梯度。
对于 ReLU 网络,反向传播中会出现:
它表示 ReLU 的导数:预激活值大于 0 时导数为 1,小于 0 时导数为 0。
一般形式可以理解为:
输出损失梯度 ↓输出层参数梯度 ↓上一层预激活梯度 ↓上一层参数梯度 ↓继续向输入方向传播TIP反向传播高效的原因在于:每一层只需利用后一层传回来的梯度继续计算,无需为每个参数重新独立求导。
参数初始化
参数初始化会直接影响训练能否稳定进行。
如果所有权重都初始化为 0,所有神经元会学到相同特征,无法打破对称性。
如果初始化方差太小:
- 每层输出幅度变小;
- ReLU 还会截断一部分信号;
- 层数加深后激活和梯度可能逐渐消失。
如果初始化方差太大:
- 每层输出幅度变大;
- 激活值和梯度可能迅速爆炸;
- 数值可能超过浮点范围。
对 ReLU 网络,教材推导得到 He 初始化的方差:
其中 是输入侧单元数量。
常见初始化:
| 初始化 | 常用场景 | 思路 |
|---|---|---|
| Xavier / Glorot | sigmoid、tanh | 保持前后层信号方差稳定 |
| He / Kaiming | ReLU 系列 | 考虑 ReLU 会截断约一半信号 |
学习率调度与训练调试
学习率过大可能导致损失震荡甚至 NaN;学习率过小会导致训练很慢或停在平台期。
常见学习率调度:
- 阶梯衰减;
- 指数衰减;
- 余弦退火;
- warmup:前若干步从小学习率逐步升到目标学习率,Transformer 训练中尤其常见。
训练调试时可以按以下顺序检查:
- 先让模型过拟合一个很小的 batch,确认代码能学到东西。
- 检查初始化时损失是否符合随机猜测水平。
- 检查梯度是否为 0、NaN 或极端大。
- 同时监控训练损失、验证损失、准确率和学习率。
- 出现 NaN 时,优先检查学习率、梯度爆炸和输入归一化。
网络性能评估与正则化
训练集、验证集与测试集
深度学习最终关心的是泛化能力:模型在未见过的新数据上表现如何。
数据集通常划分为:
- 训练集:用于更新模型参数;
- 验证集:用于选择超参数和模型结构;
- 测试集:只在最终阶段用于评估泛化性能。
WARNING不要用测试集反复调参。这样会把测试集也“用进训练过程”,导致测试性能失真。
偏差、方差与噪声
测试误差的来源可以分为:
- 噪声 Noise:数据生成过程本身的随机性,无法完全消除。
- 偏差 Bias:模型平均预测和真实规律之间的差距;偏差大通常对应欠拟合。
- 方差 Variance:不同训练集导致模型预测波动;方差大通常对应过拟合。
对回归任务,期望误差可以分解为:
减小误差的基本方向:
- 降低偏差:增大模型容量,如加深或加宽网络;
- 降低方差:增加数据量、正则化、数据增强、集成等;
- 噪声是数据自身限制,只能通过更好的测量或数据清洗部分缓解。
过拟合、欠拟合与双重下降
- 欠拟合:训练集表现也差,说明模型容量不足或训练不充分。
- 过拟合:训练集表现好,验证 / 测试集表现差,说明模型把训练数据中的噪声也学进去了。
经典统计观点认为:模型容量从小到大增加时,测试误差先下降后上升,形成 U 型曲线。
深度学习中还观察到 双重下降(Double Descent):
- 当参数数量接近训练样本数量时,测试误差可能出现峰值;
- 当模型进入过参数化区域后,测试误差可能再次下降。
一种可能解释是:过参数化网络配合初始化和优化算法,会倾向于找到更平滑的插值函数。这个现象仍然没有完全统一的理论解释。
超参数搜索
超参数是在训练前设定的变量,例如:
- 网络层数;
- 每层宽度;
- 学习率;
- batch size;
- 动量系数;
- dropout 比例;
- 权重衰减系数。
寻找最佳超参数的过程叫 超参数搜索。如果重点搜索网络结构,也称 神经架构搜索。
超参数通常不能直接用梯度下降优化,因此需要训练多个候选模型,用验证集比较性能,再在测试集上做最终评估。
显式正则化
显式正则化是在损失函数中加入惩罚项:
最常见的是 L2 正则化:
在神经网络中,L2 正则化通常用于权重而非偏置。较小的权重会让网络输出对输入微小变化更不敏感,从而得到更平滑的函数。
从概率角度看,L2 正则化相当于给参数加入零均值高斯先验,把最大似然估计转为最大后验估计。
隐式正则化
某些训练算法本身会产生正则化效果。
例如,离散梯度下降和连续梯度流之间存在差别。有限步长会让优化轨迹倾向于避开梯度很大的尖锐区域。
SGD 进一步引入 mini-batch 随机性。较小 batch 和适当学习率会带来梯度噪声,使模型更容易收敛到较平坦的极小值区域。平坦区域通常对参数扰动不敏感,因此泛化性能更好。
常用启发式策略
Early Stopping
训练损失通常持续下降,但验证损失下降到一定程度后可能回升。早停法在验证集性能最佳时停止训练,相当于限制权重继续增长。
Dropout
训练时以一定概率随机把隐藏单元激活值设为 0,迫使网络减少对某些特定神经元组合的依赖。
Ensembling
训练多个模型,对预测结果取平均。不同模型的错误方向不一致时,平均能降低方差。
Transfer Learning
先在大数据集上预训练,再在目标任务上微调。小数据海洋任务中尤其常用。
例如:
- 用 ImageNet 预训练 CNN;
- 再迁移到海底目标识别、水下生物分类或遥感图像分类。
Self-supervised Learning
从无标签数据中构造伪任务,例如遮挡图像局部并预测缺失部分,或让模型判断两张图是否来自同一对象的不同增强视图。
Data Augmentation
通过不改变语义的变换扩大数据集:
- 图像:翻转、旋转、裁剪、缩放、颜色扰动、随机擦除;
- 文本:同义替换、回译、随机插入 / 删除;
- 海洋图像:合理范围内的亮度、噪声、模糊、水下色偏等增强。
Label Smoothing
把硬标签从 调整成软标签,避免模型输出过度自信的极端概率。
卷积神经网络 CNN
全连接网络处理图像的问题
图像输入维度很高。一个 图像包含:
个像素值。
如果第一层全连接到 1000 个神经元,参数量约为:
这会带来三个问题:
- 参数太多,容易过拟合;
- 忽略图像的空间结构;
- 对平移不友好,同一个物体换个位置就需要重新学习。
CNN 的设计利用了图像的三个先验:
- 邻近像素相关;
- 局部模式可以在不同位置重复出现;
- 图像语义对小平移通常稳定。
卷积的基本思想
卷积就是让一个小滤波器 / 卷积核在输入上滑动,并在每个位置计算局部点积。
一维卷积核尺寸为 3 时:
二维卷积中,一个 卷积核在图像上水平和垂直滑动,计算局部区域加权和。
CNN 的三个关键性质:
- 稀疏连接:每个输出只依赖局部输入;
- 参数共享:同一卷积核用于所有空间位置;
- 平移等变:输入平移后,输出特征图也相应平移。
老师演示:5×5 图像与 3×3 卷积核
课件中的卷积演示如下。
输入图像:
1 1 1 0 00 1 1 1 00 0 1 1 10 0 1 1 00 1 1 0 0卷积核:
1 0 10 1 01 0 1第一个输出位置:
(1×1 + 1×0 + 1×1)+ (0×0 + 1×1 + 1×0)+ (0×1 + 0×0 + 1×1)= 4第二个输出位置,卷积核向右滑动一格:
(1×1 + 1×0 + 0×1)+ (1×0 + 1×1 + 1×0)+ (0×1 + 1×0 + 1×1)= 3最终输出:
4 3 42 4 32 3 4这个例子说明:卷积层采用局部窗口逐步扫描的方式提取模式,避免直接把整张图一次性压成一个向量。
卷积层的超参数
| 超参数 | 含义 | 常见设置 |
|---|---|---|
| kernel size | 卷积核大小 | 、、 |
| stride | 滑动步长 | 1 或 2 |
| padding | 边界填充 | 0、1、same padding |
| dilation | 膨胀率 | 扩大感受野 |
| output channels | 输出通道数 | 32、64、128、256 等 |
输出尺寸常用公式:
其中 是 padding, 是 kernel size, 是 stride。
多通道卷积、池化与上采样
图像通常有多个输入通道,例如 RGB 图像有 3 个通道。
若输入通道数为 ,输出通道数为 ,卷积核尺寸为 ,则权重数量为:
再加上 个偏置。
池化层用于降低空间维度:
- 最大池化:取局部窗口最大值,保留最显著特征;
- 平均池化:取局部平均值,更平滑;
- 现代 CNN 也常用 stride convolution 替代显式池化。
上采样用于恢复空间分辨率,常见方法包括:
- 通道复制;
- 最大反池化;
- 双线性插值;
- 转置卷积。
1×1 卷积
卷积在每个空间位置上对所有通道做线性组合。
它的作用:
- 改变通道数;
- 进行通道间特征融合;
- 降维以减少计算量;
- 常用于 ResNet 瓶颈块。
典型 CNN 架构
LeNet
早期 CNN,用于 MNIST 手写数字识别。结构包括卷积层、池化层和全连接层。
AlexNet
ImageNet 2012 的突破模型。关键点包括:
- 更深 CNN;
- ReLU 激活;
- Dropout;
- 数据增强;
- GPU 训练。
VGG
特点是大量堆叠 卷积。
三个 卷积层的感受野接近一个 卷积层,但参数更少,并且中间多了非线性变换。
EfficientNet / ConvNeXt
现代 CNN 进一步关注效率和架构设计:
- EfficientNet 同时缩放深度、宽度、输入分辨率;
- ConvNeXt 吸收 Transformer 时代的一些设计经验,用现代化 CNN 与视觉 Transformer 竞争。
残差网络 ResNet
传统顺序网络为:
残差网络改为:
残差块学习的是“在原有表示上需要补充的变化”。
优点:
- 梯度可以通过短路连接直接回传,缓解梯度消失;
- 更容易训练很深的网络;
- 浅层特征可以被后续层复用;
- 可以理解成多个子网络的集成效果。
TIPResNet 的关键直觉:如果某些层暂时学不到有用变换,至少可以通过跳跃连接保留原输入表示,网络退化风险显著降低。
DenseNet 将前面所有层的输出拼接给后面层;U-Net 则把编码器中同尺度特征连接到解码器,常用于语义分割。
CNN 的应用
CNN 在计算机视觉中的典型任务:
- 图像分类:判断整张图属于哪个类别。
- 目标检测:识别物体类别并给出边界框,例如 YOLO。
- 语义分割:为每个像素分配类别标签,例如 FCN、U-Net。
对应到海洋人工智能:
- 海底图像目标检测;
- 水下生物识别;
- 海底地貌分割;
- 海洋遥感图像分类;
- 三维地震图像结构解释。
序列模型:RNN、LSTM、GRU
教材第六章重点讲 Transformer,但老师第二次课对 RNN、LSTM、GRU 做了比较完整的铺垫。这部分是理解注意力和 Transformer 的前置内容。
序列数据的特点
序列数据包括:
- 自然语言:句子、文档、对话;
- 时间序列:股票价格、天气、传感器数据;
- 音频:语音、音乐;
- 生物序列:DNA、蛋白质序列;
- 空间序列:某些地球物理或海洋剖面数据。
序列数据的挑战:
- 长度可变;
- 顺序重要,例如“狗咬人”和“人咬狗”含义不同;
- 远距离上下文可能影响当前含义;
- 输入尺寸不固定,普通 MLP 和 CNN 直接处理会比较困难。
老师课上举了金融时间序列的例子:不同公司上市和退市时间不同,序列起点、终点和长度都不同;若要联合分析,就需要能够处理变长序列的模型。
RNN 的核心:隐藏状态
RNN 的关键是维护一个隐藏状态 ,它总结到时间 为止的信息。
基本公式:
其中:
- :时间 的输入;
- :时间 的隐藏状态,也可以理解为记忆;
- :时间 的输出;
- :输入到隐藏状态的权重;
- :上一步隐藏状态到当前隐藏状态的权重;
- :隐藏状态到输出的权重。
重要特点:
- 同一组参数在不同时间步共享;
- 模型具有时间方向;
- 当前状态综合了当前输入和历史状态。
h_{t-1} ---- W_hh ----\ + ---> f(·) ---> h_t ---> g(·) ---> y_tx_t ---- W_xh ----/RNN 的输入输出形式
RNN 可处理多种任务形式:
| 形式 | 例子 |
|---|---|
| 一对一 | 普通图像分类 |
| 一对多 | 图像描述生成 |
| 多对一 | 文本情感分类 |
| 多对多 | 机器翻译 |
| 同步多对多 | 视频逐帧标注 |
课上提到:图像 → 文字描述属于一对多;一段文本或语音 → 情感属于多对一;视频帧级标注属于多对多。
通过时间反向传播 BPTT
RNN 的反向传播需要沿时间方向展开,称为 Backpropagation Through Time, BPTT。
问题在于:当序列很长时,梯度需要反复乘以相同或相似的矩阵。
直观地看:
- 若相关矩阵特征值小于 1,多次相乘后梯度指数级变小,即梯度消失;
- 若特征值大于 1,多次相乘后梯度指数级变大,即梯度爆炸。
这使普通 RNN 很难捕捉长距离依赖。
解决方向:
- 梯度裁剪:限制梯度范数,主要缓解梯度爆炸;
- LSTM / GRU:通过门控机制缓解梯度消失;
- 注意力机制:允许当前位置直接访问远处状态。
LSTM
LSTM(Long Short-Term Memory)通过显式门控控制信息流。
主要结构:
- 遗忘门:决定从旧细胞状态中丢弃什么;
- 输入门:决定写入什么新信息;
- 候选状态:生成待写入的新内容;
- 输出门:决定当前输出什么;
- 细胞状态:像一条传送带,帮助长期信息沿时间传播。
LSTM 的关键优势在于:细胞状态主要通过加法更新,减少了长期连乘导致的梯度衰减。
GRU
GRU(Gated Recurrent Unit)是 LSTM 的简化版本。
它主要包含:
- 更新门:控制保留多少过去信息;
- 重置门:控制遗忘多少过去信息。
与 LSTM 的比较:
| 特性 | LSTM | GRU |
|---|---|---|
| 门数量 | 3 个主要门 | 2 个主要门 |
| 细胞状态 | 与隐藏状态分离 | 与隐藏状态合并 |
| 参数量 | 更多 | 更少 |
| 性能 | 长序列常较稳 | 资源有限时常用 |
词嵌入
自然语言不能直接输入神经网络,需要先把 token 转换成向量。
One-hot
若词汇表大小为 50000,每个词就是 50000 维向量,只有一个位置为 1。
问题:
- 维度高;
- 稀疏;
- 无法表达语义相似性。
Dense Embedding
词嵌入把词映射到低维稠密向量,使语义相近的词在向量空间中距离更近。
典型方法:
- Word2Vec:Skip-gram / CBOW;
- GloVe:利用全局共现统计;
- 现代 Transformer:通过训练学习 token embedding。
经典类比:
King - Man + Woman ≈ QueenParis - France + Italy ≈ Rome这说明嵌入向量可以捕捉某些语义关系。
序列到序列模型
机器翻译常用 seq2seq 架构:
输入序列 -> 编码器 -> 上下文向量 -> 解码器 -> 输出序列训练时常使用 Teacher Forcing:解码器每一步输入真实的前一个 token,这样收敛更快。
推理时没有真实 token,只能把模型上一步预测结果作为下一步输入。为了获得更好结果,可以使用束搜索(beam search)。
从 seq2seq 到注意力
传统 seq2seq 的瓶颈在于:编码器要把整个输入序列压缩成一个固定长度上下文向量。
当输入很长时,这个向量很难保留全部信息。
注意力机制的改进是:解码器在每个时间步都可以动态查看编码器所有隐藏状态,并根据相关性加权求和。
流程:
- 计算当前解码器状态与每个编码器状态的对齐分数;
- 用 softmax 得到注意力权重;
- 对编码器隐藏状态加权平均,得到动态上下文向量。
这为 Transformer 的自注意力机制打下基础。
Transformer
为什么 Transformer 重要
RNN / LSTM 的问题:
- 必须按顺序计算,难以并行;
- 长距离依赖需要跨许多时间步传播;
- 即便有 LSTM,极长序列中仍可能出现梯度问题。
Transformer 的优势:
- 没有循环结构,可并行处理整个序列;
- 自注意力让任意两个位置直接连接;
- 能扩展到数亿、数十亿甚至更大规模参数;
- 成为 BERT、GPT 和现代大语言模型的核心架构。
Tokenization 与嵌入
文本先通过分词器拆成 token。
常见问题:
- 人名、专有名词可能不在词汇表中;
- 标点符号处理会影响模型;
- 同一个词的不同形态需要建立关联。
实际中常用 子词分词器,例如 BPE(Byte Pair Encoding)。BPE 从字符开始,反复合并高频相邻片段,直到词汇表达到指定大小。
词嵌入矩阵:
若 token 的 one-hot 编码组成矩阵 ,输入嵌入为:
自注意力机制
自注意力的目标是让序列中的每个位置都能根据上下文调整自己的表示。
教材中的例子:
“餐厅拒绝给我提供火腿三明治,因为它只做素食。”
这里“它”指的是“餐厅”,模型必须能跨越较远距离关注到正确词。
对每个输入向量 ,计算:
其中:
- Query:我在寻找什么;
- Key:我包含什么信息,能否被匹配;
- Value:我能提供什么内容。
注意力分数由 query 和 key 的点积决定:
第 个位置的输出为所有 value 的加权和:
矩阵形式:
缩放点积注意力
Transformer 中常用缩放点积注意力:
除以 的原因:当维度 较大时,点积数值会变大,使 softmax 进入饱和区,梯度变小。缩放可以稳定训练。
多头注意力
多头注意力并行运行多个注意力模块。
直观上,不同头可以学习不同关系:
- 句法依赖;
- 指代关系;
- 语义相似;
- 局部搭配;
- 长距离联系。
计算后把多个 head 的输出拼接,再经过线性变换得到最终输出。
位置编码
自注意力本身对顺序不敏感。若没有位置信息,“dog bites man”和“man bites dog”会缺乏顺序区分。
解决方法是加入位置编码。
常见方式:
- 固定正弦 / 余弦位置编码;
- 可学习位置嵌入;
- 现代 LLM 中常见 RoPE 旋转位置嵌入。
Transformer 层
完整 Transformer 层通常包括:
- 多头自注意力;
- 残差连接;
- LayerNorm;
- 前馈网络 MLP;
- 再次残差连接与 LayerNorm。
可以写成:
BERT、GPT 与编码器-解码器
Transformer 主要演化出三类结构:
Encoder-only:BERT
- 每个 token 可以看到左右上下文;
- 适合理解任务,如文本分类、命名实体识别、问答;
- 典型训练目标是 masked language modeling。
Decoder-only:GPT
- 使用 causal mask,每个 token 只能看到前面的 token;
- 适合生成任务;
- 训练目标通常是下一个 token 预测。
Encoder-Decoder
- 编码器处理输入序列;
- 解码器通过交叉注意力读取编码器输出;
- 常用于机器翻译、摘要等序列到序列任务。
深度生成模型
生成模型关注的是学习数据分布 ,从而生成新的样本。本节对应教材 6.8,也与现代多模态生成模型有关。
GAN
GAN(Generative Adversarial Network)包含两个网络:
- 生成器 :把随机噪声 变成生成样本 ;
- 判别器 :判断输入样本是真实样本还是生成样本。
训练目标是一个极小极大博弈:
- 判别器尽量区分真样本和假样本;
- 生成器尽量骗过判别器;
- 理想状态下,判别器无法区分生成样本和真实样本,输出接近 0.5。
GAN 的问题:
- 训练不稳定;
- 可能出现模式崩溃,即只生成少数类型样本;
- 判别器太强时,生成器梯度可能不足。
归一化流
归一化流通过一系列可逆变换,把简单分布变成复杂数据分布。
若:
且 来自已知简单分布,则变换后的概率密度由雅可比行列式修正:
归一化流要求网络层满足:
- 表达能力足够强;
- 每层是双射;
- 逆函数可快速计算;
- 雅可比行列式可高效计算。
常见流包括:
- 线性流;
- 逐元素流;
- 耦合流。
VAE
VAE(Variational Autoencoder)是一类概率生成模型。
它假设数据由低维隐变量 生成:
数据概率需要对隐变量积分:
这个积分通常难以直接计算,于是 VAE 通过变分分布 构造证据下界 ELBO,并最小化负 ELBO。
VAE 的结构包括:
- 编码器:从 得到隐变量分布;
- 解码器:从 生成 ;
- 损失:重构误差 + 隐变量分布与先验的距离。
扩散模型
扩散模型由一个预设的前向加噪过程和一个学习得到的反向去噪过程组成。
前向过程逐步向数据加入噪声:
其中 是标准正态噪声, 由噪声计划决定。
反向过程学习从噪声恢复数据:
纯噪声 -> 较少噪声 -> 更清晰结构 -> 最终图像扩散模型的优势:
- 训练相对稳定;
- 生成质量高;
- 已成为 DALL-E、Stable Diffusion 等图像生成系统的重要基础。
现代深度学习与前沿
大语言模型的训练流程
现代 LLM 通常经历三个阶段:
预训练
目标通常是下一个 token 预测。
数据来自互联网文本、书籍、代码等大规模语料。模型在这一阶段学习语言规律、世界知识和基本推理模式。
监督微调 SFT
使用高质量“指令-回答”数据训练,使模型更会按照人类指令回答。
RLHF / DPO
RLHF 使用人类偏好训练奖励模型,再优化语言模型输出。
DPO 则直接使用偏好数据优化模型,流程更简单。
课件中提到的大模型例子包括 GPT-3、PaLM、GPT-4、Llama 3 等。随着参数量、训练 token 和计算量增加,模型会出现上下文学习、少样本学习、代码生成、链式推理等能力。
提示工程
提示工程是在不修改模型参数的情况下,通过设计输入让 LLM 产生更合适的输出。
常见方式:
- 零样本提示:直接给任务;
- 少样本提示:先给几个例子;
- 思维链提示:让模型逐步推理;
- 自一致性:生成多个答案,取多数或最一致结果;
- RAG:检索相关文档,把上下文放入 prompt 再回答。
视觉 Transformer 与多模态模型
ViT
ViT(Vision Transformer)把图像切成 patch,例如 ,再把每个 patch 展平成向量并送入 Transformer 编码器。
流程:
图像 -> patchify -> patch embedding + position embedding -> Transformer encoder -> 分类头CLIP
CLIP 包含图像编码器和文本编码器,用对比学习把匹配的图像-文本对拉近,把不匹配的对拉远。
应用:
- 零样本图像分类;
- 文本检索图像;
- 图像生成模型的语义引导。
文生图模型
DALL-E、Stable Diffusion 等通常结合文本编码器和扩散模型。Stable Diffusion 在潜在空间中扩散与去噪,因此效率更高。
高效训练与部署
大模型训练和部署需要节省显存、算力和通信成本。
常见技术:
- 数据并行:每张 GPU 保留模型副本,切分 batch,同步梯度;
- 模型并行:把模型层或矩阵切到多张 GPU;
- 流水线并行:把模型切成阶段,让 micro-batch 流动;
- ZeRO / FSDP:切分参数、梯度和优化器状态;
- 混合精度:FP16 / BF16 加速并减少显存;
- 量化:INT8 / INT4 降低模型大小;
- 剪枝:移除不重要权重或结构;
- 知识蒸馏:训练小模型模仿大模型;
- MoE:每个输入只激活部分专家,提高参数规模但控制计算量;
- 状态空间模型:如 Mamba,尝试用线性时间复杂度处理长序列。
负责任 AI
现代深度学习模型也带来风险:
- 偏见:模型会继承并放大训练数据中的社会偏见;
- 幻觉:模型可能自信生成错误事实;
- 滥用:生成虚假信息、自动化社会工程、恶意代码等;
- 环境影响:训练和大规模推理消耗大量能源。
缓解手段包括:
- RLHF 或原则化训练;
- 红队测试;
- 模型卡片和数据集说明;
- 部署前安全评估;
- 人类监督;
- 用户反馈和持续审计。
PyTorch 实践框架
张量与基本网络
PyTorch 中的基本数据结构是 Tensor,可以理解为多维数组。神经网络通常继承 nn.Module。
import torchimport torch.nn as nn
x = torch.randn(32, 784) # 32 张展平的图像
class MLP(nn.Module): def __init__(self): super().__init__() self.net = nn.Sequential( nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 10) )
def forward(self, x): return self.net(x)
model = MLP()logits = model(x)老师强调:PyTorch 的优势在于直观、模块化,并且能直接使用 GPU 加速。
标准训练循环
典型训练循环为:
for epoch in range(num_epochs): for batch_x, batch_y in dataloader: predictions = model(batch_x) loss = criterion(predictions, batch_y)
optimizer.zero_grad() loss.backward() optimizer.step()三步最重要:
optimizer.zero_grad():清空旧梯度;loss.backward():反向传播计算新梯度;optimizer.step():根据梯度更新参数。
课程作业方向
根据课程安排,实践重点包括:
- 从零实现简单神经网络;
- 用 PyTorch 搭建 MLP 和 CNN;
- 比较 SGD、Momentum、Adam 的收敛效果;
- 对 CNN 做图像分类和迁移学习;
- 用 RNN / LSTM 做文本生成或情感分类;
- 用 BERT / GPT 类模型完成分类或文本生成;
- 尝试简单 RAG、提示工程或量化实验。
WARNING老师课上特别提醒:深度学习必须写代码。只看概念很难真正理解模型训练、调参和错误排查。
本章总结
这一章可以用一条线串起来:
神经网络用多层函数表示复杂映射;训练过程用损失函数衡量预测误差,用反向传播求梯度,用优化器更新参数;不同数据结构需要不同架构,图像适合 CNN,序列适合 RNN / Transformer,生成任务则发展出 GAN、VAE、扩散模型等方法。
最需要抓住的几个关键点:
- 神经网络本质是函数:层、权重、偏置、激活函数共同决定函数形状。
- 非线性是表达能力来源:没有激活函数,多层网络仍然是线性变换。
- 深度带来组合能力:多层结构能更高效表示复杂函数和层次化特征。
- 训练核心是优化:损失函数、反向传播、梯度下降和初始化共同决定能否训练成功。
- 泛化比训练误差更重要:验证集、测试集、正则化和数据增强都是为了提高新数据表现。
- CNN 利用空间结构:局部连接、权重共享和平移等变性让图像学习更高效。
- 序列模型需要记忆与注意力:RNN 用隐藏状态记忆历史,LSTM / GRU 用门控缓解长距离问题,Transformer 用自注意力直接建立远距离联系。
- 现代 AI 以 Transformer 和生成模型为核心:LLM、多模态模型、扩散模型都建立在本章这些基础概念之上。
- 海洋 AI 应用依赖模型与数据结合:海底目标检测、遥感识别、三维地震分割等任务的关键不只在模型,也在数据质量、标注、物理先验和泛化评估。
参考文献
- McCulloch, W. S., & Pitts, W. (1943). A logical calculus of the ideas immanent in nervous activity. Bulletin of Mathematical Biophysics.
- Turing, A. M. (1950). Computing Machinery and Intelligence. Mind.
- Rosenblatt, F. (1958). The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain. Psychological Review.
- Minsky, M., & Papert, S. (1969). Perceptrons: An Introduction to Computational Geometry. MIT Press.
- Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature.
- Cybenko, G. (1989). Approximation by superpositions of a sigmoidal function. Mathematics of Control, Signals and Systems.
- Hornik, K., Stinchcombe, M., & White, H. (1989). Multilayer feedforward networks are universal approximators. Neural Networks.
- Hochreiter, S., & Schmidhuber, J. (1997). Long Short-Term Memory. Neural Computation.
- Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks. NeurIPS.
- Srivastava, N., et al. (2014). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Journal of Machine Learning Research.
- Goodfellow, I., et al. (2014). Generative Adversarial Nets. NeurIPS.
- Ioffe, S., & Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ICML.
- Kingma, D. P., & Ba, J. (2015). Adam: A Method for Stochastic Optimization. ICLR.
- He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition. CVPR.
- Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS.
- Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.
- Brown, T. B., et al. (2020). Language Models are Few-Shot Learners. NeurIPS.
- Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. NeurIPS.
- Dosovitskiy, A., et al. (2021). An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. ICLR.
- Radford, A., et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML.
- Ouyang, L., et al. (2022). Training language models to follow instructions with human feedback. NeurIPS.
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. 在线版:https://www.deeplearningbook.org/
- Zhang, A., Lipton, Z. C., Li, M., & Smola, A. J. Dive into Deep Learning. 在线版:https://d2l.ai/
- Prince, S. J. D. (2023). Understanding Deep Learning. MIT Press. 在线版:https://udlbook.github.io/udlbook/