首先,我们来回顾一下AI思维。AI思维能够帮助我们捕捉数据的本质特征,根据数据的特征形成模型。在新场景中针对新的输入信息,模型就能做出判断、产生预测。模型使用的一大类场景是分类,也就是预测新的输入所对应的类别。那么,什么是分类呢?如果我们手里有一张照片,你要做的是判断这种张照片里是否有动物出现,你通过眼睛获得了这张照片的视觉特征,这时,你的大脑已经下意识地做出了一个判断、一个分类。这个问题的回答结果就只能是“有”或者“没有”,这是一种分类,叫作二分类问题。
但是并不是所有的分类都可以用是与否这样一分为二的判断来解决,还有很多东西需要人们去分辨它属于多种类别中的哪一类。我们还是拿这张照片举例。当你已经判断出这张照片里有一只小动物后,你还需要判断这是一只什么动物。你会根据这只动物的体型、体毛、耳朵、眼睛、嘴巴等特征,判断它是猫、狗、兔子,还是其他什么动物。这也是一种分类,叫作多分类问题。
在日常生活中,我们每个人都避免不了和他人对话,我们要说,要表达,也要聆听、理解他人的话。其实我们识别对话中的声音信号,从中提取所说的字和词语,也是一个分类的过程。商务印书馆的《现代汉语词典》是目前较权威的大型现代汉语词典,第7版收录的词将近7万条,其中包括了字、词、短语、熟语、成语等。也就是说,在我们聆听的时候,为了理解这些声音信号的意义,我们的大脑都在将它们中的片段分类成这些字或词之一,这就是一个多分类的过程。但是有的时候,我们也会混淆一些读音比较相近的词,比如说“建议”和“坚毅”、“升起”和“盛气”,这说明人脑的分类也不是完美无瑕的。
我们的视觉要对看见的东西进行分类,我们的听觉要对听见的东西进行分类,我们的味觉要对尝到的东西进行分类……感官的分类可以帮助我们更加完整地认识这个世界。可见,对外界事物的分类能力是人们认知的重要组成部分,可以说,每时每刻我们都在对现实世界中的输入信号做出分类,分类的准确与否直接影响我们生活和工作中决策的质量和效果。
正如人一样,分类也是人工智能进行感知和认知的重要工具。在机场部署的人工智能模型可以识别出通过安检的人是否和证件上的照片一致,刷脸打卡的人工智能模型也在很多机构运用起来,无须戴工卡便可知道人的身份,许多手机的刷脸支付功能可以识别出你是否是该手机的主人来决定是否支付,极大地提高了资金的安全性。在语音识别领域,主流的人工智能识别模型对常见词语输入分类的准确率已超过97%。除了感知图像、声音领域,人工智能模型的分类还可以用在更多的场景,做出人类都难以达到的准确预测。例如,在营销领域,人工智能模型需要预测客户的喜好度和倾向性等,相当于对未知客户行为的分类。在金融信贷领域,人工智能模型能对客户的风险进行评级,也就是对客户将来风险度的预测,从而将客户分为高风险和低风险客户,并辅以不同的策略。可以说,通过分类,许多常见的问题都可以在人工智能的分类框架下进行考虑。
向量指一个同时具有大小和方向,且满足平行四边形法则的几何对象,如图2-1所示。简单地说,向量是有序的数字列表。人工智能中用到的数据一般是以向量的形式表示的。按一定的次序排列在一起的变量( x 1 , x 2 … x n ),依次表示事物的各种特征。举个例子,我们打算用过去一年在服装、饮食、住房、出行、健身、娱乐、美容、奢侈品这8个类别的消费金额来研究一个人的消费习惯。那么,这8个数字构成了一个八维的向量:( x 1 , x 2 , x 3 , x 4 , x 5 , x 6 , x 7 , x 8 ),其中每一个变量对应了一个类别的消费金额。不同类型的人,上述向量的数值也不同,美食爱好者的 x 2 有比较高的数值,高消费地区的租房客的 x 3 会比较高,注重外貌容颜的人 x 7 比较高……
图2-1 向量示意图
这里面的每一个变量叫作向量的一个维度,人工智能中的向量也常被叫作特征向量,因为它描述了事物的特征。要注意的是,向量中变量是按照一定顺序排列的,顺序变了,向量也就变了。我们举例的向量只有八维,是一个简化的例子,在现实中,人工智能处理的向量通常是高维的,在商业应用中可以达到上百维、上千维甚至更多,在处理基因数据时,可以达到百万维以上。正因为人工智能可以理解高维度的向量,而不是像人脑一样只能分析少数几个变量,所以人工智能会给我们带来更深入、更有效的知识和洞察。
在数学上,分类要做的是,将一个预测函数作用在个体的特征向量上,得到想要的输出结果。如前所述,人工智能中个体的数据是以向量形式来表示的。以图片识别为例,为了识别图片中的物体种类,首先我们要建立一个预测函数 f ,预测函数 f 作用在图片的特征向量 x 上,得到一个类别 f ( x ),比如说“小猫”“小狗”或者“兔子”。当然,在现实中的图片识别应用中,人工智能可以识别出任意类别物体的图片。
这个看似简单的过程其实是非常强大和灵活的,基本上所有人工智能分类的过程都可以抽象成这样,其中预测的目标是跟具体业务相关、需要提前获知的信息。就像之前提到的亿客行案例一样,网站需要预测一个访客的价值高低。如果我们可以准确地识别一个访客是否具有高购买的可能性,并将其应用于电商领域,根据访客价值定制营销策略,就能取得优秀的阿尔法。
让我们来看看如何设计高价值用户预测的分类模型。首先,我们需要收集历史上具有高价值或者低价值客户的标记,以及各自行为的特征向量。这个分类问题的目标是将任何一个新的访客分为两类之一。所谓高价值、低价值就是看客户一定时间里在网站的购买额度,超过一定金额的定为高价值客户,反之则是低价值客户。这样,我们有了模型训练所需的数据集,可以根据这些数据训练的模型预测一个网站访客价值的高低,即使之前他没有在网站上消费过。既然这个模型的作用这么大,那么我们接下来就具体看一下,它是如何被训练出来的,又是如何进行预测的。
在人工智能领域,机器学习是产生模型的途径和方法论。和我们的学习一样,分类问题的机器学习框架也分为训练和预测这两个最基本的环节。
训练环节中需要给定一个训练集,通过训练集中的标记样本{( x 1 , y 1 ),…,( x N , y N )}训练出一个预测函数 f ,也就是我们的预测模型。标记样本是由第1个到第 N 个输入数据 x 以及与其相对应的输出数据 y 组成的。在预测环节中,我们要对在训练环节中形成的预测模型输入一个新样本 x ,使用 f 输出预测值 y = f ( x )。需要注意的是,在训练环节中,由于样本是给定的,所以样本的标记是已知的,但在预测环节中,使用的都是新数据,所以样本的标记是未知的。
任何分类模型都要经过这两个环节。在训练环节中,机器通过分析训练集学习模型,发现其中的规律,并以预测模型 f 的形式产出。在预测环节中,碰到新的样本,即使模型先前没有见过这个样本,仍然能够输出相应的分类。正如人的思维方法是从经验中学习规律,人工智能通过训练环节从数据中学习模型。训练环节使用了何种模型,以及模型训练的质量,决定了模型的有效性,其中最重要的指标是模型在新样本上的预测效果。
如果一个模型能够对新样本进行有效的预测,就可以在实际使用中产生效益。比如,一个模型成功地预测了某位用户购买某款商品的概率为80%,那么商家可以积极地向该用户推送自家的该商品,用户经常接收到自己喜欢的商品的信息,下单的概率也会有所上升。成功地预测出用户是否会购买,帮助商家提高销量,这样的模型才是有实际意义的。
一个模型能带来多大的价值,取决于模型预测的准确率有多高。而模型预测的准确率又依赖于模型的泛化能力(generalization ability)。也就是说,在一定程度上,模型的泛化能力决定了一个模型最终能迸发出多大的能量。那么泛化能力到底是什么呢?
泛化能力是用来描述模型对新样本的预测能力的。我们在日常生活中也称之为举一反三或学以致用的能力。机器学习的目的是学到隐含在数据背后的规律,对具有同一规律、训练集以外的数据,模型也能给出合适的预测。这就是泛化能力的表现。
泛化能力体现了模型智能水平的高低,如果一个模型只在训练数据上能准确地分类,作用是很小的,因为这充其量是模型“记住”了各种输入和对应的类别,在新的场景中没有办法做出准确预测。
在进一步讲泛化之前,我想先讲一个故事。我有一对情侣朋友,女生是一个中国姑娘,叫郭霓禾,男生是英国人,叫安德费汀。郭霓禾是一个牙科医生,她诊病的程序十分烦琐,一个简单的牙疼,她会给病人量体温、测视力、检查血压,有时甚至还要检查心电图,除此之外,她还会询问病人一些无关的信息,比如身高、体重以及最近吃过什么。她饱读各种医学类书籍,还研究过各种偏方,最后再结合她的临床经验,总结出一些独特的治病规律。如果一个新的病人的所有指标符合她总结出来的规律,她才能判断这个人的患病情况,如果情况不符合,她就无法做出判断。比如有一次一个病人牙疼,经过检查和询问,她发现这个病人体温37℃,视力0.8,身高1.7米,体重70千克,是在吃了西红柿之后智齿开始发炎。于是她就总结出一个体温37℃、视力0.8、身高1.7米、体重70千克的人会在吃了西红柿之后引发智齿发炎的规律。刚刚好,安德费汀也符合这几个条件,有一次安德费汀智齿也发炎了,但因为安德费汀没有吃西红柿,郭霓禾认为他不符合自己总结出的规律,诊断安德费汀的牙疼不是因为智齿发炎引起的。而安德费汀是一个股票投资分析师,对于自己的经验和能力十分自信,他认为凭借自己的经验,只需要看一下股票的走势,就可以判断一只股票到底是应该买入还是卖出。他根本不考虑政策、大盘环境、主力资金进出等变化因素,每天只看一下电脑屏幕上股票的涨跌状况就做决定。这样的判断显然十分不科学,导致了他的大部分积蓄都被套牢在股市。
郭霓禾和安德费汀两个人都各有特点。郭霓禾对待事情很认真,看事情很全面,但是由于她顾及的事情太多太细,有时可能会过度重视一些无关紧要的特质,总结出一些没有作用的规律,比如那些奇怪的指标与智齿发炎其实并没有关系,只是那个病人刚好在智齿发炎前是那样的身体状态,刚好吃了西红柿,这样过度关注无关因素反而妨碍了病因的评估。安德费汀则正好相反,他看事情太片面,没有综合考虑影响股市涨跌的因素,导致他的判断和股市的实际情况产生了很大的偏差,成为被迫割肉那一批人。
故事讲完了,我想告诉你,郭霓禾和安德费汀其实都是我虚构的朋友,他们的名字其实就是过拟合(overfi tting)与欠拟合(underfi tting)的谐音。过拟合和欠拟合是两类统计学现象,有这两种现象的模型,不具备良好的泛化能力。
在统计模型中,由于模型太过复杂而拟合了训练样本中的噪声,以至于输出的结果与真实值相差很大,就像郭霓禾诊断病人一样,这就是过拟合。欠拟合则刚好相反,是由于模型过于简单,以至于得到的模型难以拟合训练数据,就像安德费汀没有考虑到影响股市的其他因素,而导致判断错误。
我们总是希望在机器学习训练时,机器学习模型能在新样本上有很好的表现。过拟合时,模型过于复杂,把训练样本学得过分好了,就很可能把一些训练样本自身的特性当成所有潜在样本的共性。这样一来,模型的泛化性能就下降了。欠拟合时,模型又过于简单,无法很好地学到训练样本的一般性质,所以不论在训练数据还是预测数据中,表现都很差。
过拟合就是过多学习了一些不必要的数据特征。比如你的模型需要区分男人和女人,模型学习了训练样本中所有男人和女人的特征。如果训练样本中的女人刚好都穿了红色的衣服,过拟合的模型就可能会把穿红色衣服作为区分男人和女人的一个特征。我们都知道,穿什么颜色的衣服并不能作为区分人的一个特征,这时模型学习的这个特征就属于过度学习。过度学习不仅毫无作用,甚至还会对模型的预测结果产生误导,比如出现了一个新的预测样本,是一个穿红色衣服的男人,模型很有可能会根据他穿了红色衣服这个特征就把他识别为女人。欠拟合与过拟合正好相反,它对于训练样本的特征学习得不够充分,导致训练出来的模型不能很好地进行预测。而且,由于欠拟合的模型没能很好地捕捉到数据特征,它不但不能对新的样本数据进行预测,在训练集中的样本数据时表现也不是很好。比如你要参加一场考试,考试前做了许多模拟题,发现有一些知识点你还不明白,在模拟题中你有部分题目做不出来,这就是没有很好地掌握训练样本的规律。当你要对新样本进行预测时,也就是当你去参加这场考试时,考试结果也不会很好。不论是过拟合还是欠拟合,都会使模型不能很好地输出预测结果,所以,在机器学习中,这两种现象都是需要极力避免的。
图2-2形象地展示了拟合的几种情况。我们有一些数据样本,大致呈二次函数形式,可以看出,用二次函数来做拟合最合适的是图2-2中间的图像。但是如果我们不采用二次函数呢?比如,我们用线性的函数来拟合它,我们可以得到如图2-2中左图的直线,这显然没有很好地拟合训练样本数据,更不用说预测数据了。我们用高次函数来拟合,可能会得到如图2-2右图那样的曲线,显然,这并不是我们想要的模型,它把个别数据的偶然偏离也当成了共性,而过度拟合了进去。
图2-2 函数拟合示意图
通常,解决欠拟合的方法包括:(1)增加新特征,也可以考虑加入特征各种形式的组合,来增大模型可操作的空间;(2)尝试非线性模型,比如非线性支持向量机(SVM)、决策树、深度神经网络(DNN)等模型。
解决过拟合的方法包括:(1)交叉检验,即拿出大部分样本进行模型训练,留小部分样本用模型进行预测,并通过调节这小部分样本上的预测误差来得到较优的模型参数;(2)特征选择,从已有特征中选择部分特征以减少模型所用特征数;(3)正则化,即为原始模型引入额外信息来限制模型的复杂度;(4)增加训练数据在一定程度上可以避免过拟合。
真正的泛化能力需要回避过拟合和欠拟合,一个好的模型必须真正把握数据的底层规律,既不比数据本身复杂,也不比数据本身简单。人工智能行业的趋势是要用越来越复杂的模型来尝试做出更好的泛化效果,这需要我们更加谨慎地看待:如果训练数据量不够多,或者并不支持复杂的模型假设,那么,很有可能我们只是在过拟合,而不是在产出优质可泛化的模型。什么样的模型既不过拟合,也不欠拟合,是运用AI思维时需要考虑的核心问题。