由浅入深经典神经网络 ALexNet

1.简介

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。 这对于传统的机器学习分类算法而言,已经相当的出色。AlexNet有60 million个参数和65000个神经元。在新时代的深度学习中,充当了开路先锋一般的角色。AlexNet率先使用(不是提出)了很多经典的东西,比如ReLU、dropout、数据增强等。

2.论文结构

AlexNet论文:ImageNet Classification with Deep Convolutional Neural Networks
论文很短小精干,有时间读下,不会花多少时间。

  • Abstruct:简单介绍了ALexnet的结构,贡献及取得的成果
  • Introduction:神经网络在有了算力更好的GPU与更大的数据集合会取得更好的成果。
  • The Dataset:ILSVRC与imagenet数据集合介绍
  • The Architecture:Relu, 两个GPU训练,LRN(old,被抛弃), Overlapping poling(old),网络整体结构
  • Reducing Overfitting:主要介绍防过拟合技术,数据增强dropout
  • Details of learning:网络的超参数设置,权重及偏置的初始化
  • Results:详细介绍了AlexNet网络在比赛中取得的结果
  • Qualitative Evaluations:展示了卷积核学习到的内容,同一类的图像特征的欧式距离更近
  • Discussion:结论说明神经网络可以很好的完成图像分类的任务

3.网络解析

3.1AlexNet网络结构图

AlexNet网络结构AlexNet论文上的网络图片可能不太好看,为了利用GPU的计算加成,AlexNet将一个网络分为上下两个部分,分别对应两个GPU,后面在合并,以此加速网络的计算,但随着GPU能力的增加,现在AlexNet大可不必使用这种方式,而且网络多GPU运行TensorFlow或者PyTorch都提供了更好的方法。所以,这里咱们完成可以抛去其中一个网络(保留网络的通道和参数*2,除了后面FC层),可以参考下面的图。

云栖社区的图片
上面的图片来自云栖社区,可以看到上面对每个层卷积核的尺寸、步进、计算方式都有更详尽的描述,这里说一下,softmax之前的全连接层,也称为logits, 是网络最终输出的所有特征。

3.2特点

3.2.1 非线性单元Relu

ReLU(Rectified Linear Units)公式
f ( x ) = max ⁡ ( 0 , 1 ) f(x)=\max(0,1) f(x)=max(0,1)
tanh公式
tanh ⁡ ( x ) = sinh ⁡ x cosh ⁡ x = e x − e − x e x + e − x \tanh(x)=\tfrac{\sinh x}{\cosh x}=\tfrac{e^x-e^-x}{e^x+e^-x} tanh(x)=coshxsinhx=ex+exexex
sigmoid公式
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^-x} f(x)=1+ex1
可以发现ReLU公式非常简单,那么为什么可以比 tanh ⁡ \tanh tanh或者 s i g m o i d sigmoid sigmoid更好呢?
原因如下:

  1. 可以使网络训练更快
    相比于tanh, sigmoid而言,relu的导数更好求导,方向传播会涉及到激活函数的求导,tanh, sigmoid包含指数且表达式复杂,他们的函数的导数求取慢一些。
  2. 增加网络的非线性
    relu作为非线性函数,加入到神经网络中可以使网络拟合非线性的映射,增加网络的非线性
  3. 防止梯度消失
    当数值过大或者过小时,sigmoid, tanh导数接近0, 会导致方向传播时梯度消失的问题,relu为非饱和激活函数不存在此问题
  4. 使网络具有稀疏性
    可以使一些神经元输出为0,可以增加网络的稀疏性
    ReLU和tanh比较上图是使用ReLUs和tanh作为激活函数的典型四层网络的在数据集CIFAR-10s实验中,error rate收敛到0.25时的收敛曲线,可以很明显的看到收敛速度的差距。虚线为tanh,实线是ReLUs。

3.2.2 Local Response Normalization(局部响应归一化)

在神经网络中,我们用激活函数将神经元的输出做一个非线性映射,但是tanh和sigmoid这些传统的激活函数的值域都是有范围的,但是ReLU激活函数得到的值域没有一个区间,可以在 [ 0 , ∞ ] \lbrack 0,\infty \rbrack [0,],所以要对ReLU得到的结果进行归一化。简单理解,就是将利用当前第 i i i个kernel的相邻 n − 1 n-1 n1个kernel对应 ( x , y ) (x,y) (x,y) 的值来做归一化。
但是,LRN后面并接触不到(VGG中有做解释,实际上并没有多大作用),扩展下眼界就好,如果理解不了也不用深钻。

3.2.3 Overlapping Pooling

其实就是设置池化的时候,设置 s t r i p < p o o l s i z e strip<pool size strip<poolsize,假如设置一个池化层尺寸为3*3,stride步长为2,那么在池化过程,提取特征的时候就会有重叠部分,更多的保留特征。在top-1,和top-5中使用覆盖的池化操作分别将error rate降低了0.4%和0.3%,论文中,在训练模型过程中,覆盖的池化层更不容易过拟合。

3.2.4 减少过拟合 Reducing Overfitting

Data Augmentation图像增强
  1. 随机地从 256 × 256 256\times256 256×256的原始图像中截取 224 × 224 224\times224 224×224大小的区域(以及水平翻转的镜像),相当于增加了 2 × ( 256 − 224 ) 2 = 2048 2\times(256-224)^2=2048 2×(256224)2=2048倍的数据量。大大减轻过拟合,提升泛化能力。
  2. 进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。
  3. AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%
Dropout层

作用:每次随机将一定比例的神经元置0,可以有效的防止过拟合,很多网络都会使用。
在这里插入图片描述

3.2.5 总结

在这里插入图片描述

3.3 网络参数

Alexnet网络总共的层数为8层,5层卷积,3层全连接层。
另外还有3个Max Pooling(前2个+全连接前1个), 2个局部归一化层LRN(前2个conv有)。
每个卷积层后面都跟着一个ReLU激活函数。
参数图

3.3.1 卷积核输出计算

公式

宽度 w i d e = ( i m a g e _ w i d t h + 2 × p a d d i n g − k e r n e l _ s i z e ) / s t r i d e + 1 wide = (image\_width+ 2\times{padding} - kernel\_size) / stride + 1 wide=(image_width+2×paddingkernel_size)/stride+1
高度 h e i g h t = ( i m a g e _ h e i g h t + 2 × p a d d i n g − k e r n e l _ s i z e ) / s t r i d e + 1 height = (image\_height+ 2\times{padding} - kernel\_size) / stride + 1 height=(image_height+2×paddingkern

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值