921 字
5 分钟
从零开始深度学习 Day 2 CNN 卷积神经网络
有犹豫是否要在 Kaggle 上先实践一下简单的 MLP 项目,但是想了想还是先推进度。
从 MLP 到 CNN
为什么 MLP 不适合图像任务
- 参数多、训练慢、容易过拟合、占用内存大
- 将图像展平成向量,丢失空间结构信息
- CNN 通过局部连接和参数共享,更高效地学习空间特征
适合计算机视觉的神经网络架构
-
参数共享(减少参数数量)
-
局部感受野(关注局部特征)
-
平移不变性(增强泛化能力)
相关知识
卷积
当为离散对象时,积分就变成求和。
当对象为 n 维张量:
互相关运算
为了理解,我们只考虑
假设输入图像为:
卷积核为:
滑动卷积后输出:
结果代表图像在不同区域的特征响应。
卷积核(滤波器)
CNN 通过学习权重自动生成滤波器。
填充与步幅
- 填充 0:保持尺寸
- 步幅:控制滑动间距(水平/垂直)
多通道输入
每个卷积核对多通道输入做加权求和。
汇聚层(Pooling)
- Max pooling / Avg pooling:降维、增强鲁棒性
经典 CNN
LeNet
来自上个世纪的网络。
使用卷积层提取空间信息
使用全连接层转换到类别空间
- 早期 CNN 原型:卷积 池化 卷积 池化 全连接
- 输出通道数 = 卷积核数
- 池化降低特征敏感度 端到端
AlexNet
- 深度学习的开端
- 使用 ReLU、Dropout、CUDA 并行 提升性能
VGG
- 模块化结构:8 个卷积层 + 3 个全连接层
- 通道数逐层倍增至 512
- 简洁、规则,是现代 CNN 基础
NiN
如果使用了全连接层,可能会完全放弃表征的空间结构.
那我们用 的块就好了。
卷积核
对输入的每个像素位置,独立地进行通道上的线性组合
GoogLeNet
- 引入 Inception 结构
- 多尺度卷积并行,提高特征提取效率
ResNet
为了解决“增加网络深度但效果反而变差”的问题,ResNet 引入了残差连接
不直接学习目标函数,而是学习一个残差函数:
增加层数不会破坏已有的逼近能力,只会让模型“潜在地”学到更多复杂特征.
通过跨层数据通路,跳过这2个卷积运算,将输入直接加在最后的ReLU激活函数前
DenseNet
进一步强化特征重用(Feature Reuse) ResNet 允许部分特征重用(通过加法), DenseNet 允许所有特征重用(通过拼接)。
改善梯度流动(Better Gradient Flow) 在 DenseNet 中,每一层都有来自所有之前层的“直达梯度路径”, 因此训练更加稳定,梯度消失问题更轻。
减少参数(Parameter Efficiency) 因为每层都能访问早期特征,不需要重复学习相似的表示。 在相同性能下,DenseNet 通常比 ResNet 参数更少。
具有更强的正则化效果 DenseNet 的特征复用具有“隐式正则化”作用,减少过拟合。
相关学习资料
- d2l
- 深度学习入门:基于Python的理论与实现 (斋藤康毅)
- https://zhuanlan.zhihu.com/p/561991816
从零开始深度学习 Day 2 CNN 卷积神经网络
https://blog.candlest.cc/posts/ai/cnn/