说到机器学习和数据挖掘,不能不提到自动控制和模式识别乃至人工智能。刚开始接触这些名字的时候,真是云山雾罩。反俺正考大学是听着自动化这名字很 拉风就学了自动化;等考研的时候发现自动化里面居然有个啥“模式识别与智能系统”的,又觉得很拉风,就学了模式识别;等学了模式识别,又出来了机器学习和 数据挖掘……一个比一个拉风。对这些领域,俺都是先进门,再了解;先结婚,再恋爱,我尽量把自己理解的这些领域的样子说说吧。
概念的严格定义我就不去考据了,毕竟不是写背景综述。但是想说清概念之间的包含关系,还是得说说大致的分化过程,不然就会不明白为啥模式识别会放在自动化这个领域里。
(一)模式识别的诞生与人工智能
追到源头,首先班门弄斧一段自控,老大轻拍-.-!
自动控制起始是从工业革命之后,人们就希望设计出减少人工干预,能自己进行调节(regulate)的机器,工程领域开始想出了根轨迹等等土招儿。 等到40年代,伴随二战的需要,计算机的产生,维纳(Wiener)——信息论和控制论(Cybernetics)的祖师爷正式开创了这“两论”。
控制论这个词是维纳根据古希腊词根发明出来的。用老爷子自己的话说就是“Cybernetics :or control and communication in the animal and the machine”。animal先不提,那是人家天才小时候就对生物学有兴趣;在工程方面,控制论的control主要是围着machine转的。因为祖 师开山的时候是二战中,初衷就是要让机器代替人进行防空武器的随动瞄准。
维纳是数学家,写出来的理论和公式,让当时的工程师们看着实在头疼。但是维纳不仅仅是数学家和“搞理论”的,实际工程问题,人家二战中参与了,也想到了。最典型的就是对噪声的处理。
典型的负反馈控制系统框图里,从“传感器”的到“给定输入”之间,画一根线就连过来了。可是实际中,传感器有误差,测量回路中有包含噪声,需要的测量值甚至根本就是淹没在一片嘈杂的信号里面(水声信号)。这时候管识别“真实值”的问题叫滤波,通过设计各种滤波器来解决。
但是一学到现代信号处理这块就会发现和传统的信号处理不一样了,不再是时域、频域、Z域的滤波器变来变去了。从维纳最佳滤波的算法和ARMA模型的 原理就可以看出来,既然是用随机过程和概率统计来看待和描述信号和噪声,那么已经可以把这个滤波问题用“估计(Estimation)”、“预测 (Prediction)”来描述了。此外,对系统的状态方程确定参数的问题,好像是用的“辨识(Identification)”吧,都差不多。之所以 罗嗦这些词,是因为这些词在模式识别的分支里出现的词。
祖师爷提出、总结这些方法大概主要为了玩转控制问题里的那些传感器。但是,其他不需要machine、不需要控制的领域,但是也需要用传感器去测 量、去噪声、估计、预测、辨识啊!其实从需求角度,类似“怎么让机器能像人一样分辨人的语音”的研究,也是从40年代就开始了,一开始也是“语谱图”之类 的土招儿,好像是贝尔实验室弄的吧。类似的问题“识别航拍照片”,“识别手写文字”都是类似的工作。这些工作也都希望使用计算机代替人来做呢。
花开两朵各表一枝,先放下各行各业的需求和土招儿暂且不说,再来看看计算机。与此同时,计算机产生之后也需要找到更多的应用领域。除了吸引人的计算速度之外,数学家开始琢磨让计算机再干点别的。
于是,50年代开始出现“人工智能(artificial intelligence AI)”这个词。注意是artificial不是simulation。也就是说,不是用计算机“模仿”人脑硬件结构和人的思维过程,而是研究怎么让半导 体造计算机用二进制数据结构+算法去达到肉长的人脑的智能“效果”。好比做题,只需要你能得到结果,不看步骤。数据结构和算法是计算机专业的核心之一,也 是当年在“制造计算机”之外,研究怎么“使用计算机”的独门课程。(咱们中国大学里的计算机系大概是60年代从电子系、自动化系里独立出来的。)所以 “会编程、搞软件的”IT民工里,科班生比半路出家的“蓝领”强就强在,除了会if for这些语法之外,就是人家数据结构、算法、离散数学这些方面正经学过。那些“走迷宫”、“8皇后问题”,就是数学家抽象出来,丢给计算机去做的人的智 力题。
AI又叫狭义的人工智能,基本可以等同于计算机算法了。当然也确实有研究人脑结构和思维过程,用计算机去simulation人脑的“广义”人工智 能,不过那更多是医学、生理学的事情啦。也许有人说不对啊,神经网络(Neural Networks NN)可是就是模拟人的神经元呀的算法啊,算狭义还是广义?这个,统计学家们发来抗议电,说NN压根就没那么玄乎,不过就是类似“投影寻踪回归 (Projection Pursuit Regression)”的算法。这个后面写到模式识别具体算法时候会提到。
但是除了做智力题之外,人的能力里属于智能的到底都有什么呢?经过总结,其中之一是识别能力,然后是决策能力。
这下好了,一边是需求,一边是计算机的计算能力。估计、预测、辨识、识别……是时候把这些类似的工作统筹解决了!
这样在60年代,模式识别(Pattern Recognition PR)产生了
(二)模式识别的流程与机器学习
一个标准的模式识别流程是:
“客观对象”—1—>“数值表示”—2—>“计算机算法”—3—>“识别结果”
但是这个流程只是计算机工作时的流程。而在能这样工作之前还要干很多事。比如人脸识别,一个计算机算法又不是天生就认识很多人,算法要经过训练和学习好了,才能照上面这个过程工作。
那么到底在训练、学习些什么,又是在识别些呢?
这个还是要回到定义。“模式识别”这个词不是太容易顾名思义的,我直到研究生入学以后很长时间还是不明白是什么意思,就知道是能分类。
还是说人脸识别吧。对人来说,看见来自于1个人的人脸图像,即使是不同表情和姿势的,我们也能认出这些图像来自于同一个人。而你之所以能认出来,可 能是观察了脸型+发型,也可能是五官形状的组合。可是到底是图像上的什么决定了你的判断呢?你有的能说出来,可是有的却又说不清道不明的。于是,就用一个 抽象的词——“模式”来形容那些能够让你判断出哪些样本属于同一类别、能够和其他类别相区别的特征或者属性。
我们下面设计计算机算法为每1个人的图像建立唯一的1个“模式”或者说模型,不同的N个人对应于N个模型。很可能每个人的身份编号i对应一个参数模型Mi。这个建立或者说训练(train)过程可能就是“统计”这些图像,确定每个模型的参数。
而开发者为了评价算法性能,也要先预备一些已知类别的图像,分成train set 和test set,这样在训练集上训练好的算法,要测试集上测试一下。根据测试结果调整算法参数,或者实在太差的话要换一种算法了。不断的调整参数、不断改程序,不 断的train,不断的test……所以这方面的论文通常要附上算法在各种数据集,各种情况下的结果。一个图,一张表的背后,要写好多程序,花好多时间在 电脑上运行。
这样训练好后,就可以按上面那个流程工作了。如果一张属于第i人的图片来了,算法用保存的N个人的模型去分别计算相似度,判断这张图片来自于模型 Mj的可能性最大,也就等于电脑可以通过看图片识别出了这人的身份是j。如果j等于真实身份i,那就识别正确了,如果每次都识别对,那电脑就达到了人脑的 能力了。
注意算法在输出j的时候是不知道真实身份i的,那么这种工作,就可以看成是一种预测(Prediction)。如果需要输出是离散变量,比如这里是 类别,就称为分类(Classification),而需要预测连续型变量的,比如股指,房价,就称为回归(Regression)。这里的回归没有针对 “过去”的值的意思,就是说预测的目标输出的是连续性的值。
好了,现在来说机器学习(Machine Learning ML)。回顾一下你的模型从哪里来的?虽然有些模型假设,但主要从输入的已知身份的数据中来的。而算法的“训练-考试”过程,又很像人的学习过程,于是把 这一类计算机算法叫做Machine Learning。其实是Machine Learning from data了。看起来是Machine在不断自己 Learning,其实是人写的算法让它一直learning。如果算法是纯用统计学,也可以叫统计学习(Statistical Learning)。
所以在我看来,ML可能是最类似AI的范畴了,都是计算机算法嘛。区别是AI是具备类人能力就行,不管算法怎么来的,一个拍脑袋定义的出来的公式也 算。而ML要窄一些,是特指经过Learning from data 过程而获得的“智能”。用统计学的里的概念来说,ML是一种数据驱动的,非参数(Nonparametric)或者半参数 (Semiparametric)算法。
再来比较PR和ML。可以说,PR里面的算法部分基本上一定是属于ML。区别在于,PR里的ML算法主要就是在做预测。而整个ML就要广多了,如果 你的算法输入是棋谱,那么训练好的算法就可以下棋打牌。但是UCI上面供机器学习算法之间进行能力比较的标准数据集基本都是分类和回归问题。这么看ML和 PR实在是太相似了。
说到了这里,PR里面的ML算法,主要都是在用统计学(少部分有图论),问题也就出来了。提出算法的主要是人家数学家、统计学家、或者计算机专业的 干的,已经属于science了。可是怎么模式识别的事净是自动化、电子信息、通信这些专业的搞呢?虽然你们攒一起改叫Electronics Engineering了,可那也是Engineering啊,本科顶多学点高数,线代,复变,信号系统,古典概型和简单数理统计,再学编码啥的,到硕士 嘛顶多学点矩阵论,随机过程顶天了。就这点数学底子,提不出啥牛X算法,凭啥模式识别专业还是你们这些工科生霸着啊?丢给数学系、统计系,或者计算机系得 了,人家CS好歹也是S啊。
嗯,我也疑惑了很久,明明都是在折腾数学,怎么还是赖在工科里呢?
(三)模式识别中的工程、技术
为什么要说说PR没被数学、统计和计算机专业抢去的问题,实际是想分析一下PR里的科学与技术,理论与工程的问题。
如果去学PR,看任何一种这方面的经典教材来看,基本上全是在讲各种理论、各种分类回归算法、和算法的思路。(关于这方面的经典教材,其实特别想单 独来说的。如果是第一本,挑一本对自己胃口的书很重要。原因是经典基本都是700页起的,而且基本满眼望去都是公式。理科生不论,对于看理论经常感觉力不 从心,或者没什么耐心的工科生,如果找了一本不对自己胃口的书可能就很难看下去,Amazon上的书评里每本经典都有一堆5星,但是也颇有些1 2星的。)
虽然可以说“学PR 就等于学各种分类算法”,但是不等于说PR 就等于分类算法。最起码炮制这方面的论文就不等于炮制分类算法,想想也是,不然工科生还有的混吗!
作为说PR的最后一节,这次工科生要来吹吹牛,看看PR除了统计理论和算法,有什么离不了工程、技术的地方。
还是先把流程图再画一遍:
“客观对象”—1—>“数值表示”—2—>“计算机算法”—3—>“识别结果”
上一篇主要说的是 “计算机算法”—3—>“识别结果”这块,确实最重要,是核心。“数值表示”—2—>“计算机算法”比较简单:算法要求输入的数据通常都是个 很规整的矩阵,比如N个训练样本,每个样本p个特征(feature),输入就是一个N*p的矩阵。 此外,有的算法需要对列进行标准化,有的不接受连续型变量和离散值变量的混合,有的干脆不接受连续型变量,要量化变成哑变量。所以根据算法的不同,对数据 的形式也要稍微做点加工。这也没啥特别的。
关键就在于前面,“客观对象”—1—>“数值表示”。
还是继续以人脸识别为例吧。研究了一个算法,都要在网上的几个标准人脸库中的图像上实验自己的算法。通常库里每个人的照片包括各种姿态(比如稍微左 右侧一些,抬头低头),表情变化,各种光照阴影,有的还有饰物比如眼睛,帽子,发型变化。图像尺寸都是统一的,的比如256*256,灰度也是8bit这 样。
好了,你的算法在几个人脸库上跑得不错,实验数据有了,论文有谱了,你很开心。老板也很开心,于是老板接了个小项目,让你参与做个人脸识别的门禁系统。这时候你就会发现,想按照那个完整流程来工作,1这一步的问题一点也不少。
首先就是传感器的问题。传感器直接决定了图像有没有形变,颜色和灰度有没有改变,是不是清楚,分辨率有多高。通常的问题不是“有还是没有”,而是“有。怎么办?”
所以从硬件选型到板卡布置这块首先少不了“专门经验”,然后还有成像这块和图像处理的知识。得到内外参数,怎么把畸变调整一下,然后降降噪声,直方 图均衡调整一下对比度,尺寸也调整一下。这些图像处理课里的内容,虽然也都是简单的数学公式,但是,场合不同,想要的图像效果不同,参数上也总要微调的 ——让我想起了PID参数的整定。嗯,很工科。
插一句,我所理解的工程学就是对实际问题的专门经验的积累。公式理论简单,而经验的获得,只需要多花时间和实际问题打交道,自然熟能生巧。这么看工 科很easy,经验也没什么神秘的。但是每个人的时间总是有限的,如果专门在一个领域花了比别人多的时间,那么他的经验就变得宝贵起来了。此外“接触实 际”四个字也不是人人都喜欢的。实际中没有书本上的“理想条件”,只有各种层出不穷的想不到的问题。挑战性一点不比在理论上探索低。工科的思维就是事前对 可能遇到的实际问题的复杂性的敏感和估计,事中遇到问题时的能想法子解决。可以对性能妥协、将就;可以对参数近似、也可以试验出来;可以把原本充满创新的 玩意改得朴实无华或者面目全非——一切只为了这玩意最后能工作起来、能动换(然后再慢慢往好看、好用上改)。
嗯,跑题了,继续。现在图像清楚得已经堪比人脸库了,识别效果还不错。找客户来验收吧!可是给客户演示完,人家突然问系统能不能集成到一起,做到 DSP和嵌入式系统上;还要这样,还要那样……嗯?等等,你忽然想到好像程序是在双核PC上跑的,好像用了好些个MATLAB导出的函数,有个算法还是R 里面的……
你嘴上说是,脸上没反应,但心里浮现的却是《潜伏》里陆桥山审马奎时从牙缝里挤出来的台词:我真想撕烂你的嘴!你当初不是说……
可老板下了死命令,大家只好大干快上干起来!作为开发算法的你,责无旁贷啊!
软件彻底用C和C++重写!不能用好使的MATLAB了,API真矬,简单的矩阵运算要费劳资这么大劲。不知不觉1礼拜过去了,终于写好了。
赶紧到下载到那边已经是改到第N版刚拿回来,还热乎乎的板卡:
咦,没反应?软件还是硬件问题?那边查电路,这边改程序试试?
呼,有影了,可是噪声咋这么严重,鼻子不是鼻子脸不是脸的?摄像头还是板子上有干扰?软件上能再改改参数?
终于运行起来了,怎么好像卡死了?哦,原来是太慢了。硬件条件比PC机差了好几个档次了,怎么办啊,换个简单一点的算法?那性能咋办?那之前那个算法好不容易得到实验结果不是都白做了么?
……
满头黑线了吧?
这个人脸识别的例子有点夸张了,但不是完全虚构出来的。通过这个例子想说的是,数据来源,软硬件的布置,性能的取舍,参数的实验调整都是论文上看不 到也写不出来的实际工程问题。通常需要各种不同的传感器和硬件打交道,也需要各行各业的专业背景知识。涉及图像的少不了摄像头、照相机和图像处理的知识; 做水声信号和语音识别,少不了拾音器阵列,频域方面的信号处理知识。这也就是为啥自动化,电子,通信、甚至生物医学专业能掺和其中的原因。
最后总结一下我对PR的认识:
PR是因为各个领域有“电脑代替人脑”的实际需求才产生的,所以是一定面向应用的。
PR不是在标准数据集上验证分类算法的性能就完了,这个是ML的事情。PR是要把ML算法在实际问题中用起来。是理论加实际,科学和技术(虽然理论是核心)。
http://blog.sina.com.cn/s/blog_dea95e250102vcp1.html