1700515761
天才与算法:人脑与AI的数学思维 看还是不看
1700515762
1700515763
人工智能首先需要突破的巨大难题是计算机的视觉问题。就在五年前,计算机识别物体还非常困难。而人类在这方面却有着压倒性的先天优势:人类可以迅速、准确地辨识出图片上的物体,并进一步对图片各区域进行分区域、分类识别。虽然计算机一瞬间可分析数百万个像素,但编写一个能将所有数据转化为有意义的信息的算法却相当困难。如何创建一个自上而下的算法来识别猫呢?虽然每幅图像中的像素构成是完全不同的,但人类大脑具备惊人的能力,可迅速处理数据并输出答案——“猫”。
1700515764
1700515765
人类大脑识别图像的能力广泛应用在为支付等领域构建附加的安全层(验证码)方面,以识别当前的交易对象是人类还是计算机程序,比如网上的抢票防作弊程序[1] 。这其实就是一个反向的图灵测试。当看到一幅图像或一些特别的笔迹时,人类非常善于辨识出这幅图像或文字的特点,而计算机程序却不足以应对所有的变化。但是,机器学习使这一切发生了改变。
1700515766
1700515767
通过由猫的图像组成的数据库对算法进行训练,算法逐渐建立起一个问题层次结构,它可以向一幅具有高准确度的图像发问,并将其准确地识别为猫。这个算法与上一章中提到的略有不同,并且违反了我们所定义的构成一个好的算法的四个基本原则之一。算法在大部分时间都在工作,但达不到100%,所以关键是要让其尽可能达到“最”。对于业内人士来说,确定性算法到概率性算法的转变是一个重大的心理突破,类似于让数学家用工程师的思维方式去考虑问题。
1700515768
1700515769
既然如此,那当你在线购买最新的演唱会门票时,为什么还会被要求去识别一组图像以便进行人机区分呢?你所做的选择实际上是在帮助算法准备训练数据,这些数据随后会被载入算法,这样计算机就可以尝试学习你毫不费力就能做的事情了。算法需要借助带有标签的数据才能得到训练,我们真正在做的是训练视觉识别的算法。
1700515770
1700515771
用这些训练数据作为最好的问题类型可以训练算法,以便其区分猫和非猫的图像。每当算法识别错误,它将进行调整以便下次能够正确识别。调整的过程通常需要更改当前算法的参数或引入新的指标以求更准确地识别图像。这种更改不是通过程序员预判并自上而下实施的,而是由算法自身通过高频次的数据交互自下而上构建的。
1700515772
1700515773
我在剑桥的微软实验室里,见识到了孩子们在家里使用的Xbox游戏机是如何识别人在摄像机前的动作的,并深深地被这种强大的自下而上的学习能力震撼。该算法可以很好地将人体的头、肘、手、脚区分开来。Xbox配有一款名为Kinect的深度感应摄像头,它可利用红外线技术记录障碍物与摄像头的距离:如果你站在客厅里的摄像头前,它会检测到它与你身体的距离比后侧墙壁更近,并且还能确定你身体的大致轮廓。
1700515774
1700515775
但人有男女老少、高矮胖瘦,特别是在玩游戏时还可能会摆出一些奇形怪状的姿势,所以该算法需要对人体的31处特定部位进行定位和识别。微软的算法可以达到对静态图像的识别(动态图像识别需要更强大的分析处理能力,强行为之会导致游戏卡顿、延迟)。
1700515776
1700515777
那么,算法是如何确定那些特定身体部位所对应的图像中的像素点呢?事实上,可通过一个简单的问题算法来实现,类似于“20个问题的猜字游戏”。第1个问题是:这个字位于词典的前半部分还是后半部分?答案如果是“前半部分”(词典此时被一分为二),则开始第2个问题:这个字位于“前半部分”的前半部还是后半部?此时词典被分为4个部分。依此类推,逐渐缩小范围。当提问到第20个问题之后,词典将会被划分为220 个不同的区域,总数达到100多万,远超过牛津词典中收录的词汇数目(约30万)。
1700515778
1700515779
如果我们想知道某一像素点属于身体的哪一部分,该怎样设计问题算法呢?在过去,我们都是通过苦思冥想或突发的灵感去设计一系列巧妙的问题。那是否能够通过计算机编程的手段,通过大量的数据交互与训练,选择、甄别出更好、更高效的问题集合呢?答案是“能”,它就是“机器学习”。
1700515780
1700515781
机器学习会从一些我们认为可能解决问题的候选问题开始,所以不算是零起点学习。学习的过程就是将最初的想法逐渐优化,从而形成有效的解决方案。那么,你认为什么样的问题可以帮助我们区分手臂和头呢?
1700515782
1700515783
假设被识别像素为x,像素深度是其与摄像头之间的距离。若被测试人站在摄像头前,其身上的所有像素点的深度值(该点与摄像头之间的距离值)是大致相同的,而其身后墙壁上的像素点的深度值则明显偏大。微软团队设计的问题策略是依次对x周围的像素点进行询问:若x位于头顶的位置,那么x以北(上)的相邻像素点(可能是x上方墙壁上的某一点)的深度值将远大于x的深度值,而x以南(下)的相邻像素点(可能是位于x下方人脸某个部位的一点)的深度值则约等于x的深度值;若x位于水平伸直的手臂上,则手臂伸展方向上的相邻像素点的深度值约等于x的深度值,而垂直于手臂方向上的相邻像素点的深度值则会由相对不变的状态迅速变大到与墙壁上的像素点的深度值相等。随着不断提问、回答、分析,该像素点位于身体哪个部位的答案将逐渐浮出水面。
1700515784
1700515785
这种不断提问的过程相当于构建了一棵决策树,每个后续问题形成树的一个分支。在初始状态下,选择任意的方向和深度阈值,如“方向向北,深度值小于y时转到决策树的左分支,若大于则转到右分支”,依此类推。我们的目标是能够找到那些提供有价值的信息的问题。即使初始化状态是从随机问题开始的,一旦问题的数量累积到一定程度,如应用于10 000个带标记的图像时,我们就可以得到想要的答案。(比如说,我们判断出了在图像872中,x位于肘部;在图像3339中,x位于左脚。)我们想象有这样一些桶,每一只桶对应决策树的一个分支或者身体的某个部位,这样能够确认x像素为肘部的所有的问题都可被放到其对应的一只桶中。当然,对于第一组随机问题集来说,确定它们所对应的桶还比较困难。但经过一段时间的学习或训练后,算法将逐步对角度和深度阈值进行优化,每个桶中的像素将得到更好的分类。
1700515786
1700515787
通过这个迭代的过程,算法会逐步调整阈值自我优化,以便于更好地识别像素点。重要的是,我们并不需要追求完美:如果桶中的1000幅图像有990幅均表明像素x位于肘部,就意味着识别的正确率已然达到了99%。
1700515788
1700515789
算法自己找到了最优的问题集合,但程序员并不真正清楚它是如何得到这样的结果的。他们可以查看决策树中任何一个结点及其前后结点上所询问的问题,但树中的问题超过百万个,每个问题又略有不同,所以很难采用逆向工程法得出算法具体是怎样解决问题的。
1700515790
1700515791
试想一下,数量超过百万的问题如果全靠人工编程实现,即使再厉害、再勇敢的程序员也会闻之色变、望而生畏,然后望风而逃。但计算机却擅长做这种工作。编程团队需要有一些创造性的思维去相信通过对相邻像素点深度值的询问和比较,足以确定该点所在位置,而之后的创造则属于计算机了。
1700515792
1700515793
机器学习所面临的挑战之一是“过度拟合”[2] 。针对训练数据提出用以区别图片的问题相对容易,但设计一个不针对特定数据的通用程序却非常困难,它需要从数据中抽象出广泛适用的规则。假设给定1000个人的姓名和护照号码,让你去设计问题集合对每个人加以识别,你可能会这样提问:“你的护照号码是834765489吗?好的,那你一定就是阿达·洛夫莱斯了!”但这样的问题只适用于现有的数据集,对于该组数据之外的新数据来说是难以实现身份识别的。因为护照号码是唯一的,不可能再有其他人拥有该组数据中的护照号码。
1700515794
1700515795
比如,根据给定的图表中的十个点,可得到一个方程,由该方程创建一条通过所有点的曲线。我们可以用一个十项式来表示这个方程,但这并不能很好地揭示数据中潜在的模式,而这对于理解和识别新数据是不利的。因此,有必要减少方程的项数,以避免出现过度拟合的问题。
1700515796
1700515797
过度拟合会误导你在建模时过分关注细节而错过数据呈现出的总体趋势,然后产生不符合客观规律的预测结果。如图5-3所示,这是一幅包含美国20世纪初人口总量的12个数据点的二维图。其总体趋势用二次方程式描述是最合适的,但如果我们选取的方程中x项的幂超过2时会出现什么情况?例如,方程式中x项的幂是从0变化到11,尽管由这个方程式确定的曲线与历史样本数据完美拟合,但一旦扩展到未来,曲线会突然向下倾斜,而这预示未来美国的人口数量会急转直下并且到2028年10月中旬就彻底消亡。这多少有些荒谬,或许是数学知道了一些不得了的事情吧!
1700515798
1700515799
1700515800
1700515801
1700515802
图 5-3
1700515803
1700515804
[1] 最贴切的例子是12306网站的购票确认验证。——译者注
1700515805
1700515806
[2] 指假设函数为了完美地拟合样本集,引入了过多的高次项。虽然这样做可以得到良好的样本拟合结果,但与实际情况完全偏离。——译者注
1700515807
1700515808
1700515809
[
上一页 ]
[ :1.70051576e+09 ]
[
下一页 ]