ImageNet Classification with Deep Convolutional Neural Networks
为什么LeNet被提出后没有收到太多重视,但是AlexNet被提出之后就被关注?或者说,AlexNet好在哪里?
数据量的增长:AlexNet的数据量是以million为单位的
ReLU修正线性单元的应用
GPU的出现加快了训练速度
Dropout:有效防止过拟合
Introduction
在object recognition(目标识别)上,机器学习算法表现得不好吗?
机器学习算法收到的表现好,但是之前用到的数据集都相对较小(以10k为单位),在小数据集上的简单任务上(比如手写数字识别,它的背景是纯色的,然后有内容的图像也只是数字的像素点,数字的类别和变形还是不多的),机器学习的表现已经很好了,但是现实中的物体变化都很大(背景、姿势、角度、纹理等等,都可能很不一样),目标识别任务不会像之前(cifar,Mnist等)那么简单,所以肯定需要更大的数据集(millions)。
更大的数据集带来的问题:millions of images需要学习能力更强大的学习器,卷积神经网络就是其中的一类。
the paper’s contribution:
1) one of the largest CNNs which reached the best result
2) GPU inplementation method
3) new and unusual features to improve performance and reduce training time
4) techniques to prevent overfitting
限制network的大小的主要因素:对训练时间的要求,GPU的内存大小
motivation:
更复杂的任务–>对更大数据集的需求–>对更有效学习器的需求
为什么卷积神经网络比传统的计算机视觉机器学习算法好?
为什么之前用机器学习算法可以很好地处理Mnist等数据集,但是放到Imagenet这类数据集上就不适用了?
以kNN为例:把二维图像展成一维的,然后用kNN进行分类。但是这样做似乎会忽略掉二维图像相邻pixel的信息,在简单图像上没什么问题(例如手写数字),但是imagenet中的图片比手写数字肯定要复杂的多
特征提取算法+分类器:但是提取出来的特征是有限的
神经网络的一个好处就是不需要自己去想办法提取特征,可以自行提取特征
那么为什么卷积神经网络比全连接的经典神经网络更适合?全连接神经网络在处理图像的时候参数太多,训练起来很耗时,而且庞大的参数很可能导致过拟合。卷积神经网络可以共享权重,所以更适合图像的训练。
所以综合起来——CNN似乎更适合
特征提取一般是从原始像素里面提取高级特征,这些特征可能可以捕捉到类别间的区别,是无监督的过程,然后用这些特征跟标签去做分类。但是最终分类结果,很大程度上取决于你提取出来的特征够不够好、够不够有代表性,提取特征的过程可能就会很复杂漫长,可能还会需要很多人类的先验知识加入进去,可能都是在做猫狗分类,但是不一样的数据集,提出来的特征都会有很大差别,所以说传统方法更耗时而且可能不好推广。
Architecture
response-normalization layers: follow the 1&2 layers
max-pooling layer follow the response-normalization layers
relu is applied to every convolutional layer and fully-connected layer
这个结构,数据显示,如果去掉任意一层,都会降低最终模型的效果
ReLU修正线性单元
之前的激励函数:tanh或sigmoid
ReLU跟tanh比起来,可以显著使训练加快
为什么用ReLU训练起来更快?sigmoid和tanh可能出现梯度消失的问题(到了某个饱和的区间之后,sigmoid/tanh的导数就会趋近于0,然后梯度就会下降得很慢)
在大型数据集上应用大型模型时,训练速度会很重要。所以要使用ReLU,主要目的是加速模型的训练
Multiple GPUs
将训练分到两个GPU上
GPU只在特定的层进行交流
这样可以提高网络的运行速度,也容许了更大的规模的网络
在之后的实验中会发现,因为GPU之间的交流是受限制的(只在特定的层),所以说在训练中两个GPU上提取出来的特征的关注点可能会不一样(比如说一个更关注色彩方面的特征,另一个就不太关注颜色)
Local Response Normalization
ReLU本来是不需要它的输入被归一化的:不需要归一化来防止饱和(只要非零)
为什么需要归一化:如果数据分布发生变化,泛化能力会降低(每次学习都要去适应新的数据分布),所以需要归一化来使得数据分布达到相对的一致。
local normalization有助于模型的泛化
侧抑制:被激活的神经元抑制相邻的神经元(生物学概念)
LRN:借鉴侧抑制实现局部抑制。相当于引入了竞争机制?在卷积层之后应用。反馈较大的神经元的输出变得更大,抑制反馈相对较小的神经元
将ReLU的输出的结果和它周围的邻居做这样一个局部的归一化
Overlapping pooling 重叠池化
可以避免过拟合
会获得隔壁感受野的一些信息,可以获得相邻感受野之间的依赖信息
池化的过程相当于筛选特征减少特征的数量,重叠池化的话有可能两个池化核的结果是一样的
How to prevent overfitting?
why need to prevent overfitting: too much parameters to learn
data augmentation
label-preserving transformations
1, extract random patches and their horizontal reflections
2, alter the intensities of RGB channels: PCA
Dropout
why dropout is effective?
当每次不同的单元被dropout时,可以看作在训练不同结构的网络?相当于训练了很多不同结构的网络然后对结果求平均,这样可以抵消一些过拟合带来的影响
如果不用dropout的话,训练很多个不同的网络的成本很高的,采用dropout之后相当于是训练了很多不同的网络
因为每次dropout掉的单元都是随机的,这样迫使某个神经元学习的特征不应该过分依赖于别的神经元,学到的应该是更普遍的、更鲁棒的特征
为什么dropout主要被用在了全连接层上?卷积层的参数没那么多,不大会过拟合,全连接层参数太多,更可能过拟合吧
Details of learning
SGD: 随机梯度下降
small weight decay: reduce the model’s training error
怎么评价?
1)看给出的top1/top5标签是不是正确的
2)检索:网络在后面的一个全连接层不是会给出一个4096维的vector吗,找出来跟目标图像的vector在欧氏距离上最相近的几个图,看看他们是不是真的是同一类/真的相像。(为什么这样可以评价呢?因为即使是同一类的图,在原始pixel上的欧氏距离很有可能很远,比如说不同的位置、不同的姿势等等,所以其实还是看的网络是不是有提取到重要关键的信息)。直接算4096维向量间的距离还是很费时间的,所以可以再训练一个auto-encoder出来。
标图像的vector在欧氏距离上最相近的几个图,看看他们是不是真的是同一类/真的相像。(为什么这样可以评价呢?因为即使是同一类的图,在原始pixel上的欧氏距离很有可能很远,比如说不同的位置、不同的姿势等等,所以其实还是看的网络是不是有提取到重要关键的信息)。直接算4096维向量间的距离还是很费时间的,所以可以再训练一个auto-encoder出来。