type
status
date
slug
summary
tags
category
icon
password
Property
Nov 11, 2025 10:24 AM

一、卷积

1.1 定义

1.2 原理

1.3 应用

二、卷积神经网络

卷积神经网络(CNN)通过在输入图像上使用多组卷积核进行滑动卷积,实现类似人类视觉系统的局部特征提取。多层卷积和池化结构逐步从低级特征(边缘、角点)提取到高级特征(形状、语义)。在训练阶段,通过反向传播算法优化卷积核和全连接层参数,使模型能够在验证集上泛化,最终形成可用于目标识别或检测的深度视觉模型。

2.1 背景

最初的研究者(比如 LeCun (杨立昆)在 1989 年的 LeNet)之所以想到用卷积核滑动,是受到了视觉神经科学的启发。早期对猫视觉皮层(Hubel & Wiesel, 1959)的研究发现:
猫的视觉神经元会对视野中的某些“局部模式”(比如某个方向的边缘)产生强烈反应。
这就启发了人们去设计“滤波器”去模仿这种机制——
于是卷积核就成了人工神经网络中模拟“视觉感受野”的方式。

2.2 原理

卷积神经网络(CNN)就是一种能够自动从数据中学习空间特征模式的深度神经网络。
它的核心思想是用卷积层模拟人类视觉皮层的局部感知机制,通过逐层提取、组合特征,实现对图像(或信号)模式的自动识别。
CNN 之所以特别强大,是因为它有一个层次化的特征提取结构,整个流程可以分为两个阶段:

2.2.1 特征提取

特征提取(Feature Extraction),这是 CNN 的“感知系统”,主要由以下几个层组成:
1️⃣ 卷积层(Convolution Layer)
  • 使用多个卷积核(filters)在输入图像上滑动;
  • 每个卷积核负责检测某种局部模式(如边缘、线条、角点等);
  • 输出若干特征图(feature maps),每个通道对应一个特征检测器;
  • 核心思想:局部连接 + 参数共享
2️⃣ 激活层(Activation Layer)
  • 通过非线性函数(通常是 ReLU)增加网络的表达能力;
  • 让 CNN 能够拟合非线性特征关系(因为图像特征不是线性可分的)。
3️⃣ 池化层(Pooling Layer)
  • 对特征图进行下采样,减少数据量;
  • 提高模型的平移、旋转、缩放鲁棒性
  • 常用方法:最大池化(Max Pooling)。
到此为止,CNN 已经将原始像素数据转化成高维度、压缩的特征表示(类似人脑看到图像后提取的“抽象特征”)。

2.2.2 特征融合与分类

4️⃣ 全连接层(Fully Connected Layer)
  • 把前面提取的特征图展平(Flatten);
  • 每个神经元与所有输入特征相连;
  • 这部分相当于“决策层”,通过组合特征,形成更高层次的语义(如“这是只猫”)。
5️⃣ 输出层(Output Layer)
  • 使用 softmax(分类)或 sigmoid(检测)等函数输出概率;
  • 得出最终预测结果(比如猫的概率 = 0.98,狗 = 0.02)。

2.3 CNN网络结构

2.3.1 卷积核

卷积核(Convolution Kernel),也叫做滤波器(Filter),是卷积神经网络(CNN)中的一个核心元素。它是一个小的矩阵,通常尺寸为3x3、5x5或7x7等,比输入的图像要小得多。卷积核的作用是提取图像中的局部特征。在训练过程中,卷积核的权重会自动学习,从而能够检测图像中的特定模式,如边缘、纹理、角点等。
💡
我们说卷积核可以捕捉特征,但卷积核的“形状”是固定的,为什么它还能在复杂图像中提取各种不同的特征?是不是每种特征都要一个不同的卷积核?
首先,不同的特征确实需要不同的卷积核。 在原理上,每一个卷积核倾向于对某一类特定特征“敏感”。
  • 一个卷积核可能检测水平边缘(比如类似于 [-1, -1, -1; 1, 1, 1] 这样的权重模式);
  • 另一个卷积核可能检测垂直边缘
  • 再另一个可能对斜线、角点、纹理变化更敏感。
每个卷积核就像一个“特征探测器”(feature detector)。
它会“激活”——即输出较大的值——当它看到自己喜欢的特征时。
其次,这里需要注意⚠️!需要观察到一个问题:
💡
为什么学习过程中看到的所有的案例,基本都是同一个卷积核在整张图像上滑动?
通过查阅资料发现,在图像空间理论中,存在一个重要的假设知识:图像的特征在空间上是“局部且重复的”。也就是说:
  • 图像的不同区域可能都有类似的边缘、角点、纹理;
  • 不同位置上的“猫耳朵”、“眼睛”、“嘴巴”等特征,虽然位置不同,但形状相似。
所以我们不需要为每个位置单独学习一个卷积核。而是用同一个卷积核在整张图像上滑动,看看“哪里”出现了它想找的特征。这就是所谓 参数共享(weight sharing) 的原理。
🧩 举例来说
如果我们有一个卷积核学会了“检测水平边缘”, 那么当它滑动到图像的任何地方时,只要该区域存在水平边缘,它都会“激活”并输出较大的值。 这就带来了一个非常棒的性质:
模型不需要关心“边缘在什么位置”,只要特征出现,就能检测到它 —— 这就是所谓的平移不变性(translation invariance)
💡
那不同形状的特征怎么办?是不是还是要多个卷积核?
是的,不同形状、方向或复杂度的特征确实需要不同的卷积核。不过 CNN 的设计早就考虑到这一点了,👉 每一层卷积层通常不是一个卷积核,而是多个卷积核(比如32个、64个甚至512个)。所以会经常看见经典的图像分类的卷积层(比如AlexNet)每层的卷积核的个数一百多个。
在这其中,每一个卷积核都会:
  • 学习不同的特征;
  • 在整张图像上滑动,寻找自己“相匹配”的结构。
于是我们得到的特征图(feature map)就变成了一个“多通道”的结果:
  • 每个通道对应一个卷积核;
  • 每个通道都在关注不同的图像特征。
💡 打个比方:
想象一个“视觉小分队”:
  • 一个人负责找“水平线”,
  • 一个人负责找“垂直线”,
  • 一个人负责找“曲线”,
  • 一个人负责找“角落”……
    • 他们都用同样的方式在图片上扫描,只是“关注点”不同。
      最后,这些信息被一起交给下一层,让下一层去组合出更复杂的图像结构(比如“眼睛”、“鼻子”、“脸”等)。

2.2.2 卷积层

2.2.3 激活层

2.2.4 池化层

2.2.5 全连接层

2.2.6 输出层

2.3 经典图像分类网络

2.3.1 经典LeNet网络

2.3.2 AlexNet网络

2.4 新的图像分类网络

2.4.1 GoogLeNet

2.4.2 VGG网络

2.4.3 ResNet网络

2.5 CNN训练原理

2.5.1 CNN训练过程

CNN 的训练过程是一个反向传播 + 参数优化的迭代过程:
  1. 前向传播(Forward Pass)
      • 输入图像 → 卷积提取特征 → 分类输出预测结果。
  1. 计算损失(Loss)
      • 比较模型预测结果与真实标签(ground truth)之间的差异;
      • 常见损失函数:交叉熵(Cross-Entropy)。
  1. 反向传播(Backpropagation)
      • 根据误差梯度,对卷积核权重、全连接层参数等进行更新;
      • 目标:让预测结果更接近真实标签。
  1. 优化(Optimization)
      • 使用优化算法(如 SGD、Adam)更新参数;
      • 通过多次迭代训练,使模型“学会”从图像中自动提取最有用的特征。

2.5.2 前向传播

2.5.3 反向传播

2.5.4 参数更新

2.6 扩展知识
2.6.1 风车卷积

2.7 零碎记录

全连接隐藏层与全连接输出层的区别?
 
卷积核为什么要设置为随机初始化?
最根本的原因是为了打破对称性
假设我们将所有卷积核的初始值都设为0或者同一个常数,那么会发生什么?
  • 在正向传播时,同一层所有卷积核在输入图像的相同位置将计算出完全相同的输出值。
  • 在反向传播时,根据链式法则,这些计算相同输出的神经元也会得到完全相同的梯度。
  • 在参数更新时,这些神经元就会以完全相同的方式变化。
最终,无论网络训练多久,同一层的所有卷积核都会保持
完全相同的数值
。这意味着它们都只能学习到
一模一样的特征
,这极大地浪费了网络的容量,使得模型退化为一个极其低效的线性分类器。因此,我们必须使用
随机初始化
,让每个卷积核的初始值都不同,从而确保它们从一开始就能去探索和捕捉输入数据中不同的模式
仅仅随机还不够,随机数的
分布范围
至关重要。如果初始值过大或过小,都会在多层网络的反向传播中,通过连乘效应引发
梯度爆炸
梯度消失
问题,导致训练无法进行。
为了解决这个问题,研究者提出了旨在维持信号方差稳定的初始化方法。其核心思想是:使每一层输出的方差尽可能接近其输入的方差。这样,数据在多层网络中流动时,其尺度(scale)就能保持相对稳定
  1. Xavier初始化(Glorot初始化)
      • 适用场景:主要针对SigmoidTanh这类对称的、线性的激活函数。
      • 核心思想:权重初始化的标准差应与输入通道数(fan_in)和输出通道数(fan_out)的平方根成反比,从而保证输入和输出的方差一致。
  1. Kaiming初始化(He初始化)
      • 适用场景:专为ReLU及其变体(如Leaky ReLU)设计。由于ReLU会将一半的神经元输出置零,会改变信号的方差。
      • 核心思想:在Xavier的基础上进行修正,使初始化后的方差在通过ReLU激活后仍能保持稳定。这是目前PyTorch中Conv2d层的默认初始化方法
 
卷积核尺寸为什么常取奇数(如3x3)?
  • 中心定位:奇数尺寸有明确的中心点,便于定位和填充。
  • 对称填充:为了保持输入输出特征图尺寸不变,通常需要填充(padding)。奇数核(如k)可以方便地进行对称填充(上下左右各填充 (k-1)/2 )。偶数核则无法实现这一点。
 
为什么小卷积核(如3x3)成为主流?
使用两个串联的3x3卷积层,其感受野相当于一个5x5卷积层,但
参数更少
(2(3²)=18 vs. 5²=25),计算量更小,并且
引入了更多的非线性激活函数
  • ,增强了模型的表达能力。因此,现代CNN(如VGG、ResNet)普遍采用堆叠小卷积核的策略。
 
卷积核数量(输出通道数)如何决定?
  • 这通常是一个需要根据任务和数据集复杂度,通过实验(Trial and Error) 来确定的超参数。一般来说,网络越深,后面的卷积层会使用越多的卷积核,以学习更抽象、更丰富的特征。
 
feature Map
VGG模型构建
n个卷积1一个池化
VGG块的构建(循环多少次,创建多少次卷积,最后加上一次池化)
 
神经网络CIFAR数据集
 
卷积神经网络中,池化层的作用
在卷积神经网络(CNN)中,池化层(Pooling Layer)是一种非常重要的组件,它通常被放置在连续的卷积层之间,扮演着“降维”和“提炼精华”的角色
池化,也称为下采样,其核心操作是用一个类似小窗口(池化核,如2x2)在输入的特征图上滑动,并对窗口覆盖的局部区域进行聚合统计。这个过程类似于查看一张高像素照片的缩略图:虽然细节丢失了,但照片中的主要物体和构图依然清晰可辨。
池化的主要作用:
  1. 特征降维与压缩这是池化最直接的作用。通过降低特征图的空间尺寸(高度和宽度),池化能显著减少后续层(尤其是全连接层)的参数数量和计算量。这使得模型训练更快,占用的内存更少,也有助于控制过拟合的风险。
  1. 保持特征不变性池化操作能帮助网络不过度关注特征的确切位置,而更关注特征是否存在。这带来了宝贵的平移、旋转和尺度不变性。例如,一个猫的耳朵特征无论是在图像的左上角还是右下角被检测到,经过最大池化后,这个强特征都有很大概率被保留下来,使得模型不会因为物体位置的微小移动而判断失误。
  1. 扩大感受野每一层池化操作都相当于让后续的卷积层能够“看到”原始输入图像中更广阔的区域。随着网络加深,感受野不断增大,使得网络能够学习并组合更加全局和复杂的特征。
  1. 优化与防止过拟合通过减少模型的复杂度和引入一定程度的不变性,池化层起到了正则化的效果,使模型不过度依赖训练数据中的细微噪声,从而提高在未知数据上的泛化能力
 
卷积神经网络Conv2D函数中不同padding值的区别
 
Inception模块
辅助分类器:链路太长,通过辅助分类器做快速问题发现
残差网络
残差块
使用残差块拼接残差网络
 
感受野
可变形卷积
空间采样偏移
随机森林
dropout随机失活
数据增强
随机擦除Random Erase
增加噪声
标签平滑
内部协变量偏移
相关文章
计算机视觉(一):深度学习的人脸应用
Lazy loaded image
计算机视觉(二):特征向量计算
Lazy loaded image
计算机视觉(三):人脸识别之特征提取
Lazy loaded image
开源干货(一):基于OpenCV+JavaFX+Yolo+Seetaface构建人脸识别
Lazy loaded image
Day03:前端页面开发-首页开发
Lazy loaded image
计算机网络(一):关于IP
Lazy loaded image
Rust入坑指南合集计算机视觉(一):深度学习的人脸应用
Loading...
fntp
fntp
多一点兴趣,少一点功利
最新发布
深度学习(三):卷积神经网络
2025-11-11
机器学习基础篇(一):机器学习概论
2025-11-4
机器学习入门篇:一些零碎的知识整理
2025-10-30
Rust入坑指南合集
2025-9-28
技术杂文(二):关于私活常用开发技巧
2025-9-26
XXL-Job实践与源码增强实践
2025-9-26
公告
📝 博客只为了记录我的学习生涯
😎 我的学习目标是成为一名极客
🤖 我热爱开源当然我也拥抱开源
💌 我期待能收到你的Email留言
📧 我的邮箱:stickpoint@163.com
欢迎交流~