CNN驱动的深度学习模型现在几乎无处不在,你可能没意识到,它们已经渗透到全球各种计算机视觉应用中了。就像XGBoost和其他流行算法一样,卷积神经网络也是通过一场黑客马拉松——2012年的ImageNet竞赛——才真正走进大众视野的。
从那以后,这些神经网络就像点燃了导火索,迅速蔓延到各个研究领域。下面列举几个常见的CNN应用场景:
面部识别系统
文档分析与解析
智慧城市(比如交通摄像头)
推荐系统,还有更多用例
但问题来了:为什么CNN能这么给力?跟传统的人工神经网络比,它到底强在哪?为什么深度学习专家对它情有独钟?
要回答这些问题,得先摸清CNN的实际运作机制。这篇文章就来聊聊CNN模型背后的数学原理。
神经网络导论
神经网络是所有深度学习算法的基石。不过,在深入算法细节之前,先把神经网络的概念理清楚,这一步很关键。
这些神经网络试图模仿人脑的学习过程。就像大脑接收输入、处理信息、产生输出一样,神经网络也是这么干的。
这三个动作——接收输入、处理信息、生成输出——在神经网络里用层来表示:输入层、隐藏层和输出层。下面就是神经网络的骨架示意图:
这些层里的基本单元叫神经元。神经网络完整的训练过程分两步走。
1. 正向传播
图像以数字形式喂到输入层,这些数值代表图像里像素的强度。隐藏层的神经元会对这些数值做一些数学运算(这部分后面再细聊)。
做这些运算前,得先随机初始化一些参数。隐藏层运算完后,结果会送到输出层,生成最终的预测。
2. 反向传播
输出生成后,下一步就是跟真实值做对比。根据最终输出跟真实值的差距(也就是误差),参数的值会被更新。然后用更新后的参数重复正向传播,生成新的输出。
这就是所有神经网络算法的基础。这篇文章里,我们还会进一步拆解卷积神经网络的正向和反向传播步骤。
卷积神经网络(CNN)架构
想象一下:给你两张图,让你识别里面是什么物体。你会怎么做?通常,你会先观察图像,找特征、形状、边缘。根据这些信息,你才能判断出那是条狗,还是辆汽车。
CNN的隐藏层干的就是这个——从图像里找特征。卷积神经网络可以分成两大部分:
- 卷积层:从输入中提取特征
- 全连接(密集)层:用卷积层的数据生成输出
就像前面说的,任何神经网络的训练都离不开两个关键过程:正向传播(接收数据、处理信息、生成输出)和反向传播(计算误差、更新参数)。下面我们就逐一展开。
卷积神经网络(CNN):正向传播
卷积层
你知道我们是怎么看图像并识别物体形状和边缘的吗?卷积神经网络就是通过比较像素值来实现的。
下面是一张数字8的图像和它的像素值。仔细瞅瞅这张图,你会发现数字边缘附近的像素值之间有明显差异。所以,识别边缘的简单方法就是比较相邻像素值。
卷积在数学上通常用星号*表示。假设输入图像记为X,卷积核(滤镜)记为f,那么表达式就是:Z = X * f
用一个简单例子来理解卷积过程。假设有一个3×3的图像和一个2×2的卷积核:

卷积核在图像上滑动,对覆盖的区域做逐元素乘法,然后把结果加起来:
(1×1 + 7×1 + 11×0 + 1×1) = 9
(7×1 + 2×1 + 1×0 + 23×1) = 32
(11×1 + 1×1 + 2×0 + 2×1) = 14
(1×1 + 23×1 + 2×0 + 2×1) = 26
注意看,卷积核每次只考虑图像的一小部分。也可以把它想象成把图像拆成多个小块,每个小块分别跟卷积核做卷积。
上面例子中,输入形状是(3, 3),卷积核形状是(2, 2)。因为尺寸小,很容易算出输出形状是(2, 2)。但遇到更复杂的输入或卷积核尺寸时,怎么确定输出形状?有个简单公式:
- 图像尺寸 = (n, n)
- 卷积核尺寸 = (f, f)
- 输出尺寸 = (n - f + 1, n - f + 1)
