最近人工智能方面最重要的发展之一就是机器学习了。它主要着眼于智能,而不是传统计算机程序意义上指定机器做什么东西,也就是说机器自己可以学习,这样它就可以直接从经验(或者数据)中学会如何处理复杂的任务。
即使是很简单的机器学习算法也能区分照片上的猫和狗
伴随着计算机速度的提高和算法的进步,机器学习的发展也非常迅速。从中衍生的算法已经对我们的生活造成了深刻的影响,而且有时候比人类做得更好。那么问题来了,机器学习到底是如何工作的?
从经验中学习
在一个机器学习系统中,计算机通过自己给自己编代码来完成一个任务,它一般是由基于这个任务的大量的数据来训练的。其中很大一部分涉及识别这些任务中的模式,然后根据这些模式做出决策。举一个(有点吓人)的例子,假设你的公司想要招聘一个新员工。你做了广告,然后有1000个人想来应聘,他们每个人都发了一份简历。你需要筛选这些简历,但是1000份简历也太多了吧,所以你就想训练一个机器来做这件事。
为了保证这件事有一定的可行性,假设你有以前招聘时收到的简历。每一份简历都有被录用或没有被录用的记录。你把这些简历的一半用来训练机器,让它发现这些简历是否被成功录用的模式。因此,如果你给机器一份简历,它就能知道这份简历是否可以被录用。训练完机器,你用另一半的简历来做测试。假设成功率很高,你就会相信机器可以胜任筛选简历的工作了。在上述的每一个阶段,都没有人的干预。这样的一个过程,以现在的计算机的能力是完全可以做到的。
基本要点
为了让机器学习的过程更加透明化,我们用开发可识别手写数字的机器的非常具体的例子来考虑模式识别的问题。这样的机器应该能够做到:不管一个手写的数字写得怎么样,它都能识别出来。
即使对人类来说,手写的数字都能难得像密文一样
数字识别有两个阶段。首先,我们把图像扫描进机器,然后从数字图像中提取重要的数据信息。这通常使用主成分分析(PCA)的统计方法,它可以自动提取一个图像的主要特征,比如高度和宽度,再比如图像中的交叉的点的个数,等等。这个过程与找一个矩阵的特征值和特征向量紧密相关,和谷歌用于在网络上搜索信息的过程也很像。
第二,我们要训练机器利用这些提取的信息来学习辨别数字。完成这个过程的一个很普遍的方法就是神经网络。这个技术基于我们对大脑如何工作的认识。第一步是,创造大量的“神经元”并把它们互相连接。这些神经元可以互相发送信息。第二步,让神经网络去求解大量的结果已知的问题。通过这个过程,它就“学会”了神经元之间应该如何连接,所以它就能成功地识别数据中哪些模式可以产生正确的结果。
这种神经网络的早期例子是称为感知器的单层系统,它可以模拟单个神经元。 感知器的概念是Frank Rosenblatt在1962年提出的。感知器的典型结构如下所示。
感知器有n个输入,从X1,X2到Xn,每个输入都乘以一个权重因子Wi再相加,和为
如果这个结果比某个临界值C大,就返回1,否则,就返回0。
就是说,当
就返回1,而
就返回0。
在我们的例子中,Xi就是提取的图像的特征,决策就是 这个数字是3还是4。训练感知器的过程包括找到合适的权重因子wi和临界值C使得感知器识别到正确的数字。要做到这一点,需要谨慎使用基于统计的数学优化算法。
一个例子
举个例子,设想我们只从图像中提取两个特征X1,X2,X1可以是图像中直线的数目,X2是图像中交叉点的数目。每个手写的数字3和4都有这两个值,这样就可以在坐标中表示出来。由于数字“3”中没有直线也没有交叉的点,所以就可能对应接近坐标(0,0)的点。而数字“4”中有三条直线和一个交叉的点,所以它在坐标中对应(3,1)附近的点。
这样一来,感知器中计算的和就是
对一个给定的w1,w2和C,令方程等于0就决定了一条直线l。如果,使用图像来训练机器,感知器设法找到w1,w2和C的值使得l可以把3和4对应的点全部分开,如下图所示,这样它就可以有很大概率可以正确识别一个新的图像中的数字是3还是4。如果存在这样的一条直线l,这样的数据就叫做线性可区分。
设想红色的点来自图像中的数字“3”,蓝色的点来自数字“4”。如果算法使用C=2,X1=X2=1,这样加权和等于0对应的直线如图所示。对于蓝色的点来说,它对应的加权和大于0,对于红色的点来说,其对应的加权和小于0,所以算法总能给出正确的结果。
如果数据点不能被一条直线分开——如果数据不是线性可区分的——你可以在更高的维度上做这件事并希望在更高的维度上它们是线性可区分的。一个非常简单的例子,你可以把点画到屏幕以外的地方,画在三维的空间中。当然了,实际上通常都会使用更复杂的办法。另外,如果你从图像中提取的特征不只是两个,也可以在更高的维度上使用相同的办法。
感知器的方法在区分猫和狗方面也适用。
这些图演示了随着可获得的数据的增加,算法如何更新直线的选择(也就是,常数C和W1,W2)
神经网络和深度学习
简单的感知器可以被训练做很多简单的任务,但很快就达到它的极限了。很明显,通过将许多感知器耦合在一起可以实现更多,但这种发展必须等待更强大的计算机的出现。 当感知层连接在一起产生神经网络时,取得了重大突破。 这种神经网络的典型结构如下所示。 在这种情况下,输入组合以触发第一层感知器。 这些输出组合起来触发下一层,最后这些组合起来给出输出。
层数越多,就可以拥有“更深层次”的网络。 然后通过为上面的每个连接分配权重来训练这样的网络。 这个过程有点类似于大脑加强或减弱神经通路的方式。 深度学习描述了训练这种神经网络的过程。
由于新的数学优化算法的发展,结合广泛的(谷歌的DeepMind更广泛)计算机能力,现在已经可以做到。 在为网络找到合适的权重Wi的过程结束时,你会有一个黑盒子,它可以非常快速地运行并且可以做决策。
不同的方法
现在我们再来关注学习过程的更多细节。对于一个神经网络来说有很多不同类型。
在有监管学习中,由网络的使用者预先提供一组示例输入和输出对。然后,学习方法要找到一个神经网络,该网络提供与示例匹配的输出。将神经网络的输出与示例的输出进行比较的常用方法是找出正确输出和实际输出之间的均方误差。然后训练网络以使该误差最小化。它的一个非常标准的应用是在统计学中的曲线拟合,但它也同样适用于手写识别和其他模式识别问题。
在强化学习中,数据不是由用户预先给出的,而是由神经网络控制的机器与环境的相互作用及时产生的。在每个时间点,机器对环境执行动作,该动作产生观察以及该动作的成本。训练网络使它可以选择最小化总成本的动作。在许多方面,这个过程类似于人类(尤其是幼儿)的学习方式。
为了学习下象棋,alpha zero 和自己下了700000局
近年来,机器学习的数学算法取得了很大进展。 卷积神经网络(CNN)是这些方法的一个令人兴奋的新的扩展,同时它也非常重要。它将图像处理技术与深度神经网络相结合。 它们可用于人脸识别,甚至可用于检测情绪。 它们现在被用于许多其他应用,包括医学诊断。
为了学习如何顺利下棋,AlphaZero使用了深度卷积神经网络。 这是使用强化方法训练的,机器与自己进行了700,000场比赛,时间超过24小时。 通用蒙特卡罗树搜索(MCTS)算法用于分配权重。 在学习如何玩将棋和围棋时,也使用了类似的方法,并且在每种情况下都达到了相同的水平。令人印象深刻!
随着更快的训练算法和越来越多的数据的推动,诞生了更复杂、更深层次的网络,这让机器学习进展迅猛。 但让机器去做可能改变生命的决定(例如医疗诊断)是否安全而且符合伦理道德?
文章的最后部分,我们放送干货。其实机器学习的优质资源非常多。小编也是翻遍浏览器收藏夹,也问同事取了取经把公司以前一起研究的论文笔记整合了一部分资源罗列
网友评论