本文转自红黑联盟https://www.2cto.com/kf/201608/533035.html

1LeNet-5

1.1局限性

早在1989年,Yann LeCun (现纽约大学教授)和他的同事们就发表了卷积神经网络(Convolution NeuralNetworks, 简称CNN)的工作。在很长时间里,CNN虽然在小规模的问题上,如手写数字,取得过当时世界最好结果,但一直没有取得巨大成功。这主要原因是,CNN在大规模图像上效果不好,比如像素很多的自然图片内容理解,所以没有得到计算机视觉领域的足够重视。

这个惊人的结果为什么在之前没有发生? 原因当然包括算法的提升,比如dropout等防止过拟合技术,但最重要的是,GPU带来的计算能力提升和更多的训练数据。

1.2理解

(1)为什么F6神经元是84维 ?

原文是用于手写字识别,手写字范围为0-9共有10个字符,因此输出OUTPUT层的节点共10个,可以把每个字符格式化为12*7的图像,如上图,共有84个像元,像元的参数成分(即像素值)可以设为1和-1,此时C5到F6是通过sigmod函数计算的,因此F6节点的值范围为-1到1,因此可以根据F6节点的值和格式化图像(参数向量)的值距离,来判断输入图像的类别,即通过径向基函数:

输入离参数向量越远,RBF输出的越大。

所有训练参数和连接个数:

2AlexNet

本深度学习网络是Alex和Hinton参加ILSVRC2012比赛的卷积网络论文,本网络结构也是开启ImageNet数据集更大,更深CNN的开山之作,本文对CNN的一些改进成为以后CNN网络通用的结构;在一些报告中被称为Alex-net,之后在Imagenet上取得更好结果的ZF-net,SPP-net,VGG等网络,都是在其基础上修改得到。

原论文:ImageNet Classification with Deep ConvolutionalNeural Networks

2.1结构介绍

2.1.1ReLU非线性

模拟神经元输出的标准函数一般是:tanh(x)或者sigmoid(x)函数,由于此类函数在x非常大或者非常小时,函数输出基本不变,所以此类函数成为饱和函数;f(x)=max(0,x),扭曲线性函数,是一种非线性的非饱和函数。在训练时间上,非饱和函数比饱和函数训练更快。而且这种扭曲线性函数,不但保留了非线性的表达能力,而且由于其具有线性性质(正值部分),相比tanh和sigmoid函数在误差反向传递时,不会有由于非线性引起的梯度弥散形象(顶层误差较大,由于逐层递减误差传递,引起低层误差很小,导致深度网络地层权值更新量很小,导致深度网络局部最优)。ReLU的这些性质可以让我们训练更深的网络。

ReLu相关知识:http://www.mamicode.com/info-detail-873243.html

2.1.2在多个GPU上训练

单个GTX 580 GPU只有3GB内存,这限制了可以在其上训练的网络的最大规模。事实证明,120万个训练样本才足以训练网络,这网络太大了,不适合在一个GPU上训练。因此我们将网络分布在两个GPU上。目前的GPU特别适合跨GPU并行化,因为它们能够直接从另一个GPU的内存中读出和写入,不需要通过主机内存。我们采用的并行方案基本上是在每个GPU中放置一半核(或神经元),还有一个额外的技巧:GPU间的通讯只在某些层进行。这就是说,例如,第3层的核需要从第2层中所有核映射输入。然而,第4层的核只需要从第3层中位于同一GPU的那些核映射输入。选择连接模式是一个交叉验证的问题,但是这让我们可以精确地调整通信量,直到它的计算量在可接受的部分。

2.1.3局部响应归一化

ReLU具有所希望的特性,它们不需要输入归一化来防止它们达到饱和。如果至少有一些训练样例对ReLU产生了正输入,学习就将发生在那个神经元。可是,我们仍然发现下列局部归一化方案有助于一般化。用表示点处通过应用核 计算出的神经元激活度,然后应用ReLU非线性,响应归一化活性由下式给出

其中求和覆盖了n个“相邻的”位于相同空间位置的核映射,N是该层中的核总数。核映射的顺序当然是任意的,且在训练开始前就确定。受到在真实神经元中发现的类型启发,这种响应归一化实现了一种侧向抑制,在使用不同核计算神经元输出的过程中创造对大激活度的竞争。常数k,n,α和β是超参数,它们的值要用验证集来确定;我们使用。我们在某些层应用ReLU归一化后再应用这种归一化(见3.5节)。
该方案与Jarrett等人的局部对比度归一化方案具有一些相似之处[11],但我们的方案更正确的命名为“亮度归一化”,因为我们不减去平均活跃度。响应归一化将我们的top-1与top-5误差率分别减少了1.4%与1.2%。我们也验证了该方案在CIFAR-10数据集上的有效性:四层CNN不带归一化时的测试误差率是13%,带归一化时是11%。

2.1.4重叠Pooling

CNN中的Pooling层总结了同一核映射中邻近神经元组的输出。传统上,通过邻接pooling单元总结的邻近关系不重叠(例如,[17,11,4])。更准确地说,一个pooling层可以被认为是由间隔s像素的pooling单元网格组成,每个网格总结出一个z×z大小的邻近关系,都位于pooling单元的中心位置。若设s=z,我们得到传统的局部pooling,正如常用于CNN中的那样。若设s<z,则得到有重叠pool。整个网络结构中,s=2,z=3,即pool区域的大小为3*3,间隔为2,即相邻两个pool,会重叠一个像素,这种方法使top-1和top-5错误率分别减少0.4%和0.3%,与s=2,z=2相比,它们池化结果有相同的维度,并且重叠pool在训练过程中不容易产生过拟合。< p="">

2.1.5减少过拟合

我们的神经网络结构有6000万个参数。虽然ILSVRC的1000个类别,使得每个训练样本在图像到标签的映射上强加了10比特约束,事实上学习如此多的参数而不带相当大的过拟合,这些类别是不够的。下面,我们描述减少过拟合的两种主要方法。

<1>数据扩充

对于图像数据来说,减少过拟合问题,最早使用的同时也是最常用的方法就是,在保持数据标签不变的情况下增大数据集。这里我们使用了两种不同的方法,它们都只需要很少的计算量,因此变换后的图像并不需要存储在硬盘中,而只需要存放在内存中即可。在我们的实现中,转换图像是由CPU上的Python代码生成的,与此同时,在GPU上训练先前产生的图像,因此这些数据扩展方案是计算自由的。

(1)图像平移和翻转

我们从256×256的图像中提取随机的224×224的碎片(还有它们的水平反射),并在这些提取的碎片上训练我们的网络(这就是图2中输入图像是224×224×3维的原因)。这使得我们的训练集规模扩大了2048倍(32*32*2=2048),但是由此产生的训练样例一定高度地相互依赖。如果没有这个方案,我们的网络会有大量的过拟合,这将迫使我们使用小得多的网络。在测试时,该网络通过提取五个224×224的碎片(四个边角碎片和中心碎片)连同它们的水平反射(因此总共是十个碎片)做出了预测,并在这十个碎片上来平均该网络的softmax层做出的预测。

(2)调整RGB像素值

具体来说,我们在遍及整个ImageNet训练集的RGB像素值集合中执行PCA。对于每个训练图像,我们成倍增加已有主成分,比例大小为对应特征值乘以一个从均值为0,标准差为0.1的高斯分布中提取的随机变量。这样一来,对于每个RGB图像像素,我们增加下面这项:

其中分别是RGB像素值的3×3协方差矩阵的第i个特征向量与特征值,是前面提到的随机变量。每个对于特定训练图像的全部像素只提取一次,直到那个图像再次被用于训练,在那时它被重新提取。这个方案大致抓住了自然图像的一个重要属性,即,光照强度与颜色是变化的,而对象识别是不变的。该方案将top-1误差率减少了1%以上。

<2>Dropout

结合许多不同模型的预测是一种非常成功的减少测试误差的方式[1,3],但它先前训练花了好几天时间,似乎对于大型神经网络来说太过昂贵。然而,有一个非常有效的模型组合版本,它在训练中只花费两倍于单模型的时间。最近推出的叫做“dropout”的技术[10],它做的就是以0.5的概率将每个隐层神经元的输出设置为零。以这种方式“dropped out”的神经元既不参与前向传播,也不参与反向传播。所以每次提出一个输入,该神经网络就尝试一个不同的结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。正因如此,要被迫学习更为鲁棒的特征,这些特征在结合其他神经元的一些不同随机子集时有用。在测试时,我们将所有神经元的输出都仅仅只乘以0.5,对于获取指数级dropout网络产生的预测分布的几何平均值,这是一个合理的近似方法。
前两个全连接层使用dropout。如果没有dropout,我们的网络会表现出大量的过拟合。dropout使收敛所需的迭代次数大致增加了一倍。

理解:每次选择一半的节点进行连接构成网络,只在被选中参与连接的节点上进行正向和反向传播,如下图,左侧是全连接形式,右边是一半节点构成的网络:

为什么有助于防止过拟合呢?可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

Dropout相关知识:http://www.mamicode.com/info-detail-517504.html

2.2总体结构

2.2.1总体介绍

该网络包括八个带权层;前五层是卷积层,剩下三层是全连接层。最后一个全连接层的输出被送到一个1000-way的softmax层,其产生一个覆盖1000类标签的分布。我们的网络使得多分类的Logistic回归目标最大化,这相当于最大化了预测分布下训练样本中正确标签的对数概率平均值。

第二、第四和第五个卷积层的核只连接到前一个卷积层也位于同一GPU中的那些核映射上(见图2)。第三个卷积层的核被连接到第二个卷积层中的所有核映射上。全连接层中的神经元被连接到前一层中所有的神经元上。响应归一化层跟在第一、第二个卷积层后面。最大Pooling层,跟在响应归一化层以及第五个卷积层之后。ReLU非线性应用于每个卷积层及全连接层的输出。
第一个卷积层利用96个大小为11×11×3、步长为4个像素(这是同一核映射中邻近神经元的感受野中心之间的距离)的核,来对大小为224×224×3的输入图像进行滤波。第二个卷积层需要将第一个卷积层的(响应归一化及池化的)输出作为自己的输入,且利用256个大小为5×5×48的核对其进行滤波(注:48对应第一层得到的48个map,即第一层的所有map卷积生成第二层的一个map图)。第三、第四和第五个卷积层彼此相连,没有任何介于中间的pooling层与归一化层。第三个卷积层有384个大小为3×3×256的核被连接到第二个卷积层的(归一化的、池化的)输出。第四个卷积层拥有384个大小为3×3×192的核,第五个卷积层拥有256个大小为3×3×192的核。全连接层都各有4096个神经元。

2.2.2各层运算、维度和参数

2.3学习过程

我们使用随机梯度下降法和一批大小为128、动力为0.9、权重衰减为0.0005的样例来训练我们的网络。我们发现,这少量的权重衰减对于模型学习是重要的。换句话说,这里的权重衰减不仅仅是一个正则化矩阵:它减少了模型的训练误差。对于权重w的更新规则为

其中i是迭代指数,v是动力变量,ε是学习率,是目标关于w、对求值的导数在第i批样例上的平均值。
我们用一个均值为0、标准差为0.01的高斯分布初始化了每一层的权重。我们用常数1初始化了第二、第四和第五个卷积层以及全连接隐层的神经元偏差。该初始化通过提供带正输入的ReLU来加速学习的初级阶段。我们在其余层用常数0初始化神经元偏差。
对于所有层都使用了相等的学习率,这是在整个训练过程中手动调整的。我们遵循的启发式是,当验证误差率在当前学习率下不再提高时,就将学习率除以10。学习率初始化为0.01,在终止前降低三次。作者训练该网络时大致将这120万张图像的训练集循环了90次,在两个NVIDIA GTX 580 3GB GPU上花了五到六天。

AlexNet网络介绍相关推荐

  1. AlexNet网络具体介绍

    AlexNet网络 1.AlexNet 网络的创新点 1.1.使用了ReLU作为激活函数 1.2 LRN(局部相应归一化) 1.3 Dropout 1.4使用了重叠池化层 1.5 并行使用了多GPU训 ...

  2. TorchVision中通过AlexNet网络进行图像分类

    TorchVision中给出了AlexNet的pretrained模型,模型存放位置为https://download.pytorch.org/models/alexnet-owt-4df8aa71. ...

  3. AlexNet 网络详解及Tensorflow实现源码

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 图片数据处理 2. 卷积神经网络 2.1. 卷积层 2.2. 池化层 2.3. 全链层 3. AlexNet 4. 用Tensorflow搭 ...

  4. Pytorch:使用Alexnet网络实现CIFAR10分类

    全部代码: https://github.com/SPECTRELWF/pytorch-cnn-study 网络介绍: Alexnet网络是CV领域最经典的网络结构之一了,在2012年横空出世,并在当 ...

  5. 深度学习入门笔记之ALexNet网络

    Alex提出的alexnet网络结构模型,在imagenet2012图像分类challenge上赢得了冠军.作者训练alexnet网络时大致将120万张图像的训练集循环了90次,在两个NVIDIA G ...

  6. 卷积神经网络之AlexNet网络详解

    一  介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC-2010比赛中120万张高分辨率的图像分为1000个不同的类别.在测试卷上,获得很高准确率 ...

  7. AlexNet网络构建与训练

    2012年AlexNet横空出世,正式将深度学习推向高潮.如今10年过去,整个深度学习生态已经发展到非常庞大.这里使用pytorch进行AlexNet网络实现及在图像分类任务上的训练过程. AlexN ...

  8. 深度学习之基于Tensorflow2.0实现AlexNet网络

    在之前的实验中,一直是自己搭建或者是迁移学习进行物体识别,但是没有对某一个网络进行详细的研究,正好人工智能课需要按组上去展示成果,借此机会实现一下比较经典的网络,为以后的研究学习打下基础.本次基于Te ...

  9. 一个深度学习痴呆选手对AlexNet网络架构的一些理解

    最近开始入坑深度学习,之前根本没接触过关于AI领域的知识,也就对着B站上的CS231N课水了水,但完全就是半懂不懂很懵逼的感觉,毕竟神经网络就类似于一个黑箱,难以理解也是很正常的.现在打算写一篇关于极 ...

最新文章

  1. 单独写原则Single Writer Principle
  2. 回顾国产手机4年沉浮,仍然只是靠这三招翻身
  3. openssl数字证书常见格式与协议介绍
  4. java动态删除属性值_JavaBean动态添加删除属性
  5. python判断回文_Python实现判断一个整数是否为回文数算法示例
  6. c语言源码转流程图,C语言算法第5章源代码以及流程图.doc
  7. CentOS6.x安装方法超详细教程
  8. php汽车租赁网站_ThinkPHP实战开发汽车租赁网站项目教程
  9. 用户画像第四章(企业级360°用户画像_标签开发_挖掘标签_用户购物性别模型-USG)
  10. python怎么清理垃圾和缓存_怎么才能正确清理电脑的缓存垃圾?
  11. s32k144 isystem linux,S32K144之时钟配置
  12. 枚举,随机数模型,函数功能分解---扔骰子随机数游戏
  13. 十年SEO风云巨变,还有多少站长在坚持
  14. Java---->强烈安利0_0详解注解和反射机制
  15. MES上线的实施流程
  16. C#鼠标单双击事件区分
  17. Windows系统启动MongoDB本地可以访问,远程连接不上问题
  18. 差热传导方程的分解法c语言,热传导方程差分解法的最佳网格_李先枝
  19. 2W字剖析数据治理平台建设经验(建议收藏)
  20. 专插本计算机专业报考人数,2019年专插本各专业报考录取人数、录取分数及平均分统计 (五)...

热门文章

  1. 闲聊JavaScript
  2. 第13期微生物组-宏基因组分析(线上/线下同时开课,2021.11)
  3. golang协程goroutine
  4. c语言中swap的意思,C语言中swap的作用和用法?
  5. Cardano(ADA), EOS, RChain(RHOC), Aeternity(AE) 都是极其好的币
  6. #{}和¥{}的区别
  7. 水星usb无线网卡MW150US驱动 for Mac
  8. 世纪佳缘发布婚恋观报告 “90”后和高学历人群更焦虑
  9. uboot引导vxworks6.9(T4240) 启动
  10. JavaWeb页面创作(一)——一个好看的登录界面