【51CTO.com快译】在本篇文章中,我们将着力探讨如何利用深度学习算法创建一套数据模型。在这里,我们不会涉及人脑或者人类智能方面的议题,而是尝试解读深度学习技术如何帮助我们解决计算机科学与早期人工智能领域的那些重大难题。我们还将谈到深度学习的优势与应用范畴,并解答创建深度学习模型中遇到的部分问题。我们将提供参考、建议与技巧,并以此为起点开展其它后续议题。
首先,我个人并不是深度学习领域的大牛。相反,我同样在学习这项技术,并希望通过本文分享自己的思路与知识,以鼓励更多朋友加入学习的行列。如果大家发现其中存在任何遗漏、错误或者需要补充的内容,请在评论中不吝指出,感谢。
作为一名数据科学专家,深度学习技术最吸引我的地方在于其能够延伸至多个领域并解决大量实际问题。深度学习如今已经成为一种趋势,且拥有巨大的潜在应用空间。真正有趣的是,深度学习能够从数据当中提取出隐藏的特性,从而帮助设备在无需明确编程(基于规则的系统)或者人工调整(其它一些机器学习算法会借此改进自身学习能力)的前提下学习如何完成任务。
利用深度学习方案,图像、语音与视频识别领域的研究人员及从业者已经获得了良好的收效。深度学习能够帮助AI更好地充当机器人的大脑,亦可在快速崛起的物联网领域发挥巨大作用。对于企业,深度学习已经开始在客户服务精简与人工密集型任务内的自动化辅助领域有所建树。另外,大家可能也已经开始利用深度学习支持型机器人回答产品咨询问题或者汇总最为常见的提问内容。苹果Siri与微软Cortana皆以深度学习作为其核心组件,而医药与医疗领域的X片及核磁扫描诊断亦可逐步由深度学习算法负责解读。
深度学习方法通过大规模数据量训练自身建立非线性关联能力,而正是这种能力使其在家族众多前辈当中脱颖而出。
要了解标准深度学习算法的基本原理,我们首先需要了解其前代方案,即神经网络。神经网络包含三个层级,分别为输入层、隐藏层与输出层。
• 输入层由神经构成,其负责接收输入值。这些神经的输出结果与输入预测相同。
• 输出层为神经网络的最终层,负责向用户环境返回结果。根据神经网络的具体设计,其还能够告知之前各层其如何了解信息内容并据此改进之前各层的实际功能。
• 隐藏层位于输入与输出层之间。从传统角度讲,隐藏层的数量区间由一到多,其属于将输入与节点输出结果相映射的中央计算层。
为何由神经网络过渡至深度学习?
- “深度”架构的引入能够支持多个隐藏层。这意味着其可实现早期神经网络所无法实现的多表示层或者学习更为复杂的特性结构。
- 改进并变更以支持多种架构(DBN、RBM、CNN乃至RNN),从而适应各类不同问题。
- 能够优化算法以处理大规模数据计算任务。
- 引入优化与正则化参数,例如通过取舍降低训练数据规模。
- 具备开源深度学习软件包并面向多种主流编程语言,从而为特定领域带来创新成果。
单纯增加隐藏层数量并不足以提升生产力。那么,我们该如何将深度学习真正转化为实践工具?
- 越来越多的数据:用于训练深层学习算法的数据量越大,其实际效果就越好。另外,数据本身还应当同时囊括正面与负面状况,从而帮助算法区分不同情况并获取对应知识。深层学习的兴起与准确性提升与大数据的全面来袭密不可分。数字化与大数据处理框架能够帮助深层学习更好地获取训练所必需的数据资源。
- 调整模型是种艺术: 在深层学习模型当中,超参数与知识是实现模型调整的必要途径。其可立足于数据集优化深层学习算法性能并提升其准确性。在本系列的下一篇文章中,我们将探讨如何利用H2O在创建深层学习模型的过程中确定相关参数。
说到这里,我们又面临着新的问题,复杂的深度神经网络需要大量计算性能用于训练。这项难题已经被价格合理的高性能GPU所解决,这要归功于英伟达及英特尔等厂商的不断推进。可以看到,利用GPU的深层学习模型能够实现远高于CPU的训练速度。英伟达公司在其博客中指出,根据基准测试结果显示,GPU加速型神经网络训练在速度上能够达到CPU的10到20倍。这意味着原本需要数周甚至数天的训练如今只需要数小时即可完成。
R用户能够利用以下软件包创建深层学习模型。在下一篇文章中,我们的深层学习模型也将由H2O与R配合创建完成。
- h2o:面向H2O的R接口。其能够为H2O提供R脚本功能,而H2O则是一套用于计算各类并行分布式机器学习算法的开源数学引擎,其适用范围包括在各类集群环境下实现广义近线模型、梯度引导设备、随机森林以及神经网络(深层学习)。
- mxnet:为R语言提供灵活且高效的GPU计算与领先的深层学习能力。
- deepnet: R语言中的深层学习工具集。
- neuralnet:用于训练神经网络。其利用配合或未配合权重回溯的弹性反向传播,或者经过修改的全局聚合版本。这套软件包允许我们通过定制化错误与激活函数选择实现设置调整。另外,其亦可实现广义加权计算能力。
- rnn:递归神经网络。在R语言环境下实现递归神经网络。
- darch:面向深层架构与受限玻尔兹曼机的软件包。darch软件包由G. E. Hinton与R. R. Salakhutdinov提供的代码构建而成。这种方法中包含一项由G.E Hinton发布的预训练对比发散方法并在发布前利用反向传播及共轭梯度等算法进行预训练。另外,其中亦引入更多其它新型技术以提升深层学习的细粒度调整效果。
- autoencoder:用于对未标记数据内表现特性进行自动化学习的稀疏自动编码器。
大家可以下载您所喜爱的深层学习软件包并开始编程。为了帮助大家更好地找到起点,我们可以立足以下问题以建立一套适合自身实际情况的深层学习模型。
- 共有多少神经元需要使用输入层?决定输入或者功能数量。
- 应该使用多少个隐藏层?要了解所需使用的具体隐藏层数量,我们应当利用标准机器学习方案进行交叉验证。
- 每个隐藏层中应包含多少个神经元?我们无法纯粹依靠现成技术确定隐藏层中的具体神经元数量。最常见的隐藏层***神经元数量应介于输入层与输出层神经元数量之间。另外,我们亦可使用几何金字塔规则计算出一项粗略的近似值,这是一套拥有N个输入与输出神经元的三层网络,其中隐藏层的神经元数量为sqrt(n * m)sqrt(n * m)个。
- 深层学习网络能否在无需隐藏层的情况下实现?是的,但请不要将其称为“深层”学习网络。其能够接纳数量,并对数据进行线性分离。
- 我们应当设置多少输出层神经元? 等同于我们持有的目标类数量。
原文标题:Dive Deep Into Deep Learning 原文作者:Sibanjan Das
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】