对于alexnet的浅薄认识

Posted on 2018-03-24 12:04  GaryWant  阅读(265)  评论(0)    收藏  举报

1、简介

alexnet是一个CNN模型,拥有五个卷积层以及三个全连接层,利用softmax进行类别输出。

2、原理认识

我认为alexnet有以下几个特点:

a、利用了relu单元进行非线性变换。至于原因:我认为是避免了梯度弥散,sigmoid函数在0点附近有很大的梯度,但在绝对值较大的实数处却有着很小的梯度,训练缓慢。而relu却是在pass后是常数偏导,训练效果好。

b、利用了3*3大小的卷积核,这样的卷积核有利于减少参数。比如:5*5可以用两个3*3代替,但参数每个卷积层大致减少了25 - 9 * 2 = 7个,加上后面层的加乘,参数数量大大减少。当然,他第一层用的是11*11大小的grid,为什么不用4个3*3,我也不清楚。希望有人可以指导一下。

c、在全连接层,他用了dropout方法来防止过拟合。dropout方法源于bagging,即通过多个模型基于投票的方式对数据进行类别投票。但是bagging方法必须有不同的模型才有很好的效果,至于原因就是概率论中多样本的误差会和样本数成反比。但是模型训练是比较麻烦的,那么我们就在每个神经元加上一个概率,让它执行输入输出的概率行为,如果要抑制就与zeros相乘,放过就ones相乘。可以把dropout看成给模型的每个神经元加了门控制的模型。后看了alexnet的论文dropout部分,认为他的理解更为恰当。dropout强化了那些关键节点的训练。

d、除了这些层之外,他还对于数据进行了处理。比如256*256随机投影到224*224,以及对于五个方位进行反射和翻转(阿里的那位面我的大佬应该是想问我这一个点,上周只看了基础的cnn还没怎么深入了解),增加了模型的数据集以及鲁棒性。

e、有一个问题,那就是alexnet第二层卷积层到第三层卷积层利用了所有的信道信息,进行256信道到392信道的卷积过程。因为alex利用了两块GPU,除了这一层的卷积过程外都是单GPU内部的数据流向,从信息上来说,都是只考虑一半信道的内部关联。而第二层到第三层是综合了全部信道的信息,考虑了整体信道的关系。所以他需要用3*3*256大小的卷积核(其实可以在每个GPU内部把这个核变成两个3*3*128,表示我每一个结果是属于第一块GPU和第二块GPU的,然后把第一块GPU运算的属于第二块GPU的结果送给第二块,第二块GPU把第一块的结果送给第一块,再在每块GPU进行内部矩阵相加。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3