多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

卷积神经网络(CNN)基础与整体架构

卷积神经网络(CNN)基础与整体架构 目录一. 为什么需要 CNN——从全连接的困境说起传统神经网络 vs CNN二. CNN 的整体组成一条流水线CNN 的主要组成数据维度变化全程三. 卷积层核心计算在做什么多通道卷积数值计算四. 输出尺寸与通道一个公式打天下输入与输出的关系总图五. 权重共享CNN 省参数的关键一招卷积中的权重参数共享六. 多层卷积特征从局部到全局多层卷积的层级特征七. 池化层只记要点丢掉细节池化层的三大作用最大池化 vs 平均池化八. 感受野看得多远懂多深感受野的作用九. 小卷积核堆叠27c² 小于 49c² 的智慧小卷积核堆叠的优势十. 经典网络结构VGGVGG 结构剖面与配置表十一. 经典网络结构ResNet——给深网络一条「退路」ResNet-50结构、退化与残差块一. 为什么需要 CNN——从全连接的困境说起全连接网络把图像拉平成一维向量既丢失空间结构、参数量又爆炸CNN 用「局部连接 权值共享」的卷积核在图上滑动提取特征天然适配图像的网格结构。传统神经网络 vs CNN左半「传统神经网络全连接网络」输入是一维特征向量经隐藏层 1、隐藏层 2 到输出层每个神经元与上一层所有神经元相连——参数量大且难以利用图像的空间结构如相邻像素的关联。右半「卷积神经网络CNN」输入是三维图像数据 H×W×C高度 × 宽度 × 通道数如 224×224×3先经「卷积层 池化层」提取空间特征再接全连接层完成分类/回归。图中下方两栏结论全连接每个神经元与上一层所有神经元相连参数量大难以利用数据的空间结构如邻域关系CNN利用局部连接和权值共享的卷积操作有效处理高维数据自动学习空间层次特征参数量更少、泛化能力更强。二. CNN 的整体组成一条流水线CNN 输入层 → [卷积层 → 激活函数 → 池化层] × N → 全连接层 → 输出层空间尺寸逐层缩小、通道数逐层增加最后展平接全连接完成分类。类似一条加工流水线——先粗提特征再压缩打包反复几轮最后由决策车间给出结论。CNN 的主要组成流水线输入层H×W×C→ 卷积层提取局部特征→ 池化层缩小尺寸、增强鲁棒性→ 卷积层提取更高级特征→ 池化层进一步缩小尺寸→ 全连接层特征融合与决策→ 输出层输出预测结果。层级分工口诀浅层看纹理、中层看部件、深层看整体现代 CNN 把「卷积 → 激活 → 池化」作为标准块重复堆叠ResNet 之后池化常被步长为 2 的卷积替代但提特征 → 降尺寸 → 融合决策的三段式骨架不变。数据维度变化全程一张图看懂张量形状全程输入 3DH×W×C₀如 224×224×3→ 卷积层 13DH₁×W₁×C₁通道数增加提取更多特征宽高 ≤ 原尺寸→ 池化层 1H₂×W₂×C₁宽高减小、通道不变特征更紧凑→ 卷积层 2通道继续增加→ 池化层 2继续减小宽高→ 展开 Flatten3D→1D1×1×(C₃×H₃×W₃)→ 全连接层1×1×NN 为类别数。图例说明五个角色3D 特征图高 × 宽 × 通道数、卷积层通道数增加特征更丰富、池化层宽高变小特征更紧凑、展开3D 张量展开为 1D 向量、全连接层向量输入输出分类结果。图底总结卷积层主要增加通道数提取更多特征不改变或减小空间尺寸池化层主要减小空间尺寸降低计算量不改变通道数每一层的输出作为下一层的输入维度逐步变化最后展开为 1D 向量接入全连接层完成分类。金字塔规律空间 H×W 逐层变小、通道 C 逐层变大——空间换通道信息表示从哪里有什么逐渐变成有什么。Flatten 的隐患VGG 中 7×7×512 展平后接 FC-4096仅一层就有约 1.03 亿参数25088 × 4096现代网络用全局平均池化 GAP每张特征图取一个平均值替代大 FC 层。三. 卷积层核心计算在做什么卷积 卷积核在输入上按步长滑动每个位置做点积对应元素相乘再求和并加偏置得到特征图滤波器深度必须等于输入通道数空间上滑动、不跨深度。多通道卷积数值计算CS231n 经典数值示例输入体积 7×7×3已含 padding 1两个 3×3×3 滤波器 W0、W1偏置 b01、b10步长 2输出 3×3×2。图中颜色分工蓝框 当前计算窗口在 3 个输入通道上同时取 3×3 区域红框 滤波器权重w0/w1 各有 3 个通道切片绿框 当前输出元素右下角 toggle movement 按钮提示这是动画的其中一帧。计算方法窗口内 27 个数与滤波器 27 个权重对应相乘求和再加偏置 → 写入输出一个位置输出通道 0 由 W0 计算、通道 1 由 W1 计算。四. 输出尺寸与通道一个公式打天下输出空间尺寸 H₂ (H₁ − F 2P) / S 1宽度同理输出通道数 卷积核个数。输入与输出的关系总图五. 权重共享CNN 省参数的关键一招同一卷积核在输入所有空间位置重复使用权值共享参数量只与核大小和个数有关、与图像尺寸无关对比全连接的每个输出连所有输入参数可差数十倍。卷积中的权重参数共享左半「卷积权重参数共享」32×32×3 输入上一个 5×5×3 卷积核仅 75 个参数在输入上滑动共享使用输出 32×32×1用 10 个这样的卷积核 → 10 张不同的输出特征图总权重 75 × 10 750不含偏置。右半「对比全连接无参数共享」输入展平后长度 32×32×3 3072每个输出神经元需要 3072 个权重连接所有输入若有 10 个输出神经元权重参数量 3072 × 10 30720远大于卷积方式的 750。底部计算示例题目条件输入 32×32×3卷积核 5×5×3 共 10 个每核参数 75总权重 75×10750若含偏置每核再 1 共 10 个偏置 → 最终总参数量 750 10 760。绿色要点同一卷积核的 75 个参数在所有空间位置重复使用参数量不随输入大小变化而增加。760 vs 30720 ≈ 1/40——权值共享的威力输入升到 512×512 时全连接参数再涨 256 倍卷积参数纹丝不动。共享背后的假设检测猫耳朵的模板在图像左上角和右下角同样有用平移等变性 translation equivariance——特征只与模式有关、与位置无关。极端对照全连接 ≈ 每个输出位置一个专属卷积核完全不共享卷积 所有位置共用一个核极致共享。参数量公式速记卷积层 (F×F×Cin 1) × Cout全连接层 (输入维度 1) × 神经元数。六. 多层卷积特征从局部到全局浅层卷积提取边缘、纹理等小尺度局部特征中层提取角点、形状中深层提取部件与组合结构深层提取整体结构与全局语义感受野逐层扩大是层级化的前提。多层卷积的层级特征以猫图为例展示层级特征卷积层 1浅层提取边缘、纹理等小尺度局部特征卷积层 2中层提取角点、形状等中等尺度局部特征卷积层 3中深层提取部件、组合结构眼睛、耳朵等较大尺度特征卷积层 N深层提取物体整体结构、全局语义特征 → 输出结果「猫 ✓」。每层下方的特征图可视化浅层是零散的线条、色块响应中层出现形状轮廓深层已是完整的猫形响应图——网络内部确实长这样。底部渐变条浅层关注局部细节边缘、纹理、颜色等小尺度特征→ 深层关注全局语义物体整体结构、类别语义等大尺度特征。图底总结通过堆叠多个卷积层网络的感受野关注范围逐渐增大能够学习从局部到全局的多级特征表示从而更好地理解图像内容。层级成立的两个前提感受野逐层扩大 层间非线性七. 池化层只记要点丢掉细节池化是无可学习参数的固定下采样——在窗口内取最大值或平均值缩小特征图的同时扩大感受野、突出显著响应。池化层的三大作用① 降低维度输入特征图 H×W×C → 输出 H×W×CH 小于 HW 小于 W把相邻区域合并得到更小的特征图右侧图示每个输出位置对应输入中的一个区域。② 扩大感受野一个输出点汇聚来自输入中更大区域的信息右侧图示输出特征图中的一个点对应输入特征图中的一个区域。③ 突出重要特征保留显著响应、抑制不重要信息右侧柱状图显示池化后更强的响应被保留下来弱的响应被抑制。现代演变三连ResNet 用 stride2 卷积替代池化分类网络末端用 GAP 替代大 FC 层分割/检测任务里池化丢位置反而成缺点。最大池化 vs 平均池化最大池化Max Pooling左侧每个窗口取最大值 → 输出 [[6, 8], [6, 3]]图下方列出四步max(1, 3, 5, 6) 6、max(2, 4, 7, 8) 8、max(0, 2, 4, 6) 6、max(1, 3, 2, 1) 3。平均池化Average Pooling右侧每个窗口取平均值 → 输出 [[3.75, 5.25], [3.00, 1.75]]四步(1356)/4 3.75、(2478)/4 5.25、(0246)/4 3.00、(1321)/4 1.75。选择直觉Max 回答有没有保留最强激活、突出显著特征Avg 回答平均怎样保留整体强度、画面更平滑图像分类隐层主流用 Max网络末端的全局池化用 Avg。反向传播视角Max 池化的梯度只流向窗口内最大值的位置其余位置梯度为 0Avg 把梯度平均分配给窗口内每个位置。八. 感受野看得多远懂多深感受野 输出特征图上一个像素所对应的输入图像区域范围随层数加深、下采样叠加感受野逐渐增大网络能捕获的上下文也越丰富。感受野的作用定义感受野——输出特征图上一个像素所对应的输入图像中的区域范围随着网络层数加深感受野逐渐增大能捕获更大范围的上下文信息。三格示意输入Input→ 第一层卷积First Conv绿色高亮区域感受野大小 3×3对应输入图像中的 3×3 区域→ 第二层卷积Second Conv粉色高亮区域感受野大小 5×5对应输入图像中的 5×5 区域。图底作用总结感受野越大能获取的上下文信息越丰富有助于理解全局结构提升分类、检测等任务的性能合理设计网络结构如卷积核大小、层数、步长、池化等可以控制感受野大小。理论感受野不等于有效感受野有效感受野呈高斯分布、集中在中心且明显更小。工程上增大感受野的三板斧堆层数、下采样池化/大步长、空洞扩张卷积——DeepLab 分割系列靠空洞卷积在不降分辨率的前提下扩感受野。感受野是一个输出点看得多远平移不变性是整体挪一下输出基本不变。九. 小卷积核堆叠27c² 小于 49c² 的智慧在通道数不变的前提下3 个串联 3×3 卷积的感受野等于 1 个 7×7但参数量 27c² 远小于 49c²且多了两次非线性变换。小卷积核堆叠的优输入大小都是 h×w×c并且都使用 c 个卷积核得到 c 个特征图。左侧一个 7×7 卷积核所需参数 c × (7×7×c) 49c²配 7×7 蓝色网格示意。右侧3 个 3×3 卷积核所需参数 3 × c × (3×3×c) 27c²三个 3×3 绿色网格依次串联总覆盖范围同样是 7×7。结论框27c² 49c²三大优势① 参数更少② 特征提取更细致中间层多两级表达③ 非线性变换更多多过两次激活函数。两个 3×3 之间必须夹非线性ReLU才不等价于一层数学卷积若没有激活函数两层 3×3 可以合并成一层 7×7优势 ③ 就消失了。感受野等效链两层 3×3步长 1 5×5三层 3×3步长 1 7×7——用更少参数换同等视野。十. 经典网络结构VGGVGG 用统一化的3×3 卷积 2×2 最大池化积木堆出 16/19 层网络5 组卷积块逐级把空间尺寸减半、通道翻倍最后 3 层全连接输出 1000 类。VGG 结构剖面与配置表结构剖面车辆图输入224×224×3 → 各阶段特征图尺寸标注 224×224×64 → 112×112×128 → 56×56×256 → 28×28×512 → 14×14×512 → 7×7×512 → 1×1×4096 → 1×1×4096 → 1×1×1000。图例四色蓝色 卷积层 ReLU粉色 最大池化层2×2stride 2绿色 全连接层 ReLU橙色 Softmax。五个分组Block1×2、Block2×2、Block3×3、Block4×3、Block5×3 FC6、FC7、FC8。右侧配置表逐行输入 224×224×3Block1 输出 112×112×64conv3-64 maxpool重复 ×2Block2 输出 56×56×128×2Block3 输出 28×28×256×3Block4 输出 14×14×512×3Block5 输出 7×7×512conv3-512 maxpool ×3FC6 1×1×4096FC-4096FC7 1×1×4096FC8 1×1×1000FC-1000 Softmax。十一. 经典网络结构ResNet——给深网络一条「退路」残差块让堆叠层学习残差 F(x) H(x) − x输出 H(x) F(x) x恒等 shortcut 为梯度提供直通高速路使百层、千层网络可以稳定训练。ResNet-50结构、退化与残差块ResNet提出残差学习是为了解决深层CNN的退化问题网络层数加深时训练误差反而上升并非过拟合而是普通网络难以学习恒等映射。残差块引入shortcut短路连接不再直接学习从输入x到输出H(x)的完整映射而是学习残差F(x)H(x)-x通过残差让模型知道与正确值之间的差距最终输出H(x)F(x)x如果最优映射是恒等映射网络只需把F(x)逼近0优化难度大幅降低同时梯度可通过短路支路直接回传缓解梯度消失让我们能够训练几十上百层的深度网络而Bottleneck结构使用1×1卷积先降维再升维进一步减少参数量与计算开销ResNet也成为深度学习里程碑式的网络。
返回列表