AlexNet模型详解及代码实现
一、 背景
AlexNet是在2012年由Alex Krizhevsky等人提出的,该网络在ImageNet大赛上夺得了冠军,并且错误率比第二名高了很多。
论文地址:ImageNet Classification with Deep Convolutional Neural Networks
AlexNet论文中的亮点:
- 使用ReLU激活函数加速收敛
- 使用两个 GPU 并行,加速训练。
- 提出局部响应归一化(Local Response Normalization, LRN)增加泛化特性
- 使用了重叠池化(Overlapping Pooling)避免过拟合。
- 使用Dropout机制和数据增强策略减少过拟合
1. ReLU非线性
激活函数一般采用tanh
或者sigmoid
,但是tanh
和sigmoid
都是饱和激活函数,考虑到梯度下降的训练时间问题,所以引入了修正线性单元(ReLU)作为激活函数,即: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x),其不存在饱和区,导数始终为1,梯度更大,计算量也更少,训练时间也越快。
tanh(虚线)与ReLU(实线)的收敛速度对比如下图所示:
补充: 饱和非线性和非饱和非线性
- 饱和非线性
饱和的激活函数会将输出结果缩放到有限的区间,例如:
tanh激活函数为 f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x的范围是[-1,1],所以它是饱和的。
sigmoid激活函数为 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1,它的范围是[0,1],所以它是饱和的。
- 非饱和非线性
非饱和的激活函数会将输出结果缩放到无穷区间。即: ( ∣ lim z → − ∞ F ( z ) ∣ = + ∞ ) ∨ ( ∣ lim z → + ∞ F ( z ) ∣ = + ∞ (|\lim\limits_{z \rightarrow-\infty}F(z)|=+\infty)∨(|\lim\limits_{z\rightarrow+\infty}F(z)|=+\infty (∣z→−∞limF(z)∣=+∞)∨(∣