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. Vue3中无法为el-tree-select设置反选问题分析

    好久没有写博客了,刚好上周遇到一个难缠问题,这里记录一下. 环境:Vue3.2.Element Plus 问题:子组件 setting.vue => 弹窗组件 Dialog => 树选择组 ...

  2. Nvidia GPU池化-远程GPU

    1 背景 Nvidia GPU得益于在深度学习领域强大的计算能力,使其在数据中心常年处于绝对的统治地位.尽管借助GPU虚拟化实现多任务混布,提高了GPU的利用率,缓解了长尾效应,但是GPU利用率的绝对 ...

  3. php正则表达式大全/php正则表达式使用方法整理集合

    匹配数字 "^\d+$" //非负整数(正整数 + 0) "[1][1-9][0-9]$" //正整数 "^((-\d+)|(0+))$" ...

  4. 使用vue-cli创建第一个vue项目

    命令提示符切换至需要创建项目的目录: 直接在路径输入cmd在按键盘的enter键打开的终端就直接切换到该目录下 (1)输入以下命令: vue create 项目名称 (2)我这里选手动选择,键盘上下按 ...

  5. include-file

    0X01 前言 这篇文章介绍文件包含漏洞. 0X02 最常见的两个函数的形象解释: 我们知道文件包含最常见的是两个函数 include() require()(这里就不谈他们的亲戚 include_o ...

  6. win11 计算器的进制转换

  7. CVE-2015-5254漏洞复现

    1.漏洞介绍. Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持 Java 消息服务,集群,Spring Framework 等.Apache ...

  8. js与java对json的操作

    JSON呢,是现在大部分,并且主流的传递数据的方式. 今天讲一下javascript的java对json的操作 提到js,当下就有一个比较主流的插件,vue.js,这个插件程序员没用过也都听说过吧, ...

  9. CS144 计算机网络 Lab3:TCP Sender

    前言 在 Lab2 中我们实现了 TCP Receiver,负责在收到报文段之后将数据写入重组器中,并回复给发送方确认应答号.在 Lab3 中,我们将实现 TCP 连接的另一个端点--发送方,负责读取 ...

  10. [安全开发] SQL注入扫描(一股子GPT味~)

    实际上大部分都是它写的,它真我哭 SQL注入扫描就是一种用于检测和预防SQL注入攻击的工具.它通过模拟SQL注入攻击的方式,向目标网站发送特定的SQL查询语句,以验证目标网站是否存在SQL注入漏洞.S ...