AlexNet论文笔记


image

【1】AlexNet介绍

AlexNet由Alex Krizhevsky于2012年提出,夺得2012年ILSVRC比赛的冠军,top5预测的错误率为16.4%,远超之前的第一名。此后,更多的更深的神经网路被提出,引爆了深度学习研究的热潮。


image

AlexNet网络结构

AlexNet采用8层的神经网络,包含6亿3000万个链接,6000万个参数和65万个神经元,并且花了五到六天的时间,在两个GTX580型号的GPU上来训练完成。

【2】网络结构详解

AlexNet采用8层的神经网络,5个卷积层和3个全连接层。其中第2、4、5层只以单个GPU中的feature map作为输入,其他层将两个GPU中同一层次的feature map叠加起来作为输入。在第1、2层卷积之后分别添加了所谓的LRN层(文章后面有介绍),然后是max pooling层。在第5层卷积之后添加了max pooling层。第6、7层为全连接层,其后分别添加了概率为0.5的Dropout层。

下面代码为网络结构的Pytorch实现(未包含LRN层):

 1class Net(torch.nn.Module):
 2    def __init__(self):
 3        super(Net, self).__init__()
 4        self.conv1 = torch.nn.Sequential(
 5            torch.nn.Conv2d(3, 96, 11, 4, 0),
 6            torch.nn.ReLU(),
 7            torch.nn.MaxPool2d(3,2)
 8        )
 9        self.conv2 = torch.nn.Sequential(
10            torch.nn.Conv2d(96, 256, 5, 1, 2),
11            torch.nn.ReLU(),
12            torch.nn.MaxPool2d(3,2)
13        )
14        self.conv3 = torch.nn.Sequential(
15            torch.nn.Conv2d(256,384, 3, 1, 1),
16            torch.nn.ReLU(),
17        )
18        self.conv4 = torch.nn.Sequential(
19            torch.nn.Conv2d(384,384, 3, 1, 1),
20            torch.nn.ReLU(),
21        )
22        self.conv5 = torch.nn.Sequential(
23            torch.nn.Conv2d(384,256, 3, 1, 1),
24            torch.nn.ReLU(),
25            torch.nn.MaxPool2d(3,2)
26        )
27        self.dense = torch.nn.Sequential(
28            torch.nn.Linear(9216, 4096),
29            torch.nn.ReLU(),
30            torch.nn.Dropout(0.5),
31            torch.nn.Linear(4096, 4096),
32            torch.nn.ReLU(),
33            torch.nn.Dropout(0.5),
34            torch.nn.Linear(4096, 1000)
35        )
36
37    def forward(self, x):
38        conv1_out = self.conv1(x)
39        conv2_out = self.conv2(conv1_out)
40        conv3_out = self.conv3(conv2_out)
41        conv4_out = self.conv4(conv3_out)
42        conv5_out = self.conv5(conv4_out)
43        res = conv5_out.view(conv5_out.size(0), -1)
44        out = self.dense(res)
45        return out

【3】AlexNet的特点

AlexNet取得比较好的效果离不开如下的特点:

1、使用ReLU激活函数。ReLU函数的定义如下:


image

Sigmoid激活函数定义为:


image

tanh激活函数定义为:


image

由于Sigmoid函数和tanh函数中包含指数函数,因此正向传播过程中的求值与反向传播过程中求梯度计算比较复杂,而ReLU激活函数的显然更简单。因此在训练过程中可以显著提高速度。另外,当|x|的值离原点较远时,Sigmoid函数与tanh函数的梯度接近于0,因此会出现梯度弥散的问题。而ReLU函数可以很好地避免这个问题。

2、局部响应归一化****(Local Response Normalization)。LRN的作用是对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。LRN主要是借鉴神经生物学中的侧抑制(lateral inhibito)概念,指的是被激活的神经元抑制与之相邻的神经元。当使用ReLU激活函数时,这种抑制作用很有效。

LRN的计算公式如下:


image

其中,

image

是归一化后的值,i是通道的位置,代表更新第几个通道的值,x与y代表待更新像素的位置。

image

是激活函数ReLU的输出值,k、alpha、beta、n/2 都是自定义系数。

3、重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

4、使用Dropout。在第6、7层全连接层使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。

5、其他特点。将256256随机裁剪为224224大小,从而达到数据增强的效果。使用带动量的梯度下降优化算法,batch size设定为128。

以上就是AlexNet论文中涉及的主要内容,希望对大家能够有所帮助。以后将继续发布其他有关论文的笔记。

https://www.jianshu.com/p/291510de643e

Python量化投资网携手4326手游为资深游戏玩家推荐:《追梦指南!《天下》手游90级全职业各流派攻略(下)前排预订!

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论