注:借鉴整理,仅供自学,侵删
1 数据集
- ImageNet:1500万个带标签的高分辨率图像的数据集,这些图像大约属于22,000个类别。输入图片大小224*224(256提取224数据增强)227?。
2 ReLU激活函数
激活函数:激活函数的引入是为了增加神经网络模型的非线性,没有激活函数每层就相当于矩阵相乘。每一层输出都是上层的输入的线性函数,无论神经网络多少层,输出都是输入的线性组合,就是最原始的感知机。加入激活函数,给神经元引入非线性因素,神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
ReLU为非饱和函数,验证其效果在较深的网络超过了SIgmoid,成功解决了SIgmoid在网络较深时的梯度弥散问题,学习速度更快。
ReLU(Rectified Linear Unit)函数是目前比较火的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点:
- 在输入为正数的时候,不存在梯度饱和问题。
- 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)
克服梯度消失,加快训练速度
当然,缺点也是有的:
- 当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和sigmod函数、tanh函数有一样的问题。
- 我们发现ReLU函数的输出要么是0,要么是正数,这也就是说,ReLU函数也不是以0为中心的函数
3 GPU并行运算
4 覆盖的最大池化
在以前的CNN中普遍使用平均池化层,AlexNet全部使用最大池化层,避免了平均池化层的模糊化的效果,并且步长比池化的核的尺寸小,这样池化层的输出之间有重叠,提升了特征的丰富性。一般的池化层因为没有重叠,所以pool_size 和 stride一般是相等的,例如8 × 8 的一个图像,如果池化层的尺寸是2 × 2 ,那么经过池化后的操作得到的图像是 4 × 4大小,这种设置叫做不覆盖的池化操作。如果 stride < pool_size, 那么就会产生覆盖的池化操作,这种有点类似于convolutional化的操作,这样可以得到更准确的结果。在top-1,和top-5中使用覆盖的池化操作分别将error rate降低了0.4%和0.3%。论文中说,在训练模型过程中,覆盖的池化层更不容易过拟合。
5 网络架构
6 减少过拟合
- Data Augmentation(GPU训练,CPU数据增强)
1.1 图像平移和水平翻转
1.2 PCA算法(主成分分析),在一定程度上提高图片对光照强度和颜色变化的适应能力。 - Dropout(减少全连接层过拟合):反向随机失活,失活后不参与正向和反向传播,权重共享,神经元不依赖其他特定神经元,降低了神经元复杂的互适应关系
7 动量法
8 LRN层
提出LRN层(局部响应归一化),在神经网络中,我们用激活函数将神经元的输出做一个非线性映射,但是tanh和sigmoid这些传统的激活函数的值域都是有范围的,但是ReLU激活函数得到的值域没有一个区间,所以要对ReLU得到的结果进行归一化。对局部神经元的活动创建竞争机制,使得响应较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力