1700515742
1700515743
1700515744
图 5-1
1700515745
1700515746
让我们模拟一个“确定今晚是否外出”的感知器,它做决定取决于三个要素:(1)电视上是否有好节目;(2)你的朋友是否一起出去;(3)今天是星期几。我们把它们看作三个变量x1 、x2 、x3 ,并按自己的偏好在0~10选择合适的数字来给这些选项赋值。比如,“星期一”赋值为1;“星期五”赋值为10。根据个人的偏好,某些变量或许会受到更多的重视。假如你是个电视迷,可能电视上播的无论是什么节目都会让你选择待在家里看电视,那么变量x1的值就会非常高。这个公式的作用就是通过调整权值和阈值来模拟你的行为。
1700515747
1700515748
就像大脑是由一连串神经元彼此联系、共同作用一样,感知器也可以通过分层来构造出节点间的级联效应,我们称之为“神经网络”,如图5-2所示。更为精细的感知器,如S型神经元,可进一步地平滑输出,而不仅限于“是”和“否”两种结果。
1700515749
1700515750
1700515751
1700515752
1700515753
图 5-2
1700515754
1700515755
既然科学家们很早就懂得如何创建人工神经元,那么,从创建到使其高效工作的这个过程,何以耗费了那么长的时间?归根结底,还是因为数据,感知器的学习和进化需要数据的支撑。我们可通过编程为感知器分配初始的权值和阈值,通过真实的输入数据对其进行训练,每一次错误的预测都将会作为反馈,用以促进权值的调整和修正。这两个因素是创建有效算法应必备的。
1700515756
1700515757
1700515758
1700515759
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
试想一下,数量超过百万的问题如果全靠人工编程实现,即使再厉害、再勇敢的程序员也会闻之色变、望而生畏,然后望风而逃。但计算机却擅长做这种工作。编程团队需要有一些创造性的思维去相信通过对相邻像素点深度值的询问和比较,足以确定该点所在位置,而之后的创造则属于计算机了。
[
上一页 ]
[ :1.700515742e+09 ]
[
下一页 ]