您的位置:首页 > 其它

Alex Net(ImageNet Classification with Deep Convolutional Neural Networks)

2018-03-24 21:24 603 查看
Alex Net

目录

Novel Idea
ReLU

Dropout

Data Augmentation

Analyse of the Architecture

Rest Part

参考:

  文章重点解析:【卷积神经网络-进化史】从LeNet到AlexNet

  模型框架分析:神经网络模型之AlexNet的一些总结

  全连接层解释:解释一下全连接层

Novel Idea

ReLU

Dropout

Dataset Augmentation

ReLU

Sigmoid 是常用的非线性激活函数,把输入的连续实值压缩到0和1之间。特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.

但是它有一些致命的缺点:

Sigmoids saturate and kill gradients.

  sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候,会有饱和现象,使神经元的梯度是接近于0。如果初始值很大,梯度在反向传播时因为需要乘上一个sigmoid 的导数,所以会变得越来越小,这会导致网络变的很难学习。

Sigmoid 的 output 不是0均值.

  这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。如果数据进入神经元的时候是正的:x>0elementwiseinf=wTx+b,那么 w 计算出的梯度也会始终都是正的。
  当然,如果是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题可以缓解一下。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多。
ReLU 的数学表达式如下:

f(x)=max(0,x)

很显然,从图左可以看出,输入信号<0时,输出都是0,>0 的情况下,输出等于输入。w 是二维的情况下,使用ReLU之后的效果如下:



Dropout

结合预先训练好的许多不同模型来进行预测,是一种非常成功的减少测试误差的方式。但因为每个模型的训练都需要花好几天时间,因此这种做法不适用于大型神经网络。

AlexNet 提出了一个非常有效的模型组合版本,它在训练中只需要花费两倍于单模型的时间。这种技术叫做Dropout:对每个隐层神经元都以0.5的概率将其输出设置为零。以这种方式“dropped out”的神经元既不参与前向传播,也不参与反向传播。

所以每次输入一个样本,就相当于该神经网络就尝试了一个新的结构,但是所有这些结构之间又共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。

正因如此,网络需要被迫学习更为稳定的特征,这些特征在结合其他神经元的一些不同随机子集时有用。在测试时,将所有神经元的输出都乘以0.5,对于获取指数级dropout网络产生的预测分布的几何平均值,这是一个合理的近似方法。

Data Augmentation

对256*256的原始图像进行随机crop,抽出224*224的块,并翻转

将数据扩大了2048倍(32*32*2,32为256 - 224)

对RGB信道进行扰动

利用PCA得到的矩阵计算出特征值pi与特征向量λi并利用由U(0,0.1)产生的随机值αi进行扰动:Ixy=Ixy+[p1,p2,p3][α1λ1,α2λ2,α3λ3]T

Analyse of the Architecture

文中的架构如下:



附公式:

输入图片大小:W×W

Filter大小:F×F

步长:S

卷积时填充的像素数:P

N=⌊W−F+2PS⌋+1

第一层:

Convolution:第一层图像大小为224*224*3,卷积核大小为11*11*3,数量为96,步长为4,用上述公式计算可得:⌊224−11+2P4⌋+1=55,可以得出在卷积前,对图像进行了填充的预处理,让图像大小变为228*228*3(原博客中为227*227*3,但是padding时对两侧同时增加两列零向量可能更直观)。输出为55*55*48(分为两个GPU)。

ReLU、LRN(正则化)

Max pooling:输入为55*55*48(对其中一个GPU分析),池化层大小为3*3,步长为2,经过处理后得到的图像大小为⌊55−32⌋+1=27,即27*27*48(两个GPU)。

第二层:

Convolution:输入图像大小为27*27*48,卷积核大小为5*5*48,数量为256,步长为1,用上述公式计算可得:⌊27−5+2P1⌋+1=27,可以得出在卷积前,每幅像素层的左右两边和上下两边都要填充2个像素。输出为27*27*128(分为两个GPU)

ReLU、LRN(正则化)

Max pooling:输入为27*27*128(对其中一个GPU分析),池化层大小为3*3,步长为2,经过处理后得到的输出大小为⌊27−32⌋+1=13,即13*13*128(两个GPU)。

第三层:

Convolution:输入图像大小为13*13*128,卷积核大小为3*3*128,数量为384,步长为1,类似前述过程,经过填充(P = 1)用上述公式计算可得:⌊13−3+21⌋+1=13。输出为13*13*192(分为两个GPU)

ReLU、LRN(正则化)

Max pooling:该层没有进行池化,输出图像为13*13*192(两个GPU)

第四层:

Convolution:输入图像大小为13*13*192,卷积核大小为3*3*192,数量为384,步长为1,类似前述过程,经过填充(P = 1)用上述公式计算可得:⌊13−3+21⌋+1=13。输出为13*13*192(分为两个GPU)

ReLU、LRN(正则化)

Max pooling:该层没有进行池化

第五层:

Convolution:输入图像大小为13*13*192,卷积核大小为3*3*192,数量为256,步长为1,类似前述过程,经过填充(P = 1)用上述公式计算可得:⌊13−3+21⌋+1=13。输出为13*13*128(分为两个GPU)

ReLU、LRN(正则化)

Max pooling:输入为13*13*128(对其中一个GPU分析),池化层大小为3*3,步长为2,经过处理后得到的输出大小为⌊13−32⌋+1=6,即6*6*128(两个GPU)。

fc6(全连接层):

输入图像为13*13*256(总共),经过4096个13*13*256大小的卷积核,最后得到的输出为1*1*4096。

fc7:

输入为1*1*4096,经过4096个1*1*4096大小卷积核的卷积,得到1*1*4096的输出。

fc8:

输入为1*1*4096,经过全连接,得到1000个神经元。

Rest Part

利用多GPU进行训练

迭代池化(Overlapping Pooling)

局部响应正则化(Local Response Normalization)

参数模型调整:以0.01开始,每次除以10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PaperReading
相关文章推荐