一、这是AlexNet,虽然是很多年前的网络了,但是在今天依然有着举足轻重的地位!特别是其中的思想,非常关键!
二、主要思想
1、采用了非饱和神经元(通过Relu-非饱和非线性函数)
2、多GPU拆分计算
3、在全连接层采用了Dropout来降低overfitting
4、利用了LRN(local response normalization)
5、overlap pool
三、详细介绍
1、Relu
简单介绍下什么是“饱和非线性”和“非饱和非线性”:
定义出发:能否让映射之后的y值到达无穷,能够到达无穷的,为非饱和,到达不了的/会对结果进行压缩的就是饱和!
我们目前最常用的(Rectified Linear Unit )Relu函数为“非饱和非线性”,y=max(0,x),sigmoid函数的范围是[0, 1]所以是饱和的,tanh函数也是饱和的,因为其取值范围为[-1,1]。
采用Relu函数的好处自然是,防止梯度消失。当然这并不是作者在这里采用Relu的重点,1、重点在于,Relu加速了网络的收敛。2、Relu这个结构属于非饱和,因此就不需要在Relu之前的输入进行normalization,这里理解就是,如果是sigmoid,要是输入都比较大,那么输出就会是无差别的,都是1,因此对于Sigmoid这类“饱和非线性函数”,理论上应该对输入进行normalization,从而才能让输出有差异!!!
2、Training on Multiple GPUs
这一块的化,主要是因为当时的硬件条件受限!就可以把一个网络模型参数,分开多个GPU上,一起分担显存。
3、Local Response Normalization
这个公式还是比较容易读懂的,LRN层放置在每一个Relu层的后面,效果上: our top-1 and top-5 error rates by 1.4% and 1.2%.公式中,N表示总共卷积核的数目,也就是通道数,也就是feature map数目;n表示窗口大小;分母中把K与alpha乘上,该x,y位置上的“前后相邻n/2”的值的平方的和。
这个公式的理解需要结合上生物学“仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制)”,来自于CNN的原始论文。我认为,这也是一种稀疏思想,就是1号神经元处于活跃,他抑制2号神经元,这样特征就更加稀疏!
在2015年 Very Deep Convolutional Networks for Large-Scale Image Recognition.提到LRN基本没什么用,对于ILSVRC这个数据,反而会增加内存开销与时间。
4、Overlapping Pooling
可以说我们到目前为止,除了global pooling 和 Roi pooling以外,基本都是用的Overlapping Pooling。这个主要涉及到stride和kernel size大小关系,如果相等,那就是不会重叠的pooling,如果stride小于kernel size那就是会overlap,这种相比于non-overlapping top-1 和 top-5分别提升了 0.4% 和 0.3%。
我认为,之所以要这样做是希望:1、减缓下采样带来的信息丢失 ;2、让局部特征有更强的关联性 ;3、作者实验发现这样可以降低overfit的可能。
5、结构:
这是一张不陌生的图~~~
6、降低overfit的策略
*数据增广:The first form of data augmentation consists of generating image translations and horizontal reflections;
The second form of data augmentation consists of altering the intensities of the RGB channels in training images.
*“Dropout”:这里,开启第二篇经典论文dropout
一、概述
dropout主要出发点“preventing co-adaptation of feature detectors”,这个co-adaption怎么理解呢?我认为是,比如一个加法器,现在需要得到1,那么有三个输入0.8,0.1,0.15,差不多能拟合出1,这种就是三个共同作用出来的结果!作为一个强大的特征提取器,最好就是直接0.95,其他两个输入完全不用看!
这篇文章还提出了,L2norm 这个惩罚项的改进,不是直接把所有参数一次性应用上,而是对于每一个隐层作为一个组单独计算L2norm并且设置上界,这样的好处就是,可以一开始就设置一个很大学习率,加速网络收敛,且可以让网络在更大的范围内去搜索最优解!
二、dropout深入理解
dropout在训练阶段:设置一个概率,大多数设为0.5;相当于在训练的时候每次只有一般的神经元参与计算,与BP。
dropout在测试的阶段:需要把0.5改为0,然后需要把这一层结果/2,因为求和会是之前的两倍!建立一个假设--在有dropout的网络中,每次输出都是不同的,那么“mean network”产生的结果会比 ,单独几个独立的dropout的网络结果的mean融合会更好!这里怎么理解呢?
是这样的,几个网络输出的average,这是ensemble常用的手段!这里的意思是,dropout网络相当于把网络每一层都mean了,每一层都是ensemble,那么理论上这样可能会比直接结果ensemble会更好!
三、其他东西
这篇文章还涉及到了pooling--这种pooling一直沿用至今overlap pooling,作者在实验中发现,这种方式的pooling可以让网络产生更对于上一个卷积的输出产生coarse的coding,这样反而可以提升网络的泛化能力!
LRN,这个仿生物学的,神经侧抑制!
ReLU层,以及提到了对于ReLU的网络采用了0为均值的正态分布作为网络参数初始化!因为如果全是负数的,那么网络没办法运算!这种激活函数降低了训练时间,同时也不需要以前那种数据规范化策略,因为对于类似于sigmoid函数,如果输入不进行规范化,那么1、梯度问题 2、输出差异小 这两个问题就会很大程度上影响训练
momentum of 0.9:这个的话,是一种训练的优化手段,就是梯度不光是看这一步,而是前面所有步的累积!