程序员们,AI来了,机会来了,危机也来了

转载自 麦好

1. 人工智能真的来了

​ 纵观古今,很少有计算机技术能有较长的发展寿命,大部分昙花一现,比如:昔日的DOS、windows3.2、foxpro、delphi、80x86汇编,还有很多技术也在艰难地挣扎,比 如:VB、PB、Sqlserver,甚至连微软的.NET也被来自全球强大的开源力量逼到了死角, 以至于不得不开放源码,向Linux投出橄榄枝,才得以继续发展壮大。

​ 2013年深秋,一个秋高气爽的日子,此时的大数据在中国已经开始蠢蠢欲动,Hadoop作为离线计算的大数据平台开始悄然风靡,机器学习开始在中国播下种子,但这些仅局限于大公司和高校内部,中国的大地上并没有充满人工智能的气息, 我应机械工业出版社的邀请,写了《机器学习实践指南》(该书已于2014年出版,目前是第二版)。写完这本书后,我有一种强烈的预感:人工智能与机器学习未来肯定必火,而且它肯定会成为计算机技术发展史上最长寿的技术,可能长达几百年甚至几千年,以至于人类移民到了其它星球,人工智能仍会繁荣昌盛~,但是,我万万没想到,出书不到3年,人工智能已经在中国四处开花,硕果累累,其发展速度,超出我的想象,吴恩达公开的辞职信已经说明了人工智能在中国的发展现状。

“正如百年前电电能改变的了很多行业一样,人工智能也正在改变着医疗、交通、娱乐、制造业等主要行业,丰富充实着无数人的生活。对于人工智能将带领我们前往何方,我比以往都要兴奋和期待。我很荣幸能够从两大人工智能强国,中国、美国的人工智能界都学习过。美国擅长创造新的技术和理念,而中国擅于将人工智能技术用于开发出好的产品。我很高兴自己能够有机会既为中国也为美国的人工智能发展崛起作出努力和贡献”

--前百度首席科学家吴恩达


​ 注意上述信件内容“中国是人工智能大国”,作为程序员们,机会来了,为中国的AI技术发展作出自己的贡献,同时开辟自己新的职业生涯。

​ 机器学习技术在国外得到了海量应用和深入发展。2015年11月,谷歌开源了全新的TensorFlow机器学习系统,该系统更快、更智能,也更具有弹性。2015年1月,机器学习平台 GraphLab改名为Dato,并获得了 1850 万美元的新融资(投资方为 Vulcan Capital 、Opus Capital 、New Enterprise Associates、Madrona Venture Group),此前他们曾获得 680 万美元的融资。2015年8月,Facebook推出了“M”,Facebook认为人类不仅会回答人工智能所不能回答的问题,而且从长远来看,人类也会帮助改善人工智能技术,“M”除了能做到回答问题、查阅信息等基本功能外,还可以帮助用户完成如购买商品、餐厅定位、安排旅行计划等操作。在2015年12月召开的“2015年神经信息处理系统”(NIPS)会议上,微软研究人员和工程师公开了20多篇机器学习新研究成果的论文。此外,微软还宣布,机器学习正在成为Windows 10的一部分:Skype翻译可以将口语几乎实时地翻译成其他语言,就像《星际迷航》中的通用翻译器那样,可以做到面对面的交流。Cortana个人数字助理在与用户的互动中不断学习与改进,从而帮助用户管理日历、跟踪快递,甚至能与用户聊天和讲笑话,实现真正的个性化互动体验。Clutter是微软Office 2016的成员,通过学习它可以识别出哪些电子邮件对用户来说重要,并自动将不重要的邮件重定向到一个单独的文件夹中,从而保持用户收件箱的整洁。2015年9月,美军军队医疗中心指挥官少将Steve Jones在美军陆军的一次会议上发言表示,未来可以让智能机器人代替人类上战场运送伤员,美国军方甚至高调宣布:未来战场上机器人救起的可能不是人,而是机器人,因为智能机器人军团将代替人类出征。

img

​ 在本节的结束,我也展望一下人工智能的未来:

不久的将来,人类也许该思考:在未来的世界里,机器人将充当什么样的角色,会不会代替人类呢?人类与智能机器之间应如何相处?

人类开始着手研究,如何才能更好地实现下面三大定律:

第一,机器人不可伤害人;

第二,机器人必须服从人的命令;

第三,机器人可以在不违背上述原则的情况下保护自己。

img

2. 人工智能与大数据

大数据时代已经到来,这个已经成为事实。但随着hadoopSpark、storm的高度普及,大数据技术成为软件开发和编程的普通领域,技术门槛越来越低,越来越多的人涌入这个行业,历史证明没有一个长久发展的技术领域必定是昙花一现,大数据技术也会这样吗?答案是:不!因为有人工智能的参与,大数据是基于数据分析与挖掘技术的应用,是机器学习算法和数据存取技术的结合,利用机器学习提供的统计分析、知识发现等手段分析海量数据,同时利用数据存取机制实现数据的高效读写。

img

提示:在此普及一下两个概念:

  1. 数据挖掘是识别出巨量数据中有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程。

  2. 数据分析是指用适当的统计方法对收集来的大量第一手资料和第二手资料进行分析,以求最大化地开发数据资料的功能,发挥数据的作用,它是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程”无论是数据分析还是数据挖掘,都是帮助人们收集、分析数据,使之成为信息,并作出判断。

3. 人工智能与模式识别

程序员们,人工智能不是一门编程技术,也不是数据结构与算法,人工智能是编程、数据结构、算法与数学的结合 。

我们开始来谈模式识别,它是起源于工程领域,而机器学习起源于计算机科学,这两个不同学科的结合带来了模式识别领域的调整和发展。模式识别研究主要集中在两个方面:一是研究生物体(包括人)是如何感知对象的,属于认识科学的范畴;二是在给定的任务下,如何用计算机实现模式识别的理论和方法,这些是机器学习的长项,也是机器学习研究的内容之一。

模式识别的应用领域广泛,包括计算机视觉、医学图像分析、光学文字识别、自然语言处理、语音识别、手写识别、生物特征识别、文件分类、搜索引擎等,而这些领域也正是机器学习的大展身手的舞台。

4. 数学来了!危机来了

​ 咱们前面一直在谈机会,下面该谈危机了,大伙从第3节就可以看出危机了,模式识别都来了~

​ 人工智能和机器学习是美好的,程序们,进军AI领域吧!准备好了吗?!真的准备好了吗?那我们继续。。

​ 人工智能和机器学习的入门门槛较高,尤其对研究者的数学理解能力有较高要求,你肯定有话说,我懂数据结构、计算机算法,我做软件开发很多年了,我都是系统架构师了,都是项目管理师了,各种高端~

​ 但我告诉你们,机器学习是一个全新的领域,也是一个全新的高度,理解机器学习算法往往要从理解它涉及的数学公式和数学知识开始,所有的AI从业者都必须通过攀登数学这座大山一步步走入机器学习领域,打好数学基础是非常必要的,一旦你掌握了数学分析、线性代数、概率与统计、统计学、离散数学、抽象代数、数学建模等数学理论后,理解机器学习算法就容易多了,就不会畏惧那些让人生厌和烦琐的数学符号和数学公式,反而会喜欢上这些数学公式,并尝试亲自推导一番。

​ 掌握机器学习算法至少需要以下几种数学的基本知识。

1) 微积分

微积分的诞生是继欧几里得几何体系建立之后的一项重要理论,它的产生和发展被誉为“近代技术文明产生的关键之一,它引入了若干极其成功的、对以后许多数学的发展起决定性作用的思想”。微积分学在科学、经济学和工程学领域有广泛的应用,解决了仅依靠代数学不能有效解决的问题。微积分学建立在代数学、三角学和解析几何学的基础上,包括微分学、积分学两大分支,包括连续、极限、多元函数的微积分、高斯定理等内容。

微积分在天文学、力学、化学、生物学、工程学、经济学、计算机科学等领域有着越来越广泛的应用,比如:在医疗领域,微积分能计算血管最优支角,将血流最大化;在经济学中,微积分可以通过计算边际成本和边际利润来确定最大收益;微积分可用于寻找方程的近似值;通过微积分解微分方程,计算相关的应用,比如,宇宙飞船利用欧拉方法来求得零重力环境下的近似曲线等。

在机器学习和数据分析领域,微积分是很多算法的理论基础,如:多层感知器神经网络算法。多层感知器是一种前馈人工神经网络模型,算法分为两个阶段:正向传播信号、反向传播误差。

正向传播信号阶段是对样本的学习阶段,输入的信息从输入层传入,经各个隐层计算后传至输出层,计算每个单元的实际值,向各层各单元分摊产生的误差;反向传播误差阶段通过网络输出与目标输出的误差对网络进行修改审查,将正向输出的误差再传播回各层进行权重值调整,直到误差最小化或达到规定的计算次数。微积分理论在多层感知器模型中运用较多。

img

2) 线性代数

线性代数是高等数学中的一门成熟的基础学科,它内容广泛,不但包含行列式、矩阵、线性方程组等初等部分,而且包括线性空间、欧式空间、酉空间、线性变换和线性函数、λ-矩阵、矩阵特征值等更深入的理论,线性代数在数学、物理学、社会科学、工程学等领域也有广泛的应用。

线性代数理论是计算技术的基础,在机器学习、数据分析、数学建模领域有着重要的地位,这些领域往往需要应用线性方程组、矩阵、行列式等理论,并通过计算机完成计算。

3) 概率论

概率论是研究随机性或不确定性现象的数学,用来模拟实验在同一环境下会产生不同结果的情况。下面这些概率理论是概率论的基础。

(1)古典概率

(2)条件概率

(3)概率公理

公理1:0≤P(A)≤1(A∈S)

公理2:P(S)=1

公理3:P(A∪B)=P(A)+P(B),如果A∩B=0

(4)概率分布

包括二项分布、几何分布、伯努利分布、泊松分布、均匀分布、正态分布、指数分布等。样本空间随机变量的概率分布可用累积分布函数和概率密度函数进行分析。

概率论在机器学习和数据分析领域有举足轻重的地位,比如马尔可夫链理论。马尔可夫链对于现实世界的很多现象都给出了解释,泊松过程是连续时间离散状态的马尔可夫链,布朗运动是连续时间连续状态的马尔可夫链等。

马尔可夫链在计算数学、金融经济、机器学习、数据分析等领域都有重要的应用,马尔可夫链是数学中具有马尔可夫性质的离散时间随机过程,在给定当前知识或信息的情况下,仅使用当前的状态预测将来,在马尔可夫链的每一步,系统根据概率分布,从一个状态变到另一个状态或保持当前状态。

4) 统计学

统计学是收集、分析、表述和解释数据的科学,作为数据分析的一种有效工具,统计方法已广泛应用于社会科学和自然科学的各个领域。统计学与概率论联系紧密,前者以后者为理论基础。统计学主要分为描述统计学和推断统计学。描述统计学描绘或总结观察量的集中和离散情形,基础的数学描述包括了平均数和标准差等;推断统计学将资料中的数据模型化,计算它的机率并且做出对于母群体的推论,主要包括假设检定、对于数字特征量的估计、对于未来观察的预测、相关性预测、回归、变异数分析、时间序列、数据挖掘等。

无论是描述统计学还是推断统计学都是数据分析技术的基础。通过描述统计学方法,数据分析专家能对数据资料进行图像化处理,将资料摘要变为图表,分析数据分布特征。此外,还可以分析数据资料,以了解各变量内的观察值集中与分散的情况等。通过推断统计学方法,对数据未知特征做出以概率形式表述的推断,在随机抽样的基础上推论有关总体数量特征。

5) 离散数学

离散数学是数学的几个分支的总称,研究基于离散空间而不是连续的数学结构,其研究内容非常广泛,主要包括数理逻辑、集合论、信息论、数论、组合数学、图论、抽象代数、理论计算机科学、拓扑学、运筹学、博弈论、决策论等。

离散数学广泛应用于机器学习、算法设计、信息安全、数据分析等领域,比如:数理逻辑和集合论是专家系统的基础,专家系统是一类具有专门知识和经验的计算机智能程序系统,一般采用人工智能中的知识表示和知识推理技术,模拟通常由领域专家才能解决的复杂问题;信息论、数论、抽象代数用于信息安全领域;与信息论密切相关的编码理论可用来设计高效可靠的数据传输和数据储存方法;数论在密码学和密码分析中有广泛应用,现代密码学的DES、RSA等算法技术(包括因子分解、离散对数、素数测试等)依赖于数论、抽象代数理论基础;运筹学、博弈论、决策论为解决很多经济、金融和其他数据分析领域的问题提供了实用方法,这些问题包括资源合理分配、风险防控、决策评估、商品供求分析等。

以上是机器学习需要的核心数学知识,但不是全部知识。随着今后人类对机器学习的深入研究,将有更多的数学分支进入机器学习领域。因此,仅掌握大学数学知识是不够的,还需要向更高层次进军,对于非数学专业毕业的朋友来说,还应该学习其他数学分支理论,比如说泛函分析、复变函数、偏微分方程、抽象代数、约束优化、模糊数学、数值计算等。

建议各位购买以下数学书籍,随时翻阅参考。

Finney,Weir,Giordano.《托马斯微积分》.叶其孝,王耀东,唐兢译.第10版. 北京:高等教育出版社 2003-1

Steven J.Leon.《线性代数》.张文博,张丽静译.第8版.北京:机械工业出版社

William Mendenhall等.《统计学》. 梁冯珍,关静译.第5版.北京:机械工业出版社

Dimitri P. Bertsekas等.《概率导论》.郑忠国,童行伟译.第2版.北京:人民邮电出版社

Kenneth H.Rosen等.《离散数学及其应用》.袁崇义,屈婉玲,张桂芸译.第6版.北京:机械工业出版社

Eberhard Zeidler等.《数学指南:实用数学手册》.李文林译.北京:科学出版社

它们都是机器学习所涉及的经典数学书,可以考虑将它们和《设计模式》、《算法导论》、《深入理解计算机系统》等经典算法书放在一起,作为案头必备书。

​ 历数这么多,只是人工智能需要懂得的数学的冰山一角。危机是来了,可是程序员们,为了AI,还是拼一把,好好学习数学吧~

一位MIT的牛人在BLOG中曾提到,数学似乎总是不够的,为了解决和研究工程中的一些问题,不得不在工作后,重新回到图书馆捧起了数学教科书。他深深感到,从大学到工作,课堂上学的和自学的数学其实不算少了,可是在机器学习领域总是发现需要补充新的数学知识。看来,要精通机器学习知识,必须在数学领域学习、学习、再学习,这一切都是很艰苦的。要学好机器学习必须做好艰苦奋斗的准备,坚持对数学知识的追求。

5.程序员的看家本领出场了

​ 既然是程序员进军AI,那自然有程序员的优势。以下技术是建议程序员进军AI时,需要学习的技术(这些不需要解释,所以只提供列表,如果看不懂。。。。那无语。。。):

​ (1) python

​ (2) R

​ (3) SQL

​ (4) linux shell和基本运维知识

​ (5) java(激动吧,到处都有它的影子,它能出现在列表中,应感谢HADOOP和SPARK还有STORM)

​ (6) scala

​ 接下来是架构:

​ 1.hadoop

​ 2.spark

​ 3.storm

​ 4.tensorflow,paddlepaddle,caffe

​ 最后,强调一下激动人心的机器学习框架(程序员可以简单得理解为库,实际比库要更复杂)及其融合:

​ 1、spark :数据都通过RDD这种万能格式在内部处理,无论是离线计算还是实时流计算,都是RDD,简化了编程(官方编程语言是python、R、scala)。

​ 2、MLlib :是Spark的机器学习库,可以实现分布式机器学习算法,包括分布式矩阵计算等,支持各种非深度学习算法用于分类、回归、聚类、推荐等。

​ 3、tensorflow :一个非常优秀的AI框架,注意,它不仅仅是一个深度学习库,它是一个AI架构。

​ 4、tensorflow on spark:TensorflowOnSpark 支持使用Spark/Hadoop集群分布式的运行Tensorflow,号称支持所有的Tensorflow操作。TensorFlowOnSpark提供两种不同的模式来提取训练和推理数据:

(1)TensorFlow QueueRunners:TensorFlowOnSpark利用TensorFlow的file readers和QueueRunners直接从HDFS文件中读取数据。Spark不涉及访问数据。

(2)Spark Feeding :Spark RDD数据被传输到每个Spark执行器里,随后的数据将通过feed_dict传入TensorFlow图。

​ 5、caffe on spark:CaffeOnSpark被设计成为一个Spark深度学习包,CaffeOnSpark API支持dataframes,以便易于连接准备使用Spark应用程序的训练数据集,以及提取模型的预测或中间层的特征,用于MLLib或SQL数据分析。

6. AI的核心

​ 前面说了这么多,估计各位是有压力了。接下来的压力会更大~

​ AI全名人工智能,它需要使用编程、算法、数据结构、数学,更需要一个机器学习思维方式。

​ AI的核心在于以下三点:

​ (1)特征提取,比如,对一堆苹果进行分类,特征包括,重量,形状,生长期等等。

​ (2)模型与算法选择,比如:SVM、神经网络、决策树、语义树、知识库、各种视觉算法等等。

​ (3)机器学习网络构造,比如:深度学习虽然可以自动提取特征,但仍需要对其参数、具体网络结构进行定义和训练。

7. 结束语

​ 咱们来轻松一下吧,AI作为一个发展空间很大,发展周期也很长的技术,确实是程序员的最佳进军地点,但是难度也很大,是的,不可否认,有框架,有现成的库,作为一个调参党挺好,如果这样,那在AI领域肯定不能长久走下去。你必须理解这些算法的原理,有空应亲自实现这些算法,加深理解,否则你无法完成参数良好的AI库调用,简单的调库是不行的~

​ 机会和危机总是并存的,祝各位早日进入机器学习和人工智能的大门。

​ 仅以此文与各位共同学习,共同进步,不当之处请谅解。

8. 最后的甜点

​ 不是结束了嘛~嘻嘻,不不,还有一个甜点,一个AI从业者的发展路线,让各位朋友可以轻松地进入人工智能行业

​ 第o步,为什么说是第0步,因为这一步只是需要熟悉和有使用经验,不需要精通那么这一步的是什么?就是大数据码农(AI时代的码农,领域技术更新快,也是普通程序员最容易转行AI的领域,但是也是最容易被高速发展的技术淘汰的领域):

img

​ 学习hadoop搭建与基础、zookeeper、mapreduce、hbase、hive、flume、kafka、spark dataframe、spark sql、spark streaming、scala基础。

** 为什么如果仅停留在第0步很容易被淘汰,因为hadoop曾经风光一时,但不到2年,spark已经大行其道,现在,tensorflow、paddlepaddle开始变得很火了。**

​ 然后,当你在努力学习spark时,hadoop3.0已经出了测试版,号称计算速度将超过spark。

技术更新速度已经是以年为单位~

​ 第一步,学习数据结构与算法,用程序调用AI库。

​ 第二步,使用大数据存取平台,存取数据,调用AI库。

​ 第三步,学会调节参数,调用AI库。

​ 第四步,努力学习数学,还是调用AI库。

​ 第五步,学习机器学习算法,还是调用AI库。

​ 第六步,还是调用AI库,哈哈,不同的是,知道算法的原理和核心要点,明白什么样的数据和场景使用什么样的算法,明白参数要如何调节,才能让AI库得到最好的效果。

​ 第七步,这次剖析AI库,从而更好地利用AI库,途径是:亲自编程实现机器学习算法,理解AI库的内部实现方式,必要时,直接编写AI算法和现有AI库一起工作。

​ 第八步,更深入学习数学,迎接AI技术的不断发展和挑战。

​ 第九步, 。。。。机器人出来后,研究三大定律。

​ 再来和大家分享一下提高机器学习算法准确率的心得:

  • 第一,换算法
  • 第二,优化特征提取
  • 第三,调整参数
  • 第四,样本数据的优化和输出结果的优化