我思故我在——从大数据深入学习机器如何思考

从人类诞生的那天起,我们就开始思考这个世界,如今,学会使用工具的我们尝试让机器学会思考,但机器真的会思考吗?机器怎么思考?看完这篇文章后,相信你会对这些问题会有更深入的认知。


本篇文章对应的课程为毕然老师的《机器学习的思考故事》,地址为https://aistudio.baidu.com/aistudio/course/introduce/1138?directly=1&shared=1

毕然老师的三篇资料:

一、大数据与机器学习

  • 大数据的价值
  • 机器能像人一样学习吗?
  • 机器怎么学习?

1.大数据的价值

从数据中获得有效信息有两大难点,一方面是数据要足够细分类即细致且准确,另一方面是要保证分类中的数据量足够多,而大数据正好满足这两大要求。

  • 大数据能让我们更精细地刻画事物的客观规律
  • 大数据使规律学习不再依赖人类知识

2.机器能像人一样学习吗?

在考虑这个问题之前,先来看看人类是怎么学习的。举一些例子:

  1. 一个小孩,他从一出生开始就会挥一下胳膊、瞪一下腿,其实就已经开始和周围的环境产生的交互。交互会产生经验,小孩子会慢慢地知道做什么事情,大家会笑;做什么事情会被批评。
  2. 远古时期,人类在森林里遇到黑熊,有的人逃跑,而有的人装死,最终,大部分装死的人都活了下来,于是活下来的人们就慢慢总结出遇到黑熊要装死这一结论
  3. 古人多次在下雨前观察到乌云密布,狂风大作的现象。基于这种观察,人们在还没下雨前就根据乌云和狂风预测天气,所以有”山雨欲来风满楼“的诗句传世。虽然,观察和预测时的雨水是在不同地点发生的,但并不影响人们将抽象的规律”乌云+狂风=要下雨“和转移到新场景应用。
  1. 人们在学习加法的时候,因为含有加法的具体实例无穷无尽。因此在学习加法时,我们首先记住10以内的加法实例,再记住加法法则,这样就可以掌握加法了。因为所有的加法实例均可以通过这两个事情计算出来。

从上面这几个案例可见,人类学习的过程分为归纳和演绎两个步骤:

  • (1) 归纳步骤:将从大量历史数据实例中观测,总结出通用的抽象规律。
  • (2) 演绎步骤:再将这个抽象规律用于未来的未知结果的具体场景。

即:观察大量已知案例->归纳->总结通用适用的抽象规律->演绎->判断未知结果的新案例。总结来说就是,人类通过一些个例来抽象总结事物的本质规律


但这样的学习方式真的靠谱吗?

回想一下高中生物学的孟德尔杂交豌豆实验,要是孟德尔没有对多个豌豆样本做分析,也许他就得不到3∶1的性状分离比,因此,统计学习才是正确的学习方式,而不是个案学习

统计学习的两大哲学原理

用统计的方法理解世界,不过于看重个例,这个貌似简单的道理隐藏着深刻的内涵。它教我们要看重过程,而不是看重单次的结果,因为再好的过程也可能会偶尔失利,但从长远来看,好的过程总体上必然导致好的结果。中国人有句老话,做事情要“尽人事,听天命”即是这个道理。

1.人既要尽人事,又要听天命。

下图是不吸烟与吸烟的人寿龄数据正态分布:

虽然不吸烟(尽人事)的人群中有寿龄短(听天命)的人,吸烟的人群中也有寿龄高的人,但总体来说,尽人事使天命的分布变得更好(曲线的中轴向好的方向偏移)。换句话说,无论一个人是否吸烟,均可能过早去世(分布的左侧尾巴:差尾巴),也可能活到高寿(分布的右侧尾巴:好尾巴)

对于吸烟问题,虽然选择健康的生活方式“不吸烟”,我们会进入更好分布的寿龄曲线(中心轴在75岁的分布),但依旧无法知道我们会处于该曲线的好尾巴(长寿),还是坏尾巴(夭折)。那么,既然“天命”对寿龄影响这么大,是否我们可以不注意健康呢?也不可以,如果不尽人事,我们会跌落到更差的寿龄曲线上去(中心轴在70岁的分布)。“人事”决定了我们处于哪个分布曲线,“天命”决定了我们处于该分布曲线的哪个尾巴,这就是对“尽人事、听天命”的统计学理解。

人事决定哪个分布,天命决定哪边尾巴!

任何事情均是由可控的因素和不可控的因素构成,即使把可控的因素做到最好,只能保证我们进入一个比较理想的正态分布,还需要借一定的“东风”才能成事。当然,我们也可以选择懈怠生活,同样有一定概率处于差分布的好尾巴(如某天中了双色球彩票),可能物质生活也很不错,但这仅仅是极小概率的事件。

2.观测样本决定人生观

这一点对于我来说深有体会,一个人如果总是停留在一个固定的小圈子,那么他的认知也只会停留在这个小圈子,这也就是为什么要多出去看看的原因

事情是如此,但人是感性的动物,我们往往会对身边发生的、亲眼看到的个案给予更多的重视,而忽略了整体数据。如下面的一些实例:

  • (1) 一位勤奋上进的学生,发现混日子的同学撞大运发横财、或嫁入豪门后每日炫富,转而对世界和人生无比失望,感叹努力无用。但他却没有看到,生活中靠自己努力获得财富和幸福的人也比比皆是。
  • (2) 管理者使用自己企业的某个产品时,恰巧碰见了一个问题,进而对整个产品全盘否定,完全不看统计评估的数据。
  • (3) 产品新功能推出后,两位运营的同事从各自的用户得到反馈,一个说新功能好,一个则抱怨新功能的种种不好,而他们只是从各自客户那得到反馈,谁也没有看到整体数据。

上面的三个例子均是生活和工作中常见的场景,以自己的所见所闻为判断依据是人类的天性,但如果我们的所见所闻只是真实世界的一个抽样,那么需要有足够的理性跳出自己的圈子,以更加宏观、总体的统计数据来认知世界。

统计学习真的可靠吗?

对于从具体案例归纳出来的规律,不一定是正确的。不能相信随便从个案归纳出的规律,而要统计的方式去进行归纳。但只要使用统计的方式,我们就一定能学习到这个世界的真实规律吗?

毕然老师在这里举个3个案例:

  • 案例1:抓球游戏(统计推断)。在不透明的罐子中有许多橙色小球和绿色小球,可以从罐子中随机抓出10个小球察看,要求猜测罐子中两种小球的占比。实验了1次,抽出的10个小球中绿色占了7个,我们能判断罐子中绿色小球概率是70%吗?
  • 案例2:智力测试(数据分析)。请观察下面左侧的图形的规律,上面三幅是A类,下面三幅是B类。对于右侧这幅图,应该属于哪一类?
  • 案例3:函数猜测(数据建模)。已知Y~X函数的五个随机抽样点(如下图所示),分析Y~X的函数关系。

对应于上面这三个案例,毕然老师给出了解答:

  • 案例1的答案:我们怎么知道,抓球游戏中没碰到这样的情况?罐子里大部分是黄色球,仅仅在顶层漂浮着7个绿色小球,而又正好被我们抽出了。所以,依据仅仅一次抽样小球的统计比例,完全无法得知罐子里的真实比例。
  • 案例2的答案:新图形既可以属于A类,又可以属于B类。因为与A类的三幅图具有一致的特征“左上角的小格为黑色”,而B类中它们都满足“对称性”的规律。总而言之,无论大家猜测背后的规律是什么,答案都可能是另外一种。所以,基于少量数据的分析,很可能“婆说婆有理,公说公有理”。
  • 案例3的答案:Y与X的关系既可能是线性关系,也有可能是曲线关系。因为抽样的5个数据点可能巧合地表现出线性,但真实的关系也可以是曲线,又或者是更复杂的曲线。可见,通过有限的数据,拟合Y~X的关系(注:数据建模中的回归问题)是不可能的。无论拟合出什么结果,真实结果都可能是另一个样子。

从上面3个案例中,我们可以得到一个结论:当统计的样本较少时,统计学习是不可靠的

说到这里就不得不提到大数定律。在随机事件的大量重复出现中,往往呈现几乎必然的规律,这个规律就是大数定律。通俗地说,这个定理就是在试验不变的条件下,重复试验多次,事件出现的频率无穷接近于该事件发生的概率,也就是偶然中包含着某种必然。

基于概率的信任——抽样统计值与真实世界间存在一种数学关系

从古至今,大数定律已经深入人心,大多数人在日常生活中经常使用大数定律做判断,甚至没有意识到它的存在。

  • 大数定律:当试验次数足够多时,事件出现的频率无穷接近于该事件发生的概率
  • 现实故事:“曾参杀人”的典故,子日:三人成虎,一则无心,二则疑,三则信矣
  • 建模经验:人工规则->学习模型,数据少要重视先验,数据多重视后验,如抛硬币

“曾参杀人”的典故出自《战国策·秦策二》:
过去曾参的家在费地,费地有个跟曾参同名同姓的人杀了人,有人向曾子的母亲报告说“曾参杀人了!”时,曾子的母亲说:“我的儿子是绝对不会去杀人的。” 没隔多久,又有一个人跑到曾子的母亲面前说:“曾参真的在外面杀了人。”曾子的母亲仍然不去理会这句话。 她还是坐在那里不慌不忙地穿梭引线,照常织着自己的布。又过了一会儿,第三个报信的人跑来对曾母说:“曾参的确杀了人。”曾母心里骤然紧张起来。急忙扔掉手中的梭子,端起梯子,越墙逃走了。虽然曾参贤德,他母亲对他信任,但有三个人怀疑他(杀了人),所以慈爱的母亲也不相信他了。

基于大数定律,曾母最后相信了这个消息,如果曾参没有杀人,连续三个不认识的人说他杀人的概率太小了,所以曾参可能确实杀了人。曾母不自觉的运用了大数定律,改变了原来坚信儿子不会杀人的想法。

有了对大数定律的理解,再回顾之前的案例2(智力测试)和案例3(函数猜测)。这两个案例不是大数定律的直接体现,而隐藏在背后。如案例3,虽然Y~X关系有可能是一条弯弯曲曲的曲线,只是随机抽样的5个点刚好在一条直线上,发生这种情况的概率并不大。 但随着观测数量增加,例如随机抽样1000个样本点,它们之间的依然可以用一条直线穿过,那么YX不是线性关系的可能性极小,几乎可以忽略。我们可以大胆的推测YX就是线性关系!

所以,通过大数定律,人类使用归纳+演绎的方法,是可以学习到知识的,这意味着对机器也是一样的!

大数定律背后的人生感悟

其实我们人生发展的起伏也可以认为是大数定律的一个作用。

我们每个人其实都有一个内在的真实的价值,对一件事情所起到的一个价值。可以认为这是一个真实的一个概率或者是一个值,我们很容易会看到,我们的价值可能会被高估或低估,但是从长期来看,我们的价格肯定是要回归价值的。

这就跟大数定律非常像,随着抽样的增多,统计值一定会回归真实值的。促使价格回归价值的动力,

  • 一方面其实是机遇上的平衡(祸兮福所依,福兮祸所伏),从一件事情来看,可能有的人运气非常好,有的人运气很糟糕,但是如果把时间延长,随着时间的增多,我们会发现每个人的运气最后都会差不太多的;
  • 另一方面,从一个公司的角度讲,大家想想我们如果作为公司的老板,我喜欢什么样的人。我们肯定是喜欢价格小于价值,说白了就是被市场低估的人,这样的人挖出来了之后呢,可以给他更好的薪资回报,那这个人也会非常感激这个企业,然后创造出更大的价值。我们不太喜欢什么样的人才呢?那就是这个人的人才价格远远超过它的价值,就说白了被市场高估了。

可以想一想杨澜说的一句话:“你可以不成功,但你不能不成长,也许会有人阻碍你成功,但是没人会阻碍你成长。”这话说的就是我们只要去关注自己的价值就好了。至于价格,我们要相信,随着测量量的增多,它终究有一天会回归我们的真实的价值。

回到最开始的问题:机器能像人一样学习吗?

答案是肯定的!

监督学习就是让人工智能像人类一样去模仿,给他一个样本,然后用神经网络训练一个模型,去学习怎么根据现有的样本预测新的数据

强化学习能让机器像人一样的自学,在没有人教学的情况下只能自己和环境交互,在交互中学习。

3.机器怎么学习?

机器学习的过程是一个漫长的训练过程,换句话说,这是一个归纳总结的过程,因此有很多开发者把这一过程称为“炼丹”

机器学习的实现可以分成两步:训练和预测,类似于我们熟悉的归纳和演绎:

  • 归纳: 从具体案例中抽象一般规律,机器学习中的“训练”亦是如此。从一定数量的样本(已知模型输入 X X X和模型输出 Y Y Y)中,学习输出 Y Y Y与输入 X X X的关系(可以想象成是某种表达式)。
  • 演绎: 从一般规律推导出具体案例的结果,机器学习中的“预测”亦是如此。基于训练得到的 Y Y Y X X X之间的关系,如出现新的输入 X X X,计算出输出 Y Y Y。通常情况下,如果通过模型计算的输出和真实场景的输出一致,则说明模型是有效的。

机器学习的方法论

下面从“牛顿第二定律”入手,介绍机器学习的思考过程,以及在过程中如何确定模型参数,模型三个关键部分(假设、评价、优化)该如何应用。

机器学习的方法论和人类科研的过程有异曲同工之妙,下面以“机器从牛顿第二定律实验中学习知识”为例,帮助读者更加深入理解机器学习(监督学习)的方法论本质。


牛顿第二定律

牛顿第二定律是艾萨克·牛顿在1687年于《自然哲学的数学原理》一书中提出的,其常见表述:物体加速度的大小跟作用力成正比,跟物体的质量成反比,与物体质量的倒数成正比。牛顿第二运动定律和第一、第三定律共同组成了牛顿运动定律,阐述了经典力学中基本的运动规律。


在中学课本中,牛顿第二定律有两种实验设计方法:倾斜滑动法和水平拉线法,如下图所示。


牛顿第二定律实验设计方法

相信很多读者都有摆弄滑轮和小木块做物理实验的青涩年代和美好回忆。通过多次实验数据,可以统计出如 表1 所示的不同作用力下的木块加速度。


表1:实验获取的大量数据样本和观测结果

观察实验数据不难猜测,物体的加速度 a a a和作用力之间的关系应该是线性关系。因此我们提出假设 a = w ⋅ F a = w \cdot F a=wF,其中, a a a代表加速度, F F F代表作用力, w w w是待确定的参数。

通过大量实验数据的训练,确定参数 w w w是物体质量的倒数 ( 1 / m ) (1/m) (1/m),即得到完整的模型公式 a = F ⋅ ( 1 / m ) a = F \cdot (1/m) a=F(1/m)。当已知作用到某个物体的力时,基于模型可以快速预测物体的加速度。例如:燃料对火箭的推力 F F F=10,火箭的质量 m m m=2,可快速得出火箭的加速度 a a a=5。

确定模型参数

这个有趣的案例演示了机器学习的基本过程,但其中有一个关键点的实现尚不清晰,即:如何确定模型参数 ( w = 1 / m ) (w=1/m) w=1/m

确定参数的过程与科学家提出假说的方式类似,合理的假说至少可以解释所有的已知观测数据。如果未来观测到不符合理论假说的新数据,科学家会尝试提出新的假说。如天文史上,使用大圆和小圆组合的方式计算天体运行在中世纪是可以拟合观测数据的。但随着欧洲机械工业的进步,天文观测设备逐渐强大,越来越多的观测数据无法套用已有的理论,这促进了使用椭圆计算天体运行的理论假说出现。因此,模型有效的基本条件是能够拟合已知的样本,这给我们提供了学习有效模型的实现方案。

下图是以 H H H为模型的假设,它是一个关于参数 W W W和输入 X X X的函数,用 H ( W , X ) H(W, X) H(W,X) 表示。模型的优化目标是 H ( W , X ) H(W, X) H(W,X)的输出与真实输出 Y Y Y尽量一致,两者的相差程度即是模型效果的评价函数(相差越小越好)。那么,确定参数的过程就是在已知的样本上,不断减小该评价函数( H ( W , X ) H(W, X) H(W,X) Y Y Y相差)的过程,直到学习到一个参数 W W W,使得评价函数的取值最小。这个衡量模型预测值和真实值差距的评价函数也被称为损失函数(损失Loss)


确定模型参数示意图

举例类比,机器如一个机械的学生一样,只能通过尝试答对(最小化损失)大量的习题(已知样本)来学习知识(模型参数 W W W),并期望用学习到的知识(模型参数 W W W),组成完整的模型 H ( W , X ) H(W, X) H(W,X),回答不知道答案的考试题(未知样本)。最小化损失是模型的优化目标,实现损失最小化的方法称为优化算法,也称为寻解算法(找到使得损失函数最小的参数解)。参数 W W W和输入 X X X组成公式的基本结构称为假设。在牛顿第二定律的案例中,基于对数据的观测,我们提出了线性假设,即作用力和加速度是线性关系,用线性方程表示。由此可见,模型假设、评价函数(损失/优化目标)和优化算法是构成模型的三个部分

模型结构介绍

那么构成模型的三个部分(模型假设、评价函数和优化算法)是如何支撑机器学习流程的呢?如下图所示:


机器执行学习的框架

  • 模型假设:世界上的可能关系千千万,漫无目标的试探YX之间的关系显然是十分低效的。因此假设空间先圈定了一个模型能够表达的关系可能,如蓝色圆圈所示。机器还会进一步在假设圈定的圆圈内寻找最优的YX关系,即确定参数W。
  • 评价函数:寻找最优之前,我们需要先定义什么是最优,即评价一个Y~X关系的好坏的指标。通常衡量该关系是否能很好的拟合现有观测样本,将拟合的误差最小作为优化目标。
  • 优化算法:设置了评价指标后,就可以在假设圈定的范围内,将使得评价指标最优(损失函数最小/最拟合已有观测样本)的Y~X关系找出来,这个寻找的方法即为优化算法。最笨的优化算法即按照参数的可能,穷举每一个可能取值来计算损失函数,保留使得损失函数最小的参数作为最终结果。

从上述过程可以得出,机器学习的过程与牛顿第二定律的学习过程基本一致,都分为假设、评价和优化三个阶段:

  1. 假设:通过观察加速度a和作用力F的观测数据,假设 a a a F F F是线性关系,即 a = w ∗ F a = w * F a=wF
  2. 评价:对已知观测数据上的拟合效果好,即 w ∗ F w * F wF计算的结果,要和观测的 a a a尽量接近。
  3. 优化:在参数w的所有可能取值中,发现 w = 1 / m w=1/m w=1/m可使得评价最好(最拟合观测样本)。

机器执行学习的框架体现了其学习的本质是“参数估计”(Learning is parameter estimation)。在此基础上,许多看起来完全不一样的问题都可以使用同样的框架进行学习,如科学定律、图像识别、机器翻译和自动问答等,它们的学习目标都是拟合一个“大公式”,如图所示。


机器学习就是拟合一个“大公式”

二、深入理解机器如何学习

机器通过一个有些“机械”模仿过程,像人类一样从数据中学习到知识。机器学习(监督模型)遵照“假设空间+优化目标+寻解算法”的流程,从数据中学到知识并预测未来。

下面还是以牛顿第二定律为例,看看机器是如何学习的。

机器的学习过程

1.确定假设空间

第一步,机器需确定预测的基本假设,即加速度a(Y)和作用力F(x)之间是线性关系。“预测值Y与特征X之间关系”的基本假设的称为“假设空间”,它圈定了预测模型能够表示的关系范围。比如,如果实际关系是非线性的(比如圆的周长与半径之间的关系 C=πR2),却让机器使用“线性假设”去学习,最优结果只能找到一条与该非线性曲线最贴近的直线,而不能突破“直线关系”的表达范畴。在实践中,往往机器学习之前,人们已经对业务问题有较深刻的认知和理解,并不期望机器漫无边际的实验Y与X之间的关系可能,而是根据业务理解圈定一个更可能的关系范围,降低机器学习的难度、提高其学习效率。这个事先假定的关系范围即为假设空间。具体到上述场景:通过对实验数据的观测,假设“加速度a”与“作用力F”之间是线性关系。至于是怎样的线性关系,仍需要机器通过第二步、第三步去确定。

2.选择优化目标

第二步,有了“假设空间”,机器仍需要一个可计算的评价标准,告诉它什么样的预测值是好的,什么样的预测值是坏的。从直观感觉上讲,预测值与实际值完全一样是最好的,相差不大是次好的,相差很大是不好的。基于此,设计最直接的评价指标Loss“在已知的样本集合上,计算每个样本的预测值与实际值的误差,加和全部误差得到的指标”,公式写为:Σ|实际值-预测值|。使用该方法的效果如下图所示:如果输入只有一个特征X(一维特征),学习到Y~X的关系为左图中的直线。对于每个样本,误差为该样本|实际值-预测值|,即为图中点到直线的线段(平行于Y轴)。评价指标是所有线段长度的累加和。

可以想象,随着拟合直线的上下移动或左右转动,Loss的大小(所有线段长度之和)会发生变化。如果输入有两个特征X1、X2(二维特征),预测值Y与输入的关系则是一个平面,每一个点的预测误差为点到平面的线段(平行于Y轴),评价指标依然是所有线段的长度加和,如上面右侧图形所示。同样,随着预测Y~X关系的变化(移动图中的直线或平面),评价指标的大小也会随之变化。这个评价模型预测效果的指标称为“优化目标”,是代表模型预测效果的标尺,即为模型学习优化的方向。设定了优化目标后,最后的问题是:如何在假设空间中明确下一种关系(确定Y=wx中的参数w),使优化目标达到最小。

3.通过寻解算法学习

第三步,在假设空间中寻找使得优化目标最小的参数取值,称为“寻解算法”或“优化过程”。什么“寻解方法”最简单呢?从试验中可见,在所有可能的预测值中逐一尝试,是最容易想到的。尝试参数取值的范围是0.09~0.11岁(超出这个范围显然是不合理的猜测),共尝试20次(每次增加0.001)即可比较得出最优参数解。这种方法虽然容易想到,但也比较笨拙。如果假设空间太大,要全部尝试一遍岂不是要很久?!所以,在实际项目中几乎没人使用这种方法,但用于演示机器学习基本过程是足够的。

上述的机器学习步骤,依然有一个逻辑漏洞。我们设计的优化目标是在训练样本上进行计算的,即我们选择的参数以及形成的Y~x关系会在已经掌握训练数据上十分有效。但在现实中,我们期望模型对未来没有见过的样本做出正确预测。在已知训练样本上表现有效的函数规律,会在未知的样本上依然有效么?

假设空间

明确了机器学习的过程,还需要一种对学到的知识进行记录或表示的方法。如果是线性关系,可以将关系写成“线性方程”,如“a=F/m”可以写成:

  • 加 速 度 a = 作 用 力 F ( 特 征 ) ∗ 1 / m ( 参 数 ) 加速度a = 作用力F(特征) * {1/m(参数)} a=F1/m

其中输入变量“作用力F”为特征,而表达a~F关系的其他变量称为参数,如1/m。将特征和参数组合在一起写成方程,可以表达机器学习到的知识。

输出Y为一个实数取值的预测问题,学术上称为“回归”模型。由于本案例中Y~X的关系是线性的,所以这是一个“线性回归”模型。

在实际中,往往一个事情有着更多的考虑和影响因素。对于一个特征输入的情况,用方程式表达线性关系是可行的。那如果再多一个特征,该如何表达?例如,现实世界中往往需要考虑到物体的摩擦力,所以物体的加速度不仅仅和作用外力有关,还与该物体与平面产生的摩擦力有关。这时,预测方程可以写成:

  • 加 速 度 a = 作 用 力 F ( 特 征 ) ∗ 1 / m ( 参 数 ) − 正 压 力 F ( 特 征 ) ∗ u ( 参 数 ) 加速度a = 作用力F(特征) * 1/m(参数)- 正压力F(特征)* u(参数) a=F1/mFu

从该模型延展开来,可以应用到生活和工作中的大量场景,如银行判断企业的信用来决策是否放贷、互联网公司预测广告的点击率、电信企业定位高流失风险的客户,这些场景不过是具有更多的特征、更强大的假设空间、更符合应用场景的优化目标、以及更高效的寻解算法而已,机器学习的流程依然是一样的!

简而言之,机器学习(监督学习,包括回归、分类)首先设定一个更大的函数空间可能,再从空间中找到拟合已知数据最好的那个函数。

优化目标

我们要想把一件事情做好,最重要的就是有一个明确的目标。比如KPI (Key Performance Indicator),这就是为了给人们的工作指明方向和目标。这个目标不仅是明确的,而且很可能是量化的(即包含具体的数字指标)。

机器也是一样的,要想让机器学会一个“知识”,就要给他一个明确的优化目标。完全拟合已知数据是理想假设的话,那么优化目标就是拟合误差的某种衡量指标,又称为Loss。

优化目标背后的哲学

优化目标决定最后的产出结果,每个人追求的目标可能各不相同,有些人追求金钱,有些人追求名誉,不同的追求会成就不同的人生。

举个例子,有些人一开始可能追求写代码的成就感,代码写得好,受到上司提拔,但是久而久之,目标就变成了利益,做项目之前想到是能得到哪些利益,而不是写代码的快感,这么一来,努力的目标无形之中就被换掉了。可能有很多人也正在被社会灌输这种错误的价值观。因此,我们要不忘初心,牢牢记住自己的目标到底是什么。

这一点无论是在人抑或是团队上都十分重要,用在机器上也是一样的,合理的优化目标才能得到期望的模型。

寻解算法

如果Loss是关于参数的函数,要求Loss的最小值,目前有2种常用方法:

  1. 可以对该函数求导,当导数为零时参数的值就是一个比较好的解——公式法
  2. 随机初始参数,求导得出下降方向(梯度),参数更新一小步,反复迭代逼近最小值——梯度下降法

对于机器学习,针对不同的输出有不同的任务,比如:线性回归、感知机(0/1误差)、逻辑回归(似然误差)

三、深入理解机器为何能学习

大数定律如何在机器学习中发挥作用

机器实际上是根据我们已知的数据,根据我们给定的一个衡量标准,然后从我们的假设空间中挑出一个最好的假设,这个最好的假设能使这个衡量标准达到最好。这个衡量标准往往是一种Loss,就是发生错误的一种数量的衡量,机器发生错误是在已知样本集合上发生错误。这样的学习过程,我们会发现找到的这个假设中最好的这个假设会使我们拿在手里的数据(即In-sample)表现最好,因为机器学习就为了这个目的。但是我们今天真正让机器学习想做的事情是在未来要预测的新的样本集合上(即Out-sample),就是未来我们还没有看到的,这个模型从来没有见过的新出现的样本上,预测的效果要比较好。

机器在这些没有见到的新的数据上会一样表现的好吗?

毕然老师还是以罐子里的小球为例,但是所有罐子中小球都是一样的。

放进罐子里的小球相当于我们的数据样本,所有罐子中的数据样本是一样的,但是每个罐子相当于一个假设,罐子的假设不同,里面的小球会发出不同颜色的光。一开始,所有的小球就是原始的数样本,小球其实都是白色的,没有任何的光亮。然后放到每个罐子中,小球跟罐子就起了一定的化学反应。有的小球就变绿了,有的小球就变橙色了。颜色其实代表的就是某一个样本,在某一个假设下是否正确,假设绿色是我们想要的,那么罐子里应该全都是绿色小球。

判断哪个罐子比较好,其实应该罐子切开,看一下里面这些原来是白色的小球,是变绿的多,还是变橙色的多。切开发现这罐子里全是绿色的球,那这个罐子是最好的一个假设。但是实际上,我们又不能把这个罐子切开,因为这个罐子不透明。就相当于我们看不到未来,没有见过的一些数据样本。我们是看不到的,我们只能从罐子抽样,抽出的小球相当于In-sample,就是我们拿到手里的训练数据。如果我们抽到手里,假设有十个球,我们发现绿色小球比较多,即In-sample比较小,也就是说他在我们的训练数据上,这个模型是表现很不错的,因为它的错误很少,但如果我们看到罐子里,实际上是绿色小球比较多,那我们管它叫Out-sample比较小,就是我们可以认为这个假设真的能在我们未来很多模型没有见过的这个样本上,真实的环境中,他可能会表现比较好的一个假设。

机器学习模型并不是随意指定的函数关系,它是在M大小的假设空间中选择拟合训练数据最佳的函数。这个选择过程(优化),使得Ein和Eout满足某个差距的概率增大了M倍

可以这样思考,在训练数据集上,Ein表现的非常优秀(Ein很小)有两种可能:

  • 第一种是模型捕捉到了正确的关系函数。
  • 第二种是模型捕捉到了一个虚假的关系函数,只是凑巧在收集到的有限训练样本上表现不错,实际并不是正确的(应用到未知样本上的预测错误很多)。

一旦发生后一种情况,我们趣称为犯了“狗屎运”错误(Ein和Eout差距很大)。假设出现这种情况的概率为p,如果仅仅随机的指定一种关系,出现“狗屎运”错误的概率是满足霍夫丁不等式的。但从M种关系可能中选择表现最好的,会使“狗屎运”错误的概率提高了M倍。假设有M个函数中有M个在训练数据上表现良好,因为每个关系均以p的概率为“狗屎运”错误,且一旦某个关系出现“狗屎运”错误,我们肯定会选择它(因为它在训练样本上表现的好),所以最终结果为“狗屎运”错误的概率提高了M倍。考虑到M最多可以等于M,所以从M大小的假设空间中做优化学习,最多使得Ein和Eout满足某个差距的概率增大了M倍。

可见,模型的假设空间大小M,极大的影响了大数定律在机器学习过程中的作用,它究竟和什么有有关?让我们从两个实际的案例来感受一下。

M函数的两个案例

对于分类问题,给定样本数量,假设空间代表存在多少种样本分布,分类函数能正确的将每个类别的样本区分开。例如,对于二分类问题,两个样本,共有4种样本分布的可能(正正、正负、负正、负负),如果模型能将这四种情况均正确的分类,它的假设空间大小为4。换句话说,假设空间是一个模型的函数表示能力,能够完美的拟合多少种关系可能。假设空间越大,模型的表示能力越强,就能更好的学习那些现实世界中的复杂关系。

案例1:线性二元分类

线性二元分类是使用一条直线区分或正或负两种可能的样本。形象来说,就是在一张纸上三步的一些圆圈和叉叉,尝试能否画一条直线将两者分开。一种划分方法也有无数种可能(不同的直线做出的相同划分),但它们的区别是没有意义的,所以只算做一种。

对于N个样本,每个样本有正负两种分类可能的情况,最理想的假设空间M有2的N次幂种大小,即将每种样本的分布都能正确的划分开。但线性分类模型能够达到这个极限么?

先写出一些样本数量较少时候的简单场景,通过观察来猜测规律。

(1)1个样本点:共有2种样本分布的可能(样本分布:该样本为正样本或负样本),全部可以用一条直线分割。

(2)2个样本点:共有4种样本分布的可能(样本分布:正正、正负、负正、负负),全部可以用一条直线分割。

(3)3个样本点:共有8种样本分布的可能(样本分布:在2个样本点的4种分布上,再加入一种新样本为正的情况,一种新样本为负的情况),全部可以用一条直线分割。

(4)4个样本点:供有16种样本分布的可能,其中有2种情况无法用一条直线分割,可分割的情况有14种,如下图所示(空间中4个数据点,16种分布中仅有14种分布可以用直线区分)。

通过观察,我们发现4个样本点不全部可分。这仅仅是故事的开始,随着样本数量越来越多,不可分开的情况也越来越多。也就是说,线性二元分类的假设空间M随着样本量N的增长是小于2的指数次幂的。

M达不到2的指数次幂,增长因为霍夫丁不等式右侧的分母上有一个e指数次幂,如果M的增长达不到2的指数次幂,随着N的增大,不等式右侧依然会趋近于0,只是需要的样本数量N要更多。也就是说,线性二元分类模型是满足大数定律的。如果基于大量数据学习出一个线性二分类模型,在训练数据上表现良好,它大概率是真实的(在未知数据上也会表现良好)。

案例2:二元凸多边形的分类模型

与案例1一样,样本或为正或为负,但可用凸多边形对样本做出分类。下面在一种略极端的样本分布场景,探讨凸多边形假设空间M的大小。

凸多边形可以将N个点在一个圆上的任意分布区分开,假设有n个数据点,它们分布在一个圆上,每个样本点均可为正样本或负样本,共有2的n次幂种可能。无论哪种可能,均可以用凸多边形将正负样本分开。如图中所示,只要将所有的正样本用一个多边形连接起来,然后将该多边形略微外扩一点(从每个正样本点的位置略向外延展),它就会将所有的正样本点圈进来,但把所有的负样本点排除在外,即完美的区分开正负样本。

由此可见,凸多边形的分类模型的假设空间M的增长速度是2的n次幂。在这种情况下,大数定律的限制失效了。霍夫丁不等式的右侧并不会随着样本量N的增长而减少。也就是说,我们永远无法用这种假设空间,学习到一种可从统计上相信的规律。无论真实的关系如何,均可以用凸多边形学习出一种将训练数据拟合的很好的关系,但它往往只是虚假的。

从上述两个案例,假设空间的大小与两个因素相关,假设H和样本数量N,可以写成两者的函数M(H,N),称为增长函数。我们喜欢那些增长函数小于指数次幂的假设,因为这种时候,学习才是可能的!

大数据对机器学习的价值所在——解决两难

越强大的模型假设不一定是好事,它意味着越大的增长函数M(H,N),需要更多的数据才能满足学习的条件(大数定律生效)。机器学习的终极目标是减少Eout(在未来未知样本上的错误),而Eout可以理解成Ein和(Eout-Ein)两部分。更强大的模型可以使Ein更小,但如果供给机器学习的数据不足 ,它往往会使得(Eout-Ein)的部分很大,从而达不到很好的Eout。这个两难的关系如下表所示。

Ein很小意味着得到一个更精确的统计结果,(Ein-Eout)很小意味着得到一个更置信的统计结果。实际中,这两个目标经常互相打架,即使不了解机器学习,在日常的数据分析和统计中也会经常遇到。

毕老师举了一个案例:抽样调查全国3000名客户,资料包括性别、年龄、居住地三项基本信息以及他们对鞋子的喜好。

对上述数据统计分析后,得出两个结论:

  • 结论1:中国女性60%喜欢高跟鞋。
  • 结论2:北京海淀区5-10岁女童,100%喜欢男性化旅游鞋。

这两个结论是否存在问题?如果存在问题,分别是什么问题?

  • 结论1的问题在于“中国女性”这个分类太宽泛了,基于过粗分类的统计结论通常没有鲜明的特点。如果将中国女性作为一个整体,会发现她们对各种商品的喜好都很平均:既不是高比例的喜欢,也没有高比例的讨厌,是十分没有特点的人群。这是因为将不同喜好的群体混合,混合后的类别会把很多倾向性信息中和掉。比如,一所体育学校设有球类学院,分为足球班和篮球班。因为事先根据学生的喜好分班,所以两个班级的喜好倾向是极其鲜明的。如果将两个班级合并起来分析,球类院校对足球和篮球的喜好非常平均,鲜明的喜好信息被淹没在“球类学院”这个较粗的分类维度里。这个实例尙不够严重,仅仅把一些真实的信息掩盖起来。所以,在结论1中,中国女性这个目标用户群过粗,导致不同类女性对不同鞋子的偏好被淹没了,汇总后的喜好表现得很平均,统计结论变得很不精确。但只有喜好鲜明的细分市场,可以有针对性的提供差异化的商品或服务,才具备较高的商业价值。

  • 结论2听起来很美,完全没有结论1的问题。统计分类如此之细、喜好如此鲜明,极具商业价值。基于该结论,大家可以辞了工作,在北京海淀区开家专门向5~10岁女童销售男性旅游鞋的鞋店,相信一定会大卖。其实,这是一个错误的结论,它是基于1个样本统计得到的,存在统计不置信的问题。这个样本是我邻家的小女孩,她生性活泼,尙没有清晰的性别认识,喜欢将自己打扮成男孩,喜欢男性的旅游鞋,但这并不代表该年龄段的所有女孩均如此。将3000个样本放在三个维度(性别:2个分类、年龄:20个分类、地域:50个分类)切分的数据立方体中,大部分格子里只有0或1个数据样本。基于1个或少量样本的统计结论,往往是不置信的。换句话说,大数定律还没有起作用,高概率不能信任这时的统计结论!

既然用过粗放的维度观测数据会造成结论不鲜明、无价值,用过细致的维度观测数据又会造成结论不置信。那么,到底应该怎样做呢?
答案是在细致与置信之间做出合理权衡。**一方面分类维度要足够细致,够细致才能准确地定位细分群体,不会淹没有效的信息;另一方面要保证分类中含有足够样本量,样本量足够才能使大数定律发挥效应,得到置信的统计结论。**在实操中,通常在保证数据置信的前提下,尽量做数据细分,得到更细致、更有价值的统计结论。该过程如上图所示,如果格子里还有大量的数据样本,说明观测维度还可以切分的更加细致,反之如果格子中数据样本很少,那么需要减少切分的维度,使得不同格子中的样本汇集到一起,以提高结论的置信度。这个权衡贯穿了整个统计学习,在机器学习中有另外一套名字,称为过拟合和欠拟合(或者偏差bias过大和方差variance过大),同样是权衡“拆的过粗得到的统计结论无法精准的描述事物规律”与“拆的过细得到的统计结论无法置信的描述事物规律”。

毕然老师也举个一个例子:“为何女性要买那么多的包包?”
因为女性决策购买包包的维度有很多,比如不同的场景需要不同的包包,如商务会谈、闺蜜聚会、外出游玩等等;穿不同的衣服需要搭配不同的包包,如包的颜色与衣服不能相近,款式要搭配;装不同物品需要不同的包包,比如装化妆品的手包、装钱和卡的钱包、装平板电脑和手机的挎包、装小物件的提包;不同的季节需要不同的包包,比如夏季喜欢带帆布包、冬季喜欢拿皮包,还有诸多决策维度难以逐一列举。对于一位时尚女性,不仅不同维度(场景、衣服、用途、季节)组合下需要不同的包,每个维度组合最好还备有几款包,可以换着用来彰显品味与个性。
类似的,如果一个统计模型中可切分数据的特征(维度)越多,为了使每个细分场景(某种特征组合)都有足够的样本量,以便大数定律发生效力、得到统计置信的结论,所以总体上需要更多的样本数量。越多的特征,其实相当于机器学习中复杂的模型假设。

在大数据时代,该均衡点变得更加优秀。由于数据量足够大,可以使用更多的数据切分的维度(大量特征),而不用担心置信的问题。如上图所示,无论切多少刀,格子里总是存在足够的样本量。在大量样本+大量特征的情况下,“统计分析”或“模型学习”得到的信息可以非常细致且非常置信。这有着远超过人工经验的巨大价值,如:北京西二旗知识分子家庭中5-10岁女童喜欢带电光的耐克跑鞋,女童和鞋子的描述都可以非常细致。如果说传统统计学更多研究如何从抽样个体的统计指标去推测全体,那么今天的统计学则更多关注如何把全体数据在置信的前提下尽量拆细,得到更细致的个体结论。这就是大数据对机器学习的价值,强大的机器学习模型更需要大数据的匹配,这是大数据对机器学习的价值,它释放了模型的学习能力(使用更强大假设的能力)。

大样本使大特征成为可能,大特征使大样本发挥价值。— 大数据时代

机器的学以致用——实例验证

毕然老师通过拟合正弦曲线的例子进行了讲解,下面用代码来具体看一看这个过程:

(代码源地址:https://blog.csdn.net/qq_41487299/article/details/90633903

生成机器学习需要的数据

import numpy as np
import matplotlib.pyplot as plt

n_dots = 200
X = np.linspace(-2*np.pi,2*np.pi,n_dots) #生成-2*3.14到2*3.14的200个数
Y = np.sin(X) + 0.2*np.random.rand(n_dots)-0.1 #得到X对应的正弦函数的值,并加入噪音
X = X.reshape(-1,1) #扁平化,就是features只能为1
Y = Y.reshape(-1,1)

多项式模型

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

def polynomial_model(degree = 1):
    polynomial_features = PolynomialFeatures(degree=degree,include_bias=False) #生成degree阶多项式
    linear_regression = LinearRegression(normalize=True) #线性回归实例化,并且正规化
    pipeline = Pipeline([("polynomial_features",polynomial_features),("linear_regression",linear_regression)]) #流水线
    return pipeline

机器拟合正弦曲线

from sklearn.metrics import mean_squared_error

degrees = [2, 5, 10, 25] #多项式的阶数
results=[] #结果数组
for d in degrees: #运行四次
    model=polynomial_model(degree=d) #生产degree多项式模型
    model.fit(X,Y) #将X,Y扔到模型里面去训练
    train_score=model.score(X,Y) #得到评分
    mse=mean_squared_error(Y,model.predict(X)) #计算均方根误差
    results.append({"model":model,"degree":d,"score":train_score,"mse":mse}) #追加对应数据到results里面
for r in results:
    print("degree:{};train score:{};mean squared error:{}".format(r["degree"],r["score"],r["mse"]))

degree:2;train score:0.15087125859396444;mean squared error:0.42492986126567156
degree:5;train score:0.8967627699859952;mean squared error:0.05166305141746012
degree:10;train score:0.993133235586505;mean squared error:0.0034363378687887135
degree:25;train score:0.9942565489578747;mean squared error:0.0028741976752255233

绘制拟合结果

from matplotlib.figure import SubplotParams
plt.figure(figsize=(12,6),dpi=200,subplotpars=SubplotParams(hspace=0.3)) #subplotpars只是控制各下属图形高度上的间距为0.3

for i,r in enumerate(results): #循环四次
    fig=plt.subplot(2,2,i+1) #四张图,绘画顺序对应i+1
    plt.xlim(-8,8) #每张图的x轴的限制为-8到8,对应上面的-2*3.14到2*3.14
    plt.title("LinearRegression degree={}".format(r["degree"])) #标题
    plt.scatter(X,Y,s=5,c='b',alpha=0.5) #蓝色的散点
    plt.plot(X,r["model"].predict(X),'r-') #预测的曲线
(X,r["model"].predict(X),'r-') #预测的曲线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42zBjtos-1610696562198)(output_22_0.png)]

下面来分析一下拟合结果:

上面是用二次、五次、十次以及二十五次的多项式方程,分别去拟合原始的数据,看看学习出来并得到的预测结果(预测X与Y的函数关系是一个什么样的关系)。

这四张图就是我们从二次、五次、十次以及二十五次的多项式方程对这个原始曲线的拟合的一个输出结果。可以看到:

  • 二次方程拟合出来的输出其实就是直线,他只把最大的这个趋势,也就是正弦曲线最大的下降趋势给拟合出来了,但是他其实完全学到正弦曲线的精髓。这其实是一种欠拟合的状态。他虽然可能捕捉到了一些关键性的信息,但是他完全没有把这个所有关键信息捕捉全。
  • 五次、十次的多项式方程拟合效果可以明显地看到变好了,尤其是这个十次的这个方程,这两个方程其实已经把正弦曲线给很好的拟合了。模型越来越强大,我这个拟合效果是不是也会越来越好呢?
  • 第四张图是二十五次的多项式方程,拟合的效果反而变差了,他变得坑坑洼洼的。出现这种情况就说明我们这个模型太强大了,他不仅学到了正弦曲线,他连随机化误差也学进去了,也就是伪规律,他把这些伪规律也拟合了。但是这种情况肯定是我们不希望看到的,也就是出现了过拟合的状态

偏差(Bias)和方差(Variance)

误差的期望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的偏差的平方:

使用特定模型对一个测试样本进行预测,就像打靶一样。

靶心(红点)是测试样本的真实值,测试样本的y(橙色点)是真实值加上噪音,特定模型重复多次训练会得到多个具体的模型,每一个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(图上蓝色的点)。所有预测值的平均就是预测值的期望(较大的浅蓝色点),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。

一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variance dilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已经非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。

解决这一问题的整体思路是:(要知道偏差和方差是无法完全避免的,只能尽量减少其影响)

  • (1)在避免偏差时,需尽量选择正确的模型。一个非线性问题用线性模型去解决,那无论如何,高偏差是无法避免的。
  • (2)有了正确的模型,我们还要慎重选择数据集的大小,通常数据集越大越好,但大到数据集已经对整体所有数据有了一定的代表性后,再多的数据已经不能提升模型了,反而会带来计算量的增加。而训练数据太小一定是不好的,这会带来过拟合,模型复杂度太高,方差很大,不同数据集训练出来的模型变化非常大。
  • (3)最后,要选择合适的模型复杂度,复杂度高的模型通常对训练数据有很好的拟合能力。

深入理解过拟合

过拟合的三种成因:

  1. N noise太大:数据中随机误差过多
  2. 样本量N太小( D noise太大) :“样本数量”和“需要学习的规律复杂度”不匹配
  3. 模型复杂度太大:特别能想象的模型

三种防控方法:

  1. 更多的样本(增大N ) :收集更多的样本
  2. 更准确的资料(减少Snoise):数据修正或数据清洗
  3. 控制模型复杂度(降低复杂度),但不是越小越好

寻找最优复杂度的两种方法:

  • 正则化:寻找可以调和 E i n E_{in} Ein和M函数的目标 E a u g E_{aug} Eaug
  • 校验:故意预留一部分样本,模拟出 E o u t E_{out} Eout的衡量

四、总结与升华

在学习人工智能的过程中,越是接触底层的内容,我越有感触,我越发地感觉到人工智能其实是人类的缩影

从学科的角度上说,现在有越来越多的高校开设了人工智能课程,各行各业也逐渐将人工智能应用落地,因此,人工智能不再是单一的学科,它与各个学科都紧密联系着,包括哲学。在学习机器是怎么学习的过程中,毕然老师也提到了很多哲学原理,也正因如此,我对人工智能充满期待。

我也希望更多的人,无论是文科生还是理科生,都能感受到人工智能的魅力所在,这也是我写这篇文章的初心,我想把人工智能的思想带给准备入门或者刚入门的开发者们,也希望能在交流讨论的过程中擦出思想的火花。

个人简介

北京联合大学 机器人学院 自动化专业 2018级 本科生 郑博培

百度飞桨开发者技术专家 PPDE

百度飞桨官方帮帮团、答疑团成员

深圳柴火创客空间 认证会员

百度大脑 智能对话训练师

我在AI Studio上获得至尊等级,点亮8个徽章,来互关呀

https://aistudio.baidu.com/aistudio/personalcenter/thirdview/147378

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页