1.3 机器学习:从忘却开始
广大初学者面对人工智能、机器学习这些“高大上”的概念,一方面迫切希望能够掌握相关的知识,另外一方面,面对各种层出不穷的概念,往往会眼花缭乱,无所适从。
目前Python已经是人工智能、机器学习的行业标准语言,TensorFlow、Torch在2015年、2016年先后开放了Python语言接口。
scikit-learn是Python语言最重要的人工智能模块库,目前已经收入scikit套件,通常简称为sklearn。
还记得本书开头的那张scikit-learn算法模块图吗?不知道大家的第一感觉是什么,反正笔者看到此图的第一反应是吓呆了,也明白为什么这么多初学者对于人工智能望而生畏了。
笔者始终认为自己是一名软件工程师,或者叫作程序员,也就是网络上常说的“码农”。
对于程序员而言:Talk is cheap,show me the code!
再多的理论,也比不上几件成功的软件作品,笔者虽然谈不上有很多成功的软件作品,但也写过不少专业的程序,例如原生的OCR识别程序和英汉翻译程序。
特别是英语翻译软件,笔者当时(1997年)的语料库直接使用的是美剧字幕,几千万条的语料库,多种语言素材,全部都有时间戳同步,基本无须任何成本,翻译效果也还不错。而当时同期国家项目组的语料库,耗资巨大,也不过几十万条的数据量。
所谓原生程序,就是直接采用C语言、Delphi语言的标准函数库,没有任何第三方AI架构库(如sklearn、TensorFlow等AI模块库)直接编程的程序。其间的难度,做过系统的程序员,或者阅读过Linux、安卓系统、TensorFlow系统源码的程序员就会明白。
这种基于原生的开发,最大的好处就是无论采用何种编程语言,何种理论算法,最终的底层代码结构都是差不多的,就像电脑里面的CPU,算得再快,也不过是个加法器。
明白了这一点,再看sklearn的知识图谱,虽然表面看起来非常烦琐,但仔细梳理,核心还是只有一个:分类。
分好了类,其他的匹配、识别都是简单的问题,只是贴上标签,加上备注而已。
问题最终又回归“一生二、二生三”当中。
国外也有专家认为,所有的人工智能、机器学习,本质上都是二元一次方程的寻优算法。
笔者在博客当中曾经也说过:
简单来说,可以把人工智能、机器学习看成一个巨大的字符串查找算法,只不过这个算法当中的关键词与被查找的字符串的大小非常庞大,趋于无限。
很多初学者面对人工智能、机器学习,往往连系统配置都玩不转,最基本的“Hello程序”都无法运行。
在zwPython用户手册里面,笔者曾经说过,虽然很多人认为Python是面向对象的语言,但实践表明,忘记OOP对象编程的概念,采用传统的BASIC语言(面向过程)模式,学习效率可以提高10倍以上。
所以,学习人工智能,笔者的建议就是从忘却开始,忘却各种乱七八糟的概念。
忘记这些概念之后,大家会发现所谓的人工智能,不过是传统的Python函数调用,而且只有为数不多的几个函数,最简单的案例当中,只需要2~3个函数。
需要说明的是,对于初学者而言,不要左顾右盼,MATLAB、R语言、Torch、TensorFlow、NLTK都想学习,反而什么都学不好。
对于初学者而言,不妨在入门阶段就学sklearn。
sklearn模块库本身就是人工智能、机器学习的行业标准,该有的人工智能、机器学习经典算法全部都有,其他的模块库无非是在局部进行了某些优化。
至于人工智能的进阶课程,大家不要急,在完成sklearn的机器学习课程后,再看TensorFlow、Torch、MXNet就不会有看天书的感觉了。
黑箱大法
在机器学习领域许多概念非常抽象拗口,如果大家无法理解,也属于正常情况。
大部分初学者,即使克服种种困难,独自完成了人工智能、机器学习开发平台的配置,面对这些拗口的算法名称,也会有崩溃的感觉。
这很正常,因为这些算法、名称的背后都有非常专业的理论和模型,其学术价值和专业难度都很高。
不过,正如笔者前面所说,初学者对于人工智能、机器学习,最好从忘却开始。
同样,面对这些眼花缭乱的专业名称术语,我们还是采用忘却的模式,采用黑箱大法,大家无须纠结各种算法背后的理论,只将其看作一个个黑箱函数即可。
函数调用是Python语言的基本功能,能够看到这里的读者,想必对函数的调用、编程都非常熟了。
市场经济,讲究的是结果导向,对于大部分学习者而言,需要的也只是最终的结果数据。
采用这种黑箱模式,有了结果数据,再学习理论和算法,就有了具体的数据支持和更多的感性认识,学习过程也会事半功倍。