《白话深度学习的数学》读书笔记 | 第4章 学习卷积神经网络
关键词:卷积神经网络、卷积过滤器、卷积核、特征图、通道、ReLU、池化、最大池化、填充、步进、全连接层、softmax、交叉熵、反向传播、梯度下降
本章概览
本章介绍卷积神经网络。卷积神经网络擅长处理图像,在计算机视觉中取得了巨大成功。它的核心结构是:卷积层 + 激活函数 + 池化层,最后连接到全连接层输出分类结果。卷积层通过卷积过滤器提取图像特征,生成特征图;激活函数常用 ReLU;池化用于缩小特征图并增强鲁棒性。训练时仍然使用误差反向传播法和梯度下降法,但卷积层的德尔塔计算与全连接层有所不同。最后通过专栏介绍交叉熵,以及它为什么常与 softmax 搭配使用。
一句话总结:卷积神经网络 = 卷积层提取特征 + 池化缩小特征图 + 全连接层分类;训练仍然依靠反向传播和梯度下降。
4.1 擅长处理图像的卷积神经网络
核心内容:
卷积神经网络在图像处理领域非常成功,尤其是计算机视觉。它最常见的任务是图像分类,例如判断图像中是狗、猫还是兔子。近年来,卷积神经网络也开始应用于自然语言处理。
要点总结:
- 卷积神经网络对计算机视觉的成功至关重要。
- 最常见任务:图像分类。
- 图像处理直观、有趣,适合用卷积神经网络。
- 卷积神经网络不只用于图像,也开始用于自然语言处理。
- 学习顺序:先了解卷积神经网络的基础知识。
本节启发:
卷积神经网络并不是只能处理图像,但图像是理解它最直观的入口。
4.2 卷积过滤器
核心内容:
图像可以看作数值矩阵,灰度图像中数值越接近 1 越黑,越接近 0 越白。对图像应用过滤器,就是让过滤器在图像上滑动,重叠位置相乘再相加。这个操作叫卷积。过滤器也叫卷积过滤器或卷积矩阵。
要点总结:
- 图像可表示为矩阵。
- 灰度图像数值通常在 0 到 1 之间。
- 过滤器也是矩阵,也叫核。
- 对图像应用过滤器:重叠、相乘、相加。
- 过滤器从左上角移动到右下角。
- 应用过滤器后,图像通常会变小。
- 模糊过滤器:取周围像素平均值。
- 卷积神经网络中,过滤器叫卷积过滤器,操作叫卷积。
- 过滤器数值不是人工设计,而是通过训练得到。
- 过滤器可以看作特征检测器。
- 边缘、纵向、横向、曲线、斜向等都可以作为特征。
本节启发:
卷积的本质是“用一个小矩阵在图像上滑动并加权求和”。卷积过滤器就是神经网络要学习的权重。
4.3 特征图
核心内容:
对输入图像应用卷积过滤器后得到的图像叫特征图。一个过滤器生成一个特征图,多个过滤器生成多个特征图。特征图包含图像局部形状、亮度、暗度等信息。
要点总结:
- 应用卷积过滤器后的图像叫特征图。
- 过滤器数量决定特征图数量。
- 特征图包含图像特征信息。
- 特征图变小是正常现象。
- 填充:在输入图像外框补数字,通常补 0,可保持特征图大小。
- 步进:过滤器每次移动的幅度。
- 步进为 1 时逐格移动;步进为 2 或 3 时跳跃移动,特征图会更小。
- 填充和步进可用于调整特征图大小。
| 概念 | 含义 |
|---|---|
| 填充 | 在图像外框补 0,控制输出大小 |
| 步进 | 过滤器移动幅度 |
| 特征图 | 卷积后的输出 |
本节启发:
特征图是卷积层提取到的特征表示。填充和步进是控制特征图尺寸的重要参数。
4.4 激活函数
核心内容:
对特征图应用激活函数。全连接神经网络中常用 sigmoid,卷积神经网络中常用 ReLU。ReLU 是 Rectified Linear Unit,修正线性单元。
要点总结:
- ReLU 表达式:
ReLU(x)=max(0,x) \mathrm{ReLU}(x)=\max(0,x) ReLU(x)=max(0,x)
- ReLU 在 x>0x>0x>0 时输出 xxx,否则输出 0。
- ReLU 性能好,使用简单。
- ReLU 能缓解梯度消失问题。
- 当 x>0x>0x>0 时,ReLU 导数为 1,梯度不容易消失。
- 卷积神经网络中常用 ReLU 作为激活函数。
本节启发:
激活函数决定神经网络能否有效训练。ReLU 之所以流行,是因为它简单且能缓解梯度消失。
4.5 池化
核心内容:
池化用于减小特征图大小。最常见的是最大池化:把特征图划分成若干区域,取每个区域的最大值。
要点总结:
- 池化:缩小特征图。
- 最大池化:取区域内最大值。
- 常见区域大小:2×2。
- 池化使特征不容易受图像变形和移动影响。
- 池化大小是可调参数。
- 最近有些模型不再使用池化,但池化仍是重要基础概念。
本节启发:
池化让网络更关注“有没有特征”,而不是“特征在哪里”,从而增强鲁棒性。
4.6 卷积层
核心内容:
一个典型卷积层包含 4 步:准备卷积过滤器、卷积得到特征图、应用激活函数、池化。卷积神经网络会叠加多组这样的层。浅层捕捉简单特征,深层捕捉高级特征。最后连接全连接神经网络输出分类结果。
要点总结:
- 卷积层 4 步:
- 准备卷积过滤器。
- 对输入图像卷积,得到特征图。
- 对特征图应用激活函数,常用 ReLU。
- 对结果进行池化。
- 多组卷积层叠加。
- 浅层捕捉简单特征,深层捕捉高级特征。
- 最后接全连接层输出分类结果。
- 卷积神经网络本质仍与全连接神经网络相同:
- 输入与权重相乘;
- 相加;
- 应用激活函数。
- 区别:连接方式和权重表现形式不同。
- 卷积神经网络权重共享:同一个过滤器在整张图像上重复使用。
- 通道:多个特征图重叠。
- 彩色图像有 R、G、B 三个通道。
- 卷积过滤器通道数必须与输入通道数一致。
- 过滤器个数决定输出特征图通道数。
- 最后把特征图纵向展开为 1 列,连接全连接层。
本节启发:
卷积神经网络并不是完全不同的网络,它只是改变了连接方式和权重共享方式。权重共享大大减少了参数量。
4.7 卷积层的正向传播
核心内容:
用数学符号表示卷积层正向传播。输入图像用 x(c,i,j)x_{(c,i,j)}x(c,i,j) 表示,卷积过滤器用 w(c,u,v)(k)w_{(c,u,v)}^{(k)}w(c,u,v)(k) 表示,偏置用 b(k)b_{(k)}b(k) 表示,特征图用 z(i,j)(k)z_{(i,j)}^{(k)}z(i,j)(k) 表示。应用激活函数后为 aaa,池化后为 ppp。
要点总结:
- 输入图像维度:通道、纵向、横向。
- 符号:
- ccc:通道;
- iii:纵向;
- jjj:横向;
- kkk:第几个卷积过滤器。
- 卷积过滤器符号:
w(c,u,v)(k) w_{(c,u,v)}^{(k)} w(c,u,v)(k)
- 偏置符号:
b(k) b_{(k)} b(k)
- 特征图符号:
z(i,j)(k) z_{(i,j)}^{(k)} z(i,j)(k)
- 卷积计算可写成三重求和:通道、纵向、横向。
- 应用激活函数:
a(i,j)(k)=ReLU(z(i,j)(k)) a_{(i,j)}^{(k)}=\mathrm{ReLU}(z_{(i,j)}^{(k)}) a(i,j)(k)=ReLU(z(i,j)(k))
- 池化后:
p(i,j)(k) p_{(i,j)}^{(k)} p(i,j)(k)
- 最后一层的输出作为下一层输入。
- 层信息写在右上角,例如 x(0)x^{(0)}x(0) 表示第 0 层输入。
本节启发:
卷积层正向传播虽然符号多,但本质仍是“加权求和 + 激活函数 + 池化”。
4.8 全连接层的正向传播
核心内容:
卷积层提取特征后,把特征图纵向展开为 1 列,连接到全连接层。全连接层计算方式与之前相同。分类时输出层使用 softmax 函数,使输出值表示概率,且总和为 1。
要点总结:
- 特征图展开为列向量。
- 连接到全连接神经网络。
- 分类任务输出层单元数等于类别数。
- 输出值表示各个类别的概率。
- 概率总和必须为 1。
- 分类时输出层常用 softmax 函数:
yi=exp(zi(4))∑jexp(zj(4)) y_i=\frac{\exp(z_i^{(4)})}{\sum_j \exp(z_j^{(4)})} yi=∑jexp(zj(4))exp(zi(4))
- softmax 本质是比例计算。
- 使用 exp 的原因:
- 避免负数问题;
- 便于微分;
- 非线性。
- softmax 输出后,正向传播结束。
本节启发:
卷积神经网络最后仍然靠全连接层和 softmax 完成分类。softmax 把任意实数变成概率分布。
4.9 反向传播
4.9.1 卷积神经网络的反向传播
核心内容:
卷积神经网络训练仍然使用误差反向传播法和梯度下降法。后半部分是全连接层,可以直接沿用之前的方法;前半部分是卷积层,表达式不同,但思路相同。
要点总结:
- 整体训练思路与全连接神经网络一致。
- 全连接层反向传播沿用之前方法。
- 卷积层反向传播需要重新推导。
- 仍然使用梯度下降法更新参数。
- 仍然通过德尔塔间接求偏微分。
本节启发:
卷积神经网络的反向传播不是全新体系,而是全连接反向传播在卷积结构上的扩展。
4.9.2 误差
核心内容:
准备训练数据和正确答案。卷积神经网络输出为概率向量 yyy,正确标签为 ttt。这次使用交叉熵作为误差,而不是平方误差。
要点总结:
- 训练数据:输入图像 xxx 和正确标签 ttt。
- 网络输出:yyy,表示各标签概率。
- 误差使用交叉熵:
E(Θ)=−∑ptplogyp E(\Theta)=-\sum_p t_p\log y_p E(Θ)=−p∑tplogyp
- 交叉熵衡量两个概率分布的相似度。
- 当 P=QP=QP=Q 时,交叉熵最小。
- 交叉熵在训练早期速度较快。
- 使用交叉熵时,偏离正确答案越远,权重移动幅度越大。
- 参数 Θ\ThetaΘ 包含卷积过滤器权重、偏置、全连接层权重和偏置。
本节启发:
分类任务中,交叉熵通常比平方误差更适合作为目标函数,尤其是配合 softmax 使用时。
4.9.3 全连接层的更新表达式
核心内容:
全连接层更新表达式基本沿用之前形式,但由于使用交叉熵,输出层德尔塔发生变化。组合交叉熵和 softmax 后,输出层德尔塔变得非常简单。
要点总结:
- 全连接层权重更新:
wij(l):=wij(l)−ηδi(l)xj(l−1) w_{ij}^{(l)} := w_{ij}^{(l)} - \eta \delta_i^{(l)} x_j^{(l-1)} wij(l):=wij(l)−ηδi(l)xj(l−1)
- 偏置更新:
bi(l):=bi(l)−ηδi(l) b_i^{(l)} := b_i^{(l)} - \eta \delta_i^{(l)} bi(l):=bi(l)−ηδi(l)
- 隐藏层德尔塔仍通过反向传播计算。
- 输出层使用 softmax + 交叉熵时:
δi(L)=yi−ti \delta_i^{(L)}=y_i-t_i δi(L)=yi−ti
- 其中 yiy_iyi 是网络输出概率,tit_iti 是正确标签。
- 这个结果非常简洁。
本节启发:
softmax + 交叉熵是一对经典组合,它让输出层德尔塔形式非常简单,便于实现。
4.9.4 卷积过滤器的更新表达式
核心内容:
卷积过滤器的权重也需要通过梯度下降更新。直接对权重求偏微分困难,因此同样先求对加权输入,也就是对特征图的偏微分。
要点总结:
- 卷积过滤器权重更新使用梯度下降。
- 先求目标函数对特征图的偏微分。
- 再分割偏微分,得到对过滤器权重的偏微分。
- 一个权重会出现在多个特征图位置中,因此需要把相关偏微分加起来。
- 最终偏微分表达式只包含德尔塔和输入值。
- 与全连接层类似,求出德尔塔后更新就简单了。
本节启发:
卷积层的权重共享意味着同一个过滤器权重会影响多个输出位置,因此反向传播时需要累加这些影响。
4.9.5 池化层的德尔塔
核心内容:
池化会丢弃部分单元。没有通过池化的单元无法参与反向传播,因此它们的德尔塔设为 0。
要点总结:
- 最大池化只保留区域最大值。
- 未通过池化的单元不参与后续计算。
- 未通过池化的单元德尔塔为 0。
- 通过池化的单元正常反向传播。
- 必须区分通过池化和未通过池化的单元。
本节启发:
池化层反向传播的关键是“只把梯度传给被选中的单元,其他单元梯度为 0”。
4.9.6 与全连接层相连的卷积层的德尔塔
核心内容:
从全连接层反向传播到卷积层时,需要计算卷积层德尔塔。池化后的单元与全连接层所有单元相连,因此需要把来自全连接层的德尔塔加权求和。
要点总结:
- 从全连接层开始反向传播。
- 池化后的 p(i,j)(k,l)p_{(i,j)}^{(k,l)}p(i,j)(k,l) 与下一层全连接层所有单元连接。
- 德尔塔计算需要用到下一层德尔塔和连接权重。
- 表达式形式与全连接层隐藏层德尔塔类似。
- 仍然使用反向传播复用下一层德尔塔。
本节启发:
从全连接层到卷积层的反向传播,本质上是把全连接层的德尔塔通过权重传回卷积层。
4.9.7 与卷积层相连的卷积层的德尔塔
核心内容:
从卷积层反向传播到前一个卷积层时,计算更复杂。因为一个单元可能被多个过滤器位置覆盖,需要把所有相关位置的德尔塔加权求和。
要点总结:
- 卷积层与卷积层相连时,反向传播更复杂。
- 一个输入单元可能参与多个输出位置的计算。
- 需要把所有相关位置的德尔塔相加。
- 表达式包含多个求和符号。
- 如果位置越界,对应德尔塔设为 0。
- 仍然遵循“从后往前反向传播”的原则。
本节启发:
卷积层反向传播的复杂来自“权重共享”和“滑动窗口重叠”。理解这一点,就能理解复杂求和公式的来源。
4.9.8 参数的更新表达式
核心内容:
总结卷积神经网络反向传播:先算输出层德尔塔,再逐层反向传播德尔塔,最后用梯度下降更新所有参数。
要点总结:
- 共有 4 类德尔塔:
- 输出层德尔塔;
- 全连接隐藏层德尔塔;
- 与全连接层相连的卷积层德尔塔;
- 与卷积层相连的卷积层德尔塔。
- 除输出层外,其他德尔塔都通过下一层德尔塔反向传播得到。
- 参数更新仍使用:
w:=w−η∂E(Θ)∂w w := w - \eta \frac{\partial E(\Theta)}{\partial w} w:=w−η∂w∂E(Θ)
b:=b−η∂E(Θ)∂b b := b - \eta \frac{\partial E(\Theta)}{\partial b} b:=b−η∂b∂E(Θ)
- 卷积过滤器权重和偏置也按同样思路更新。
- 实现为代码后,理解会更深。
本节启发:
卷积神经网络训练虽然公式复杂,但主线仍然是:正向传播求输出 → 计算误差 → 反向传播求德尔塔 → 梯度下降更新参数。
专栏 交叉熵到底是什么
核心内容:
交叉熵来自信息论。熵表示用最佳编码方式表示某概率分布所需的平均比特长度。交叉熵表示用概率分布 Q 的最佳编码方式,去编码概率分布 P 的信息时,所需的平均比特长度。
要点总结:
- 熵:某概率分布下,表示一种结果所需的平均比特长度。
- 交叉熵:用分布 Q 的编码方式编码分布 P 的平均比特长度。
- 当 P=QP=QP=Q 时,交叉熵最小。
- 在机器学习中,最小化交叉熵就是让网络输出概率分布尽可能接近训练数据真实分布。
- 交叉熵可以与 softmax 搭配作为分类任务的目标函数。
- log 的底不影响熵的性质。
本节启发:
交叉熵不是随便选的误差函数。它从信息论角度衡量两个概率分布的差异,因此非常适合分类任务。
本章总结
- 卷积神经网络擅长图像处理,也用于自然语言处理。
- 图像可看作矩阵,卷积过滤器在图像上滑动并加权求和。
- 卷积后的输出叫特征图。
- 过滤器数值通过训练得到,是特征检测器。
- 填充和步进可调整特征图大小。
- 卷积层常见流程:卷积 → 激活函数 → 池化。
- 常用激活函数:ReLU。
- 常用池化:最大池化。
- 卷积神经网络通过通道处理多特征图,彩色图像有 RGB 三通道。
- 卷积过滤器通道数必须与输入通道数一致。
- 最后连接全连接层,分类时使用 softmax 输出概率。
- 训练使用反向传播和梯度下降。
- 分类任务常用交叉熵作为目标函数。
- softmax + 交叉熵组合时,输出层德尔塔为:
δi(L)=yi−ti \delta_i^{(L)}=y_i-t_i δi(L)=yi−ti
- 池化层未选中单元德尔塔为 0。
- 卷积层反向传播需要处理权重共享和窗口重叠。
公式速查
ReLU
ReLU(x)=max(0,x) \mathrm{ReLU}(x)=\max(0,x) ReLU(x)=max(0,x)
softmax
yi=exp(zi(4))∑jexp(zj(4)) y_i=\frac{\exp(z_i^{(4)})}{\sum_j \exp(z_j^{(4)})} yi=∑jexp(zj(4))exp(zi(4))
交叉熵
E(Θ)=−∑ptplogyp E(\Theta)=-\sum_p t_p\log y_p E(Θ)=−p∑tplogyp
全连接层权重更新
wij(l):=wij(l)−ηδi(l)xj(l−1) w_{ij}^{(l)} := w_{ij}^{(l)} - \eta \delta_i^{(l)} x_j^{(l-1)} wij(l):=wij(l)−ηδi(l)xj(l−1)
全连接层偏置更新
bi(l):=bi(l)−ηδi(l) b_i^{(l)} := b_i^{(l)} - \eta \delta_i^{(l)} bi(l):=bi(l)−ηδi(l)
softmax + 交叉熵输出层德尔塔
δi(L)=yi−ti \delta_i^{(L)}=y_i-t_i δi(L)=yi−ti
梯度下降通用形式
w:=w−η∂E(Θ)∂w w := w - \eta \frac{\partial E(\Theta)}{\partial w} w:=w−η∂w∂E(Θ)
b:=b−η∂E(Θ)∂b b := b - \eta \frac{\partial E(\Theta)}{\partial b} b:=b−η∂b∂E(Θ)
金句摘录
卷积神经网络中有许多这样的卷积过滤器,还会重复每个过滤器的卷积过程。
过滤器的数值不是事先准备好的,而是由卷积神经网络训练出来的。
我们可以把过滤器看作所谓的“特征检测器”。
卷积神经网络只是单元之间的连接方式和权重的表现形式有些不同,本质上和全连接神经网络是相同的。
卷积神经网络的权重不是与连接各单元的线关联的,而是与各个卷积过滤器关联的。
池化处理能使从特征图中提取的特征不容易受到图像变形和移动等的影响。
使用 ReLU 能很好地防止梯度消失问题出现。
与平方误差相比,交叉熵的特点是在训练的早期阶段,它的训练速度也很快。
当两个概率分布 P 和 Q 一致时,交叉熵最小。
个人思考
- 第 4 章把神经网络从全连接推进到了卷积结构。核心变化不是“计算方式完全不同”,而是“连接方式”和“权重共享”发生了变化。
- 卷积过滤器是卷积神经网络的权重。它通过滑动窗口在图像上重复使用,大大减少了参数量。
- 特征图、通道、填充、步进、池化这些概念,都是围绕“如何提取和压缩图像特征”展开的。
- ReLU 之所以重要,是因为它简单、非线性,并且能缓解梯度消失。
- softmax + 交叉熵是分类任务的经典组合,输出层德尔塔形式非常简洁。
- 卷积神经网络的反向传播公式复杂,但逻辑与全连接网络一致:先求输出层德尔塔,再逐层反向传播,最后用梯度下降更新参数。
- 池化层反向传播时,未选中单元德尔塔为 0,这一点实现时非常关键。
- 这一章公式很多,但主线可以概括为:卷积提取特征 → 池化压缩特征 → 全连接分类 → 反向传播训练 → 梯度下降更新参数。
更多推荐

所有评论(0)