今天咱们就简单唠唠CNN里那些常出现的关键词。
很多人第一次接触卷积神经网络(CNN)的时候,都会有那种熟悉又陌生的感觉。
说熟悉吧,这些词你肯定经常见:卷积、卷积核、步长、填充、池化、通道、特征图、感受野、全连接层、ReLU……
说陌生呢,就是这些词单独拿出来看,好像个个都认识,但凑到一块儿,就有点懵圈了。
尤其是刚学CNN那阵子,最容易出现一种情况——图能看明白个大概,代码也能跟着敲几句,但一碰到一堆术语,脑子瞬间就乱了。所以这篇内容就专门干一件事,把卷积神经网络里最常用的那批关键词,用最直白的话给大家讲清楚。
你把这些词顺一遍、弄明白,再去看CNN的结构图、课程视频或者代码,理解起来就会顺畅很多。其实学习一个新知识,最关键的第一步,就是先把它的基本概念搞透彻。
CNN全称是Convolutional Neural Network,中文叫卷积神经网络。它最厉害的地方,就是能从图片里一层一层把特征提取出来。比如说一张猫的图片,咱们人眼一看就知道是猫,但对计算机来说,刚开始它看到的就只是一堆像素值而已。
CNN要做的,就是把这些杂乱的像素,慢慢变成有意义的信息:先认出图片里的边缘,再认出纹理,接着认出猫的耳朵、眼睛、轮廓,最后就能判断出这是一只猫。所以你也可以这么理解,CNN就是一个特别会看图、找规律的模型。
接下来,咱们就逐个说说CNN里常见的那些关键词。
1. 卷积(Convolution)
在CNN里,最关键的就是卷积这个概念。
卷积听着特别数学,但放到图像里,你可以这么理解:用一个小窗口,在图片上一点点滑动,每到一个位置,就对这一小块做一次局部计算,看看这里有没有你想找的特征。
这个小窗口,就是我们后面要讲的卷积核。
CNN之所以叫卷积神经网络,就是因为它最核心的操作,就是靠这种滑动窗口的方式来提取特征。
2. 卷积核(Kernel/Filter)
卷积核其实就是个小巧的特征探测器,很好理解。咱们常见的就有3×3、5×5这种规格,它会在图片上一点点滑动,每次只盯着一小块区域看,再根据这块区域里的数值做计算。
不同的卷积核,对不同的图案敏感度不一样,比如说有的对横向边缘敏感,有的对纵向边缘敏感,还有的能捕捉纹理、亮暗变化这些细节。
所以说白了,卷积核的作用就是在图片的局部区域里,找出咱们需要的特征。你也可以把它想象成一个专门找线索的小放大镜,只聚焦局部,找关键信息。
3. 特征图(Feature Map)
图片经过卷积处理之后,输出来的结果就是特征图。它不是原图本身,而是原图经过一番特征提取后,得到的一种新表示。
举个例子,如果一个卷积核专门对边缘敏感,那经过它处理后得到的特征图,上面的边缘部分就会特别明显。
所以咱们可以这么理解特征图:它是原始图像经过卷积层加工后,得到的一张新图,这张新图里,某一类特征会被重点突出出来。
而CNN的核心,其实就是不断把原始图像,变成越来越抽象、也越来越有用的特征图。
4. 通道(Channel)
通道这个词,在图像里特别常见,最经典的例子就是咱们平时看的RGB图片:R是红色通道,G是绿色通道,B是蓝色通道。
所以一张彩色图片,通常会有3个输入通道。但在CNN里,经过卷积处理之后,输出的通道数就不一定是3个了,往往会变成很多个,比如32、64、128这些。
这些新的通道,不再代表红绿蓝三种颜色,而是代表模型从图片里提取出来的不同类型的特征。所以一般来说,通道数越多,就意味着模型能表达的特征种类越丰富,能捕捉到的图片信息也越多。
5. 步长(Stride)
步长说简单点,就是卷积核每次在图片上滑动的时候,移动的格子数。举两个例子就懂了:步长=1,就是每次只挪1格;步长=2,就是每次挪2格。
步长越小,卷积核滑动得就越细致,从图片里提取到的信息通常也更全面、更充分;反过来,步长越大,输出的特征图尺寸就会缩小得越快,同时模型的计算量也会跟着下降。
所以咱们也可以把步长,理解成卷积核在图片上“走路”的步子大小,步子大走得快,步子小走得细。
6. 填充(Padding)
卷积核在图像上滑动的时候,如果不给图像补边,每做一次卷积,图像的尺寸多半会变小,而且图像边缘的部分,能参与计算的次数也会更少。
这时候就该padding登场了,其实就是在图像的外面补一圈数值,最常用的就是补0。这么做一方面能控制输出图像的尺寸,另一方面也能让卷积核把边缘区域完整地扫一遍。
所以你这么理解就行:先给图像围一圈边,再让卷积核去扫描。说到底,padding本质上就是个补边的操作。
7. 激活函数(Activation Function)
卷积层计算完之后,一般不会直接把结果传到下一层,都会接一个激活函数。最常见的就是ReLU,激活函数的作用,就是给神经网络加上非线性的能力。
要是没有激活函数,不管你叠多少层网络,本质上都可能变成比较简单的线性变换,模型能表达的东西就很有限。你先简单记着:激活函数能让神经网络不只是机械地做计算,还能学到更复杂的规律。
8. 池化(Pooling)
池化其实就是一种压缩信息的操作。它不像卷积那样需要学参数,就是直接对图像的局部区域做个汇总。最常见的两种是:最大池化(Max Pooling)和平均池化(Average Pooling)。
比如说2×2 max pooling,就是在一个2×2的小区域里,挑出最大的那个数;2×2 average pooling,就是在这个2×2的小区域里,把四个数加起来求平均。
池化的主要作用有这么几个:缩小特征图的尺寸、减少计算量、留住重要信息,还能提高一点平移鲁棒性。说白了,池化就是把特征图压缩一下,只留下最关键的信息。
9. 卷积层(Convolution Layer)
卷积层才是CNN里真正负责提取特征的部分。它里面会有好多个卷积核,每个卷积核专门负责提取一种模式。
所以卷积层不是只有一个卷积核,而是由好多卷积核组成的一整层特征提取模块。咱们平时看到的Conv2d,大多数时候说的就是这个卷积层。
10. 池化层(Pooling Layer)
池化层和卷积层不一样,它一般不负责学习参数,主要是做下采样。也就是说,它的重点不是学新的特征,而是:压缩尺寸、留住重点、减轻后面的计算负担。
CNN里最常见的结构,就是卷积层提取特征,池化层压缩尺寸,俩配合着来。
11. 感受野(Receptive Field)
这个词一开始听着挺吓人,其实意思特别简单。它指的是,网络里某个位置的输出,对应到最开始的输入图像上,能看到的区域大小。
比如说第一层用一个3×3的卷积,它输出的一个点,只和原图里一个3×3的区域有关系,那它的感受野就是3×3。
随着网络层数越来越深,后面特征图上的一个点,往回对应到原图时,能看到的范围也会越来越大。
所以说白了,感受野就是这一层到底能看到原图多大一块地方的信息。
12. 全连接层(Fully Connected Layer, FC)
如果说前面的卷积层是负责提取特征的,那全连接层就更像是做最终判断的。它一般放在网络的后面,把前面提取到的所有特征整合到一起,最后输出分类的结果。
比如说识别手写数字的时候,全连接层最后可能会输出:是0的概率、是1的概率、是2的概率……所以全连接层的作用,你可以理解成,根据前面提取到的特征,做最后的决策。
13. 展平(Flatten)
卷积层输出的一般都是多维的特征图,比如:高×宽×通道数。但全连接层通常只接收一维的向量,这时候就需要一个操作,把前面的多维结果拉直,这个过程就叫Flatten(展平)。
简单说就是,把前面卷积出来的一大块特征,摊成一长串数字,再传给全连接层。
14. 参数共享(Parameter Sharing)
CNN比起普通的全连接网络,有个很重要的优点就是参数共享。意思就是同一个卷积核,会在整张图像上反复使用,不是说每到一个位置,就重新学一套新的参数。
这么做的好处很明显:参数的数量会少很多,训练起来更高效,也更适合图像这种——同一种特征可能出现在不同位置的数据。这也是CNN为什么特别适合处理图像的重要原因之一。
15. 局部连接(Local Connectivity)
CNN不像全连接层那样,一上来就让每个神经元看整张图像,它是先只看局部的区域。
也就是说,卷积层里的每个神经元,只和输入图像的一小块区域相连,不是和所有像素都连在一起,这就叫局部连接。
这也符合图像的一个基本规律:很多重要的特征,本来就是在局部出现的。比如边缘、纹理、拐角,通常都是先在小区域里出现的。
16. 下采样(Downsampling)
下采样就是让特征图的尺寸变小,常见的方式有两种:一种是池化,另一种是步长大于1的卷积。
它的目的主要是:压缩空间尺寸、减少计算量,让模型慢慢从关注细节,转向关注更抽象的整体特征。所以你可以这么理解下采样:一边往后面学习,一边把图像缩小,只留下重点部分。
这里要注意一点,在CNN里说的下采样,通常是指缩小特征图的空间尺寸;而在类别不平衡问题里说的下采样,通常是指减少多数类样本的数量。这两个概念名字一样,但意思完全不同,别搞混了。
17. 过拟合(Overfitting)
这个词在CNN里也特别常见。过拟合就是说,模型在训练集上学得特别好,但是到了验证集或者新的数据上,表现就变差了。
说白了,就是模型把训练数据记太死了,没有真正学会能通用的规律。它的常见表现是:训练准确率很高,但验证准确率不高;训练时的loss很低,但验证时的loss反而升高。
18. 数据增强(Data Augmentation)
当训练数据不够的时候,CNN很容易出现过拟合,这时候常用的方法就是数据增强。常见的做法有:翻转、旋转、裁剪、调整亮度、缩放。
它的本质就是让同一类图片,在训练的时候呈现出更多不一样的样子,这样就能提高模型的泛化能力。你可以把它理解成,给模型多出几道变式题,让它学得更灵活。
如果用一句话把CNN的流程串起来,大概是这样:输入图像 → 卷积层用卷积核提取特征 → ReLU增加非线性 → 池化层压缩尺寸 → 多层堆叠后扩大感受野 → 展平特征 → 全连接层做分类输出。
这么一看,很多关键词其实就不是零散的了,而是能串成一条完整的逻辑链。
今天这篇文章,其实就是想把这些高频词理顺。因为一旦这些词你都弄明白了,后面再去看:CNN结构图、PyTorch / TensorFlow代码、论文里的模型描述、调参文章,都会轻松很多。