
一、前言在上一节“图像卷积”中我们已经知道了卷积最基本的计算方式卷积核在输入图像上滑动每次取一个局部区域做逐元素相乘再求和最后得到输出特征图到这里我们已经明白了卷积本质上是在做局部特征提取。但是前一节更多还是在讲“卷积这个操作本身”。接下来更关键的问题是卷积层和普通卷积操作有什么关系卷积核是谁给的是手工设计的吗为什么神经网络里的卷积层能够自己学出边缘、纹理这些特征这就是“卷积层”这一节要解决的核心内容。如果说上一节是在讲“卷积怎么计算”那么这一节就是在讲卷积为什么可以成为神经网络中的可学习层。这一点非常关键因为它是后面整个卷积神经网络成立的基础。二、什么是卷积层所谓卷积层可以先简单理解成把卷积操作做成一个带可学习参数的神经网络层。这里最关键的词是卷积操作可学习参数前面我们手写卷积时卷积核是自己给定的例如这个核可以检测边缘。但在深度学习里通常不会让人手工去设计这些核而是把卷积核中的数值也当成模型参数让网络自己学。所以卷积层本质上就是前向传播时做卷积反向传播时更新卷积核参数也就是说卷积层和全连接层一样都是带参数、可训练、可反向传播的层三、卷积层和全连接层有什么共同点虽然卷积层看起来和全连接层很不一样但本质上二者有很多共同点。1. 都有可学习参数全连接层有权重矩阵和偏置卷积层有卷积核参数和偏置2. 都是线性变换的一种本质上都在做加权求和。3. 都可以接激活函数例如卷积层后面也常接ReLUSigmoidTanh4. 都通过反向传播更新参数训练时损失函数会指导参数不断优化。所以从神经网络角度看卷积层不是一种“完全不同的生物”而是更适合图像结构的一种特殊线性层。四、卷积层和普通卷积操作的区别这一点一定要区分清楚。1. 普通卷积操作更偏向数学或图像处理中的一个固定运算。例如给定输入给定卷积核算出输出这里卷积核往往是固定的。2. 神经网络中的卷积层不仅会做卷积运算而且卷积核本身是可以学的。也就是说前向传播卷积核参与计算反向传播卷积核被更新所以卷积层真正厉害的地方不只是“会卷积”而是会自己学出适合当前任务的卷积核。五、为什么说卷积层是“可学习的特征提取器”前面我们提到卷积核可以看成一个局部模式探测器。例如某些卷积核可能学到水平边缘垂直边缘某种纹理某种角点模式那么卷积层的本质其实就是让这些“探测器”不再由人手工设计而是由数据和任务自动决定。例如在图像分类任务中如果识别猫狗最重要的是毛发纹理卷积层就会倾向学这种模式如果识别数字最重要的是笔画边缘卷积层就会倾向学这种模式所以卷积层的真正价值在于它能自动学习怎样提取局部特征而不是让人写死规则。六、用一个例子理解卷积层怎么“学”假设有一个简单任务输入一张图输出其中是否存在明显的垂直边界。如果我们手工设计可能会直接给一个卷积核但如果交给神经网络做通常流程是1. 初始化卷积核随机初始化比如2. 前向传播用这个核去卷积输入图像得到预测结果。3. 计算损失看预测和真实标签差多远。4. 反向传播根据损失对卷积核参数求梯度。5. 更新参数不断把卷积核调整到更适合当前任务的方向。训练很多轮之后这个卷积核可能就逐渐变成接近边缘检测器的形式。所以卷积核不是天生就懂边缘而是在训练中学会“怎样检测有用特征”。七、卷积层中的参数到底是什么在最简单的二维卷积层中参数通常包括1. 卷积核权重也就是小窗口中的那些数值。例如一个 (2 \times 2) 核这 4 个值就是参数。2. 偏置 bias卷积输出通常还可以加一个偏置项。所以一个最简单的卷积层在某个位置上的输出可以写成其中(X) 是局部输入区域(K) 是卷积核(b) 是偏置(\odot) 表示逐元素乘法所以卷积层和全连接层一样也有“权重 偏置”的结构。八、卷积层为什么参数少得多九、卷积层中的“层”体现在哪里很多同学会问卷积不是一个操作吗为什么叫卷积层因为在神经网络里“层”不只是一个静态公式而是一个完整的模块。一个层通常包括输入参数前向计算规则输出参与训练更新卷积层恰好满足这些条件输入图像或上一层特征图参数卷积核和偏置前向规则对输入做卷积输出新的特征图训练通过反向传播更新卷积核所以它当然是一个标准的神经网络层。十、PyTorch 中的卷积层在 PyTorch 中最常见的二维卷积层就是nn.Conv2d例如import torch from torch import nn conv2d nn.Conv2d(in_channels1, out_channels1, kernel_size2, biasTrue) print(conv2d.weight) print(conv2d.bias)这里的含义是in_channels1输入通道数为 1out_channels1输出通道数为 1kernel_size2卷积核大小为 (2 \times 2)biasTrue使用偏置这个层一创建出来权重和偏置就是随机初始化的。后面训练时它们会自动更新。十一、卷积层学习边缘检测的经典实验李沐这部分课程里有一个很经典的小实验就是让卷积层自己学出边缘检测器。例如我们构造一个输入矩阵左边全是 1右边全是 0中间有明显竖直边界import torch from torch import nn X torch.ones((6, 8)) X[:, 2:6] 0 print(X)对应的目标输出是边界响应Y torch.zeros((6, 7)) Y[:, 1:5] -1 Y[:, 5] 1 print(Y)然后定义一个卷积层conv2d nn.Conv2d(1, 1, kernel_size(1, 2), biasFalse)让它去拟合这个目标。这意味着输入是一张“有边界的图”输出希望是“边界检测结果”卷积核从随机开始最后学出类似 ([1, -1]) 或 ([-1, 1]) 的边缘核这个实验特别经典因为它直观展示了卷积层不是人手工写规则而是通过训练自己学会规则。十二、一个适合 CSDN 展示的代码示例下面给你一版适合博客放的代码import torch from torch import nn # 1. 构造输入图像中间有明显竖直边界 X torch.ones((6, 8)) X[:, 2:6] 0 # 2. 构造目标输出表示边界响应 Y torch.zeros((6, 7)) Y[:, 1] 1 Y[:, 5] -1 # 3. 调整形状符合 Conv2d 输入要求 X X.reshape((1, 1, 6, 8)) Y Y.reshape((1, 1, 6, 7)) # 4. 定义卷积层 conv2d nn.Conv2d(1, 1, kernel_size(1, 2), biasFalse) # 5. 训练卷积层 lr 0.03 for i in range(10): Y_hat conv2d(X) loss (Y_hat - Y) ** 2 conv2d.zero_grad() loss.sum().backward() conv2d.weight.data[:] - lr * conv2d.weight.grad if (i 1) % 2 0: print(fepoch {i1}, loss {loss.sum():.4f}) # 6. 查看学到的卷积核 print(学到的卷积核) print(conv2d.weight.data.reshape((1, 2)))运行后你通常会发现最终卷积核会接近[[1, -1]]或者符号相反但功能相同的形式。十三、为什么这个实验这么重要因为它用最简单的方式说明了三个核心事实1. 卷积核是参数不是固定规则而是可以训练的。2. 卷积层可以从数据中学特征不是人告诉它边缘长什么样而是它自己学。3. 卷积层是神经网络的一部分它和其他层一样可以前向传播、反向传播、更新参数。这意味着从这一节开始我们对 CNN 的理解就真正从“图像处理操作”进入到“可训练神经网络层”的层面了。十四、卷积层输出的本质是什么卷积层输出的仍然是一个特征图。但和前一节相比这里要更进一步理解这个特征图不只是某个固定卷积核的响应图而是“当前任务下模型学出来的局部模式响应图”。也就是说如果卷积层学的是边缘核那么输出就强调边缘如果学的是纹理核那么输出就强调纹理如果学的是更复杂局部模式那么输出就会对这种模式有较强响应所以卷积层输出可以理解成当前网络对输入局部结构的一种可学习表示。十五、卷积层和全连接层再做一次本质对比全连接层参数很多不利用空间结构适合一般向量输入卷积层参数共享参数更少强调局部结构非常适合图像输入更关键的是卷积层不是简单“参数少”而是用更符合图像规律的方式来建模。这也是为什么在图像任务中卷积层几乎成为基础配置。十六、卷积层的局限是什么学习时也要注意卷积层并不是完美无缺。1. 更依赖局部模式它天然强调局部区域但全局关系需要靠更深层或更大感受野来捕获。2. 对几何变化的适应性有限比如旋转、尺度变化普通卷积并不天然完全鲁棒。3. 需要后续结构配合例如多层堆叠池化多通道更深网络结构所以卷积层很重要但它通常只是整个 CNN 的基本构件之一。十七、这一节其实在回答什么问题如果把这一节抽象一点看它其实在回答的是为什么卷积不只是一个图像处理技巧而能成为深度学习中的基础层。答案就在于卷积核可以参数化参数可以学习学习过程可以纳入反向传播因此卷积层可以自动适配任务这一步非常关键。因为从这时开始CNN 就不再只是“用固定滤波器处理图像”而是变成了一个能自动学会特征提取规则的神经网络。十八、这一节最核心的一句话如果让我用一句话总结“卷积层”这一节我会写成卷积层 可学习卷积核 卷积运算它能通过训练自动学出适合任务的局部特征提取器。这句话你可以直接记住。它把卷积层最关键的三件事都说清楚了有卷积核卷积核可学习学到的是局部特征提取规则十九、我对这一节的理解学这一节之前我对卷积核的理解还停留在“一个滑动的小模板”。但学完卷积层之后我才真正意识到真正厉害的不是这个模板会滑动而是这个模板里的数值可以自己学。这一下就把“图像处理”和“深度学习”区分开了。传统图像处理中很多核是人为设计的而在卷积神经网络里模型会根据任务自己学出这些核。所以卷积层真正强大的地方不是卷积这个动作本身而是把卷积变成了可训练模块。二十、结语“卷积层”是学习卷积神经网络过程中非常关键的一节。前一节“图像卷积”让我们弄懂了卷积怎么算而这一节则进一步让我们明白卷积层为什么是一个神经网络层卷积核为什么能自动学出来卷积层为什么能成为图像任务中的基础模块当你真正理解这一层之后后面再去学填充和步幅多输入多输出通道池化层更深的 CNN 结构都会顺很多。二十一、重点速记版1. 什么是卷积层带可学习卷积核的神经网络层。2. 卷积层和普通卷积操作有什么区别普通卷积核通常固定卷积层的卷积核可以训练更新。3. 卷积层的参数包括什么卷积核权重和偏置。4. 卷积层为什么参数少因为使用了局部连接和参数共享。5. 卷积层输出是什么特征图即对某种局部模式的响应图。6. 卷积核是怎么来的通常随机初始化然后通过训练自动学习。7. 卷积层最核心的价值是什么能自动学习适合当前任务的局部特征提取器。二十二、适合 CSDN 的结尾模板以上就是我对《动手学深度学习》中卷积层这一节的学习整理。这一节让我真正理解了卷积神经网络的关键不只是“用卷积处理图像”而是“让卷积核也能参与学习”。也正因为这样卷积层才从一个普通的图像处理操作变成了深度学习中强大的特征提取模块。我觉得这一节最值得反复体会的一点就是卷积核不是人工写死的而是模型根据任务自动学出来的。把这一点想透后面学习 CNN 的很多内容都会自然很多。按你这个顺序下一篇最自然就是《动手学深度学习——填充和步幅》