1.导读

ALexNet在2012图像识别竞赛中ILSVRC大放异彩,直接将错误了降低了近10个百分点。

论文《ImageNet Classification with Deep Convolutional Neural Networks》,链接点击here

2.网络结构

AlexNet整体的网络结构包括:1个输入层(input layer)、5个卷积层(C1、C2、C3、C4、C5)、2个全连接层(FC6、FC7)和1个输出层(output layer)。下面对网络结构详细介绍:

注意:作者由于资源有限,是在两张GPU张进行的分布式训练,因此这张网络结构图可以看作上半部分是在GPU0,下半部在是GPU1上;

网络结构输入是224X224X3(但实际图像尺寸为227X227X3,这里据说是手误或者可能是后来对网络做了调整),经过5个卷积后接入全连接层,输出4096维向量,最后接入一个softmax层进行分类,值得注意的是C2->C3与C5、FC6、FC7中是交叉了的,这是作者想融合两张GPU上的特征,这是网络结构的大体思想,现在我们一个个层来分析:

2.1 输入层

输入图像的尺寸为224X224X3(227X227X3),这里值得一提的是作者的图像预处理的方法,这里我们在第3大部分说。

2.2 卷积层

这里先写出卷积计算公式:输出尺寸=[(输入尺寸+2*padding-kernel_size)/stride]+1

2.2.1 C1卷积层

C1卷积层为:卷积-->激活函数-->局部响应归一化-->池化;

卷积:输入227X227X3,使用96个11X11X3的kernel(两种GPU分别48个),padding=0,stride=4,得到输出55X55X96;

激活函数:这里作者没有用以往的sigmoid、tanh,使用的是ReLU,f(x)=max(0,x),速度要快许多,不过对于现在的模型来说,用哪个激活函数差别不大,更重要的是你的网络结构,当然ReLU也是用得比较多的;补充知识点:如果没有激活函数,神经网络下一层的输出只是上一层输入函数的线性变换,无论神经网络多么复杂,最后输出都是输入的线性组合,因此使用激活函数引入非线性性,使得神经网络可以逼近任何的非线性函数。

局部响应归一化:Local Response Normalization简称LRN,LRN对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。跟现在的BN操作类似,LRN公式如下:

其中a为归一化之前的神经元,b为归一化之后的神经元;N是卷积核的个数,也就是生成的FeatureMap的个数;k,α,β,n是超参数,论文中使用的值是k=2,n=5,α=0.0001,β=0.75;

经过LRN层后输出仍然是55X55X96;

池化:这里使用的是max Pooling即最大池化操作,使用3X3的池化单元,得到27X27X96;这里补充一个知识,为什么相比于average pooling,max pooling在分类任务中更常用?虽然average pooling和average pooling都对数据做了下采样,但max pooling更像是做了特征选择,选出了分类识别度更好的特征,很多时候,我们需要知道的是这张图片中有什么object,这时max pooling的效果会更好。

2.2.2 C2卷积层

C2卷积层结构和C1一致

卷积:input为27X27X96,256个5x5x48的kernel size(每个GPU128个),padding=2,stride=1,根据公式输出为27x27x256;

激活函数:ReLU;

局部响应归一化:使用参数k=2,n=5,α=0.0001,β=0.75进行归一化,输入尺寸不变;

池化:k3x3,stride=2的池化单元的max pooling 输出13x13x256;

2.2.3 C3卷积层

该层的结构为:卷积-->激活函数;

卷积:输入13x13x256,使用384个3x3x256的kernel size,padding=1,stride=1,得到输出13x13x384;

激活函数:ReLu;

2.2.4 C4卷积层

与C3卷积层结构一致;

卷积:输入13x13x384,384个3x3x384个kernel size,padding=1,stride=1,输出13x13x384;

激活函数:ReLU;

2.2.5 C5卷积层

该层结构为:卷积-->激活函数-->池化

卷积:输入13x13x384,256个3x3x192的卷积核,padding=1,stride=1,输出13x13x256;

激活函数:ReLU

池化:3x3,stride=2的池化单元进行max pooling,得到输出6x6x256;

2.2.6 FC6全连接层

该层的结构为:全连接-->激活函数-->Dropout

全连接层:输入为6x6x256,使用4096个6x6x256的kernel,输出1x1x4096,即有4096个神经元;

激活函数:ReLU;

Dropout:随机断开全连接层某些神经元的连接,让这些神经元不参与计算,降低了网络对于单个神经元的依赖,防止过拟合,作者在论文中表达的意思是这样可以组合不同的模型,现在来看是一个正则化技术。

2.2.7 FC7全连接层

与FC6层结构一样,输出1x1x4096

2.2.8 输出层

该层的结构为:全连接-->Softmax

全连接:输入1x1x4096,输出1x1x1000,即对应1000类;

Softmax:经过Softmax,算出1000个类别的对应预测概率;

3.论文总结

3.1 数据处理

作者创新点之一在于数据处理方面,他使用了两种数据增强的方法,第一种是随机裁剪和水平翻转,作者从256x256图像中随机提取224x224并且结合其水平翻转,这样扩充了数据集;第二种是对RGB空间使用PCA,做一个高斯扰动,改变其RGB通道的强度值,也就是对颜色、光照做变换。这样端到端的处理数据方式给后来带来了很大影响,但这样扩充数据是有冗余的。

3.2 激活函数ReLU

ReLU简单且好用,比当时的tanh要快很多,ReLU函数是一个分段线性函数,小于等于0则输出0;大于0的则恒等输出。反向传播中,ReLU有输出的部分,导数始终为1。而且ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

3.3 相似特征向量

神经网络的可解释性一直是一个困扰问题,下面这张图是作者将最后一个全连接后的4096维向量拿出来,并选出产生欧式距离较小的其他特征向量,我们认为在高维空间中他们是相似的,然后作者将他们可视化了一些,如下图所示,这些在高维空间相似的向量真的代表着同一类,这些充分证明了神经网络的的确确学到了东西,能够将他们很好地分类出来,这个实验思路是很重要的。

3.4 Dropout

过拟合一直是被关注的问题,Dropout能抑制过拟合,我们现在认为其就是一种正则化技术,但当时作者在文中表达的是Dropout可以看成是一种模型组合,每次生成的网络结构都不一样,通过组合多个模型的方式能够有效地减少过拟合。

3.5 复现训练细节

训练使用的是小批量随机梯度下降,batch size = 128,动量momentum为0.9,weight deay权重衰减为0.0005;每一层的权重初始化为均值1标准差0.01的正态分布,在第2,4,5卷积层和全连接层中的bias初始化为常数1,其余层则为0.所有层采用了相同的初始化为0.01的学习率,不过可以手动调整。整个训练过程在两台NVIDIA GTX 580 3GB gpu上用了5到6天的时间,120万张图像的训练集,大约90轮迭代。 论文中提到:weight deay对模型的学习很重要。换句话说,这里的重量衰减不仅仅是一个正则化器:它减少了模型的训练误差。

3.5 讨论

作者在论文中指出:一个大型的、深度的卷积神经网络能够在一个高度挑战的数据集上使用纯监督学习获得破纪录的结果。如果去掉AlexNet网络中的任意个卷积层,整体性能就会下降约2%,可见,网络的深度很重要

4 代码实现

复现AlexNet的demo我放在了github上,你可以点击这里,我使用了4000多张flower的图片,分5个类。用1050的显卡训练15个epoch很快,而且效果还不错。

论文日记一:AlexNet的更多相关文章

  1. 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...

  2. 深度学习论文翻译解析(十):Visualizing and Understanding Convolutional Networks

    论文标题:Visualizing and Understanding Convolutional Networks 标题翻译:可视化和理解卷积网络 论文作者:Matthew D. Zeiler  Ro ...

  3. 论文解读《ImageNet Classification with Deep Convolutional Neural Networks》

    这篇论文提出了AlexNet,奠定了深度学习在CV领域中的地位. 1. ReLu激活函数 2. Dropout 3. 数据增强 网络的架构如图所示 包含八个学习层:五个卷积神经网络和三个全连接网络,并 ...

  4. 【DeepLearning】AlexNet

    在前文中,我们介绍了LeNet的相关细节,它是由两个卷积层.两个池化层以及两个全链接层组成.卷积都是5*5的模板,stride =1,池化为MAX.整体来说它有三大特点:局部感受野,权值共享和池化.2 ...

  5. 【DeepLearning】深入理解dropout正则化

    本文为转载,作者:Microstrong0305 来源:CSDN 原文:https://blog.csdn.net/program_developer/article/details/80737724 ...

  6. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  7. Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象.在训练神经网络的时候经常会遇到过拟合的问题, ...

  8. AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)

    前言: 文章:CNN的结构分析-------:  文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...

  9. Hebye 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  10. 论文笔记:CNN经典结构1(AlexNet,ZFNet,OverFeat,VGG,GoogleNet,ResNet)

    前言 本文主要介绍2012-2015年的一些经典CNN结构,从AlexNet,ZFNet,OverFeat到VGG,GoogleNetv1-v4,ResNetv1-v2. 在论文笔记:CNN经典结构2 ...

随机推荐

  1. Kubernetes学习之旅

    # Kubernetes学习之旅 ## 引言 - 为什么选择Kubernetes- Kubernetes简介- Kubernetes的发展历程 ## Kubernetes基本概念 - 节点(Node) ...

  2. Sphinx 配置文件说明

    一.    创建sphinx.conf文件 其结构组成主要如下: Source 源名称1{                //指定数据源 一些配置 } Index 索引名称1{ Source=源名称1 ...

  3. 23.04.06_为博客设置https

    title: 为博客设置https协议 categories: - 博客优化 date: 2023-04-06 url_dir: Blog_optimization url_name: setting ...

  4. .NET实现解析字符串表达式

    一.引子·功能需求 我们创建了一个 School 对象,其中包含了教师列表和学生列表.现在,我们需要计算教师平均年龄和学生平均年龄. //创建对象 School school = new School ...

  5. 图像I、P、B帧介绍

    I.p.b 帧 I帧:帧内编码帧 :尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像:P帧:前向预测编码帧: 通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫 ...

  6. Centos7.x 安装Chrome + Chrome driver

    一.安装Chrome 1.执行下面命令进行安装操作 yum install https://dl.google.com/linux/direct/google-chrome-stable_curren ...

  7. Prism Sample 4 View Discovery

    前三节算是弄明白了Region是什么,但是定义了区域,怎样向区域中添加内容呢?内容是UserControl,即ViewA. 添加内容的方式有2种,一种叫View Discovery,一种叫View I ...

  8. 2022-12-09:上升的温度。以下的数据输出2和4,2015-01-02 的温度比前一天高(10 -> 25),2015-01-04 的温度比前一天高(20 -> 30),sql语句如何写? DR

    2022-12-09:上升的温度.以下的数据输出2和4,2015-01-02 的温度比前一天高(10 -> 25),2015-01-04 的温度比前一天高(20 -> 30),sql语句如 ...

  9. 2022-11-09:给定怪兽的血量为hp 第i回合如果用刀砍,怪兽在这回合会直接掉血,没有后续效果 第i回合如果用毒,怪兽在这回合不会掉血, 但是之后每回合都会掉血,并且所有中毒的后续效果会叠加 给

    2022-11-09:给定怪兽的血量为hp 第i回合如果用刀砍,怪兽在这回合会直接掉血,没有后续效果 第i回合如果用毒,怪兽在这回合不会掉血, 但是之后每回合都会掉血,并且所有中毒的后续效果会叠加 给 ...

  10. 2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,x[i]表示i号怪兽在x轴上的位置;hp[i]表示i号怪兽的血量 。range表示法师如果站在x位置,用A

    2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range.x有序,x[i]表示i号怪兽在x轴上的位置:hp[i]表示i号怪兽的血量 .range表示法师如果站在x位置,用A ...