与 CNN 设计原则(稀疏连接、权重共享、池化)全解析)
示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载本篇技术指南以 NYU-DLSP20 课程第 3 周实践课笔记 docs/it/week03/03-3.md对应英文版 docs/en/week03/03-3.md为主体系统讲解自然信号音频、图像、语言如何用向量刻画以及由此归纳出的三条核心性质——平稳性Stationarity、局部性Locality、组合性Compositionality。在此基础上结合仓库中的 06-convnet.ipynb 源码逐层剖析 CNN 如何通过稀疏连接、权重共享、堆叠层与池化把这三条性质转化为可训练的归纳偏置并用 FC 网络与 CNN 在原始/像素打乱 MNIST 上的对比实验验证假设正确则获益、假设错误则受损的核心结论。读完你不仅能理解卷积网络的设计动机还能在仓库提供的 PyTorch 代码中亲手复现完整的训练与对照实验。一、把自然信号当作向量1.1 一维信号音频所有信号都可以被看作向量。以音频为例一段声音是一个一维信号$$\boldsymbol{x} [x_1, x_2, \cdots, x_T],$$其中每个分量 $x_t$ 表示 $t$ 时刻波形在该点的振幅。人类听觉系统的处理过程本身就是信号→表示→语言模型的流水线耳蜗coclea先把空气压力振动转换成神经脉冲大脑再用语言模型把这些神经信号转译为语言——即在给定信号的条件下挑选最可能的语句most probable utterance。音乐信号被称为立体声stereophonic通常包含 2 个甚至更多声道channels以营造声音来自多个方向的错觉。但需要强调的是即使有 2 个声道音乐信号依然是 1D 信号因为决定信号状态的自变量只有一个——时间。1.2 二维信号图像图像是 2D 信号因为它的信息按二维空间排布。关键洞察在于空间中的每个点本身又可以是一个向量。若图像有 $d$ 个通道那么每个空间位置对应一个 $d$ 维向量。彩色图像有 RGB 三个平面Red、Green、Blue即 $d3$对任意像素 $x_{i,j}$向量的三个分量分别对应红、绿、蓝三色的强度。1.3 离散符号语言同样的逻辑也能表示语言。每个词对应一个one-hot 向量在词汇表中该词出现的位置为 1其余位置全为 0。因此每个词的向量维度就等于词汇表的长度。这种表示方式把离散的符号映射到高维向量空间为后续的嵌入学习embedding提供了出发点。二、自然数据的三大性质把信号向量化之后自然数据普遍遵循以下三条性质平稳性Stationarity某些母题motif会在整个信号中重复出现。在音频中我们能在时间轴上反复观察到同一类模式在图像中意味着相似的可视模式会在空间的不同位置重复。局部性Locality相邻点之间的相关性远高于远距离点。对 1D 信号而言如果在某个点 $t_i$ 出现一个峰值那么 $t_i$ 附近小窗口内的点大概率取值与 $t_i$ 相近而远处 $t_j$ 处的 $x_{t_j}$ 与 $x_{t_i}$ 几乎无关。更形式化地说一个信号与其翻转版本做卷积当二者完全重叠时卷积结果达到峰值两个 1D 信号的卷积互相关本质上就是它们的点积dot product即衡量两个向量相似/接近程度的度量——因此信息集中存在于信号的特定局部区域。对图像而言两个像素点的相关性随距离增大而递减若像素 $x_{0,0}$ 是蓝色那么相邻像素 $x_{1,0}$、$x_{0,1}$ 同样是蓝色的概率很高但当移动到图像另一端的 $x_{-1,-1}$ 时其取值已与 $x_{0,0}$ 相互独立。组合性Compositionality自然界的一切都由部分构成而这些部分又由更小的子部分构成以此类推。例如字符组成字符串字符串组成单词单词组成句子句子组合成文档。组合性让世界变得可解释explainable。关键推论如果数据具备平稳性、局部性与组合性我们就可以用**稀疏连接sparsity、权重共享weight sharing和层的堆叠stacking of layers**这三类网络结构来利用它们。这正是卷积神经网络的设计原点。三、把性质转化为网络结构从全连接到卷积3.1 局部性 → 稀疏连接Sparsity课程笔记首先展示了 5 层全连接FC网络的示意图每条箭头代表一个要与输入相乘的权重。可见其计算开销非常庞大。既然数据具有局部性我们就不必让每个神经元与上一层所有神经元相连而只需连接到上一层的局部子集从而丢弃大量远程连接。从源码结构看FC 网络的全连接权重大爆炸在仓库 06-convnet.ipynb 中由FC2Layer直接体现nn.Linear(input_size, n_hidden)把 784 维的 MNIST 输入与 8 个隐单元两两相连3 个线性层依次堆叠每一层都产生完整的稠密权重矩阵。而稀疏化的效果则由CNN类中的nn.Conv2d实现——每个卷积核只覆盖输入的一个局部感受野。感受野Receptive Field, RF定义为某一层每个神经元能够看到或已纳入考虑的上一层神经元数量。在课程图示的稀疏网络中输出层相对隐藏层的 RF 为 3隐藏层相对输入层的 RF 为 3输出层相对输入层的 RF 为 5两层各 3 的递推叠加。稀疏化后的连接每个神经元只连接到上一层的局部子集绿点为隐藏层神经元%20After%20Applying%20Sparsity.png)值得注意的是虽然稀疏化后隐藏层神经元没有覆盖全部输入但整个架构合起来仍能顾及所有输入神经元——这正是局部性假设带来的参数效率。3.2 平稳性 → 权重共享Parameter Sharing如果数据具有平稳性就可以让同一小撮参数在网络中反复使用。课程示例中稀疏网络里原本需要 9 个权重通过共享 3 个权重黄、橙、红三色各代表一个共享参数参数数量从9 降到 3新的架构甚至可能训练得更好因为每个被共享的权重拥有了更多训练样本。经过稀疏化与权重共享后得到的权重集合就是卷积核convolution kernel。这解释了为什么卷积核天然具备平移不变equivariance的倾向同一个核在特征图的不同位置滑动等价于同一组参数在反复利用信号的平稳重复模式。权重共享后的卷积网络相同颜色连线复用同一权重构成卷积核%20After%20Applying%20Parameter%20Sharing.png)使用稀疏性与权重共享带来以下可验证的优势权重共享收敛更快faster convergence泛化更好better generalisation不受输入尺寸约束not constrained to input size核之间相互独立 ⇒ 高度可并行化kernel independence → high parallelisation连接稀疏大幅减少计算量reduced amount of computation3.3 卷积核尺寸与 padding 的经验法则课程笔记给出了 1D 数据上的卷积核示例其尺寸为2卷积核数量× 7上一层厚度× 3独立权重数其中上一层厚度对应输入通道维度独立权重数对应核的局部宽度。卷积核尺寸的选择本质上是经验性的3×3 卷积被认为是 2D 空间数据的最小可用尺寸1×1 卷积可用于获得一个可施加于更大输入图像的最终层通道变换偶数尺寸的核可能降低数据质量因此通常总是选用奇数尺寸的核一般是3 或 5。Padding填充padding 通常会对最终结果有一定损害但它在编程实现上非常方便。一般使用零填充其尺寸取size (kernel size - 1)/2这样卷积输出与输入保持相同空间尺寸便于堆叠多层网络。3.4 组合性 → 堆叠层与标准空间 CNN组合性对应层的堆叠低层特征组合成高层语义。课程笔记给出的标准空间 CNNspatial CNN即数据之间存在空间关系的 CNN包含以下组成部分多个层卷积Convolution非线性激活ReLU 与 Leaky-ReLU池化Pooling批归一化Batch normalisation残差旁路连接Residual bypass connection批归一化与残差旁路连接对训练深网极为关键当层数堆叠过多时信号的部分信息可能在中途丢失残差旁路通过额外连接既保证了从底到顶的前向通路也为反向传播的梯度提供了从顶到底的捷径。课程中的 Fig. 5 示意了层级表示的变化输入图像的信息主要分布于二维空间除每个像素的颜色这一特征信息外而输出层很厚在网络中段空间信息与特征信息发生此消彼长的交换表示逐渐变密。沿着层级向上走空间信息不断丢失表示越来越稠密dense——这正是深→语义的组合性体现。四、Pooling空间降采样与平移不变性池化操作对不同的区域应用一个特定算子——$L_p$ 范数如 Fig. 6 所示。该算子对每个区域只产出一个值示例中每 4 个像素得到 1 个值。随后按设定的步长stride逐区域遍历整个数据。若输入数据尺寸为 $m \times n$、通道数为 $c$池化后得到 $\frac{m}{2} \times \frac{n}{2}$ 的输出通道数仍为 $c$参见课程 Fig. 7 的结果示意图。要点池化没有可学习参数但我们可以选择不同类型的池化最大池化max-pooling、平均池化average pooling等池化的主要目的是减少数据量使得后续计算能在合理时间内完成从 06-convnet.ipynb 的CNN.forward可以看到两次F.max_pool2d(x, kernel_size2)分别跟在两个卷积层之后配合conv1/conv2均为kernel_size5把 28×28 输入逐步压到 4×4×n_feature再送入全连接分类头——这是池化在真实代码中的标准用法。五、动手实验FC 与 CNN 在 MNIST 上的同参数对决5.1 运行环境与 Notebook 定位实践部分对应的 Jupyter notebook 即仓库根目录下的 06-convnet.ipynb。运行前需先按 README.md 的说明安装并激活环境。仓库根目录的 environment.yml 定义了名为NYU-DL的 conda 环境依赖包括 pytorch、torchvision、matplotlib、jupyterlab 等课程笔记正文中提到的环境名pDL与当前仓库environment.yml中的名称NYU-DL存在差异实际执行请以仓库内 environment.yml 为准conda env create -f environment.yml source activate NYU-DL jupyter notebook5.2 模型定义与等参对照Notebook 中定义了两种参数量相等的网络FC2Layer全连接 MLPnn.Linear(input_size, n_hidden)→ ReLU →nn.Linear(n_hidden, n_hidden)→ ReLU →nn.Linear(n_hidden, output_size)→LogSoftmax其中input_size78428×28n_hidden8output_size10。CNNconv1 nn.Conv2d(1, n_feature, kernel_size5)→ ReLU →max_pool2d(2)→conv2 nn.Conv2d(n_feature, n_feature, kernel_size5)→ ReLU →max_pool2d(2)→ 展平 →fc1 nn.Linear(n_feature*4*4, 50)→ ReLU →fc2 nn.Linear(50, 10)→log_softmax其中n_features6。notebook 通过自定义的get_n_params(model)遍历model.parameters()累加每个参数张量的元素个数打印出两个模型的参数量确保两者处于同一量级这正是课程强调同参数量、不同结构对照的前提。训练统一采用optim.SGD(lr0.01, momentum0.5)原始 MNIST 样本见课程 Fig. 8。5.3 数据归一化与五步训练循环训练前必须对数据做归一化notebook 用transforms.Normalize((0.1307,), (0.3081,))把 MNIST 像素标准化使网络的初始化与数据分布相匹配这一点非常关键。课程强调训练循环中必须包含以下五个操作把数据喂给模型feeding data to the model计算损失computing the loss用zero_grad()清空累积的梯度缓存计算梯度computing the gradients执行优化器的一步更新performing a step in the optimizer。上述流程在 notebook 的train()函数中逐行对应optimizer.zero_grad()→output model(data)→loss F.nll_loss(output, target)→loss.backward()→optimizer.step()。5.4 结果一原始 MNIST假设成立在归一化的原始 MNIST 上FC 网络准确率约87%而 CNN 约95%。在参数量相同的前提下CNN 训练出了更多有效的滤波器FC 网络中那些试图捕获远距离像素与近邻像素之间依赖关系的权重基本是浪费的而卷积网络中所有参数都集中用于捕捉相邻像素之间的关系因此效率更高。5.5 结果二像素打乱的 MNIST假设被破坏随后 notebook 用perm torch.randperm(784)生成一个随机置换并通过data[:, perm]对每张图的全部 784 个像素做相同的随机重排得到课程 Fig. 9 所示的打乱 MNIST——每张图仍保留原数字的像素统计分布但空间结构已被完全破坏三性局部性、平稳性、组合性荡然无存。像素打乱后的 MNIST 样本空间结构被随机置换破坏在此数据上重训两个网络FC 网络的准确率基本不变约85%CNN 的准确率则跌至约83%。原因正如课程总结随机置换使图像不再具备 CNN 可利用的局部性、平稳性与组合性。Notebook 末尾的结论markdown 单元格给出了这一对照实验的完整诠释卷积网络假设像素位于网格之上、且是局部且平稳的——当假设成立时它获益假设不成立时它受损全连接网络不做这一假设——当假设成立时它因未利用先验而表现较差但当假设错误时它也不受影响。这与 notebook 开篇的引言一脉相承假设在成立时帮助我们在错误时伤害我们。我们要做的假设既不能多也不能少。 在深度学习中多层结构对应组合性卷积对应图像的局部性平稳性池化则内置了对类别标签平移不变性的先验。六、小结与延伸回顾整篇课程笔记核心脉络清晰可循自然信号的向量化表示 → 平稳性/局部性/组合性三大性质 → 稀疏连接/权重共享/层堆叠三类结构 → padding 与 pooling 的工程细节 → 标准空间 CNN 组成 → 等参数 FC vs CNN 的 MNIST 对照实验。其中 MNIST 的两组实验结果87% vs 95%85% vs 83%以最直观的方式证明归纳偏置inductive bias正确时是强大的先验被破坏时则是负资产。若想进一步深入可以结合仓库其他资源CNN 架构演进的讲解见 docs/it/week03/03.md课程配套的可视化与绘图工具位于 res/plot_lib.py如需系统回顾 CNN 相关周次内容可对照英文原版 docs/en/week03/03-3.md 阅读。赞分享示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载相关推荐NYU-DLSP20 第三周课程全解析从卷积到 CNN——自然信号的局部性、平稳性与组合性NYU DLSP20 第三周课程全解析从卷积到 CNN——自然信号的局部性、平稳性与组合性 本指南围绕 NYU Deep Learning Spring 20示例工程自然信号的三大性质与 CNN 设计原理从稀疏连接、参数共享到 MNIST 对照实验NYU-DLSP20自然信号的三大性质与 CNN 设计原理从稀疏连接、参数共享到 MNIST 对照实验NYU DLSP20 本讲内容源自 NYU Deep Learning示例工程从自然信号的三性到卷积网络稀疏性、参数共享与不变性构建NYU-DLSP20 第 3 周实战从自然信号的三性到卷积网络稀疏性、参数共享与不变性构建NYU DLSP20 第 3 周实战 自然界的信号——声音、图像、语言——看似千差万别却共享三个结示例工程上一篇kill-doc打破文档获取壁垒的开源浏览器脚本解决方案下一篇一键下载30文档平台资源告别广告和登录验证的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考