第4讲 深度学习(一)
一、引言
课程内容回顾
神经元先对输入作线性加权求和,再经过非线性激活函数。对一个神经网络,要同时说明三件事:模型决定网络的非线性表示能力;策略决定目标函数;算法决定怎样训练模型。分类任务的输出节点数通常等于类别数,输出层用 Softmax,目标函数用交叉熵;回归任务的输出层通常为线性层,目标函数用均方误差或误差平方和。训练过程包括模型初始化、前向计算、误差反向传播和基于梯度下降的参数更新。
人类认知机制的启发
人的认知既有感性认识,也有理性认识。感觉、知觉与注意属于感性认识,思维属于理性认识;学习与记忆、动机与情绪又贯穿其间。媒体与认知的相互作用,为研究人的认知机理提供了入口。
感觉是人脑对事物个别属性的认识,提供内外环境的信息,是全部心理现象的基础。每种感觉在大脑中有相应的专门处理区域,不同感觉信息还会进入联合区,形成整体的感知反应。知觉则把感觉信息组织成有意义的对象,并在已有知识和经验参与下理解当前刺激。知觉加工有三种方式:
- 自下而上加工,又称数据驱动加工,从外部刺激出发,先分析较小的知觉单元,再逐层过渡到较大单元,最终解释感觉刺激。
- 自上而下加工,又称概念驱动加工,从关于对象的一般知识出发,形成期望或假设,调整特征觉察器并引导对细节的注意。
- 把两种加工结合起来。
视觉感知与视觉皮层
视觉的生理机制包括折光机制、感觉机制、传导机制和中枢机制。视觉传导从视网膜感受器产生电信号开始,沿视神经传到大脑,主要经过三级神经元:视网膜双极细胞具有侧抑制作用;视神经节细胞的神经纤维经过视交叉,到达丘脑外侧膝状体;第三级神经元从外侧膝状体发出,终止于大脑枕叶的纹状皮层。
光停止作用后,由于视神经的反应速度,视觉仍会保留约 \(0.1\sim0.4\) 秒,这就是视觉暂留。电影正是利用视觉暂留形成连续运动感。
视觉皮层包括初级视皮层 V1,也称纹状皮层,以及 V2、V3、V4、V5 等纹外皮层。视觉皮层双通路假说把信息处理分为腹侧通路和背侧通路:腹侧通路回答“是什么”,背侧通路回答“在哪里”。两条通路并非彼此隔离,一方面有相互连接的神经元,另一方面前额叶皮层等更高层视觉区域会借助注意分配和工作记忆整合信息,再向两条通路发送反馈信号。LGN 是外侧膝状体,MT/V5 是中颞叶区,IT 是下颞叶皮层。
视觉信息从 V1 开始,经 V2 进入腹侧和背侧通路,最后由高级视觉皮层整合,用于物体识别、空间感知和运动识别。沿处理层次向上,感受野和所能表达的特征复杂度逐渐增大,空间分辨率逐渐降低,同时存在复杂的前馈和反馈回路。
感受野
感受野是感觉系统中视网膜、皮肤等感受器阵列上的特定区域。该区域的感受器直接或间接连接到后续某个神经细胞,受到适宜刺激时会改变该细胞的活动模式。对视觉神经细胞而言,视网膜上能激活它的区域就是它的感受野。V1 神经细胞主要有同心圆感受野、简单感受野和复杂感受野三类。
同心圆感受野又称中心—周边感受野。中心受光时兴奋、周边受光时抑制的是 on-center;中心抑制、周边兴奋的是 off-center。Rodieck 在 1965 年用两个高斯函数之差 DoG 建模:
其中 \(r\) 是感受野中一点到中心的距离,\(\sigma\) 表示标准差。当 \(A>B\) 且 \(\sigma_A<\sigma_B\) 时,对应中心兴奋;条件反过来则对应中心抑制。
简单感受野偏爱具有特定方向或朝向的条纹,对刺激的位置和空间频率也有选择性。Hubel 和 Wiesel 从 1962 年起研究视皮层细胞对光刺激的反应,并于 1981 年获得诺贝尔生理学或医学奖。他们发现,视皮层细胞对大面积弥散光往往没有反应,却会强烈响应某一朝向的条纹;条纹偏离最优方向后,反应会骤减甚至停止。因此简单感受野可以检测明暗对比形成的边缘,并选择边缘的位置和方向。
Gabor 滤波器是一种加窗傅里叶变换,其响应与视觉皮层简单细胞相似:
排成一条线的同心圆感受野可以聚合成简单感受野,使其对特定位置、特定朝向的条形物敏感;若干朝向相同但位置不同的简单感受野又可聚合成复杂感受野,使它对不同位置上的同一朝向条形物都有响应。这个层次关系体现了从局部、精细到抽象、位置更稳定的视觉表征过程。
马尔的视觉计算理论
计算机视觉可分为物体视觉和空间视觉。物体视觉负责对物体作精细分类和鉴别;空间视觉负责确定物体的位置与形状,并进一步为动作提供参照。David Marr 在 1982 年的专著《视觉》中提出三个计算层次:
- 从图像提取基元,形成原始要素图。基元包括高斯拉普拉斯滤波图像中的过零点、短线段和端点等,并记录它们的拓扑关系。
- 通过立体视觉等模块,把基元提升为观测者坐标系下的 \(2.5\) 维表达。
- 进一步得到物体坐标系下的三维表达。
深度学习的发展
传统机器学习常用感知机、支持向量机等浅层结构。深度学习用多个非线性变换层逐级提取特征,通常把含五层以上隐藏层的网络称为深层网络。随着层次增加,特征从像素等低层表示逐渐转为边缘、形状、部件和语义概念;大规模数据和计算能力使这种端到端学习成为可能。
深度学习中的几类代表模型是:
- 卷积神经网络:LeCun 在 1989 年提出相应思想,并在 1998 年用 LeNet 实现手写数字识别。局部感受野和权值共享使其特别适合处理图像。
- 循环神经网络:网络中存在反馈连接,可利用序列的历史状态。
- 长短期记忆网络:1997 年提出,用门控机制缓解普通循环网络中的梯度消失问题。
- Transformer:2017 年提出,以自注意力建模全局依赖,后来成为大语言模型、多模态模型和 AIGC 的重要基础。
大语言模型在海量文本上学习语言结构与知识,通过上下文生成、理解和推理;多模态模型还把文本、图像、音频等媒体放入统一表示空间。
课件还用一条 2019—2024 年的时间线展示大语言模型的快速演进,浅黄色底表示“公开可获得”。下表用 † 保留这一标记:
| 时间 | 代表模型 |
|---|---|
| 2019 年 | T5† |
| 2020 年 | GPT-3、GShard、mT5† |
| 2021 年 1—4 月 | PanGu-\(\alpha\)†、PLUG† |
| 2021 年 5—8 月 | CPM-2†、Codex、Ernie 3.0、Jurassic-1 |
| 2021 年 9—10 月 | T0†、HyperCLOVA、FLAN、Yuan 1.0 |
| 2021 年 11—12 月 | Anthropic、WebGPT、Ernie 3.0 Titan、Gopher、GLaM |
| 2022 年 1—3 月 | LaMDA、MT-NLG、AlphaCode、InstructGPT、Chinchilla、CodeGen† |
| 2022 年 4—6 月 | GPT-NeoX-20B†、Tk-Instruct†、UL2†、OPT†、PaLM、YaLM†、Cohere |
| 2022 年 7—10 月 | NLLB†、AlexaTM、Sparrow、WeLM、CodeGeeX†、Luminous、GLM†、Flan-T5†、Flan-PaLM |
| 2022 年 11—12 月 | BLOOM†、mT0†、BLOOMZ†、Galactica†、OPT-IML†、ChatGPT |
| 2023 年 1—6 月 | GPT-4、LLaMA†、Pythia†、Vicuna†、PanGu-\(\Sigma\)、Bard、YuLan-Chat†、StarCoder†、CodeGen2†、ChatGLM†、Falcon†、PaLM2、InternLM† |
| 2023 年 7—12 月 | LLaMA2†、Qwen†、Mistral†、DeepSeek†、Mixtral† |
| 2024 年 1—6 月 | Qwen2†、DeepSeek-V2†、LLaMA3†、MiniCPM†、Gemma† |
课件把 Galactica 写成了 Galatica,并把 2023 年的 DeepSeek 写成 Deepseek;上表按正式拼写作了统一。
二、卷积神经网络
基本架构
卷积神经网络通常交替使用卷积层和池化层提取空间特征,再把特征图展平后送入全连接层完成分类或回归。以 VGG 式结构为例,前部卷积逐渐增加通道数、减小空间尺寸,后部全连接层把抽取到的特征映射到输出。
课件给出的 LeNet-5 风格 PyTorch 网络依次为:输入三通道图像;\(5\times5\) 卷积把通道数从 3 变为 6;\(2\times2\) 最大池化;第二个 \(5\times5\) 卷积把通道数从 6 变为 16;再次池化;把 \(16\times5\times5\) 个特征展开后,依次通过 \(120\)、\(84\)、\(10\) 个节点的全连接层。
一维与二维卷积
一维离散卷积把核翻转后滑动:
互相关不翻转卷积核:
深度学习框架中名为“卷积”的运算通常实际采用互相关,因为卷积核本来就是学习得到的,是否预先翻转不会影响模型的表示能力。二维情形可写成
卷积可以完成边缘检测、锐化和模糊等处理。两个 Sobel 核分别突出竖直和水平灰度变化:
全连接层让每个输出连接全部输入,卷积层只连接局部区域并在不同位置共享同一组权值。若输入为 \(5\times5\)、输出为 \(3\times3\),全连接映射含
个参数,而一个 \(3\times3\) 卷积核加偏置只有
个参数。局部连接利用了图像的局部相关性,权值共享又使同一特征可以在不同位置被检测。例如
可检测水平边缘。
课件的数值例把输入
与卷积核
作步幅为 1、无填充的互相关,得到
卷积层的结构参数
二维卷积由核高 \(H_K\)、核宽 \(W_K\)、填充 \(P\)、步幅 \(S\)、输入通道数 \(C_{\mathrm{in}}\)、输出通道数 \(C_{\mathrm{out}}\)、膨胀率 \(D\) 和分组数 \(G\) 等参数决定。小卷积核关注精细局部结构,大卷积核看到更粗的上下文;多个小核叠加也能扩大感受野。两个步幅为 1 的 \(3\times3\) 卷积具有 \(5\times5\) 感受野。
当步幅为 1 且希望输入、输出空间尺寸相同,奇数大小卷积核通常取
奇数卷积核还有明确的中心锚点。多通道卷积中,每个卷积核的深度必须等于输入通道数;一个输出通道把该卷积核在各输入通道上的结果相加,卷积核组数决定输出通道数。例如 \(32\times32\times3\) 输入与 6 个 \(5\times5\times3\) 卷积核作无填充、步幅为 1 的卷积,输出为 \(28\times28\times6\)。
课件用一个单输入通道、两个卷积核的完整例子说明“一个核对应一个输出通道”:
两张输出特征图是
以左上角为例,两个核在同一个 \(3\times3\) 区域上分别得到
增加输出通道可以提取更多信息,也会同时增加参数量和计算复杂度。
\(1\times1\) 卷积不混合相邻像素,但会在每个空间位置对全部输入通道作同一个全连接变换,因此可调整通道数,并在 GoogLeNet 等网络中用于降维或升维。
膨胀卷积在卷积核元素之间插入间隔。核大小为 \(K\)、膨胀率为 \(D\) 时,有效核大小为
例如 \(K=3,D=2\) 时,有效感受范围为 \(5\times5\);\(D=1,2,4\) 可在不显著增加参数量的情况下逐级扩大感受野。
分组卷积把输入和输出通道分成 \(G\) 组,每组独立卷积。深度可分离卷积是其特殊形式:先对每个通道分别作深度卷积,再用 \(1\times1\) 逐点卷积混合通道,因而显著减少计算量。可变形卷积则由另一个卷积层预测每个采样点的水平、竖直偏移,使采样位置随物体几何形态变化。
参数量、输出尺寸与计算实现
普通二维卷积不计偏置时的参数量是
计入每个输出通道的一个偏置后为
不考虑膨胀时,输入宽度为 \(W_{\mathrm{in}}\),则输出宽度为
高度同理。考虑膨胀时,把 \(W_K\) 换成 \(D(W_K-1)+1\)。
若所有层输入、输出通道数均为 \(C\),两个 \(3\times3\) 卷积的感受野等于一个 \(5\times5\) 卷积,但前者参数量为 \(18C^2\),小于后者的 \(25C^2\),且中间多一次非线性变换。一个从 \(M\) 通道到 \(N\) 通道的 \(3\times3\) 卷积含 \(9MN\) 个权值,计偏置后为 \(9MN+N\)。输入为 \(3\times32\times32\),使用 64 个 \(5\times5\) 卷积核,步幅为 1、填充为 2,输出为 \(64\times32\times32\)。
高效实现常用 im2col 或 unfold,把输入张量
转换为
再把卷积写成矩阵乘法;fold 可把列形式重新组合回空间张量。
卷积层的反向传播
设前向计算为 \(Z=W*X\),上游误差为
以深度学习中实际使用的互相关记法,无填充、步幅为 1 时,输入和卷积核的梯度可写成
因此,求输入梯度时要先按需要填充 \(\delta Z\),再与旋转 \(180^\circ\) 的卷积核作卷积;求卷积核梯度时,则让 \(\delta Z\) 在原输入上滑动并累加各位置贡献。若前向步幅为 2,应先在 \(\delta Z\) 相邻行、列之间各插入一个 0,把问题还原为步幅为 1 的计算,再完成旋转卷积或相关运算。偏置在所有空间位置共享,所以它的梯度是对应输出通道全部误差的和:
同一卷积核在不同位置反复使用,反向传播时每次使用对该参数产生的梯度都必须相加,这正是权值共享在求导中的体现。
池化层
池化对局部区域作汇聚,常见形式有最大池化、平均池化和最小池化。它可以降低空间尺寸和计算量,并使特征对小范围位置变化更稳定。池化层没有可学习参数,只有窗口大小、步幅、填充等超参数。
对输入
使用 \(2\times2\) 窗口、步幅为 2 的最大池化和平均池化,分别得到
课件另一组浮点数最大池化例的输出是
反向传播时,最大池化只把上游梯度传给前向窗口中的最大值位置,其他位置梯度为 0;平均池化把梯度平均分到窗口内各元素,例如 \(2\times2\) 池化把梯度各分为四分之一。
卷积网络中的归一化
一个常见卷积模块依次执行卷积、加偏置、归一化、非线性激活和池化,最后接线性层。PyTorch 中相应模块包括 Conv1d、Conv2d、MaxPool2d 和 BatchNorm2d 等。
归一化的一般形式是
其中 \(\gamma\) 和 \(\beta\) 是可学习的缩放、平移参数。归一化可稳定各层输入分布,缓解梯度消失或爆炸,加快收敛,并带来一定正则化效果。课件指出,批归一化可使训练速度提高约 \(5\sim20\) 倍。
批归一化 BN 对一个通道在批次和空间位置上的数据计算均值与方差。训练时使用当前小批量统计量,测试时使用训练阶段累计的总体或滑动统计量;BN 通常放在激活函数之前。批量太小时,统计量可能不稳定。
不同归一化方法的统计范围不同:
- BN 在同一通道上跨样本统计,适合大批量训练,但小批量时容易波动。
- 层归一化 LN 对单个样本的全部特征统计,不依赖批量大小,适合变长序列和动态结构;但它可能弱化通道间差异,对局部结构不够敏感。
- 实例归一化 IN 对单个样本的单个通道统计,能保留每个样本的独特风格,但忽略通道关系,通常不利于分类。
- 组归一化 GN 把通道分组后统计,在通道与空间信息之间折中,小批量下也稳定;效果会受到分组数的影响。
低质量视频车牌识别使用 SACNN 特征提取器。输入先经过一层 Conv;其中的 CNN Block 按 GroupNorm—Swish—Conv—GroupNorm—Swish—Dropout—Conv 计算,再把块输入经跳连加到输出,该块在图中标为重复 2 次。随后是带残差连接的 Self-attention Block,CNN Block 与 Attention Block 的组合又标为重复 4 次。末端依次经过 Conv、GroupNorm、Swish 和 Conv,输出特征图。
车牌识别实验同时报告字符识别率 CRR 和整牌准确率 Acc。编辑距离为 \(D_e+S_e+I_e\) 时,
整牌准确率为
实验中 BN 的 CRR 为 \(92.94\%\)、Acc 为 \(73.58\%\);LN 为 \(92.92\%\)、\(73.85\%\);IN 只有 \(65.77\%\)、\(32.29\%\);GN 最好,达到 \(93.00\%\)、\(74.86\%\)。
三组特征图可视化还列出了均值、标准差和逐牌预测:
| 样例真值 | 原图 mean/std | BN mean/std,预测 | LN mean/std,预测 | IN mean/std,预测 | GN mean/std,预测 |
|---|---|---|---|---|---|
| 陕A-M28Y0 | 92.79/36.66 | 0.82/0.18,陕A-M28T0 | 2.32/0.40,陕A-M28T0 | 0.85/0.23,陕A-Y28Y0 | 2.63/0.67,陕A-M28Y0 |
| 陕A-Y889Z | 69.25/29.29 | 0.77/0.23,陕A-T8892 | 2.23/0.41,陕A-T889Z | 0.98/0.25,陕A-X888V | 2.45/0.70,陕A-Y889Z |
| 陕A-W6M07 | 92.73/37.46 | 0.89/0.22,陕A-W6M01 | 2.53/0.54,陕A-W6M01 | 0.88/0.19,陕A-W6M01 | 2.66/0.62,陕A-W6M07 |
三例中 GN 都保留了正确识别,BN、LN、IN 则出现不同的字符混淆,与前页 GN 整牌准确率最高的结果相呼应。
一次卷积网络前向计算
卷积网络的前向计算可按“卷积—偏置—激活—池化—展平—线性分类”逐步进行。课件先给出一幅 \(6\times6\) 的 X 形图像
再用卷积核
作无填充卷积,得到
加偏置 \(b=0.21\) 后为
ReLU 把负数置 0,再用 \(2\times2\) 最大池化,得到
展平后的向量为
线性输出层参数为
用未截断的池化值计算,字母 O、X 的得分分别为 \(-1.17\) 和 \(4.17\),故预测为 X;对另一幅 O 形图像,输出得分为 \(2.88\) 和 \(-0.83\),故预测为 O。课件所有中间数值只截取小数点后两位,并不四舍五入,例如 \(0.9471\to0.94\)、\(-0.0027\to-0.00\);因此,直接用页面显示值继续手算会出现截断误差。
张量展平可用 view、reshape 或 flatten。view 不复制数据,但要求张量在内存中连续;可先用 is_contiguous 检查,必要时用 contiguous 转为连续布局。reshape 会在可能时共享存储,否则创建副本;flatten 直接指定要合并的维度。
一次完整的前向与反向传播
卷积核在多个空间位置共享。若暂把第 \(t\) 次使用的核记为 \(W_t\),约束仍是 \(W_t=W\),各位置产生的梯度必须累加:
课件用一幅样本演示卷积核和全连接层的完整更新。随机初始化的卷积核及偏置为
两类全连接层参数为
卷积的原始输出为
加偏置后为
经过 ReLU 和最大池化,得到
全连接层的两个得分为 \(0.17\) 和 \(0.40\),Softmax 概率约为 \((0.44,0.55)\)。真值是第二类,即 \(y=(0,1)\),交叉熵损失约为 \(0.58\)。若不先使用合并结论,交叉熵对概率的梯度和 Softmax Jacobian 分别为
由 \(\partial L/\partial o_j=\sum_i(\partial L/\partial\hat y_i)(\partial\hat y_i/\partial o_j)\),也就是把 Softmax 与交叉熵合并求导,得分梯度为
第一类权值和偏置的梯度为
第二类的梯度恰好取相反数,偏置梯度为 \(-0.44\)。继续向前传,池化输出梯度约为
这里用到的链式关系是
代入两行权值,\(\partial L/\partial h=0.44(w_1-w_2)\)。四个池化窗口的最大值 \(0.55,0.17,0.26,0.81\) 分别来自 \(4\times4\) 特征图的 \((1,2),(2,4),(4,2),(3,3)\),所以最大池化回传为
这些位置在 ReLU 前都大于 0,导数为 1;其余位置没有接收到池化梯度。按 \(h_1,h_2,h_3,h_4\) 的顺序,四个有效感受野对共享卷积核的局部导数是
每个 \(\partial h_r/\partial b_c=1\),因此
例如 \(\partial L/\partial k_{11}=0.08\times0+0.07\times0+(-0.00)\times0+(-0.00)\times1=-0.00\)。把全部位置累加,得到
学习率取 \(\eta=0.01\),按 \(\theta\leftarrow\theta-\eta\nabla_\theta L\) 更新。保留课件显示精度后,全连接层变为
卷积核在两位小数下大多看不出变化,卷积偏置仍显示为 \(-0.24\)。这一例也说明,数值显示精度可能掩盖一次很小的参数更新。
卷积神经网络中的信息熵
确定性变换 \(Y=A^TX\) 的输出信息不可能凭空超过变换和输入共同携带的信息,课件写作
原始像素与高层语义之间存在“语义鸿沟”:相同的像素排列规律未必直接说明图像是字母 A,而语义类别也不能唯一还原每个像素。卷积网络通过逐层特征变换压缩与任务无关的变化,并保留有助于分类的信息。
熵的单位由对数底决定:以 2 为底是 bit,以 \(e\) 为底是 nat,以 10 为底是 hart;换底只改变一个常数比例。对灰度图像,令灰度 \(i\) 的像素数为 \(m_i\),图像高、宽为 \(H,W\),则
对中间特征图,可把每个通道的数值划分到若干直方图区间,分别计算熵后再在 \(C\) 个通道上平均。分箱数会影响估计结果,若分为 \(B\) 个箱,离散熵的上界是 \(\log B\)。对类别标签,若第 \(i\) 类有 \(n_i\) 个样本、总数为 \(N\),则
模型输出的 Softmax 概率也可直接计算预测熵:
预测分布越集中,熵越低,通常代表模型越有把握;但高置信度不保证预测一定正确。
课件训练了一个 26 类英文字母识别网络,结构如下:输入 \(1\times32\times32\);\(3\times3\)、步幅 1、填充 1 的卷积得到 \(8\times32\times32\);\(2\times2\)、步幅 2 的最大池化得到 \(8\times16\times16\);第二次卷积得到 \(16\times16\times16\);池化得到 \(16\times8\times8\);第三次卷积得到 \(32\times8\times8\);\(8\times8\) 平均池化得到 \(32\times1\times1\);最后接 26 类全连接层。训练集 1200 个样本,验证集和测试集各 400 个;Adam 学习率为 \(0.01\),训练 30 轮,小批量大小为 8。验证准确率为 \(66.5\%\),测试准确率为 \(68.8\%\)。
三个样本的熵展示了逐层变化:
- 正确识别的 A,置信度 \(1.00\),图像熵 \(4.19\),三层特征熵依次为 \(1.62,0.70,0.32\),预测熵 \(0.01\)。
- 正确识别的 S,置信度 \(0.90\),图像熵 \(3.40\),特征熵为 \(1.32,1.11,0.26\),预测熵 \(0.48\)。
- 被误识别的 R,置信度 \(0.57\),图像熵 \(4.17\),特征熵为 \(1.81,0.71,0.34\),预测熵 \(0.87\)。
测试集平均图像熵为 \(4.07\),三层平均特征熵为 \(1.69,0.77,0.34\),计算时使用 256 个直方图区间。26 类完全均匀随机变量的熵为
训练集标签先验熵为 \(2.93\),测试集平均预测熵为 \(0.48\)。逐层特征熵下降,说明网络逐步把高维、冗余的像素表示压缩为较集中的类别信息。若把像素假设成彼此独立再把单像素熵相加,会忽略图像的空间约束和像素相关性,因而高估真实图像熵。
思考与探究
- 卷积带来的平移不变性有什么优点,又可能在哪些任务中造成问题?
- 卷积核移动到图像边界时,填充方式会怎样影响输出特征?
- 为什么 \(1\times1\) 卷积等价于在每个像素位置使用同一个全连接层?请从输入、输出通道的线性组合说明。
- CNN 直接处理文本时有哪些不足?它与序列模型、注意力模型的差别在哪里?
- 用直方图估计特征熵时,分箱数与熵估计值有什么关系?给定分箱数时熵的上界是多少?