卷积神经网络 · 深度手册
分类:深度学习 | 难度:★★★ 高阶 | 编号:
cnn
一、这是什么(一句话用途)
图像分类 / 目标检测 / 语义分割(视觉任务主力)
二、核心思想
卷积神经网络(CNN)专为网格结构数据(图像)设计。普通 MLP 把图像拉平会丢失空间关系且参数爆炸;CNN 用局部卷积核在图上滑动,让同一组权重在不同位置共享,天然捕捉"边缘→纹理→部件→物体"的层次特征,且参数量远小于全连接。配合池化(下采样)压缩尺寸、提升平移不变性,再用几层卷积+池化逐级抽象,最后接全连接层分类。它是计算机视觉的革命性结构,也是后续残差网络、Vision Transformer 的基础。
三、数学原理与推导
离散卷积(互相关)输出特征图:
为 卷积核,滑动步长(stride)与填充(padding)控制输出尺寸。多个核得到多通道特征图。池化(如 最大池化)取局部窗口最大值降维:
反向传播中卷积的梯度可按"转置卷积"回传,核心仍是链式法则共享权重更新。经典结构:Conv→ReLU→Pool 反复堆叠 → Flatten → FC → Softmax。
四、建模 / 求解步骤
- 图像预处理(归一/Resize)
- 堆叠 卷积+ReLU+池化 提特征
- 展平接全连接
- Softmax 分类
- 反向传播训练(共享权重)
五、关键公式速查
Y=Conv(X,W)+b;池化降维;末端 FC+Softmax
六、典型示例
手写数字(28×28)经 2 层卷积+池化→全连接,识别 0~9。
完整算例(数字演示,照着算一遍)
场景:输入 28×28 灰度手写数字,2 卷积层 + 池化 + 全连接,10 类。
结果:测试集准确率 99.2%,某图预测 '3' 概率 0.94。
结论:CNN 用局部卷积自动提取边缘→纹理→部件,省去手工特征。
七、Python 实现示例
import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
cols = ["t%d" % i for i in range(1,13)]
df = pd.read_csv(os.path.join(HERE,"..","datasets","cnn.csv"))
seq = df[cols].to_numpy(dtype=float); y = df["label"].to_numpy(dtype=float)
seq = (seq-seq.mean(0))/seq.std(0)
N, T = seq.shape
rng = np.random.default_rng(14)
K = rng.normal(0,1,(3,1)); b = rng.normal(0,1,(1,))
W = rng.normal(0,1,(1,1)); b2 = np.zeros(1)
def conv1d(x):
return np.stack([x[:,i:i+3]@K[:,0]+b[0] for i in range(x.shape[1]-2)], axis=1)
for _ in range(300):
fmap = np.tanh(conv1d(seq))
pooled = fmap.max(axis=1, keepdims=True)
p = 1/(1+np.exp(-(pooled@W+b2))).ravel()
e = p - y
W -= 0.1*pooled.T@e.reshape(-1,1); b2 -= 0.1*e.sum()
gK = np.zeros_like(K); gb = 0.0
for i in range(T-2):
m = (fmap[:,i]==fmap.max(axis=1)).astype(float)
grad = e*(1-p)*W[0,0]*(1-fmap[:,i]**2)*m
gK[:,0] += seq[:,i:i+3].T@grad
gb += grad.sum()
K -= 0.05*gK; b -= 0.05*np.array([gb])
logit = np.tanh(conv1d(seq)).max(axis=1)@W + b2
print("1D-CNN 分类准确率=%.3f" % (((logit.ravel()>0)==y).mean()))
配套文件:
py_cnn.py(需 numpy / pandas;与下方数据集配套练习)
八、MATLAB 实现示例
%% 1D 卷积神经网络示例(MATLAB/Octave,卷积核随机+读out层训练)
df = readtable('..\datasets\cnn.csv');
cols = strcat('t',string(1:12));
seq = table2array(df(:,cols)); y = table2array(df(:,13));
seq = (seq-mean(seq,1))./std(seq,1); [N,T]=size(seq);
rng(14); K=randn(3,1); b=0; W=randn(1,1); b2=0;
fmap = zeros(N, T-2);
for i=1:T-2, fmap(:,i) = tanh(seq(:,i:i+2)*K + b); end
for it=1:200
pooled = max(fmap,[],2);
p = 1./(1+exp(-(pooled*W+b2)));
e = p - y;
W = W - 0.1*(pooled'*e); b2 = b2 - 0.1*sum(e);
gK = zeros(3,1);
for i=1:T-2
m = (fmap(:,i)==max(fmap,[],2));
g = (e.*(1-p)).*W(1).*(1-fmap(:,i).^2).*double(m);
gK = gK + (seq(:,i:i+2)'*g);
end
K = K - 0.05*gK; b = b - 0.05*sum(g);
end
pred = (max(tanh(fmap),[],2)*W+b2)>0;
fprintf('1D-CNN 分类准确率=%.3f\n', mean(pred==y));
配套文件:
m_cnn.m(基础 MATLAB / Octave 即可运行)
九、练手数据集(可下载)
12 步一维序列 + 二分类标签(两类频率不同)。用于 1D 卷积+最大池化+输出层分类,体会卷积特征提取。
- 字段:t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, label
- 行数:40 行
- 下载:
cnn.csv
十、常见误区与避坑清单
- 图像需归一化
- 卷积核尺寸/步长影响感受野
- 卷积层数深需残差防退化
十一、结果怎么解读
看特征图/类激活图(CAM)理解关注区域。
十二、常与谁搭配
与多层感知机共享反向传播;Transformer 在视觉也有替代(ViT)。
十三、论文写作技巧(怎么把它写进论文)
把 卷积神经网络 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。
1. 动机怎么写(为什么用它而不是别的)
强调端到端 / 表示学习优势:无需手工特征,卷积神经网络 直接从数据学表征。交代输入形式、网络结构(层数 / 宽度 / 激活)与规模(参数量、FLOPs),并说明相比传统模型的增益。
2. 结果怎么写(图表与指标)
给训练 / 验证损失与指标曲线、混淆矩阵 / 预测对比图;若有可视化(特征图 / CAM / 注意力)必放;做消融实验(去掉某模块性能掉多少)最能服人。
3. 可直接套用的写作话术
- 中文模板:针对<问题>,本文采用 卷积神经网络 进行图像分类 / 目标检测 / 语义分割(视觉任务主力)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
- 英文模板:To address
, we adopt 卷积神经网络 to 图像分类 / 目标检测 / 语义分割(视觉任务主力). Benefiting from its ability to , it outperforms on .
4. 同类易踩的写作坑
写明超参、优化器、随机种子与硬件,保证可复现;警惕数据泄漏与测试集调参;样本少时给出正则 / 数据增强策略。
5. 典型论文段落范例(可直接参考 / 改写)
下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。
本文采用 卷积神经网络 从原始图像端到端学习特征,在测试集上达到 94.3% 准确率,较 ResNet-18 基线提升 2.1 个百分点;Grad-CAM 可视化显示模型关注病灶区域,符合医学先验。
We employ 卷积神经网络 to learn features end-to-end from raw images, reaching 94.3% test accuracy—a 2.1-point gain over the ResNet-18 baseline; Grad-CAM visualizations show the model attends to lesion regions, consistent with medical prior.
6. 消融实验怎么写(深度学习必备)
深度学习论文几乎必备消融实验(ablation study):逐次移除一个模块(如注意力、数据增强、预训练),报告性能变化,量化每个组件的贡献。写作范式:① 列出「完整模型」与若干「删减变体」的指标对照表;② 用一句话解释每项移除带来的下降(如「去掉注意力后 mAP 降 3.4,说明全局依赖建模关键」);③ 训练技巧(学习率预热、标签平滑)若有增益也单列。注意:消融必须控制变量——一次只动一处,避免把多个改动混在一起导致无法归因。
十四、相关手册(延伸阅读)
- 多层感知机(全连接神经网络) · 深度学习
- Transformer(自注意力) · 深度学习
十五、本手册导航
- 上一篇:梯度提升树(XGBoost / LightGBM) · 机器学习
- 下一篇:循环神经网络 · 深度学习
- 返回:算法深度手册库 | 资料站首页
本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。