《人工不智能》1:工程问题和社会问题
1. 数据技术再先进,录入数据和使用数据的永远都是人;如果不解决人的问题,技术终究不能解决真正的社会问题。
2. 工程问题要求定义良好,而复杂社会问题恰恰是不能定义良好的。
2018年出版的书《人工不智能:计算机如何误解世界》(Artificial Unintelligence : How Computers Misunderstand the World),作者是纽约大学助理教授梅瑞狄斯·布鲁萨德(Merdith Broussand),她同时还是一名数据记者。
现在有一种情绪被布鲁萨德称为“技术沙文主义”,认为一切社会问题都可以用技术解决,特别是可以用计算机技术解决。但布鲁萨德认为,包括人工智能在内的所谓新技术,其实并没有解决真正的社会问题。
一个“简单”例子。假设你任职于某个贫困地区的教育局,你负责给本地所有中小学发放课本,那么你如何确保学生们都能得到课本呢?你肯定会认为这是一个简单的问题,中国最穷的地方也没发生过学生上课没有教材的事儿。
但是美国有好几个州,包括纽约、宾夕法尼亚和华盛顿这样比较富的州,却有很多很多学生没有教材可用。这是一个严重的社会问题,可是却不能用技术方法解决。
当谈论“美国”的时候,有时候真得问一句“你说的是哪个美国”。
布鲁萨德当年上的高中,正好在洛克希德·马丁公司附近。1991年,他们高中有机会去洛马公司参观,洛马正好有很多淘汰下来的计算机配件,就送给每个学生一整套。回到学校,在老师的帮助下,每个人都给自己组装了一台能用的苹果电脑,学期结束这套电脑就归学生个人所有了。
对比当时的中国,是在必须穿上鞋套才能进入的省重点高中计算机房里。试想那时候要是有个高中生想苦练计算机技术,他的条件比美国人简直不知道差了多少。
但是我们至少不会让学生上课没课本。
1.教材的问题
布鲁萨德的儿子上小学,一家人住在宾夕法尼亚州。儿子要准备全州统一的标准化考试,布鲁萨德就研究了一番考试的内容。布鲁萨德发现,这个考试其实可以破解的 —— 答案其实都在课本里!你只要把课本的内容参透了,通过考试就非常简单。反过来说如果你不看课本,哪怕知识面再广,也很难在考试上有好的表现。
这就是为什么美国很多老师痛恨标准化考试。重点在于,这么简单的考试,美国能熟练解题的学生还不到一半。宾夕法尼亚州高中的毕业率只有64%!而根本原因,就在于很多学生*拿不到*课本。
肯定觉得这不荒唐吗?可是真没有。
中国的教材是由国家统一出版,价格便宜。学生自己出钱买教材,也不算是负担。美国公共教育系统的教材是政府采购的,学生不用花钱。但美国的教材由私人公司出版,价格很贵。
比如一本中学生用文学教材就要114.75美元。政府的教育经费往往有限,有时候分到每个学生头上的教材费可能只有30多美元!这样一来就存在很大的缺口。
那你说政府钱不够我自己买一套行不行,对不起没有这个渠道。布鲁萨德她儿子的教材学校不让带回家,她想给儿子另外弄一套,各处都找不到,连盗版都没有。
现在美国的中小学课本都是由三家大公司出版的,直接供货到学校,同时考试题也是这几家公司出,换句话说你是用这些公司的课本,然后用这些公司的考试题,一条龙服务,这是个每年几十亿美元的生意。
那你说能不能让学生重复使用旧教材呢?有时候的确就是这么干的,有的学生还在用八十年代师兄师姐的教材。但这个做法通常不可行,因为教材几乎每年都要随着州政府的教育政策变来变去。
共和党上台是一套教育理念,民主党上台又是一套政策。我们中国人有时候看这些政策会觉得不可思议,比如公立学校的生物课应不应该讲进化论,都是一个非常有争议的话题,因为很多人信教的人不相信进化论!
那你说像这样的问题,怎么用技术解决。这还不算,有些看似能用技术解决的问题,也解决不了。
比如有时候经费到位了,书也买了,结果书被放置在学校的仓库里,没发到学生手上!老师以为今年还是没有书,校长不记得书有没有买!
2.人的数据
布鲁萨德找到一个类似于“区教委”的机构,说你们知不知道辖区内这些学校今年都开设了什么课程,需要什么教材。区教委说这个真没有,但是有个中央数据库,有各个学校订购教材的数据。
布鲁萨德就把这个数据库拿过来,一看很多学校订购的教材数和学生人数根本对不上。布鲁萨德又跑到各个学校去现场调查,发现教材的发放和管理都非常混乱。
学校经费有限人手不够,有些校长要亲自管理教材。有的校长不愿意使用州里的数据库系统,自己弄了个表格,很难跟别人分享,最后就是一大堆问题。
其实校长也不容易。学校有很多的年级和班级,各个班级又有很多不同的教材。有时候老师看自己班级教材不够,会从别的学校挪借一些过来,甚至有的老师还自掏腰包弄些旧教材给学生用。有时候经费不足一个班级只有一半学生能拿到正确的教材。另一个复杂情况是美国学生还经常转学,有时候一个班级的人数每周都发生变化。
布鲁萨德说,数据技术再先进,最初的数据录入,也是由人来完成的。如果校长根本不愿意录入数据,老师根本统计不清楚自己班需要多少教材,再先进的计算机技术又有什么用呢?
3.工程和教育
这里面有个根本的矛盾。教育,本质上是个因人而异的、混乱的、动态的系统,而公共教育系统,是个统一的、标准化的、最好是不变的系统。
比尔·盖茨和梅琳达基金会一直在美国全国推行一个所谓“共同核心课程(common core)”系统,相当于中国那种全国统一的教学大纲和标准化考试,但是在各地受到了老师和学校的抵抗。
其实老师的抵抗有道理,这不仅仅是不民主,而是不同学区的学生水平差异很大,用同一个标准确实不合理,学校教学没有自由度,而且应试教育的负面影响太大。结果现在美国的公共教育非常混乱。
布鲁萨德说,盖茨这帮人是想把教育当成一个工程问题去解决。
工程问题本质上是数学,需要在一个定义良好的环境里,用定义良好的参数描写一个定义良好的问题。可是教育问题从来都不是“定义良好”的,其中有各种复杂的情况!
复杂和标准化是一对永恒的矛盾。这就是为什么计算机技术发展了这么多年,美国基础教育几乎没有发生任何进步。
为什么不给学生用电子教材?布鲁萨德说这更不科学。用电子设备看娱乐性的东西很方便,但看教科书不行。有研究表明,需要长时间反复看的东西,纸张是最好的,电子书让学习效果大打折扣。
再说用什么设备看电子书呢?手机屏幕太小,如果用 iPad 或者笔记本电脑,要做到人手一台,公共教育经费很可能承担不起。
iPad 和笔记本电脑都很容易被损坏和丢失,学校必须提供维护服务。你得考虑到在学校充电的便利性,你还得提供能让500人同时上网的 Wi-Fi 系统,然后你还得考虑计算机系统安全。你要管理每个学生的计算机账号,你要购买和管理每本教科书的版权许可证。这还不算给计算机必须每隔几年就升级换代。你不是只购买一次计算机,你是每隔几年就买一次计算机,同时还得购买计算机维护服务……纸质教科书是最实用也是最简单的选择。
由此得到
1. “人的问题”:数据技术再先进,录入数据和使用数据的永远都是人。
2. “定义良好”:工程问题要求定义良好,而复杂社会问题恰恰是不能定义良好的。
评论
谈起技术进步,通常听到的都是好消息。比如偏边远地区不是送货难吗?可以用无人机送货!农村教育资源有限是吧?可以让农民看电视学技术啊!技术肯定能给一部分人带来方便,但是要想全面解决一个社会问题,那可就太难了。就算是看似成功的实践,背后也不知道有多少意想不到的情况。
一件事是,给一些医院做计算机系统,可以让挂号取药这些事儿信息化。医院领导都很支持,经费给得很充足,但是他们工作起来就发现,很多医生和护士都在暗中抵制这个计算机系统。这可能是因为系统会不方便医护人员私下搞小动作。
还有一件事,帮一个超市做进货、销售和存货的计算机管理系统,系统做好了,运行起来之后发现计算机显示的库存和实际总对不上账。老板就说你这个系统是不是没搞好啊?其实不是系统有问题,而是超市员工一直都在偷拿东西。
在这样的情况下,你怎么还能把软件给做成和运行起来,这也是软件工程的一部分啊。
所以技术的确经常能让事情更有效率,但写程序的是人,录入数据的是人,使用系统的是人,如果不解决人的问题,技术终究不能解决真正的社会问题。
《人工不智能》2:教你写一个人工智能程序
人工智能界有个专门的形容词,叫“unreasonably effective”,不合理地准确。现有的人工智能就是用统计方法增加猜测的准确度。人工智能就是机器学习。机器学习就是统计模型。“人工智能”应该叫“人工不智能”。
通过这本书消除你对人工智能技术的恐惧感,为此,一起写一个真正的人工智能程序。
注意可不是打比方闹着玩,要用真实的数据和真实的算法,做一个真实的人工智能项目。这个项目还很有意思 —— 要用人工智能,预测,泰坦尼克号邮轮上每一位乘客的生死。
1.一点理论准备
像电视剧《西部世界》里那样的真人一样的人工智能,叫做“广义人工智能”,这种技术在可以预见的未来都不存在。现在大家用的都是“狭义人工智能”,而狭义人工智能的本质就是人们常说的“机器学习”。
而所谓“机器学习”,也不是说机器有思想,它学会了一项技能。机器学习就是用一组数据建立一个统计模型,这个统计模型能对新的数据做出预言。输入数据越多越精确,模型能做的预言就越准确,就好像是它在不断地“学习”一样。
数学家管这叫“统计模型”,计算机科学家给起了个更值钱的名字叫“机器学习(Machine Learning,经常性感地缩写为“ML”)”,记者有时候管这叫“大数据”,而其实这就是现在科技大佬们在发布会上口口声声说的“人工智能”。
例子是用机器学习的方法判断泰坦尼克号上哪些乘客会存活,哪些乘客会遇难。这个例子不是她原创的,Kaggle 网站上有现成的教程,包括所有代码。你可以在自己的计算机上重复整个过程,你可能需要安装 Python 语言和几个库函数包,但你总共只要写几十行的代码,把整个项目研究明白大概需要一个晚上的时间。
解说一下思路和步骤。如果你懂编程,你会发现这件事非常简单;如果你不懂编程,也能帮你理解这个思路。考虑到机器学习是美国现在最值钱的技能 —— 高手一年能挣四五十万美元 —— 也许这个例子就开启了你机器学习的工作之路!
那一点基础都没有,怎么能一下子就写一个机器学习程序呢?答案当然是因为你站在了巨人的肩膀上。现在机器学习的算法已经非常成熟,连专业人士都不需要自己从头到尾写一个算法,网上都有现成的。常用的机器学习算法大概有十几个,都做成了 Python 的库函数,可以直接调用。
顺便说一句,如果你想严肃地自学机器学习,Kaggle 和 DataCamp 是两个非常好的教学和比赛网站。
泰坦尼克号的所有旅客名单和他们的各项统计资料,网上都有现成的数据,将直接调用这些数据。
2.实操
如果你想学编程,Python 是最直观最漂亮最简单的编程语言。
泰坦尼克乘客的数据已经被人放在了亚马逊的云服务器上,可以随便下载 ——
数据已经被分成了两个文件。第一个文件叫 train,我要用这个文件里的数据来训练一个统计模型,然后再用第二个文件,叫 test,检验这个模型的有效性。
以下所有操作都是针对 train 文件的。你要是看不懂代码就直接忽略,只听文字讲解就可以。打开训练数据,你会发现它是一个12位的数组,对每个乘客都包含以下这些项目 ——
* 乘客编号
* 乘客是否存活
* 乘客姓名
* 舱位是头等舱、二等舱还是三等舱
* 乘客的性别
* 年龄
* 在泰坦尼克号上有没有兄弟姐妹或者配偶
* 在泰坦尼克号上有没有父母或者子女
* 乘客的船票号码
* 买的船票价格
* 在船上住的房间编号
* 在英国哪个口岸上的船。
训练数据库中一共包含891个人,但是其中只有714个人的年龄记录。使用 Python,我们只要用一些简单的命令就可以对数据做各种操作。比如我们想知道各个舱位都有多少乘客,可以用 ——

结果发现头等舱有216名乘客,二等舱有184名,三等舱有491人。再用 ——

就知道这819名乘客中有549人遇难,342人幸存,遇难率是61.6%。
其实现在你就可以做一次预言了。随便指定一位乘客,让你预测他是遇难还是存活,你应该预测他遇难 —— 这个预测的准确率高达61.6%。
现在要让这个预测更准确。看电影知道上救生艇是女士和孩子优先,那么性别对于存活的影响应该很大。简单做个统计操作 ——

就知道男女各自的存活和遇难人数。女性的存活率是74%,男性的存活率只有18%。这就是一个更准确的预测。
要想进一步提高准确度,就要上机器学习算法了。布鲁萨德选取的算法叫“决策树(Decision Tree)”,你现在不需要知道它的细节,直接调用就可以,调用方法是一行代码——

下面的思路非常简单。乘客的性别对存活与否影响很大。那为了更精确地预测,你能不能想想,还有哪些因素对存活可能有比较重要的影响。我们要做的就是把所有这些因素都交给“决策树”算法,让算法自动用这些因素的数据生成一个模型。
比如像姓名和编号这些数据,你能想到肯定没啥用。选取四项指标:
* 舱位,据说头等舱有上救生艇优先权;
* 性别,女士优先;
* 年龄,小孩优先;
* 船票费用
其实每一项因素具体起到什么作用你都不用管,你只要能猜测出来大概这几个因素有用就行了,一切都交给算法自动发现。
现在有个问题是算法要求每个数据都得有数值,可是“年龄”这一项只有714个人的数据。为此我们还得把剩下一百多个人的年龄数据给补上,就用所有乘客年龄的中位数来代替。这种事情在实际操作中非常常见,对付对付先用上再说。
现在生成模型,也是整个机器学习的核心部分,只要以下这么短短几行代码 ——

基本上就是你告诉程序要预测的目标是乘客是否存活,影响目标的四个因素是舱位、性别、年龄和船票价格,你选取的机器学习模型是“决策树”。
最后生成的这个“my_tree_one”,就是预测模型。大功告成!
先看看这个模型的性质 ——

结果显示四项指标在统计上的重要程度分别是:船票花费占33.7%,性别占31.3%,年龄占23%,舱位占12.3%。注意这只是一个综合的统计性质,模型内部非常复杂,并不是对这几个数据做什么加权平均。反正我们现在知道,船票花费是个比性别更重要的存活因素。
现在看看这个模型的预测准确度。利用现有的训练数据,做一次操作——

模型的预测准确率高达97%。这是一个非常好的成绩,但是可以理解,因为毕竟你的模型就是用这组数据训练出来的。
对模型的真正考验是使用刚才说的那个“测试”数据。测试数据里只有11项指标,不包含存活信息。要把这个 test 数据拿过来,用刚才训练好的模型直接预测这些我们完全没接触过的乘客的存活情况!DataCamp 网站会帮你评分,具体的步骤我就不写了,直接告诉你结果。结果是,这个模型用于测试数据的准确度仍然高达97%!
只知道泰坦尼克号上一半旅客的存活信息,根据这些信息做了一个预测模型,然后就能用这个模型,以97%的准确度,预测另一半旅客中每个人是否活了下来!
回顾一遍,整个步骤是这样的 ——
1. 把所有数据分成两组,一组用于训练,一组用于检验;
2. 数据都是数组,其中包括你想要预测的目标信息(是否存活),以及可能影响这个目标的各种信息;
3. 选择几个你认为最有可能影响目标的信息(舱位、性别、年龄、票价);
4. 选择一个机器学习算法(“决策树”);
5. 把目标和可能影响目标的几个信息作为数组变量输入算法,训练得到一个预测模型;
6. 把预测模型用于检验数据,看看这个模型的准确度。
现在已经完成了一次人工智能编程。
3.洞见
学会了这个方法,使用现成的工具,只要有足够好的数据,你立即就可以搞几个人工智能应用。比如一个信用卡公司有十万个用户的详细数据,包括年龄、收入、以往的购买记录、信用得分、还款记录等等,那你就可以预测其中每一个人下个月按时还款的可能性。
不过主要目的还是体会现在所谓的“人工智能”到底是怎么回事儿。它仅仅一个统计模型而已。从这个实操例子中我们可以得出两个洞见。
第一个洞见是,每个模型都会带来歧视。
泰坦尼克模型中对生死影响最重要的变量是船票价格。船票越贵,你存活的可能性就越高。那假设你是一个卖保险的,现在既然你知道买了高价票的人存活率高,将来他们不太可能找你理赔,那你为了多卖几分保险,是不是可以少收一点他们的保险费?
这就是区别定价,这就是价格歧视。你并不是歧视穷人也不是更爱富人,只不过为了多赚点钱,你就会多收穷人的保险费,少收富人的保险费,你完全是理性的 —— 可是,请问这合理吗?这道德吗?
第二个洞见是人工智能真的不智能。
做的就是四项指标去预测一项指标而已。你完全可以想到还有很多别的因素对在泰坦尼克号上存活很重要,但是我们根本没考虑。
比如说,当时放救生艇的时候,船长的命令是“让女人和孩子上救生艇”,但是两侧放救生艇的人对命令的理解不一样。一个人的理解是*优先*让妇女儿童上,如果周围的妇女儿童都上了救生艇还有空位,那就让男的也上。另外一个人的理解则是*只*让妇女儿童上救生艇,妇女儿童上完哪怕还有空位,也不让男性上,就直接把救生艇放下去。
那如此说来,一个男人能不能存活,跟他当时距离哪个救生艇近很有关系!但是我们根本就没有这项数据。
还有,在船即将沉没的一刹那还站在船头的人,如果你选择往远处猛跳,你就有可能存活下来;如果你不跳,沉船造成的旋涡就会你拖下水,你就很可能遇难。所以最后一刻的跳法也决定了生死,但是这个跳法也没有包括在模型里面。
模型对泰坦尼克上发生了什么一无所知,它根本不理解自己在干什么,本质上它的一切预测都是猜的 —— 所谓机器学习,只不过是增加它猜对的概率而已。
但是居然就做到了97%的准确率。人工智能界对此有个专门的形容词,叫“unreasonably effective”,不合理地准确。如此粗糙的模型,它居然就能做到这么准确!
你可能对此非常感慨!但是当你的手机准确识别了你的语音的时候,当 AlphaGo 赢了柯洁的时候,你也有过这样的感慨。它们的算法更复杂,但是本质原理都是一样的。
破除迷信战胜恐惧最好的办法就是亲自做一遍,现在你至少知道你可以做到。
现有的人工智能就是用统计方法增加猜测的准确度。人工智能就是机器学习。机器学习就是统计模型。“人工智能”应该叫“人工不智能”。