4. 深度学习基础:卷积神经网络(CNN)原理、激活函数、损失函数、优化器、训练与推理
好,咱们进入正题。这一章是地基,得打牢。你想想看,后面我们要做的RAW域降噪,本质上就是在玩转卷积神经网络。不懂CNN的原理,后面调模型、改结构、部署到边缘设备,那都是空中楼阁。
我个人习惯,讲深度学习基础,不扯太玄的数学公式。咱们从直觉出发,把每个零件拆开看明白。
4.1 卷积神经网络(CNN)的核心原理
CNN为什么适合图像?说白了,它天生就懂“局部性”和“平移不变性”。一张图里,一个噪点像素和它周围的邻居关系最紧密,离得远的像素基本没啥直接关系。CNN的卷积核,就是干这个的——只看局部。
核心三要素:
- 局部连接:每个神经元只连接输入的一小块区域(感受野)。
- 权值共享:同一个卷积核滑遍整张图,参数不换。这大大减少了参数量。
- 层次化特征:浅层学边缘、纹理;深层学形状、物体。降噪模型里,浅层学噪点模式,深层学图像结构。
我在做第一个RAW降噪项目时,犯过一个低级错误。当时为了追求大感受野,一股脑把卷积核设成7x7,结果模型参数爆炸,训练慢得像蜗牛。后来才明白,堆叠3x3卷积,效果更好,参数量还少。嗯,这里要注意,3x3卷积是黄金尺寸。
下面这张图,是我自己总结的CNN在降噪任务中的基本流程,你看一眼就懂了。
4.2 激活函数:给网络注入非线性
没有激活函数,再多层卷积也只是线性变换的堆叠,那跟单层网络没区别。激活函数就是那个“开关”,决定哪些信息能往下传。
| 激活函数 | 公式 | 我的评价 |
|---|---|---|
| ReLU | max(0, x) | 最常用,简单粗暴。但小心“神经元死亡”——梯度为0就再也活不过来。 |
| Leaky ReLU | max(αx, x) | 我个人的首选。给负半轴留个小坡度,神经元不容易死。α通常取0.01或0.2。 |
| ELU / SELU | 指数形式 | 在负半轴更平滑,收敛更快。但计算量稍大,移动端部署时慎用。 |
我的经验:在RAW域降噪模型里,我几乎只用Leaky ReLU。原因很简单——RAW数据动态范围大,负值信息(比如黑电平校正后的值)也很重要。ReLU一刀切掉负值,有时候会丢失细节。
4.3 损失函数:告诉模型什么是对的
损失函数就是模型的“老师”。你教得好不好,全看损失函数定义得对不对。
降噪任务里,最常用的就是 L1 Loss(MAE) 和 L2 Loss(MSE)。我做过对比实验,L1 Loss在降噪任务上通常比L2 Loss效果更好。为什么?L2 Loss对离群点(比如极亮或极暗的噪点)惩罚太重,模型会拼命去拟合这些异常值,反而把图像搞糊了。L1 Loss更“宽容”,保边缘效果更好。
降噪常用损失函数一览:
- L1 Loss:MAE,对异常值鲁棒,保边缘。
- L2 Loss:MSE,收敛快,但容易过平滑。
- Perceptual Loss:用预训练VGG提取特征,比较高层语义差异。适合保留纹理。
- SSIM Loss:直接优化结构相似性,更符合人眼视觉。
我曾经在一个夜景降噪项目里,只用L2 Loss,结果模型把星星都磨没了。后来换成L1 + Perceptual Loss的组合,星星保住了,噪点也去得干净。嗯,损失函数组合拳,有时候比单打独斗强。
4.4 优化器:模型训练的引擎
优化器决定了模型怎么沿着梯度下降。选不对优化器,训练可能震荡、不收敛,甚至直接炸掉。
| 优化器 | 特点 | 适用场景 |
|---|---|---|
| SGD + Momentum | 经典,收敛稳定,但调参麻烦 | 大数据集、需要精细调优时 |
| Adam | 自适应学习率,几乎不用调参 | 快速验证、小数据集、新手友好 |
| AdamW | Adam + 解耦权重衰减 | 我现在的首选。比Adam泛化能力更强 |
⚠️ 避坑指南:我曾经在训练一个深层降噪网络时,直接用默认学习率(0.001)的Adam,结果loss震荡得像心电图。后来把学习率降到1e-4,加上余弦退火调度,才稳定下来。记住:学习率是优化器里最重要的超参数,没有之一。
4.5 训练与推理:两个完全不同的世界
训练和推理,虽然用的是同一个模型,但心态和策略完全不同。
- 训练阶段:追求精度。可以用大batch size、数据增强、Dropout、BN层。计算资源管够,时间不是问题。
- 推理阶段:追求速度和效率。要量化、剪枝、算子融合。尤其是部署到手机或相机上,延迟必须控制在毫秒级。
我举个例子。训练时,BN层(Batch Normalization)能加速收敛,防止梯度消失。但推理时,BN层会被融合进卷积层,变成一个线性变换。为什么?因为推理时没有batch的概念,BN的均值和方差是训练时统计好的固定值,直接算进去就行,省掉一次额外的计算。
训练 vs 推理 关键差异:
| 维度 | 训练 | 推理 |
|---|---|---|
| 目标 | 最小化损失 | 最小化延迟 + 功耗 |
| 数值精度 | FP32 | FP16 / INT8 |
| BN层 | 动态计算 | 融合进卷积 |
| Dropout | 随机丢弃 | 关闭 |
| 数据增强 | 随机变换 | 无 |
好了,这一章的内容就这些。CNN的原理、激活函数、损失函数、优化器、训练与推理的区别,都是后面实战的基石。你把这些吃透了,后面讲具体的降噪网络结构,你听起来就不会觉得飘。