Advertisement

AlexNet:ImageNet Classification with Deep Convolutional Neural Networks

阅读量:

一、论文背景和前期知识

在数据分析中,人去做特征工程,人去分类
在机器学习,人做特征工程,机器学习模型例如决策树、GBDT去做分类
在深度学习中,CNN是做特征工程的,Softmax、SVM做分类

LeNet——CNN+SVM(RBF),用到的还是机器学习的东西,没有什么价值

研究一个网络,就是要研究一个网络提取特征的能力是否强

网络太深会导致的问题:
1.参数过多,计算时间太长,硬件无法满足需求
2.过拟合,网格退化,梯度消失或梯度爆炸

数据集:
机器学习——train,test
深度学习——train,test,validation
validation:一边训练一边测试用的

训练一个深度学习模型,样本最少不要少于5万

深度学习每次传入64或者128张
5万张全部跑完一遍就是一个epoch
一个模型跑不超过1000个epoch

lost-epoch图像中,到某个点lost不再减少,那么这个点就叫做early-stop点
这个early-stop点就是在validation跑的时候找到的

二、论文结构

  • Abstract: 简单介绍了AlexNet网络的结构、贡献以及取得的结构
  • Introduction: 神经网络在了算力更好的gpu与更强大的数据集后会取得更好的效果
  • The Dataset: ILSVRC与ImageNet数据集介绍
  • Details of learning: 网络超参数设置,权重及偏置的初始化
  • Reducing Overting: 数据增强、Dropout
  • The Architecture: ReLU,两个GPU训练,LRN,Overlapping pooling,网络整体结构
  • Results: 详细介绍了AlexNet网络在比赛中取得的结果
  • Qualitative Evaluations: 给出来做的实验,展示了卷积核学习到的内容,同一类图像特征的欧式距离更近
  • Discussion: 结论说明了,神经网络可以很好的完成图像分类的任务

三、细节知识点

1.非线性单元:

ReLU:

f(x)=max(0,x)

ReLU的优点:

1.可以使网络训练更快

  • 反向传播会涉及激活函数的求导,相比tanh,sigmoid而言,ReLU的导数更好求,tanh,sigmoid含指数,它们指数的求导相对来说慢一些

2.增加网络的非线性

  • ReLU为非线性函数,加入到神经网络中可以使网络拟合非线性的映射,因此增加了网络的非线性化

3.防止梯度消失

  • 当数值过大或者偏小时,sigmoid,tanh的导数值都接近于0,导致反向传播过程中出现梯度消失,ReLU为非饱和激活函数,不存在此问题

4.使网络具有稀疏性

  • ReLU可以使一些神经元输出为0,因此可以增加网络的稀疏性

Sigmoid

  • 表达式: f(x)=\frac{1}{1+e^{-x}}
  • 导数:f(x)(1-f(x))

2.模型衡量标准

Top-1错误率:
取概率向量里面最大的那一个作为预测结果,如果分类正确,则预测正确,否则预测错误

Top-5错误率:
取概率向量前五大的作为预测结果,这五个里面出现正确的了,则预测正确,否则预测错误

例子:
比如,现在要预测车,有bike,car,truck,boat,airplane五类
Top-1,比如要预测的是bike,你只有预测到的是bike才算对
Top-5,比如总的类大于上面的5类,你预测的只要属于5类之中的一个就算对
比如,有100个样本,取概率向量最大的,正确分类的有80个,则topp-1错误率为20%
取概率向量前五大的,分类正确的又90个,则top-5错误率为10%

四、网络结构及部分参数计算

1.AlexNet 网络结构图

在这里插入图片描述
上图是论文中的原图,原图中池化层没有画出,完整网络结构图如下:
在这里插入图片描述

2.网络结构:

8层=5个卷积层+3个全连接层(最后一个是1000维的softmax输出层)

  • 第1,2卷积层之后——响应归一化层
  • 第1,2,5卷积层之后——重叠最大池化层(1,2的是在响应归一化层后)

3.连接方式:

input -->
conv1 relu norm pool -->
conv2 relu norm pool -->
conv3 relu -->
conv4 relu -->
conv5 relu pool -->
fc1 relu dropout -->
fc2 relu dropout -->
fc3 softmax

  • 第2,4,5卷积层的核只与同一GPU上前一层的核映射相连接
  • 第3卷积层的核与第2层中所有核映射相连接
  • 全连接层中的神经元都是与前一层中的所有神经元相连接

参数计算

在这里插入图片描述
结果 :参数总计——60965224

说明 :计算过程与前面连接方式的说法相对应

  • pool都是将两个gpu上的卷积结果拼起来后一起池化的
  • 只有conv3是将前一层的结果合并起来全部用来卷积,其他卷积层都是按在同一个GPU上的结果进行卷积

卷积输出特征图计算公式F_o=\lfloor \frac{F_{in}+2p-k}{s} \rfloor + 1

卷积方式为VALIDF_o=\lfloor \frac{F_{in}-k}{s} \rfloor + 1

卷积方式为SAMEF_o=\lfloor \frac{F_{in}}{s} \rfloor

参数计算公式(k^2*k_c+1)*F_oc

连接数量计算公式F_o^2*(k^2*k_c+1)*F_oc

其中,F_{in}、F_o、F_oc 分别为输入、输出特征图尺寸,输出特征图通道数,k、k_c 分别为卷积核大小、卷积核通道数

五、网络超参数及训练

1.训练数据

1.随机地从256256的原始图像中截取224224大小的区域(以及水平翻转与镜像),相当于增加了2*(256-224)*2=2048倍的数据量
如果没有数据增强,仅靠原始数据,参数众多的CNN会陷入过拟合,使用数据增强后,可以大大减轻过拟合,提升泛化能力

2.对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加了一些噪声,这个trick可以让错误率再下降1%

3.进行预测时,取图片四个角加中间共5个位置,并进行左右翻转,一共获得了10张图片,对他们进行预测并对10次结果求均值

2.超参数设置

  • 批量大小:batch_size = 128
  • 权重衰减:weight_decay = 0.0005
  • 学习率:learning_rate = 0.01 衰减率为0.1
  • 轮数:epoches = 90

3.初始化方式

  • 卷积核初始化方式:用均值为0、标准差为0.01的高斯分布
  • 偏置初始化方式:2,4,5卷积层及全连接层初始化为1,剩余层初始化为0

六、网络特点

(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题

(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合,Dropout虽有单独的论文论述,但是 AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout

(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化, AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。"

(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。(后来的vgg证明这个作用不大)

(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练同时, AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。

(6)数据增强,随机地从256-256的原始图像中截取224-224大小的区域(以及水平翻转的镜像)对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。

全部评论 (0)

还没有任何评论哟~