AlexNet网络结构:
AlexNet有5个卷积层,其中3个卷积层后面连接最大池化层,最后3个全连接层。
AlexNet对于LeNet包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU,Dropout,LRN等技巧:
(1)使用ReLU作为激活函数,解决了sigmoid在网络较深时的梯度弥散(梯度消失)问题。
(2)训练时在全连接层使用了Dropout,随机忽略一部分神经元以避免过拟合。
(3)使用数据增强后大大减轻了过拟合,提升了模型的泛化性能。
(4)提出了LRN层,对局部神经元的活动创建了竞争机制,使得其中响应比较大的值响应更大,并抑制其他反馈比较小的神经元,增强了模型的泛化性能。
(5)全部使用最大池化,避免了平均池化的模糊化处理。步长比池化核小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
重点讲一下LRN:
LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似Dropout,作为ReLU激励输出后防止数据过拟合的一种方法。
Tensorflow官方文档API如下:
sqr_sum[a, b, c, d] = sum(input[a,b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias +alpha * sqr_sum) ** beta
[a,b,c,d]表示[图片上传失败...(image-64d9ee-1582818726298)] ,可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第a张图的第d个通道下的高度为b宽度为c的点。a,n/2,k,α,β分别表示函数中的input,depth_radius,bias,alpha,beta其中n/2,k,α,β都是自定义的,特别注意一下∑叠加的方向是沿着通道方向的,即每个点值的平方和是沿着a中的第3维channel方向的,也就是一个点同方向的前面n/2个通道(最小为第0个通道)和后n/2个通道(最大为第d-1个通道)的点的平方和(共n+1个点)。而函数的英文注解中也说明了把input当成是d个3维的矩阵,说白了就是把input的通道数当作3维矩阵的个数,叠加的方向也是在通道方向。