深度学习

简介

  • 一页纸介绍深度学习
  • 深度学习的前世今生
    • 简化版
    • 完整版
  • 所有参考资料集锦
    • 资料链接1 :包含课程,文献,论坛,视频,在线免费教材,框架结构等。
    • 资料链接2:主要是pdf格式的可供下载的论文。

开源的项目

  • 开源的框架及工具
  • Tensorflow#####
    • 计算的过程抽象成了图形化的数据流,方便在不同的设备上进行部署
    • 来源于google实验室,在实际项目中验证过。
    • 源代码
    • 应用实例1
    • 应用实例2
  • Torch
    • 采用LuaJIT实现,提供了C接口
    • 支持IOS和Android
    • 源代码
  • Theano
    • 一个python库,方便多维度的数学计算,在学术研究中经常使用
    • Montreal大学的深度学习课程就用到了它
    • 在深度学习上的应用案例
    • 详细介绍
    • 源代码
  • Deprecation
    • Matlab实现
    • 目前已停止维护,如果需要用Matlab做项目的话,可以参考。
    • 源代码
  • 其他应用
    • 面部关键点识别问题
    • 深度神经网络在计算机视觉上的应用
    • python实现
    • 算法中使用的样本数据
  • Kaggle

问题

1 深度学习大多数都是用gpu做,我看文献说速度可能会差10倍。如果是只用cpu来实现是否可行?
  • 只用CPU来实现深度学习是可以的,只是需要的时间特别的长,对CPU的要求也很高,笔记本电脑和普通的台式机的都不太适合,一般都是推荐用大型的服务器或者云服务。
  • 深度学习相比SVM来说,需要更多层的计算,运算量比较大。 一般来说,用GPU来实现深度学习,速度会比cpu高5倍,而且数据量越大,GPU的优势越明显,最大能达到10倍的差距,所以,大量的文献资料是建议用GPU来进行处理的,毕竟现在GPU的性能也越来越高,而且并行计算的能力也越来越好。
  • 至于在实际应用中,是否只用CPU来实现,这个还是要具体问题具体分析了,没有一个统一的标准答案。主要根据以下几个方面来考虑,问题域应用的硬件环境,要处理的数据量的多少,结果的准确性要求,输入到输出的时间限制。如果数据量大,需要快速有结果的话,不建议只用CPU来实现。(ps,学术研究的话,不建议只用CPU实现,因为算法的计算量摆在那里的,在论文中说是只用CPU实现的话,估计论文不太好发。实在是要只用CPU实现的话,可以考虑结合分布式的并行计算,云计算,云存储之类的技术。)
2 深度学习是否也要事先定义一些特征呢?我看到有的文章是不需要定义特征的,深度学习方法可以自学习一些特征来进行。而有一些文章却自己定义了一些特征,如果自己定义特征,深度学习方法和普通机器学习方法有差别吗?而且如何选特征选多少特征会比较合适呢?
  • 深度学习实质是构建具有很多隐层的机器学习模型,再通过海量的数据来进行训练,得出更有用的特征,再根据这些特征进行分类或者预测。所以,不需要事先定义特征。但是,如果训练的数据量小的话,其自学习到的特征便不准确,导致最后的分类结果出现很大的误差。所以,理论上来说,深度学习算法是不需要自定义的特征的,但是在某些环境中,加入自定义的特征能更好的提高算法的精确度。

  • 普通的机器学习方法是浅层学习,而深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。但是,与自己定义特征的方法相比,深度学习利用大数据来自学习特征,更能够刻画数据的内在信息,特征提取也更加的客观。

  • 深度学习的训练过程如下:

  • 1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):

    • 采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):

    • 具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;

  • 2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):

  • 基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。

  • 如何选特征,选多少特征这个需要具体问题具体分析。任何一种方法,特征越多,给出的参考信息就越多,准确性会得到提升。但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。

3 对服务器和样本量有什么要求?对训练集的数目有要求吗?如果像题2那样可以自己定义特征的话,特征的数目和训练集的数目有什么有什么要求吗?
  • 服务器的要求:
  • GPU:GTX 680 或者GTX 960(这是穷人配置);GTX 980 (表现最佳,强烈推荐)
  • CPU配置:Intel系列,高端的即可,做好多核
  • 内存:越大越好,至少要和GPU的内存一样大
  • 训练的数目问题,深度学习的应用主要是大数据,解决的是普通的机器学习算法处理大数据时的特征提取问题,结果准确性,结果生成速度等问题,如果数据量太少的话,深度学习算法反而在性能上还比不上普通的机器学习算法。所以,训练的数据越多越好。至于特征的数目,这个要具体问题具体分析了,目前没有统一的标准和理论依据,只能凭经验或者在试验中不断调整测试。
4 深度学习的几种模型如(AutoEncoder,Sparse Coding,Restricted Boltzmann Machine,Deep BeliefNetworks,Convolutional Neural Networks)在解决实际问题的时候是否有倾向性的解决某一类问题?比如说更倾向解决分类问题还是预测连续值的问题?或者说在效能上有什么差别(如时间或者空间,或者准确度上)?
  • AutoEncoder自动编码器,可用于分类问题;
  • Sparse Coding稀疏编码算法是一种无监督学习方法;主要应用于图像处理和语音信号处理
  • Restricted Boltzmann Machine (RBM)限制波尔兹曼机,受限制玻尔兹曼机在降维、分类、协同过滤、特征学习和主题建模中得到了应用。
  • Deep Belief Networks深信度网络,主要应用于图像识别和语音处理领域
  • Convolutional Neural Networks,CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。
  • 深度学习算法在计算上比普通机器学习算法更复杂,因而对时间和机器资源的要求更高,相应地,也取得了比普通机器学习算法更好的计算效果。
5 目前深度学习方法都用于处理图形,或者一些生物分子的结构还有序列上面,那么这个方法是否能够直接适用于表达谱这种数据呢,比如用表达谱作特征区分疾病和正常样本?我认为表达谱数据的特点是含有很大部分的噪音,不一定所有基因表达都与所研究的疾病相关。如果用这种给出的训练样本有噪音的情况,深度学习方法能不能自动学习而去除噪音的影响?
  • 能直接应用于表达谱,但是深度学习对于有大量噪声的数据的效果不是很好。
  • 用深度学习在生物学上的应用主要有两个难点,1)分析的数据集很难获取。2)计算量非常大,需要很好的硬件支持。
  • D-GEX: 深度学习在表达谱上的应用的一个开源案例
    • 项目源码
    • 论文
  • 其他参考
    • Deep modeling of gene expression regulation in an Erythropoiesis
      model
    • List of deep learning implementations in biology
6 深度学习方法层数选择以及每一层所用的模型有什么技巧吗?
  • 不同的算法,以及处理问题不同,不能一概而论。现在处于各自摸索阶段,在选择上没有什么理论的依据。

其他参考文献

  • Which GPU(s) to Get for Deep Learning: My Experience and Advice for Using GPUs in Deep Learning 文章建议用GPU实现深度学习,并提供了GPU选择的参考意见

  • A Primer on Deep Learning 描述了深度学习与无监督学习,神经网络之间的关系与区别

你可能感兴趣的:(深度学习)