我们一般不会重头开始训练一个卷积神经网络,我们常在别人pre-trained好的model上,用自己的数据finetuning.
历史回顾
- 1957年,首次提出感知机(Perceptron);
- 1986年,多层感知机的反向传播算法;
- 2006年,hinton在science上发表论文,该篇文章逐层训练的思想,为这一次的深度学习热潮打开大门。
- 2012年,hinton和他的弟子使用卷积神经网络Alexnet,在ImageNet上获得第一名,并且领先第二名较大优势,然后我们的深度学习一下子就火了。
补充:06年,hinton使用RBM(波尔兹曼机)来进行逐层预训练(layer-wise pre-training),然后将预训练好的RBM连接在一起,进行finetuning,得到自编码器(autoencoder),hinton在science上发表时,主要用它来做降维,因为一个autoencoder可以分为编码和解码两部分,编码用来降维,解码用来还原。实验证明,该方法比PCA好,整个过程是一个无监督的过程,如果想用它来做分类,那么可以在编码层后加一个softmax来做分类,这就变成了深度波尔兹曼机(Deep Boltzmann Machines, DBM)。因为由于神经网络层数过深,初始化如果不好的话,反向传播时,很容易造成梯度消失。hinton首先逐层预训练,就相当与找到了一个不错的初始化,然后在将所有逐层训练的RBM连在一起,在进行反向传播时,一般就不会出现梯度消失的情况,反而会有较好的效果。不过现在即使不用逐层训练的方法,也可以较好的收敛,有其他的trick:比如Xavier初始化,Dropout,ReLU激活函数,等着我进一步学习。