来源:互联网 更新时间:2026-07-30 13:50
CNN,全称是卷积神经网络(Convolutional Neural Network),字面上看,就是专门为处理像图片这种网格结构数据设计的深度学习算法。眼下最经典的应用场景,就是图像识别和处理——数据以2D网格的形式存在,而CNN通过卷积层、池化层和全连接层的组合,自动且高效地提取特征,完成分类、检测这类任务。
这是CNN的标准定义,但客观地说,“卷积神经网络”这个翻译本身就提升了理解门槛。如果把它解释为“盘旋神经网络”,可能更直观一些。结合下面这张动图,就能彻底搞明白:本质上,就是用卷积核(也叫过滤器或矩阵),像盘旋一样,依次从左到右、从上到下,和输入数据做加减乘除运算。
CNN的基础理念,其实可以追溯到上世纪60年代。Hubel和Wiesel在研究猫的视觉皮层时发现,其中存在专门对光斑、边缘这类简单模式敏感的神经元。这个发现为后来的CNN埋下了最初的种子。
基于这个发现,1980年Fukushima提出了Neocognitron——一种层次化的无监督学习网络,这可以看作是现代CNN的雏形。1998年,Yann LeCun正式提出了CNN,目的就是为了解决传统全连接网络在处理图像时的短板。
图像数据有个天然特点:相邻像素在空间上是相连的,携带着相似的局部特征。比如,一个像素和它周围的像素,很可能同属某条边缘或某个物体。传统全连接网络把图像直接展平成一维向量,这就丢掉了像素之间的空间邻近性,也破坏了局部连续性,更别提利用图像的平移不变性了。
举个例子,想识别图片里有没有猫。你希望猫在左边还是在右边,都能被认出来吧?但全连接网络很难做到这一点,因为它把图像拉成了长条,像素之间的相对位置信息全没了。
CNN的网络结构大致如此,接下来,拆解几个理解CNN必须搞明白的核心概念。
卷积核是CNN里最核心的组件,专门用来提取特征。每个卷积核包含一组可学习的权重,通过在输入数据上滑动——也就是前面说的“盘旋”操作——来生成特征图(feature map),从而捕获空间和模式信息。
每个卷积核只跟输入图像的一小块区域(局部感知域)打交道,这样神经元就不用一次处理整个图像,只专注于一小块。这种机制让卷积核能捕捉到边缘、角点、纹理这些局部特征。而权重共享呢,就是同一个卷积核在整个输入图像上滑动时,用的是同一组权重。这不仅大幅减少了参数量、提升了训练效率,更重要的是,一旦卷积核学会了在图像某处识别某个特征,它就能在图像的任何其他地方识别出同样的特征——这就是平移不变性,也是CNN特别适合处理图像的关键原因。
核的大小也很有讲究。
小核尺寸(比如1×1、3×3)擅长捕捉细粒度特征,对局部信息特别敏感。3×3的核尤其受欢迎,因为它在提取特征和计算效率之间找到了很好的平衡。多个3×3卷积层堆叠起来,可以加深网络,而不会让参数量暴涨。
大核尺寸(比如5×5、7×7)能捕捉更广泛的空间信息,但参数多、计算量大,也更容易过拟合。实践中,3×3核是很多现代CNN架构的默认选择。
卷积运算说白了就是:卷积核在输入数据上滑动,对覆盖的局部区域做元素级别的加权求和——就是小学学的四则运算,然后输出一个新的特征图。比如下面这个例子,假设输入是二维矩阵,卷积核也是二维的,卷积核按步长滑动,在每个位置把核与对应区域做乘法再求和,就得到一个像素值。
或者这么理解:卷积核是一个3×3的矩阵,覆盖在输入数据上,两片“九宫格”重叠在一起,对应位置做乘法,再全部加起来,输出到一个新位置。
那为什么要做padding?三个核心原因。
那具体怎么做Padding?通用的做法就是在原始输入数据的外围扩展出一圈“边缘”,让卷积核能从边缘处开始计算。padding和计算过程可以看下面这个动图。
下采样和池化,这两个概念经常一起出现,但稍有区别。
下采样是减少数据维度和复杂度的过程,目的是降低后续层的计算压力,同时尽量保留重要信息。方法包括调整卷积核步长(比如从1步改成2步),以及池化操作。
池化是下采样的一种特殊形式,专门用在深度学习中,通过对特征图邻近区域做聚合来减小尺寸。最常见的是最大池化和平均池化。
为什么引入池化?因为在图像里,一旦一个特征被检测到,它的确切位置就不再像特征本身那么重要。池化能让CNN对特征的存在更敏感,同时对平移等小变化保持一定的不变性,还能减少计算量和过拟合风险。
pooling被翻译成“池化”,还是有点故弄玄虚。本质就是在指定区域内提取最显著的特征,比如最大池化,就是在一个小区域里找最大值。这样做的好处是:如果图像有轻微平移,只要特征还在这个区域内,提取到的最大值就一样——这也是平移不变性的一种体现。
Dropout是一种很实用的正则化技巧,由Srivasta va等人在2014年提出。核心思想很简单:训练时,随机丢弃一部分神经元(和它们的连接),让网络不过度依赖某些特定节点,从而防止过拟合。
通常dropout率设为0.5,也就是每次训练有一半的神经元随机消失。只在训练阶段启用dropout,测试或评估时关掉它,用全部神经元做决策。
最后,用PyTorch搭一个简单的CNN试试看。
import torch
import torch.nn as nn
import torch.nn.functional as F
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.fc1 = nn.Linear(7*7*64, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 7*7*64)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.log_softmax(x, dim=1)
# 实例化模型
model = SimpleCNN()
print(model)
摩托车活塞环性能如何
ThinkBook系列最新价格全解析:2026年选购避坑与实时询价指南
GPT5.6惨遭切脑,Fable 5回归要变弱鸡版?
Ondo将于今日上线股票永续合约
暗黑4S14野蛮人终局BD攻略
区块链OTC交易所有哪几家比较正规?
什么是山寨币?山寨币指数如何查看?全球前10大山寨币盘点
Binance新增15种bStocks代币化证券为杠杆抵押资产
全球十大加密货币APP v3.11.5正版下载
本周比特币行情预判:BTC后市的三种推演与两强对决
剑侠世界3雪峰论剑怎么打-剑侠世界3雪峰论剑打法介绍
Meme币DOGS今晚上线!开局就解锁91%代币是否带来风险?
五千元以下的笔记本几乎消失!经销商:至少一年看不到涨价尽头
超长高标准质保+总部直保售后体系:小牛真实售后体验大起底
比特币守住关键支撑,HYPE市值升至第九并反超DOGE
货拉拉如何查看历史订单 货拉拉往期行程轨迹查询【功能教学】
今日小鸡庄园答案2026.7.2
美债股纳斯达克首盘暴跌38%且加密代理交易解体,AVAX价格何去何从?
男生头像配网名可爱(精选100个)
赵云与阿斗神兵符使用教程 神兵符怎么使用
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc