AlexNet(2012):基于深度卷积神经网络的图像分类

AlexNet(2012):基于深度卷积神经网络的图像分类

导出时间:2025/11/23 20:18:33

1、什么是饱和非线性模型

image.png

1. 饱和性(Saturation)导致梯度消失

  • tanh(x) image.png
    • 和 sigmoid(x) 都具有“饱和”特性:
    image.png
    • 当输入 x 很大或很小时,函数输出会趋近于一个常数(如tanh趋近于±1,sigmoid趋近于0或1)。
    • 此时,函数的导数(梯度)会趋近于零,因为曲线在饱和区的斜率几乎为零。
  • 在反向传播中,梯度需要通过链式法则从后向前逐层传递。如果某一层的梯度接近零,那么前面所有层的梯度也会因连乘而迅速衰减,最终使得靠近输入层的参数几乎得不到有效更新,训练陷入停滞。

2. 非饱和函数(如ReLU)的优势

image.png
  • ReLU函数 f(x)=max(0,x) 在正半轴的导数恒为1,不会因为输入增大而减小。
  • 这意味着在正半轴,梯度不会衰减,能够稳定地传递到前面的层,从而加速了梯度下降的收敛。
  • 此外,ReLU的计算更简单(只需比较和取最大值),也进一步提高了训练效率。


2、早期深度学习用多块 GPU 训练大模型的工程方法

image.png
当时(大约 2012 年前后)显卡显存很小,3GB 很容易被大型卷积神经网络占满。大网络需要存储权重、梯度、中间特征图等,如果显存不够,就无法一次性放下整个网络。
网络层中的神经元被一分为二,一半放在 GPU 1,一半放在 GPU 2。
不是每一层之间都进行跨 GPU 数据传输,因为通信很慢。
他们设计了一种“分层通信策略”:
  • 第三层神经元要接收第二层所有神经元的数据(需要跨卡通信)。
  • 第四层神经元只接收来自同一显卡的第三层神经元数据(避免跨卡传输)
  1. 这种方法的权衡
  • 优点:减少 GPU 之间的通信量,降低瓶颈,让两块显卡的计算和通信负载更平衡。
  • 缺点:因为不是所有神经元都全连接,可能在交叉验证(cross-validation)或模型泛化能力验证时带来一些挑战——结构不完全对称,可能影响性能评估。

3、整体网络架构

image.png image.png
  1. 这台“机器”的结构
你可以把 AlexNet 想象成一条流水线,要把图片分到 1000 个分类里。
  • 前面 5 道工序(Conv1~Conv5)是**“看图做特征提取”**:卷积层就是拿不同的“滤镜”去扫描图片,找颜色、边缘、形状等信息。
  • 后面 3 道工序(FC6~FC8)是**“根据特征做决策”**:全连接层就像一个投票系统,把前面提取的特征综合起来决定是哪一类。
  • 最后 softmax 把分数变成概率,告诉你这张图是猫的概率 80%,狗的概率 15%,其它加起来 5%。

  1. 为啥要两块 GPU?
想象你有一个超大的拼图(这个模型很大),一张桌子(显存)放不下,只能用两张桌子(两块 GPU)拼。
  • 每张桌子各负责拼一半的拼图(GPU1 负责图里的上半部分,GPU2 负责下半部分)。
  • 但有些拼图块需要跨桌子看一下(跨 GPU 通信),否则拼不出来。
  • 为了不让两张桌子之间来回递东西太频繁(太慢),他们规定:
    • 有些步骤(Conv2、Conv4、Conv5)只用本桌子的拼图块,互不打扰。
    • 有些关键步骤(Conv3、全连接层)需要把两桌的拼图都放在一起看一眼。

  1. 各层干的活(用更生活化的比喻)
  2. Conv1(96 个大滤镜 11×11)
    • 像用大号放大镜扫描图片,找出粗的边缘和大块颜色变化。
  3. Conv2(256 个中等滤镜 5×5)
    • 用更精细的镜头看局部细节,分别在两张桌子上各干一半活。
  4. Conv3(384 个小滤镜 3×3)
    • 第一次“合桌”开会,把两边的结果放一起再加工。
  5. Conv4、Conv5
    • 又分桌子继续加工细节。
  6. 池化层(Max Pooling)
    • 像把照片缩小,只保留最明显的特征。
  7. 全连接层(FC6~FC8)
    • 全员大会,把所有特征拿出来综合判断。
  8. Softmax
    • 最终投票,得出 1000 个类别的概率。

  1. 为什么这种方法很聪明
  • 显存小也能训练大模型:把模型拆成两半放两块 GPU 上。
  • 减少等待时间:不是每一步都跨 GPU 交流,只在必要的时候才沟通。
  • 训练速度快很多:两张桌子一起干活,效率翻倍。


4、如何解决过拟合?

image.png

第一种增强:随机裁剪 + 水平翻转

  • 原图先被缩放到 256×256
  • 从里面随机裁出 224×224 的小块(相当于轻微平移)。
  • 对裁出的图做水平镜像翻转(左变右,右变左)。
  • 训练时:
    • 每次批量(batch)送进 GPU 之前,CPU 动态生成这些裁剪和翻转版本,不用提前存磁盘。
    • 这样相当于 无限多 样本(虽然它们还是依赖原图),但已经大幅增加了多样性。
  • 测试时:
    • 用 10 张图来做投票:4 个角上的裁剪块 + 1 个中心裁剪块,再加上它们的翻转版本。
    • 把 softmax 输出取平均作为最终预测。

第二种增强:PCA 颜色抖动(亮度与颜色变化)

  • 对整个 ImageNet 数据集的 RGB 像素做主成分分析(PCA),找到颜色分布的 3 个主方向(p1, p2, p3)和强度(λ1, λ2, λ3)。
  • 对每一张训练图片:
    1. 按这 3 个主颜色方向,随机加减一点颜色(强度乘上一个随机系数 αi)。
    2. αi 来自 均值 0、标准差 0.1 的高斯分布,所以变化幅度小但随机性足够。
  • 效果:模拟现实中的光照、色温变化(比如阴天和晴天的同一物体颜色会略有不同),但物体本身还是一样的。
  • 收益:top-1 错误率下降 1%+,说明泛化能力显著提升。


5、实战项目