AI基础概念之十一:CNN算法的基本原理

一、 多层感知机的缺陷

多层感知机(MLP)的层与层之间采用全连接(每个神经元与上一层所有神经元相连),这种结构在处理图像、语音等二维 / 一维网格数据时,存在三个致命问题。

参数爆炸,计算效率极低

  • 以一张 28×28 的手写数字图片为例,输入层有 784 个神经元,若隐藏层设 1000 个神经元,仅这一层的权重参数就有 784×1000=784000 个;

  • 若处理 224×224×3 的彩色图像,输入层有 150528 个神经元,隐藏层设 2048 个神经元,权重参数会达到 150528×2048≈3.1×108 个 ------ 参数过多会导致训练慢、过拟合风险高、需要海量数据支撑。

丢失空间结构信息,无法利用数据局部相关性

  • 图像、语音等数据的核心特征是局部相关的:比如图像的边缘、纹理是由相邻像素组成的,语音的声调是由连续帧组成的;

  • MLP 会将输入的二维图像展平为一维向量(如 28×28→784×1),完全破坏了像素的空间位置关系 ------ 它无法区分 "左上角的像素和相邻像素" 与 "左上角的像素和右下角的像素" 的差异,只能学习到无结构的特征。

缺乏平移不变性,泛化能力差

  • 平移不变性:图像中的物体(如猫)无论在左、中、右位置,模型都应该识别出来;

  • MLP 不具备这种能力:若训练数据中猫在图像左侧,当测试数据中猫在右侧时,MLP 会因为输入向量的元素顺序改变而无法识别;

二、 CNN 算法的诞生

  1. 1989 年:CNN 的雏形LeNet-1。 杨立昆(Yann LeCun)团队受生物视觉系统 "局部感受野" 的启发,提出卷积神经网络的早期模型 ,首次引入卷积层、池化层的核心结构:卷积层:用共享权重的卷积核提取图像局部特征(边缘、角点),大幅减少参数;池化层:下采样降维,保留关键特征的同时降低计算量。

  2. 1998 年:LeNet-5 模型。 杨立昆团队正式提出LeNet-5 ,这是第一个完整的卷积神经网络模型,专为手写数字识别设计(MNIST 数据集)。它包含 3 层卷积 + 2 层池化 + 2 层全连接,能以 99% 以上的准确率识别手写数字,是 CNN 的里程碑。但受限于计算能力不足、数据集规模小,LeNet-5 仅用于实验室场景,未大规模落地,神经网络再次进入低谷(此时支持向量机 SVM 等传统机器学习算法更受青睐)。

  3. 2006 年:深度学习的起点。 杰弗里・辛顿(Geoffrey Hinton)在《Science》发表论文,提出两个关键技术:预训练 + 微调 :用受限玻尔兹曼机(RBM)对深层网络逐层预训练,再用 BP 算法微调,解决深层网络训练时的 "梯度消失" 问题;首次明确深度神经网络(Deep Neural Network, DNN)的概念:指层数 ≥ 5 层的神经网络(区别于传统 2-3 层的浅层网络)。这一突破让学术界意识到 "深层网络" 的潜力,深度学习时代正式开启。

  4. 2012 年:AlexNet 引爆深度学习革命。 辛顿的学生亚历克斯・克里泽夫斯基(Alex Krizhevsky)提出AlexNet ,一个 8 层的深度卷积神经网络,在 ImageNet 图像分类大赛中以15.3% 的错误率 碾压第二名(传统方法错误率 26.2%),震惊学界。AlexNet 的成功关键是在算力、数据和算法上同时进行了大幅度的改进。 这一事件标志着卷积神经网络(CNN)成为计算机视觉的核心模型,深度学习从实验室走向工业界。

  • 利用GPU 并行计算 :大幅提升训练速度(当时用 2 块 GTX580 GPU)。AlexNet 的参数达到 6000 万,是 LeNet-5 的 1000 倍,足够支撑复杂图像的特征提取

  • AlexNet 的训练数据是 ImageNet-2012 ,包含 120 万张标注图像、1000 个类别,覆盖了真实世界的复杂场景

算法创新:解决深层网络训练难题,提升模型鲁棒性

AlexNet 在 LeNet-5 的基础上,做了 4 个关键改进,让深层 CNN 的训练变得稳定且高效:

创新点 解决的问题 商用价值
ReLU 激活函数 替代 Sigmoid,解决深层网络的梯度消失问题 让网络可以堆叠到 8 层,且训练收敛速度提升 10 倍
Dropout 正则化 随机丢弃部分神经元,防止过拟合 让模型在大规模数据上的泛化能力更强,商用场景下准确率更稳定
重叠池化(Overlapping Pooling) 池化核 3×3、步长 2,避免特征混叠 提升特征提取的精度,减少商用场景的误判(如安防识别错人)
LRN 层(局部响应归一化) 增强特征的区分度 提升分类任务的准确率,

如今CNN已经在全领域落地应用,CNN 和深度神经网络彻底改变了多个行业:计算机视觉:车牌识别、人脸识别、自动驾驶图像检测、医疗影像诊断;语音识别:智能音箱、语音转文字;自然语言处理:机器翻译、聊天机器人。

Geoffrey Hinton 与 Yoshua Bengio、Yann LeCun(深度学习三巨头)因对深度神经网络的奠基性贡献,共同荣获**2018 年 ACM 图灵奖。**在CNN的发展中,Hinton和Yann LeCun都有着及其重要的奠基性作用。

三、 CNN 算法的核心模块:卷积层(Convolutional Layer)

这是 CNN 的灵魂模块,核心作用是提取图像的局部特征(如边缘、纹理、形状)。用一组可学习的卷积核(Filter/Kernel) 滑过输入图像,卷积核与图像的局部区域做点积运算,输出特征图(Feature Map)。卷积核的大小决定局部感受野(如 3×3、5×5),即每次关注图像的一小块区域。其关键特性包括:权值共享:同一个卷积核在整张图像上重复使用,大幅减少参数数量(相比全连接层,参数量可降低几个数量级)。空间不变性:无论特征在图像的哪个位置,卷积核都能识别,让模型具备平移不变性。

卷积中常用到的几个基础概念:

术语 含义 示例
输入(Input) 卷积层的输入,可为原始图像或上层特征图 28×28 的灰度图(单通道)、32×32×3 的彩色图(3 通道)
卷积核(Kernel/Filter) 可学习的权重矩阵,用于提取局部特征 3×3×3(高 × 宽 × 输入通道数)
步长(Stride) 卷积核每次滑动的像素数 Stride=1(逐像素滑动)、Stride=2(隔 1 像素滑动)
填充(Padding) 在输入边缘补 0,用于保持输出尺寸 Padding=1(3×3 卷积核补 1 圈 0,输出尺寸与输入一致)
输出(Feature Map) 卷积运算后的结果,即提取的特征 输入 28×28、3×3 核、Stride=1、Padding=1 → 输出 28×28

卷积层的分步实现(以 2D 卷积为例)我们以单通道输入 + 单卷积核的最简场景为例,拆解每一步计算过程:

步骤 1:输入预处理(可选 Padding)

目的:避免卷积后特征图尺寸缩小(尤其是多层卷积时,尺寸会持续收缩)。

  • 规则:若输入尺寸为 H×W,卷积核尺寸为 K×K,步长 S,填充 P,则输出尺寸为:
  • 示例:输入 5×5,3×3 卷积核,Stride=1,Padding=1,输出 5×5;无 Padding 则输出 3×3。

步骤 2:卷积核滑动与局部点积(核心步骤)

这是卷积层的核心运算,本质是卷积核与输入局部区域的加权求和

  1. 将卷积核覆盖到输入的第一个局部区域(左上角);

  2. 对卷积核的每个权重与输入对应位置的像素值做点积(相乘后求和);

  3. 将结果作为输出特征图对应位置的像素值;

  4. 按步长滑动卷积核,重复 1-3 步,直到遍历输入的所有区域。

直观示例(有Padding、Stride=1):

Padding 的核心作用是补 0 保持输出尺寸与输入一致**,**以下是 5×5 输入 + Padding=1+3×3 卷积核的完整过程:

补 0 后的输入(7×7):

复制代码
[[0, 0, 0, 0, 0, 0, 0],
 [0, 1, 2, 3, 4, 5, 0],
 [0, 6, 7, 8, 9, 10, 0],
 [0, 11,12,13,14,15, 0],
 [0, 16,17,18,19,20, 0],
 [0, 21,22,23,24,25, 0],
 [0, 0, 0, 0, 0, 0, 0]]

Hout​=(5+2×1−3)/1+1=5,Wout​=5,输出为 5×5 矩阵(与原输入尺寸一致)。

计算输出 [0,0]

复制代码
[[0, 0, 0],
 [0, 1, 2],
 [0, 6, 7]]

计算:0×1+0×0+0×(−1)+0×1+1×0+2×(−1)+0×1+6×0+7×(−1)=0−2−7=−9,输出 [0,0] = -9。

最终输出

复制代码
[[-9,  -6,  -8, -10, -7],
 [-3,  -6,  -8, -10, -13],
 [-3,  -6,  -8, -10, -13],
 [-3,  -6,  -8, -10, -13],
 [-15, -6,  -8, -10, -19]]

Padding=1 后,输出尺寸从 3×3 恢复为 5×5,边缘像素的特征也能被提取(无 Padding 时边缘信息会丢失)。

步骤 3:加偏置(Bias)

每个卷积核对应一个可学习的偏置值,在步骤 2 的点积结果上加上偏置,公式:output=点积结果+b偏置的作用是调整特征图的整体数值范围,提升模型的拟合能力。

获得输出后,同样可以采用反向传播 + 梯度下降的方式来实现参数的更新。

四、 CNN 算法的核心模块:池化层(Pooling Layer)

也叫下采样层,核心作用是压缩特征图尺寸、保留关键特征、提升模型鲁棒性。对卷积层输出的特征图进行局部聚合操作 ,用局部区域的统计值(最大值 / 平均值)替代该区域的所有值。两种主流类型:最大池化(Max Pooling) :取局部区域的最大值,能有效保留边缘、纹理等强特征,是最常用的池化方式。平均池化(Average Pooling):取局部区域的平均值,能保留背景等平滑特征,常用于模型的最后几层

池化层的关键作用包括:

  • 降低特征图的宽和高,减少后续计算量;

  • 增强平移不变性(特征位置轻微变化不影响池化结果);

  • 一定程度上防止过拟合。

一、 明确池化层输入,已刚才卷积层的输出作为池化层输入举例

回顾之前 Padding=1 后的卷积输出(5×5):

复制代码
input_pool = np.array([
    [-9,  -6,  -8, -10, -7],
    [-3,  -6,  -8, -10, -13],
    [-3,  -6,  -8, -10, -13],
    [-3,  -6,  -8, -10, -13],
    [-15, -6,  -8, -10, -19]
])

二、 池化层核心参数(通用配置)

  • 池化核大小 K=2×2

  • 步长 S=2

  • 填充 P=0(池化层一般不填充,除非需要严格保持尺寸)

三、 计算输出尺寸

池化输出尺寸公式与卷积一致:

同理 Wout​=2,最终池化输出为 2×2 矩阵(输入边缘不足 2×2 的区域会被舍弃)。

四、 2×2 最大池化(Max Pooling):取局部区域最大值

核心逻辑:滑动 2×2 池化核,取每个区域的最大值作为输出像素。最终输出(2×2)

复制代码
[[-3, -8],
 [-3, -8]]

五、 2×2 平均池化(Average Pooling):取局部区域平均值

最终输出(2×2)

复制代码
[[-6.0, -9.0],
 [-4.5, -9.0]]

池化层处理的核心结论

  1. 输入尺寸影响:5×5 输入经 2×2 步长 2 池化后,输出压缩为 2×2,实现降维;

  2. 无学习参数:池化的 "取最大 / 平均" 规则固定,训练中无需更新参数;

  3. 特征鲁棒性:最大池化保留局部最强特征(如本例的 -3),平均池化保留局部整体趋势(如本例的 -6);

  4. 边缘舍弃:步长 = 2 时,输入最后一行 / 列的剩余 1 个像素会被舍弃,若需保留可设置 Padding=1。

相关推荐
NAGNIP8 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab9 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab9 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP13 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年13 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼13 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS13 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区14 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈14 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang15 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx