【IT168 评论】深度学习是什么?Nvidia首席执行官Jen-Hsun Huang认为,深度学习本质上就是用软件编写软件。
本文不会将深度学习与人类大脑进行对比,因为已经有太多文章可以给我们一个比较清晰的概念。本文的重点在于如何使用深度学习算法创建模型,尝试了解深度学习如何帮助人类解决计算机科学和早期人工智能的一些主要问题,这之中还将包括深度学习的优势和应用,创建深度学习模式时经常会遇到问题解答等。
毫无疑问,深度学习现在是趋势,其应用是巨大的,它是机器学习最令人兴奋的分支之一。随着深度学习的发展,受益最大的是图像、语音和视频识别领域的研究人员和实践者,他们看到了一些可行的解决方案。同时,深度学习也可以在物联网(IoT)领域发挥重要作用。
对企业而言,深度学习已经在客户服务流程化、协助人力密集型工作自动化方面发挥了重要作用。你可能也遇到了深度学习的机器人,试图回答产品查询或订单方面的问题,包括苹果的Siri和微软的Cortana。在医药和保健领域,也不乏深度学习的身影。如果你发现计算机可以通过阅读X射线和MRI扫描结果开始诊断疾病,请不要惊讶。我相信,这些应用都激励着开发人员尽快搞清楚深度学习的可行性。
简单地说,我们为深度学习算法提供诸如图像或视频之类的数据,以对其进行训练,并且该算法本身能够识别出所需目标。通过大量数据的训练来学习复杂的非线性关系,深度学习的能力使其从其他传统的机器学习技术中脱颖而出。
要知道标准的深度学习算法是什么样子,我们必须了解其前身——神经网络。一些从业者也将深度学习称为深层神经网络。简而言之,神经网络是一个三层结构——输入层、隐藏层和输出层,如下所述:
·输入层由接受输入值的神经元组成。这些神经元的输出与输入预测值相同。
·输出层是将结果返回到用户环境的神经网络的最后一层。基于神经网络的设计,它还通过前两层了解学习方面的表现,从而改进功能。
·隐藏层位于输入和输出层之间。通常,隐藏层的数量大于1。中央计算层具有将输入映射到输出节点的功能。
如何从神经网络过渡到深度学习?
深度学习引入了支持多个隐藏层的“深层”体系结构,创建了多层次架构或学习早期神经网络缺少的特征层次。
·改进和改变以支持各种架构(DBN,RBM,CNN和RNN),以适应不同类型的问题。
·优化算法用于处理大规模数据的计算能力。
·引入优化和正则化参数,以减少过度训练数据。
·深度学习软件包的开放源代码和广泛使用的编程语言的可用性,将其带入创新领域。
只添加多个隐藏层不会使深度学习更有效率。那么,如何使深度学习更有成效呢?
·更多训练数据的应用:简单来说,你提供的数据越多,训练的深度学习算法就会越好。此外,数据应该是优良混合的,才可以更接近实际情况。深度学习的发展及其准确性与大数据的兴起有关,数字化和大数据处理框架可以帮助深度学习达到理想的状态。
·调整模型的艺术:深度学习模型中许多可用的超参数对调整深度学习模型很有帮助。它优化了深度学习算法在数据集上的性能,并帮助用户准确地学习。
在这个过程中,我们遇到了复杂的深层神经网络需要大量计算性能进行训练的问题。目前这种问题是以Nvidia和Intel等玩家以合理的价格和提供更高规格的GPU来进行管理的。可以看出,使用GPU的深度学习模型比使用CPU的模型快得多。Nvidia的博客指出,在基准研究中,使用GPU比CPU快10-20倍,这意味着训练周期可以从几天甚至几周缩短到几小时。
使用R语言的用户可以使用以下软件包建立深度学习模型:
H2o:R接口为H2O。这为H2O提供了R脚本的能力,它是用于大数据的开源数学引擎,用于计算并行分布式机器学习算法,如各种集群环境中的广义线性模型,梯度增量积,随机森林和神经网络(Deep Learning)。
mxnet:将灵活高效的GPU计算和非常先进的深度学习带到了R语言之中。
deepnet:R中的深度学习工具包
神经网络:训练神经网络。使用反向传播(Riedmiller,1994)或有无重量回溯(Riedmiller和Braun,1993)的弹性反向传播等。该软件包通过自定义的错误和激活功能允许可调整的设置。此外,可实现广义权重计算(Intrator O&Intrator N,1993)。
rnn:循环神经网络。
darch:深层架构和Restricted Boltzmann Machines。darch包是由G.E.Hinton和R.R. Salakhutdinov代码构建的(可在Matlab Code中获得)。该方法包括由G.EHinton发表的具有对比度发散方法的预训练,以及用诸如反向传播或共轭梯度的常规已知训练算法的微调,可以最大限度地改善深度学习。
自动编码器:用于自动学习未标记数据的功能。
开始创建深度学习模型时,我们需要先解决一些问题。
·有多少神经元使用输入层? 这取决于输入或功能的数量。
·应该设置多少个隐藏层? 要弄清楚要使用的隐藏层数,必须依靠标准机器学习的交叉验证。
·每个隐藏层应该使用多少个神经元? 没有哪种技术可以计算出神经元的非常好的数量。最常见的做法是在输入和输出层的大小之间。此外,由Masters提出的几何金字塔规则可以进行粗略的近似,它是针对具有n个输入和m个输出神经元的三层网络; 隐藏层将具有sqrt(n * m)sqrt(n * m)个神经元。
·深度学习网络可以在没有隐藏层的情况下工作吗? 是的,它可以在线性可分离的数据上正常工作。
·应该有多少输出层神经元? 这取决于目标功能的数量。
在接下来的文章中,我将具体列出目前比较流行的开源或企业版深度学习框架及应用,对比各大框架之间的差异性,为深度学习开发者提供最具价值的一手讯息。