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. 【题解】Luogu P2671 【求和】

    因为人傻常数大写了一天的题目. 原题传送门 题目意思另一种表达: 定义特殊二元组\((x,z)\). 1.\(x<z\). 2.\(x\)与\(z\)要么都为奇数要么都为偶数. (即\(x \ ...

  2. Docker应用部署(Nginx、Tomcat)

    Docker hub官方链接: https://hub.docker.com 部署Nginx 官方已经给出了方法: https://hub.docker.com/_/nginx 运行容器 $ dock ...

  3. UE中根据场景模型,导出缩略图

    在实际使用中,我们有了很多模型,但是有时候我们需要这些模型对应的缩略图,比如我有很多物品,我想弄个仓库,有2种方式,要么,弄个仓库场景,一个物体一个格子摆放第二种,就是为每个物体制作一个缩略图 如果一 ...

  4. Appweb交叉编译

    Appweb交叉编译 编译环境:ubuntu-12.04 x64 开发平台:Hi3535 arm版 编译版本:appweb-6.1.1.zip 下载地址=> Appweb web site: h ...

  5. 快速上手Linux核心命令(九):文件备份与压缩

    目录 tar 打包备份 gzip 压缩或解压文件 zip 打包和压缩文件 unzip 解压zip文件 scp 远程文件复制 rsync 文件同步工具 这期呢主要说一说Linux中文件备份与压缩命令,一 ...

  6. 聊一聊 Valgrind 监视非托管内存泄露和崩溃

    一:背景 1. 讲故事 只要是程序总会出现各种莫名其妙的问题,比如:非托管内存泄露,程序崩溃,在 Windows 平台上一般用微软自家的官方工具 App Verifier 就可以洞察,那问题出在 Li ...

  7. jdk环境配置已经版本切换

    下载安装jdk到电脑盘,两个版本要下载到一个盘里面下安装好后右击我的电脑 找到高级系统设置,点开环境变量 新建环境变量 总计环境变量一共添加四个其中 java8和java11是是选择文件路径 JAVA ...

  8. 收藏!最全Linux思维导图

    收藏!最全Linux思维导图 目录 收藏!最全Linux思维导图 1. 认识 Linux 2. Linux 命令 3. Linux学习路径 4. Linux 桌面介绍 5. FHS:文件系统目录标准 ...

  9. 基于ORB-SLAM3库搭建SLAM系统

    参考资料 ORB-SLAM3配置及安装教程 ORB-SLAM3配置安装及运行 环境配置 Win 11pro VMware 17Pro Ubuntu 18.04 Eigen3 Pangolin Open ...

  10. 2021-10-31:移动零。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]。输出: [1,3,12,0,0]。说

    2021-10-31:移动零.给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序.示例:输入: [0,1,0,3,12].输出: [1,3,12,0,0].说 ...