AlexNet详解:深度学习指数爆炸的起点

AlexNet详解:深度学习指数爆炸的起点
abinng😶🌫️author: abinng date: 2025-12-17 13:17
createDate:2025-11-27 20:56
背景
在LeNet提出后,卷积神经网络在计算机视觉和机器学习领域中很有名气。但卷积神经网络并没有主导这些领域。这是因为虽然LeNet在小数据集上取得了很好的效果,但是在更大、更真实的数据集上训练卷积神经网络的性能和可行性还有待研究。事实上,在上世纪90年代初到2012年之间的大部分时间里,神经网络往往被其他机器学习方法超越,如支持向量机(support vector machines)。
而在2012年,ILSVRC大规模视觉识别挑战赛(Imagenet Large Scale Visual Recognition Challenge), AlexNet首次引入了深度卷积神经网络,并获得2012的大规模视觉识别挑战赛的冠军,这标志着深度学习在计算机视觉领域的崭露头角。
结构
AlexNet使用了8层卷积神经网络,与LeNet的架构非常相似
每个卷积块中的基本单元:一个卷积层,一个ReLU激活函数,一个最大池化层
AlexNet和LeNet的设计理念非常相似,但也存在显著差异。
- AlexNet比相对较小的LeNet5要深得多。
- AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
- AlexNet使用ReLU而不是sigmoid作为其激活函数。加快收敛,减少训练耗时。
- 这里sigmoid激活函数容易在正区间内得到几乎为0的梯度,导致反向传播时容易有梯度消失的现象,且sigmoid有相较于RuLU复杂的幂运算
- 使用最大池化。
- 使用了Dropout,提高了模型的准确度,减少了过拟合,后来也被广泛采用。
- 使用了三种数据扩增的技术,大幅增加训练数据,增加模型的鲁棒性,减少过拟合。
参数计算:
运用了公式:
整个流程相较于LeNet一个亮点是Dropout操作,这是什么呢?
AlexNet的进入第一个全连接层的输入是
Dropout操作是什么?

- 随机删去网络中
的隐藏神经元,输入输出神经元保持不变 - 然后正常进行前向传播,把得到的损失结果进行反向传播,在没有被删除的神经元上按照随机梯度下降法更新参数
- 重复1和2
图像增强
这个操作是针对数据集的,因为最后训练结果的好坏还与数据集有很大关系 该操作可以解决数据少、防止过拟合
- 水平翻转:一张图片进行水平反转,就可以当作不同的图片进行投入训练
- 随机裁剪:一张图片进行随机裁剪,只裁剪图片的一部分,就可以当作不同的图片进行投入训练
- PCA: 0.
我的理解就是,图像分为RGB三个通道,也就是三个矩阵,通过对三个矩阵里面的所有数字进行归一化处理、分别展平得到三个长条矩阵、之后经过我目前不懂的计算得到一个(3,
1)大小的矩阵,也就是三个数字,将这三个数字分别加到对应的三个矩阵(R,G,B)上面,三个RGB矩阵就可以表示一张图像了,也就是新的图像。
- 将图片按照RGB三通道进行normalization(归一化)处理,保证均值为0,方差为1
- 将图片按照channel展平成大小为(H * W, 3)的矩阵
- 计算展平后的矩阵的协方差矩阵,大小为(3, 3)
- 对协方差矩阵进行特征分解,得到对应的特征向量和特征值
- 设置一个抖动系数,该抖动系数是一个(3,1)大小的矩阵,里面的元素是随机值,利用抖动系数和对应的特征进行相乘,依然得到一个(3,1)大小的矩阵,对该矩阵进行转置并和特征向量进行矩阵相乘,得到一个(3,1)大小的矩阵
- 利用上述最后计算出来的(3,1)大小的矩阵,其中的3个值分别加到原图像的R,G,B三通道上,就是最后得到的增强的图像。 经过上述说的图像增强,就可以将数据集加倍
LRN(局部归一化)
==(注意)该方法到批量归一化(Batch Normalization, BN)之后没有什么人用,因为没什么提升==
- 用到公式:
- N是总通道数
- 超参数
- 因变量
,自变量
- 有什么用:对局部的值进行归一化操作,使其中比较大的值变得相对更大,增强了局部的对比度,提升了模型的泛化能力,在AlexNet中有1.2个百分比左右的提升
- 流程:
- 个人理解:结合上图,该图是四个通道。个人理解这个公式就是,计算该位置的值和邻域内(由n决定邻域大小)的值的平方和配上一些超参数
调整作为分母,分子是该位置的值,最终得到一个新的值,此时该位置就操作结束 - 例如:n=2,超参数为
时,以通道二(红色)最左上角的值为例,邻域就是1,因为n/2=1,此时就是计算
- 例如:n=2,超参数为
- 手动设置超参数
- 对每个值利用公式计算局部归一化之后的值
实操
总体流程相较于LeNet-5基本没变,依旧是
- 搭建模型model.py,拼装一个AlexNet的经典层次
- 模型训练model_train.py(先处理数据,训练模型就是一行代码的事)
- 模型测试model_test.py(只需要前向传播)
代码
GitHub - abinng/Blog-code: 用于存放我博客中的代码
进入后右上角可以给仓库一个Star哦~(´▽`ʃ♡ƪ)















