前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[高大上的DL]经典网络模型总结之AlexNet篇

[高大上的DL]经典网络模型总结之AlexNet篇

作者头像
用户1622570
发布2018-04-11 15:36:29
1.4K0
发布2018-04-11 15:36:29
举报

为了不让大家以为我这两天没学习的假象(shi shi),决定今天一定要更新一下了!

之前基本把卷积神经网络的内容过了一遍,还差一点就是网络层的介绍,后来我想了一下,不如和经典的卷积神经网络放在一起,因为这些经典的网络,因为应用了一些比较好的思想而取得state-of-the-art(当前最好)的效果。所以放在一起可以更好的理解吧。今天简单说一下著名的AlexNet,当然总结的目的不是说可以代替大家看论文,只是把我当时看的时候,不明白的地方说一下。还有就是AlexNet可以给我们的启发,以后可以借鉴的地方。

首先要搞清楚例如LeNet,VGG,AlexNet,GoogLeNet,ResNet等,这些是什么东西?和之前讲的CNN有什么关系?这些模型主要是为了解决图片分类的问题,区别在于模型的结构不同,他们都是基于CNN的,其中LeNet是最早提出来的(when,who可以去了解一下)。下面开始AlexNet,直接看模型结构。

图1:AlexNet(简单标一下号,方便描述)

这是一张论文里面的图,学习AlexNet都会见到的一张图。首先我想说一下,这张图里面有一个小小的bug(在我看来),就是这张图并不完整,他上面还有一部分没画出来!!!你知道这是什么问题吗,这个问题困扰了我很久,每次看都看不懂,后来发现上面确实只画了1/2,但是一直没人告诉我啊(囧)。AlexNet的作者是Alex Krizhevsky,就是以作者的名字命名的。

接下来,我们从左到右解释一下,首先是一个224x224x3大小的图片,3代表通道。然后有2个大小为11x11的卷积核,为什么是2个?因为AlexNet是12年提出来的,那时候没有像现在这么牛的NVIDIA的GPU,当时用的是580吧,现在都已经1080了,对吧。所以呢机智的作者就把模型分到了2个GPU上进行训练。他们每一个的过程其实是一样的,只不多分为两个GPU上,可以加速模型训练的过程。要知道当时AlexNet用的数据是百万级的ImageNet数据集,有1000个类别。如果没有好的GPU,训练过程是很困难的,还有要说的是,那时候还没有TensorFlow这样可以省去写很多底层的框架!恩,我就是想说,作者很厉害,很厉害!由于Alex开创性的贡献,现在有很多人使用好几个GPU做并行运算,为什么可以这样做?了解一点,是因为现在NVIDIA的GPU都支持交互计算(细节我也不清楚)。

然后看一下stride of 4,是什么意思。Stride也叫做步长,他表示两个卷积核中心点的距离。就是第一个卷积核起始的位置与下一个卷积起始的位置相隔4个像素点,挺好理解的,理解不了,可以自己画个图。做完卷积之后得到了一个55x55x48大小的图,注意48代表通道,这里也就是feature map的数量。如果加了stride之后,怎么知道卷积之后图片的大小是多少呢?这里是有公式的,这个公式我开始学的时候并不知道。

其中W2,H2代表卷积之后图片的长和宽,同理W1,H1。P代表Padding的数量,Padding一般是ZeroPadding,简单说就是给图像的最外层补P圈0,P等于几就补几圈。这样做的好处之一是,可以增强图像边缘的特征的提取。S代表Stride的数目,就是卷积的步长,F就是卷积核的大小。但是我按照这个公式算,并不能算对……,后面我把这里搞明白了再告诉大家,谁知道可以给我说下哈。然后由2到3是先做了卷积然后做max pooling,同理3到4,这里要注意卷积核大小的变化,一直到5到6的时候卷积核是3x3的。6到7,7到8,8到9是三个全连接层,模型结构基本就是这样的了。

接下说一下AlexNet比较重要的几个地方。AlexNet有几个创造性的地方,包括使用Relu激活函数、多个GPU并行、Local Response Normalization、Data Augmentation以及防止过拟合的Dropout。

1. Dropout

Dropout之前没有提到过,今天主要介绍一下这个。神经网络之所以在深度学习之前没有发展起来的一个重要原因就是很容易过拟合,而Dropout是一种避免过拟合的神器!Dropout的想法很简单,就是在每次训练的时候,以一定的概率(一般取0.2,0.25,0.3)断开一部分神经元的连接,见下图。既然神经元断开了,那么就意味着网络的weights不再更新。然后按照断开之后的神经元的链接方式继续向前传播,利用输出的损失反向传播来更新参数。等到下一次再向前传播的时候,又会随机断开一定比例的神经元,注意这里断开的不一定是上次一断开的神经元,所以上一次断开的神经元的参数又可以继续更新。这样不断的重复这个过程,就可以有效防止过拟合。

图2: Dropout(来源网络)

2. ReLu激活函数

这个函数在当时来看是十分先进的,但是现在已经在很普遍的使用了,还出现了对他的改进版,Leaky Relu,所以这里只要了解一下,知道AlexNet使用了这个函数即可。这里想说的是,要作为激活函数,必须是可微分的,比如sigmoid,tanh,relu等都是存在导函数的。

其他几个点可以看论文去了解一下,我觉得不是十分重要(I want to go to bed…),就不说了哈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档