AlexNet是2012年参加ImageNet曝光的,现在说可能有些老了,毕竟这个模型中很多引以为傲的trick在如今早已被用烂,以至于我看的时候一直怀疑当初的卷积神经网络有多弱。
还是直接上图吧:

就是这么一个8层的网络,5层卷积加3层全连接,输入图像大小是224*224,到第4、5层的时候feature map就只剩13*13了,全连接层6、7都是有4096个节点,最后一层有1000个节点。
创新点
- 用了ReLU激活函数,因为tanh在内的很多激活函数都有饱和问题,越到两边越趋于平缓,梯度太小。
- 分组卷积。其实当时真的是无奈,论文里说他们的GPU只有3G显存(GTX580),所以想要在一张显卡上放下所有东西显得有些吃力,所以才发明了分组卷积,比如AlexNet中第4、5层卷积都是分组卷积,只分了2组,因为他们的实验是在两个GPU上跑的,因此刚好一个GPU跑一个group,到了全连接层的时候再合并回来
- dropout。这个主要是在全连接层用了dropout,全连接层的每个节点都有50%输出激活值或输出0.
- overlap pooling。看名字就知道,以前的pooling都是核多大,步长就多大,现在我们可以核大一点,步长小一点。AlexNet中所有的pool层都是kernel=3,step=2。
- Local Response Normalization。感觉这个东西现在用的人不多了,好像现在都用BatchNormalization。这个Local...说的是。。。。还是直接看公式吧:

其中a是原本的激活值,b是Normalization后的激活值。N是这一层filter的个数,n是一个超参数,文中选的是5,那个Σ是对当前的feature map及其相邻的n个feature map求平方和(上面取n/2个,下面取n/2个),然后除以这个东西做归一化,文中说生物神经元中有个东西叫侧抑制(lateral inhibition),就是说当一个神经元周围的神经元激活值较大时,当前神经元的激活值会变小,因此用了这个东西。其中α、β、k、n都是超参数,是通过交叉验证试出来的。分别取的是α=1e-4,β=0.75,k=2,n=5。
效果
马马虎虎吧,跟现在肯定没法比,但是这么浅的网络在当时GPU性能不行也没有什么Tensorflow等任何框架的年代,纯靠手写调参能达到这个效果也已经非常牛逼了。下图的CNN指的就是AlexNet在ImageNet上的准确率。

网友评论