关于卷积神经网络(CNN)的入门学习报告
在观看了B站上关于卷积神经网络的系列教学视频后,我对CNN的基本原理和核心组件有了初步的认识。
一、 核心动机:解决全连接网络处理图像时的困境
首先,为什么要用CNN?传统的全连接神经网络在处理图像时几乎是不可行的。一张100x100x3(RGB三通道)的图片,展平后输入层就有3万个节点。如果下一层有1000个神经元,仅这一层就需要3000万个权重参数。这会导致:
- 参数爆炸:计算量巨大,难以训练。
- 过拟合:模型过于复杂,容易记住训练集噪声,而非学习本质规律。
- 无视空间结构:将图片展平破坏了像素间的空间关系(相邻像素、局部图案等)。
CNN的提出,正是为了有效地、有针对性地解决上述问题。
二、 核心组件与工作原理**
1. 卷积层 - 特征提取的核心
卷积层是CNN的灵魂,其核心操作是卷积运算。
- 卷积核:本质上是一个小的权重矩阵(例如3x3, 5x5)。你可以把它理解为一个特征探测器。不同的卷积核用于检测不同的低级特征(如边缘、角点)或高级特征(如纹理、图案)。
- 局部感知:卷积核不是在整张图像上操作,而是在一个局部感受野(即卷积核大小的区域)上进行滑动。这符合图像的先验知识:重要的信息往往存在于局部区域(如边缘是由相邻像素的差异构成的)。
- 权值共享:同一个卷积核在图像的所有区域上共享相同的权重参数。这意味着,无论这个检测“竖直边缘”的卷积核滑动到图像的左上角还是右下角,它都用同样的方式去检测竖直边缘。这极大地减少了参数数量。一个3x3的卷积核只有9个参数(加上偏置共10个),无论图像多大。
- 滑动与特征图:卷积核以一定的步长在输入数据上从左至右、从上至下滑动。在每一个位置,进行点乘求和并加上偏置,生成特征图上的一个点。特征图记录了原始输入中该卷积核所探测特征的响应强度分布。
2. 激活函数 - 引入非线性
在卷积运算之后,通常会立即应用一个激活函数,如ReLU。这是为了给网络引入非线性变换。如果没有激活函数,无论多少层网络,其整体仍然是一个线性模型,无法拟合复杂的真实世界数据。ReLU简单高效,其公式为 f(x) = max(0, x)
,它将所有负值置零,正值保留。
3. 池化层 - 降维与保持平移不变性
池化层通常紧跟在卷积+激活层之后,其主要作用是下采样。
- 操作:在一个局部区域(如2x2窗口)内,选取一个代表值。最常用的是最大池化,即取该窗口内的最大值。
- 作用:
- 降低维度:减少特征图的大小,从而显著减少后续层的计算量和参数数量。
- 防止过拟合:通过降低维度,间接减少了参数,增强了模型的泛化能力。
- 保持平移不变性:即使目标在图像中发生微小平移,由于池化选取的是局部区域的最大值,只要该特征还在池化窗口内,输出就不会改变。这使得网络对目标位置的变化不那么敏感。
4. 全连接层 - 分类决策
在经过多次“卷积-激活-池化”的堆叠后,网络最终会将学习到的高级特征图展平,送入一个或多个全连接层。
- 作用:全连接层的作用是整合从前面层级中提取到的分布式特征,并映射到最终的样本标签空间。
- 输出层:最后一个全连接层通常使用 Softmax 激活函数,将其输出转化为每个类别的概率分布。例如,对于一个10分类问题,Softmax层会输出10个概率值,总和为1,概率最高的类别即为模型的预测结果。
三、 一个简化的流程总结
以图像分类为例,一个典型的CNN流程可以概括为:
输入图片 -> [卷积 -> ReLU -> 池化] x N -> 展平 -> 全连接层 -> Softmax -> 输出类别概率
其中,[卷积 -> ReLU -> 池化]
模块可以重复多次,层数越深,提取的特征越抽象、越全局。
我的学习心得与疑问
通过这次学习,我认识到CNN并非一个神秘的黑箱,其设计思想(局部感知、权值共享、层次化特征提取)具有极强的工程美感,是专门为处理图像这类网格化数据而量身定制的。
目前我理解上的主要难点和下一步需要弄懂的地方在于:
- 反向传播是如何在卷积层和池化层中具体实现的? 权重和偏置是如何被更新的?
- 除了最大池化,平均池化等其他池化方式有何优劣?
- 现代经典网络结构(如ResNet, VGG)是如何通过堆叠这些基础模块来实现卓越性能的?
总而言之,这次入门学习为我打开了计算机视觉领域的一扇大门,让我对深度学习的威力有了更具体、更深刻的认识。接下来,我计划通过动手实践,用代码(如PyTorch或TensorFlow)搭建一个简单的CNN模型,来进一步巩固这些理论知识。