写在前面的话:不要被技术吓到哦,本文尽量写的白话,致力为从事大数据的运营、咨询规划、需求以及想学习大数据的入门者提供知识分享
……公司最近在和局方洽谈一个深度学习的项目,因为要根据局方的要求提供解决方案和规划方案,为了在洽谈时不失体统,是需要做一些深入的准备工作的,就像喊小朋友吃饭这样的小事,你得首先把“过来吃饭”这个意思翻译成小朋友能接受的语言,这样小朋友才能听懂,然后过来吃饭。同样的,跟不太懂技术的小伙伴沟通对规划人员有更高的要求:自己首先得懂,然后翻译成小伙伴能懂的语言,然后小伙伴才能更好的配合你,对不对?
一、从机器学习说起
我们都知道周易,中国早期社会由于生产力低下,科学不发达,先民们对于自然现象、社会现象,以及人自身的生理现象不能作出科学的解释,因而产生了对神的崇拜,认为在事物背后有一个至高无上的神的存在,支配着世间一切。当人们屡遭天灾人祸,就萌发出借助神意预知突如其来的横祸和自己的行为所带来的后果的欲望,以达到趋利避害。在长期的实践中发明了种种沟通人神的预测方法。
周易预测通过对历史事件的学习来积累经验,得出事物间的相似性和关联性,从而对事物的未来状况做出预测。数据挖掘(DM)预测则是通过对样本数据(历史数据)的输入值和输出值关联性的学习,得到预测模型,再利用该模型对未来的输入值进行输出值预测。一般地,可以通过机器学习方法建立预测模型。DM(DataMining)的技术基础是人工智能(机器学习),但是DM仅仅利用了人工智能(AI)中一些已经成熟的算法和技术,因而复杂度和难度都比AI小很多。
机器学习:假定事物的输入、输出之间存在一种函数关系y=f(x,β),其中β是待定参数,x是输入变量,则y=f(x,β)称为学习机器。通过数据建模,由样本数据(一般是历史数据,包含输入值和输出值)学习得到参数β的取值,就确定了具体表达式y=f(x,β),这样就可以对新的x预测y了。这个过程称作机器学习。
数据建模不同于数学建模,它是基于数据建立数学模型,它是相对于基于物理、化学和其他专业基本原理建立数学模型(即机理建模)而言的。对于预测来说,如果所研究的对象有明晰的机理(如Y=3x),可以依其进行数学建模,这当然是最好的选择。但是实际问题中,一般无法进行机理建模。但是历史数据往往是容易获得的,这时就可使用数据建模。
典型的机器学习方法包括:决策树方法、人工神经网络、支持向量机、正则化方法。其他常见的预测方法还有近邻法、朴素贝叶斯(属于统计学习方法)等。
下面是对机器学习算法准备的干货,准备好板凳哈
1、常用算法
常用算法包括决策树方法与随机森林,其中决策树是一种常用的方式,这种方式几乎是人们可以无师自通的。在平时做决定的时候常常也会有一些原则尺度可以用一棵树来表示,下面举个小例子。假如一个男生安排休息日的活动时思路如图所示。
决策树模型按照优先程度:
如果能约会就去看电影,若不能,如果能约到球友就去打球,若不能,如果能约到饭友就去下馆子,若不能,如果有好片子就自己看,若不能,如果有好玩的游戏就自己玩,若不能,这些都没有那就在家睡觉。
这其实就是一个比较典型的决策树,一个样本,如某一天具体的客观情况,从树根(树是倒着从上往下长的,但也可以画成从下往上、从左往右、从右往左,不影响逻辑的表达)开始一步一步最后落入决策结果。
多个决策树就构成了随机森林,只是随机森林不是要构造一棵树,而是构造许多棵树。
随机森林算法是一种并行性比较好的算法规则,一再强调的是,在数据挖掘中的很多算法实际是一种问题处理方式或者原则,而不是针对某一个具体的问题所书写的代码。这本身也是一个哲学上的矛盾,针对性越强,深度越大,适应度越窄;而反过来,针对性约弱,深度越小,适应度就越宽。在学习数据挖掘诸多算法时应该还是更多注重这些适应度较宽的算法思路
2、人工神经网络算法
大脑是人的神经最为关键和核心的部分,也同样是所有脊椎动物门的动物最宝贵的“财产”。人类豢养各种宠物,如狗或猫,条件比较富裕的人还会豢养马、鹿等,主要原因也是由于这类动物更加通人性、聪明、互动感好,容易与人的交流形成配合。
这些无一例外,都是脊椎动物门的动物,都有大脑。
通过大量的解剖研究,人们逐渐对神经网络的组成原理有了更多的认识,并开始尝试着解读神经网络的奥秘所在。现在流通的资料里,关于人体神经元数量的估算还是莫衷一是,但是有一个数字大家基本认可,即人的大脑皮层里有神经元约亿个,人的全身有数百亿到上千亿个神经元。神经网络有以下两个非常优秀的特点。(1)大规模并行分布式结构。(2)神经网络的学习能力和由此而来的泛化能力
泛化这一点很重要,它是指在遇到一些没有在训练中遇到的数据时仍然可以得到合理的输出,具备这两种强大的信息处理能力让神经网络可以为一些当前难以处理的复杂问题找到一些好的近似解。
二、深度学习引出
在传统的机器学习方法中,如决策树和随机森林,几乎所有的特征都需要通过行业专家在确定,然后手工就特征进行编码。然而神经网络具有学习能力和泛化能力,笔者认为这个泛化能力就可以理解为深度学习,泛化算法或深度学习试图自己从数据中学习特征,这是深度学习最大的魅力,也是人们深入研究的价值出发点。
概况以上描述总结如下:机器学习通过算法,让机器可以从外界输入的大量的数据中学习到规律,从而进行识别判断。机器学习的发展经历了浅层学习和深度学习两次浪潮。深度学习可以理解为神经网络的发展。
三、深度学习原理
深度学习是一个多层次的学习,如下图所示,用较少的隐含层是不可能达到与人脑类似的效果的。这需要多层的学习,逐层学习并把学习的知识传递给下一层,通过这种方式,就可以实现对输入信息进行分级表达。深度学习的实质就是通过建立、模拟人脑的分层结构,对外部输入的声音、图像、文本等数据进行从低级到高级的特征提取,从而能够解释外部数据。与传统学习结构相比,深度学习更加强调模型结构的深度,通常含有多层的隐层节点,而且在深度学习中,特征学习至关重要,通过特征的逐层变换完成最后的预测和识别。
深度学习模型四、深度学习框架深度学习如火如荼地发展,各种深度学习框架相继开源。社区活跃并且应用广泛的深度学习工具包括TensorFlow、Keras、CNTK、Caffe、MXNet等。框架之间的用户抢夺愈演愈烈,目前较为火热的是TensorFlow,其在用户和使用范围上有较大的优势。开源框架的流行程度由很多因素共同决定。例如,开源产品本身优异的质量,背后企业成熟的社区运作,快速的迭代更新,活跃的社区和反馈,最终形成良性循环
1、TensorFlow:TensorFlow是Google推出的深度学习框架,TensorFlow的用户可以快速设计深度学习网络,将底层细节进行抽象,而不用耗费大量时间编写底层CUDA或C++代码。
2、CNTK:CNTK是微软开源的深度学习框架,是最早支撑语音识别的深度学习应用。它将神经网络描述成在有向图上的一系列计算步骤。在这个有向图中,叶子结点表示输入层或网络参数,其他的结点则表示成在输入层上的矩阵操作。CNTK是微软在Cortana数字助理和Skype翻译应用中使用的语音识别的系统框架。
3、Caffe2:Caffe2是一个应用广泛的深度学习框架,在TensorFlow发布之前其一直是深度学习领域最为火热的项目。
4、MXNet:MXNet是DMLC推出的一款开源的深度学习框架,是亚马逊AWS主推的一款深度学习框架,AWS官方推荐使用MXNet进行深度学习编程。
五、深度学习适用领域
典型应用领域有:
1、计算机视觉:计算机视觉能够解决的问题有:(1)图像识别:图像识别问题的输入是一张图片,输出图片中要识别的物体类别。
(2)物体检测:物体检测问题的输入是一张图片,输出的是待检测物体的类别和所在位置的坐标,通过深度学习方式可以解决。
(3)人脸识别:人脸识别又可以细分为很多子问题,例如,人脸检测是将一张图片中的人脸位置识别出来,人脸校准是将图片中人脸更细粒度的五官位置找出来,人脸识别是给定一张图片,检测数据库中与之最相似的人
2.语音识别深度学习在语音识别中的作用很大一部分表现在特征提取上,可以将其看成是一个更复杂的特征提取器。
3.自然语言处理深度学习在自然语言处理中的应用越来越广泛,从底层的分词、语言模型、句法分析等到高层的对话管理、知识问答、聊天、机器翻译等方面几乎全部都有深度学习模型的身影,并且取得了不错的效果。
注:关于自然语言处理,可以参考我的另外一篇文章:数据挖掘之文本分类技术,最详细的原理解读
总体来说,在许多领域,深度学习都表现出了巨大的潜力,但深度学习作为机器学习的一个新领域,现在仍处于发展阶段,还有很多问题值得我们进一步深入研究和探讨