burellow

深度学习(deep learning)

最近deep learning大火,不仅仅受到学术界的关注,更在工业界受到大家的追捧。在很多重要的评测中,DL都取得了state of the art的效果。尤其是在语音识别方面,DL使得错误率下降了大约30%,取得了显著的进步,现在如果哪个做语音识别的公司没用DL,都不好意思打招呼了,相信后续这种状况还会延伸到图像和自然语言处理等其它领域。

   deep learning本身算是machine learning的一个分支,简单可以理解为neural network的发展。大约二三十年前,neural network曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:
  1,比较容易过训练,参数比较难tune;
  2,训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;
所以中间有大约20多年的时间,神经网络被关注很少,这段时间基本上是svm和boosting算法的天下。但是,一个痴心的老先生hinton,他坚持了下来,并最终(和其它人一起bengio、yann.lecun等)提成了一个实际可行的deep learning框架。
 
  deep learning与传统的神经网络之间有相同的地方也有很多不同。
  二者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。
而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deep learning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用back propagation的机制,对于一个deep network(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradient diffusion。
 
  deep learning训练过程具体如下:
 
  1,采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
  具体的,先用无标定数据训练第一层,训练时可以采用auto-encoder来学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;
  这里面需要重点理解auto-encoder以及sparse的机制的原理和作用。
 
  2,基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。
 
  总之,deep learning能够得到更好地表示数据的feature,同时由于模型的层次、参数很多,capacity足够,因此,模型有能力表示大规模数据,所以对于图像、语音这种特征不明显(需要手工设计且很多没有直观物理含义)的问题,能够在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角度,deep learning框架将feature和分类器结合到一个框架中,用数据去学习feature,在使用中减少了手工设计feature的巨大工作量(这是目前工业界工程师付出努力最多的方面),因此,不仅仅效果可以更好,而且,使用起来也有很多方便之处,因此,是十分值得关注的一套框架,每个做ML的人都应该关注了解一下。
 
  当然,deep learning本身也不是完美的,也不是解决世间任何ML问题的利器,不应该被放大到一个无所不能的程度。
 
  所以,应该make a deep understanding on deep learning,使其为我所用。
 
  推荐比较好的学习资料:
  1,stanford deep learning tutorial: http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial;
  2,综述:Bengio\'s Learning Deep Architectures for AI, http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf;
  3, andrew ng\'s talk video: http://techtalks.tv/talks/machine-learning-and-ai-via-brain-simulations/57862/;
  4,cvpr 2012 tutorial:
  http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf
  比较浅显的从LR,Neoral network,convolutional neural network介绍到sparse encoder;
 

分类:

技术点:

相关文章: