从锅炉工到AI专家(1)

序言

标题来自一个很著名的梗,原由是知乎上一个问题:《锅炉设计转行 AI,可行吗?》,后来就延展出了不少相似的问句,什么“快递转行AI可行吗?”、“xxx转行AI在线等挺急的”诸如此类。
其实知乎原文是个很严肃的问题,不少回答都详尽、切题的给出了可行的方案。AI的门槛没有不少人想象的那么高,关键在于你是知足于只是看几个概念就惊呼“人工智能将颠覆xxxx行业,xxxx人将失去工做”、“人工智能将会毁灭人类”,仍是你真的打算沉下心来学一些人工智能的知识,学习用另一种方法和视角了解这个世界。
因此本文其实也是一篇很严肃的文章,标题的本意只是想说本文从最基础的概念讲起,即便是非IT技术人员,也应当能看懂。至于网上泛滥的所谓0基础学AI,我敢说,你也不该当相信才对。
咱们都知道自从行业意识到人工智能的重要性以来,各大IT巨头都纷纷发布了本身的人工智能技术框架,其中Google发布的TensorFlow算是发表比较早、通过屡次迭代也比较成熟的一个框架。目前碰到的问题是,不少人学习了TensorFlow,翻完了全部文档,演练了全部的示例代码,仍然感受对AI一头雾水,不知道如何入手具体的工做。本文就试图从最初讲起,一开始彻底不涉及技术,逐渐在提出问题和解决问题的过程当中,将TensorFlow导入,让读者知道前因后果,从而能够把人工智能应用到工做中,而且从思路上帮助非IT专业人士,优化本身的工做。html

人工智能

人工智能并非新事物,只是这两年,特别是“阿尔法狗打败人类”这个热点事件以后才格外的火起来。IT行业和资本领域都属于特别爱炒做概念的行业,随着时间的流逝,有些概念保留了下来,有些则变得无人问津,但大多数,都是在喧嚣事后,才逐渐的回归到本源。等待回归本源的时候,真正抓住核心和本质的人,才能有机会走的更远。
计算机最先发明出来,就有人给它起了一个名字叫“电脑”,实际上从那天开始人们就意识到,计算机是人脑的一个延伸,人们已经试图用计算机实现原有人类智能才能解决的工做,这应当看作“人工智能”实践的标志性起源。
通过几十年的发展,在人工智能方面的技术和理论发展愈来愈成熟,技术人员已经有了一整套系统和规范的方法来应对此类问题。这些方法,基本是对大量的数据集进行处理,总结和发现规律,并将这些规律应用到新的数据集上。前半部分相似于人的学习过程,后半部分相似于人使用学到的知识解决问题的过程。因此这个过程也被称做“机器学习”,以及延伸而来的“深度学习”、“增强学习”、“迁移学习”等。因此“机器学习”,才是当前“人工智能”热之中的基本研究方向之一。python

现状

试图解释AI领域的现状实际上是一个比较不讨好的事情,特别是在信息快餐化的时代,真假新闻都已经够让人崩溃了。聊天的时候,常常碰到说不了几句就会被人打断,随后引用几个听起来很神奇,实际上漏洞百出的新闻标题来证实你不过是一无所知。
为了简化问题,这里引用两个概念来作一个澄清:程序员

  • 一个概念是“强人工智能”,是指人工智能可能具备人类完整的认知能力,能够推理、感知,而且由于速度和容量方面的优点,未来必将超越人类达到无所不知、无所不能的“类神”的境地,这也是科幻小说的的主要模式之一。
  • 另外一个概念是“弱人工智能”,这也是当前业界主要的研究方向,弱人工智能不须要具备人类完整的认知能力,甚至是彻底不具备人类所拥有的感官认知能力,只须要在某个特定领域具有特定的能力就能够。咱们当前所见到的“阿尔法狗”、“人脸识别”、“机器翻译”等,都属于这个领域。

这两个概念,其实最先开始的时候是两个互相争执不下的观点,一派认为人工智能未来必将远胜于人类,甚至取代人类,也就是“强人工智能”派;对应的则是认为人工智能不可能取代人类,人工智能只能在某些领域发挥做用,最终依然会从属和辅助人类,也就是“弱人工智能”派。咱们在这里并没打算涉及这两派观点的争论,只是借用这两个概念来讲明当前人工智能的现状。
那就是,在当前的技术状况下,“弱人工智能”的发展兴旺蓬勃,在不少领域已经远远的超过了人类,而且的确对该领域的从业人员产生了重大的影响,从技术、理念的革新,到人力资源的岗位转移。
“强人工智能”的发展则应当说仍在探索中,离达到一个正常人基本智力水平的基本目标尚有很大差距,且远远尚未看获得的、使人信服的技术出现。
关于“人工智能最终超过人类”的说法,我我的的观点是比较悲观的,即使从时间跨度上给出一个至关宽松的计划表,人工智能想超过人类的难度也很是大。主要缘由来自于咱们都知道的《物种起源》,咱们知道人类生理方面的进化的主要模式是遗传和变异,在精神方面中则是“传承”和“发展”。这些“变异”或者“发展”其实主要的来源都是“犯错”。有些犯错是好的,加上环境的容许,这些犯过的“错”保留下来,成为新的知识。而有些错则是致命的,即使其中有可取之处,但可能个体都没法存续,更没法发展和传承。
而“机器”则很难或者说远远低于正常人类可能有的“犯错”水平,从某种角度说,这正是人们喜欢用电脑的缘由之一,电脑不多犯错,但也就此失去了不少“进化”的机会。
关于现状,最后一个要说的是,如今人工智能这么火,里面有泡沫吗?这一点我想引用比尔盖茨在1999年达沃斯世界经济论坛期间一个著名的回答,当时正是高科技泡沫的巅峰时期。盖茨一次又一次地被记者们问到类似的问题:“盖茨先生,如今的网络股是泡沫股,对吗?它们难道不是泡沫吗?”最后,有点被激怒得盖茨对记者们说:“他们固然是泡沫,但大家没有问到点子上。泡沫给网络行业带来了不少新资本,这必将更快地推进创新。”算法

因此,其实我也认为如今的“人工智能”以及“机器人”领域充斥着泡沫,但这同时也引起了全社会的关注和重视,从而推进了这个领域的快速进步,并持续的带来新的人才、新的创新。可是对于有意愿投资在这一行的人来讲,你愿不肯意踏踏实实的作事。即使不成功,也在技术上或者经验上留下一些痕迹,才是值得考虑的事情。编程

机器学习基本假设

好了,下面到了咱们的正课时间。
目前的机器学习已经有了多种被证实行之有效的算法,而这些算法都基于一个很重要的假设,那就是这个世界上全部的问题,都是能够用数学来描述的。小到用电脑识别的一副照片,大到用11维空间来描述整个宇宙的弦论,都是有与之对应的数学模型的。经过数学模型来解决问题,大概是这样一个流程:数据输入 -> 数学公式 -> 结果
而在机器学习理论以前,咱们依赖电脑解决问题,则是经过: 数据输入 -> 计算机程序 -> 结果
咱们都知道,全部数学公式,最终都是能够对应转化成计算机程序的,那这两种方式区别在哪?咱们举一个例子:
好比咱们能够在屏幕上,显示出 LOVE 这样几个字母,对电脑最简单不过,高级语言就是一行命令。固然背后隐藏的就复杂了,要把这几个字母经过光栅矢量化,而后经过显卡的驱动,把字母的矢量点阵化,而后再绘制到屏幕上去。刚才叙述的这个复杂的过程,都是由程序完成的,程序的主要组成部分是逻辑,虽然“逻辑”也是高等数学重要的一部分,但这里说的“逻辑”更多的则是由人的思惟产生,至少首先要由程序员在大脑中先造成并几经反复、修正,而后仿照这个过程造成计算机的程序,这个过程更多的人自己的学习,而不是“机器学习”。
那么这么复杂的“字符”,用数学公式可能描述出来吗?固然是能够的,几乎一切你想的到的东西,都是能够用数学来描述的,这也是这一节开头那个概念的由来。

更复杂一点,三维的图形,也是同样的:

你可能会说,不对啊,怎么感受用数学的方式来画出几个字符,比原来在屏幕上显示这几个字符的方法麻烦多了?先别急,这里的重点只是想告诉你,用数学方法解决问题同用单纯程序解决问题的区别。机器学习不是万能的,在不少领域,用传统的程序解决会更容易。千万不要成为“只要手里有个锤子,看全世界的问题都像是钉子”。但也有不少领域,用传统的程序,可能根本作不到。网络

总结一下,咱们假设一切问题都是能够用数学来描述的,在不少大神已经发明的公式中找出适合这个问题的那一个,甚至本身改善或者从新研究、发现一个,而后把公式用计算机程序的方式描述出来,也就是算法,就能够解决这个问题。引用某个演讲中的一句话:音乐是感情的语言,数学是科学的语言。框架

一个最简单的例子

咱们都知道,解决一个复杂的问题的方法,是把复杂的问题分解成一连串的简单问题。一个高维数学问题若是想不明白,每每也是下降维度来思考。咱们下面先从一个最简单的问题入手,来逐步导入机器学习的算法。
假设你在一个房屋中介工做,你手头有不少房屋租售价格的信息,天天都会有不少客户来咨询你租房或者买房的事情,咱们假设是买房,常见的问题会是:在甲地,x平米的房子,多少钱能买下来?
根据需求咱们能够列出一个公式:y = a * x + b(仅做示例,请忽略一些不合常理的地方)
这个公式里,y表明咱们预测的房价,a是每平米的价格,x是平米数,b是税、手续费等基本的固定费用。
我心中有些忐忑,我以为会不会不少人都在笑,小学问题是吧?不要急,耐心看下去,“降维”思考,原本就是把复杂的问题简单化。
好比在某个地区,咱们手头有多套房屋信息,售价、面积咱们都知道,简单把公式变换一下, a = (y-b)/x,把咱们手头的信息代入进去,很容易就能算出来该地区每平米的单价。之后碰到客户咨询的时候,利用这个公式,咱们就能预测出来用户想要的房子,大概须要多少钱买到。
太简单了是吧?好像看不到什么“机器学习”的东西在里面啊?就是简单的解方程嘛,虽然要求解的变量从“x”变成了“a”。
的确是这样的, 机器学习根本的目的,就是解方程 。对于简单的方程,好比刚才的方程,由于只有两个要求得的变量a和b,根据解方程的知识,咱们只要有两组已知的x和y,就能够准确的求出这个方程的解。别扭一点的无非是咱们上学的时候习惯用x/y/z表明未知数,a/b/c表明常数。
如今反了过来,咱们手头的数据集给出了x/y的值,原来的常数反而成了未知数。缘由是,求得这些常数并非目的,目的是利用这些常数,补全了公式,在之后咱们就能够利用这个完整的公式和给定的x,去预测y的值。less

总结这一节:利用已知数据求解这些常数的过程,就是“机器学习”的过程;利用补全的公式,对新数据预测结果的过程,则是“人工智能”。这个公式则是咱们“机器学习”的工做重点:数学模型。机器学习

解方程

最简单的方程能够手工求解,就像上一节中房价的例子,只有两个变量。并且房价嘛,常见的不过几十平米、1、二百平米的数量级,小学毕业以后的水平,心算足够了。
再复杂一点,有多个变量,就须要一些解方程的公式,或者也能够叫算法。为何会有多个变量?咱们上一节为了简化问题,只考虑了面积、税费这些基本要素,一套房子,朝向、楼层、物业、学区等等,显然都会成为影响房价的因素。真得严谨考虑,这里面可变的因素真的不少的。关于这些变量的问题,咱们留给下一节,这里继续说解方程的问题。
咱们知道,一般状况下,多元方程,须要方程组来求解。有n个未知数,就要列出n个方程构成的方程组,而且利用n组已知的数据来解方程组得到答案。恐怕当未知数达到了四、5个,心算已经不够了。好在当前已经有不少数学工具帮助咱们作这样的事情。好比在斯坦福《机器学习》课程中,吴恩达教授使用Octave来全程讲解机器学习。Octave是著名数学软件MatLab的社区开源版本,若是没有接触过的读者,你能够把它理解成一个比较专业的大计算器,Octave长于数值计算(对应的还有Mathematica,长于符号计算),内置有本身的编程语言,在不少的机器学习场景中,研究人员都是利用这样的软件进行算法原型的研究和设计。验证成功后,才由计算机方面的专家把公式转换成计算机的编程语言,成为算法。
下面举一个五元一次方程组的例子:
(备注,这些内容,不须要你动手实验,只是但愿你延续并加深理解这个思路,明白是什么和为何就好,最终咱们确定会回归到TensorFlow的学习上。)编程语言

2a+b+c+d+e=6
a+2b+c+d+e=12
a+b+2c+d+e=24
a+b+c+2d+e=48
a+b+c+d+2e=96

仅是一个例子,这样的方程你用手工解估计也很快啦,这里用Octave演示一个有限元的方程组解法,大概这样几步:

  1. 首先规范化方程,让每一行的方程左侧,具备相同的变量数,没有的变量用“0*变量”的形式来替代;右侧,则是统一只有1个常数,不是单一常数的,则要经过简化,成为仅有一个常数。好在咱们举的例子很规范,没有这样的状况。
  2. 在Octave中,把式子左侧的全部系数提取出来,每一个方程式占独立一行,全部方程式造成一个“矩阵”,假设矩阵叫A。
  3. 在Octave中,把式子右侧的常数输入成为另一个矩阵,由于只有一列,实际也能够称为“向量”,咱们假设这个向量叫B。
  4. 使用Octave内置函数求解:ans=pinv(A)*B,此时获得一个1维矩阵,也就是向量,每一行是一个未知数的解。a=-25;b=-19;c=-7;d=17;e=65。

    其实Octave对于解方程还提供了一个简写的方式:在Octave命令行直接键入 A \ B,也能够获得答案。
    (python也有对应的矩阵运算库,也提供一样的方程求解的功能,咱们到后面再说,就让这第一部分保持一个写给非IT专业人员的状态吧。)
    注:在咱们后面将要学习的TensorFlow中,“矩阵”也称为张量(tensor)。处理过程是数据的流动(flow),这也是TensorFlow名称的由来。但为了描述语言更通用,之后咱们仍然称为矩阵。

总结一下这一节:

  • 简单的方程有成熟的公式或者工具帮你解,但重点你确定意识到了,复杂方程这些方法就不灵了,这引出了机器学习的重点之一,就是如何解复杂的方程,咱们后续会讲到。
  • 为了应对新的AI问题,咱们可能须要研究新的机器学习算法。研究这些算法的工具是数学公式,研究数学公式的工具,Octave算一个,可能常常会用在新算法的原型研究。这只是指出一个学习的方向,至少如今,会走以前,先不用考虑跑的事情。固然也有不少数学专家,只研究公式和算法,历来不进行TensorFlow编程和应用,Octave用的很熟练,这类用户不是本文的重点。
  • 咱们手工计算一些方程,一般都是一组一组的数据逐个代入,这很容易理解。可是在大规模计算的时候,相似刚才Octave这样的作法,把数据集矩阵化才是一般的模式,这样能够充分的利用计算机规模化和并行的优点,因此搞机器学习,矩阵运算不熟悉的,最好抽时间去补一下。

(待续...)

引文及参考

强人工智能
物种起源
弦论
octave
矩阵运算参考资料
斯坦福机器学习课程

(原创博文,谢绝一切商业转载,我的转载请注明出处。)

相关文章
相关标签/搜索