机器学习(一) - 基本概念,学习过程和工具

写在前面的话:

从2014年到现在,从大数据到机器学习,从技术到算法,从软件到硬件,两年多的时间,我对于计算机行业,或者说信息产业面临的一个重大转折 - 人工智能的认识,也是越来越清晰。因此,我觉得有必要梳理自己的机器学习过程,既是反思也是积累,也希望在这个过程中有一些新东西。本着这个原则,我用我自己的话把有关机器学习的知识,经验,技能和感悟,写在这里。有任何不当之处,敬请指正。

基本概念

人工智能是研究人类智力和智能,以希望能够拓展人类智力和智能的一门学科,机器学习是人工智能的核心部分,也就是使用机器通过学习的方法来拓展人类的智力和智能。具体的定义有很多,比如百度百科里列举的:

1。Langley(1996) 定义的机器学习是“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。(Machine learning is a science of the artificial. The field's main objects of study are artifacts, specifically algorithms that improve their performance with experience.')

2。Tom Mitchell的机器学习(1997)对信息论中的一些概念有详细的解释,其中定义机器学习时提到,“机器学习是对能通过经验自动改进的计算机算法的研究”。(Machine Learning is the study of computer algorithms that improve automatically through experience.)
3。Alpaydin(2004)同时提出自己对机器学习的定义,“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。”(Machine learning is programming computers to optimize a performance criterion using example data or past experience.)

这里都提到的经验就是我们熟悉的另一个热词:“大数据”。而我们在谈论大数据的时候,重点在从数据中获取洞察力,而机器学习扮演了从数据中提取洞察力的工具和手段。我更相信大数据是机器学习的前奏和基础,机器学习是大数据的高级阶段。具体来说,前几年炒作大数据的时候,更多的是使用机器按照传统的方式处理数据,用人脑来提取洞察力,这就是数据捕获,数据传输,数据处理,数据存储,数据可视化(我会在另外的系列文章里面专题谈《大数据》);现在,我们谈机器学习,是在大数据处理的基础上把人脑提取洞察力的过程替换成机器来完成。因此,如果要我给出机器学习的定义,那么机器学习就是使用计算机对数据进行处理,得到规则和经验,再让机器应用规则和经验实现人的智能的科学。

学习过程

机器学习的过程基本上就是三步:获取,整理数据;选择模型,训练数据;获取规则,经验并通过分类,预测等动作评估模型。这三步如此往复,机器就能越来越好完成人脑可以完成的智能动作:识别,判断,预测。在这三步里面,第一步耗时最多,原因也有三点,第一是数据量大的时候,准备数据时间会很长,确保数据正确的步骤会很多;第二是数据能够给某种模型去学习的形态各异,做数据格式转换的时间也很长;第三,数据字段与字段之间取值范围差异,在给模型处理之前往往也需要做标准化,数据坐标变形计算时间耗时很多。第二步模型训练根据算法不同用时不一,对于神经网络,特别是深度神经网络的迭代往复,是计算开销最大的,在业界做数据训练的时候,往往要依赖分布式计算系统(比如云计算技术),特殊硬件(GPU,TPU)来把几周,几天的计算时间压缩到小时和分钟,提高机器训练的时效性。第三步的人工编程量大,对于训练出来的规则,经验,去做评估,判断模型好坏,并且调节优化模型,输出规则和经验给软件和硬件,需要大量的接口编程,需要结合其它人工智能,认知计算,虚拟现实技术去实现,比如无人机飞行控制,无人驾驶汽车操作,智能客服对话等等过去需要类比人智能完成的动作。

工具

机器学习依托于大数据,云计算,物联网等等跨界计算和技术,也需要大量的全栈工程师去实操。我在这里按照云计算架构,结合物联网,根据大数据流程描述机器学习的工具。

在机器学习工具底层往往采用云计算的IaaS方式,运行互相紧密连接的TPU,或者带有GPU的运算节点。物理运算节点上面运行虚拟机,然后在虚拟机里面运行docker,然后采用SWARM管理容器,再在容器里面跑python或者go,或者scala,甚至nodejs。也可以直接在docker里面运行tensorflow,torch,caffe,keras机器学习框架。

最简单的做法就是使用keras,结合scitkit-learn和numpy, matplotlib, pandas等库做概念尝试,再用go或者scala去推广。


你可能感兴趣的:(认知计算,机器学习,人工智能)