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. ThreadLocal、进程VS线程、分布式进程

    1.ThreadLocal变量是一个全局变量,每个线程只能读取自己的独立副本,ThreadLocal解决了一个线程中各个函数之间的传递问题 import threading local_school ...

  2. 这样也行,在lambda表达式中优雅的处理checked exception

    目录 简介 lambda表达式中的checked exception lambda中的unchecked exception 对lambda的最终改造 总结 简介 最近发现很多小伙伴还不知道如何在la ...

  3. openwrt开发使用-arping

    前言 IP冲突引起的网络异常,可以通过检查IP是否冲突,排除故障.我们可以用一些工具进行检查,例如arp-scan.arping软件进行查看. 这里使用arping进行检查设备的MAC地址,通过查查看 ...

  4. API 网关日志的价值,你了解多少?

    本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者钱勇,API7.ai 技术工程师,Apache APISIX Committe ...

  5. 天梯赛L1-027 出租

    一.问题描述 下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index ...

  6. Hystrix 如何在不引入 Archaius 的前提下实现动态配置更新

    Hystrix 简介 Hystrix 是 Netflix 开源的一个限流熔断降级组件,防止依赖服务发生错误后,将调用方的服务拖垮.这里对 Hystrix 本身不做过多介绍. Hystrix 目前处于维 ...

  7. [C++基础入门] 1、C++初识

    文章目录 1 C++初识 1.1 第一个C++程序 1.1.1 创建项目 1.1.2 创建文件 1.1.3 编写代码 1.1.4 运行程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1 ...

  8. SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数

      本文介绍基于SPSS软件的经典统计学分析与偏度.峰度等常用统计学指标的计算方法.   首先需要说明,本文所述数据的经典统计学分析,包括计算数据的极值.平均值.中位数.标准差.方差.变异系数.偏度与 ...

  9. iframe分栏拖拽伸缩例子

    这个标题有些绕口,鄙人愚笨,实在找不到一个比较准确的说法,总之就是: 一个页面内显示多个iframe,一个变宽,另一个就变窄,一个变高,另一个就变矮的这种可自由伸缩的效果.它们之间有一个可多拽的分隔条 ...

  10. ASP.NET Response.Filter

    寫 ASP.NET 有時候會想要在畫面輸出前一刻進行攔截,並換掉 html 中的特定字元.例如網站中有許多頁面都有 www.google.com.tw 的超連結,我希望在測試機上可以把連結換成 www ...