AlexNet详解
AlexNet网络是Hinton和他的学生Alex Krizhevsky在2012年ImageNet Challenge中使用的模型结构,其中的技术细节被整理成论文ImageNet Classification with Deep Convolutional Neural Networks发表。作为深度学习历史上大获成功的经典网络,其中有很多思想值得我们借鉴学习,此篇文章将深入分析论文主要内容。
AlexNet整体结构
网络结构如上图所示,共有5个卷积层,3个最大池化层,3个全连接层。如今去看,网络并不能算深,毕竟ResNet网络已经可以达到上百层,但是在当时,实际上用了两块GPU训练网络。接下来将详细介绍其中的具体细节。
参数计算
卷积层输出尺寸计算:
$$
O=(I-K+2P)/S+1
$$
其中I为输入尺寸,O为输出尺寸,K为卷积核尺寸,P为填充数,S为步长。
池化层输出尺寸计算:
$$
O=(I-K)/S+1
$$
其中I为输入尺寸,O为输出尺寸,K为池化尺寸,S为步长。
网络中参数及神经元个数计算如上图所示,参数与原文中的60million相符,但是神经元个数与原文中的650000神经元个数不符,望大家指正。
激活函数
网络中使用的激活函数为Relu,这是一种非饱和激活函数,其公式如下:
$$
f(x)=max(0,x)
$$
在原文中,作者也给出了选择Relu的原因,主要有下面两点:
- 下图是论文中的实验图,从中可以看出,相比于传统的sigmoid和tanh而言,其收敛速度更快。
- 网络与数据集都比较大,使用Relu计算量更小,计算速度更快。
局部响应归一化
原文中作者提到使用局部响应归一化技术(Local Response Normalization, LRN)可以提升网络泛化能力,其公式如下:
$$
b^i_{x,y}=a^i_{x,y}/(k+\alpha\sum_{j=max(0,i-n/2)}^{min(N-1,i+n/2)}(a^j_{x,y})^2)^\beta
$$
其中的求和表示对相同空间位置的n个特征映射求和,N表示当层特征映射的总个数,i代表当前的特征映射。原文中通过一系列验证集实验,确定其中的超参数取值如下:
$$
k=2,n=5,\alpha=10^{-4},\beta=0.75
$$
本质上LRN层相当于对局部神经元的激活值创建竞争机制,抑制反馈小的神经元,放大反馈大的神经元。
重叠池化
原文中提到使用池化时,采用步长s<尺寸k的手段(默认为s=2,k=3),增加了提取特征的丰富度,并通过实验证明了该方法不容易过拟合。
如何避免过拟合
数据增强
原文中使用的数据增强方式主要有两种,一种是平移并水平反射图像,一种是PCA。
Dropout
Dropout是一种常用的避免过拟合的方法,方法使用很简单。在训练阶段,设置一定的概率随机删除某些神经元输出;在测试阶段,则保持所有神经元的正常输出。
但是目前来讲,很少将其用于卷积层中,而更多用于全连接层中。