手机浏览器扫描二维码访问
一秒记住【xiaoyanwenxue.com】精彩无弹窗免费!“罗辑思维荐书集锦(套装共24册)(.shg.tw)”!
第三章神经网络——萃取隐蔽相关性
导读
在了解了机器学习各个流派的方法后,本书的主角“神经网络”现在闪亮登场。本章将深入介绍神经网络学习的原理和在商业上应用最多的几种形态,以及它们的适用范围。有了这些基础,我们才可以真正理解AlphaGoZero是怎样发现神迹般的暗知识的。对于只想了解AI商业前景的读者,也可以先跳过这一章,读完后面描述机器学习神奇应用的章节后再回来弄懂它是如何工作的。
从感知器到多层神经网络
1943年,心理学家沃伦·麦卡洛克(WarrenMcCulloch)和数理逻辑学家沃尔特·皮茨(WalterPitts)提出并给出了人工神经网络的概念及人工神经元的数学模型,从而开了人类神经网络研究的先河。世界上第一个人工神经元叫作TLU(ThresholdLinearUnit,即阈值逻辑单元或线性阈值单元)。最初的模型非常简单,只有几个输入端和输出端,对权值的设置和对阈值的调整都较为简单。
1957年,一个开创性的人工神经网络在康奈尔航空实验室诞生了,它的名字叫作感知器(Perceptron),由弗兰克·罗森布莱特(FrankRosenblatt)提出,这也是首次用电子线路来模仿神经元。他的想法很简单,如图3.1所示:将其他电子神经元的几个输入按照相应的权重加在一起,如果它们的和大于一个事先给定的值,输出就打开,让电流通向下一个神经元;如果小于这个事先给定的值,输出就关闭,没有电流流向下一个神经元。
1960年,斯坦福大学教授伯纳德·威德罗(BernardWidrow)和他的第一个博士生马尔西安·泰德·霍夫(MarcianTedHoff)提出了自适应线性神经元(ADaptiveLInearNEurons,ADLINE)。他们第一次提出了一种可以自动更新神经元系数的方法(机器自我学习的原始起点):用输出误差的最小均方去自动迭代更新神经元权重系数,直至输出信号和目标值的误差达到最小。这样就实现了权重系数可以自动连续调节的神经元。自适应线性神经元最重要的贡献是第一个使用输出信号和目标值的误差自动反馈来调整权值,这也为后面神经网络发展历史上里程碑式的反向传播算法奠定了基础。
图3.1感知器的电子线路
这个单层的神经网络也被称为自适应信号处理器,被广泛应用在通信和雷达当中。霍夫后来加入英特尔,在1971年设计了世界上第一个微处理器Intel4004。威德罗教授也是笔者20世纪80年代后期在斯坦福大学的博士生导师。笔者曾经在他的指导下做过神经网络的研究工作。图3.2是笔者2016年和他讨论神经网络未来发展时的合影,笔者手中拿的那个黑盒子就是他1960年做出的ADLINE单层神经网络。这个盒子到今天还在工作,美国国家博物馆曾经想要这个盒子做展品,但威德罗教授回答说“我还要用它来教学”。
图3.2笔者和自己当年斯坦福大学的博士导师,神经网络鼻祖之一威德罗教授的合影
威德罗教授在1962年还提出过一个三层的神经网络(Multi-LayerAdaptiveLinearNeurons,MADALINE),但没有找到一个能够用于任意多层网络的、简洁的更新权重系数的方法。由于单层网络有广泛应用而多层网络的运算速度太慢(当时的电脑运算速度是今天的100亿分之一),所以在MADALINE之后没有人去继续深入探讨多层网络。
由于缺少对人脑工作模式的了解,神经网络的进展一度较为缓慢,而它进入快速发展期的一个触发点则是医学领域的一个发现。1981年,诺贝尔生理学或医学奖颁发给了美国神经生物学家大卫·胡贝尔(DavidHubel)、托尔斯滕·威塞尔(TorstenWiesel)和罗杰·斯佩里(RogerSperry)。前两位的主要贡献是发现了人类视觉系统的信息处理采用分级方式,即在人类的大脑皮质上有多个视觉功能区域,从低级至高级分别标定为V~V5等区域,低级区域的输出作为高级区域的输入。人类的视觉系统从视网膜(Retina)出发,经过低级的V1区提取边缘特征,到V2区的基本形状或目标的局部,再到高层V4的整个目标(例如判定为一张人脸),以及到更高层进行分类判断等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表达越来越抽象和概念化。至此,人们了解到大脑是一个多层深度架构,其认知过程也是连续的。
神经网络学习的本质是大量神经元通过复杂的连接形成记忆。因为分析简单且容易用电子元件实现,一开始人工神经网络就如图3.3那样由一层一层组成。其实人脑的神经元连接非常复杂,没有这么一层一层的清晰和有秩序。但我们目前并没有弄清楚人脑神经元的连接方式,先从简单的假设入手是科学的一般方法。
图3.3一个多层神经网络(其中每个方块代表一个神经元)
20世纪80年代,神经网络的另一个重大突破是当时在加利福尼亚州大学圣迭戈校区任教的美国心理学家大卫·鲁梅哈特(DavidRumelhart)和在卡内基梅隆大学任教的计算科学家杰弗里·辛顿(JeffreyHinton)提出的多层神经网络,以及一个普遍的自动更新权重系数的方法。前面说过,威德罗教授在1962年提出过一个三层的神经网络,但功亏一篑,没有找到一个简洁的任意多层网络权重系数的更新方法。这个问题在1986年被鲁梅哈特和辛顿解决了。他们借鉴了单层神经网络中威德罗-霍夫(Widrow-Hoff)反馈算法的思路,同样用输出误差的均方值一层一层递进地反馈到各层神经网络去更新系数。这个算法就是今天几乎所有神经网络都在用的“反向传播”算法。“反向传播”听上去很“高大上”,实际上就是在自动控制和系统理论里面多年一直在用的“反馈”,只不过在多层网络中反馈是一层一层递进的。因为一个多层的神经网络要通过成千上万次“用输出误差反馈调整系数”,所以运算量非常大。在20世纪80年代的计算能力限制下,神经网络的规模非常小(例如三层,每层几十个神经元)。这种小规模的神经网络虽然显示了神奇的能力(例如能够识别0~9一共10个手写体数字),但仍然无法找到真正的商用。
从第一个电子神经元感知器的发明(1957年)到神经网络的大规模应用(2012年)整整经历了55年的艰辛探索,许多天才科学家不顾嘲讽和失败,坚信这条路是对的。图3.4是在这个探索旅程中做出重大贡献的科学家。
图3.41940—2010年基于神经网络的AI发展史上做出突破性贡献的科学家
图片来源:https:beamandrew.github.iodeeplearning20170223deep_learning_101_part1.html。
神经网络模型:满是旋钮的黑盒子
在这一节中,我们用最简单的方法介绍机器学习的机理。像图3.3这样一个多层神经网络的左端是输入端,即要识别的信息从这里输入。例如要识别一幅图像,每个输入Xi就是这张图像的一个像素的灰度值(为了简单起见我们假设图像是黑白的,如果是彩色的,我们可以想象三个这样的网络重叠起来用)。从输入层的每个神经元到下一层的每个神经元都有一个连接,从输入层的第i个神经元到下一层第j个神经元的连接有一个乘法因子Wij。每一层到下一层都类似。在输出端,每根线对应一个识别出来的物体。我们可以把每个输出想象成一个灯泡。当机器发现输入是某个物体时,对应该物体的灯泡就在所有输出灯泡里最亮。
像这样一个多层次的神经网络是如何“学习”的呢?我们可以把这个多层网络看成一个黑盒子。盒子外面有许多可以调节的旋钮,如图3.5所示。
图3.5机器学习:调节黑盒子外的旋钮
我们的第一个任务是训练这个黑盒子能够识别图像中的物体。例如在图3.5中,输入端有两张图,一张汽车图片和一张猫的图片。我们训练的目的是只要输入各种汽车的图片,机器就能告诉我们“这张图是汽车”(对应“汽车”这个物体的输出端的灯泡最亮)。同样,只要我们输入猫的图片,机器就告诉我们“这张图是猫”(对应“猫”的灯泡最亮)。训练的过程是这样的:我们先指定输出的一个灯泡最亮对应于识别出了汽车,第二个灯泡最亮对应猫,等等。我们先找到足够多的汽车图片(例如1万张,训练图片越多,训练出的机器判断越准确),一张一张给机器“看”(实际训练是一组一组地给机器看)。在机器没有训练好时,当我们输入一张汽车图片时,输出的灯泡会乱亮。我们此时耐心地调节那些旋钮直到只有对应“汽车”的灯泡亮为止。然后我们输入下一张汽车图片,也调到只有对应汽车的灯泡亮为止,如此一直到1万张。然后我们再输入第一张猫的图片,调节旋钮直到对应“猫”的灯泡亮为止,也如此一直到1万张猫的图片都输入完为止。如果我们让机器学习1000种物体的图片,那我们对每种物体图片都要如此操作,让输出端对应这种物体的灯泡最亮。所以在机器学习中,“训练”是最耗时的。在训练过程中,这些训练用的图片我们事先知道是什么内容,或者叫作“标注”过的图片。当训练结束后,第二步是测试。也就是拿一些不在训练集里面的图片让机器辨认,如果机器都能辨认出来,这部机器就算训练好了,可以交付使用了。一旦训练测试结束,机器的参数集就不改变了,也就是所有的旋钮都固定不动了。只要是输入训练过的种类,机器都应该能识别出来。
如果一部机器要识别1000种物体的图片,就要至少有1000个输出端(每个输出端对应一种物体)。假设图片分辨率是100×100=10000像素(很低的分辨率),如果这部机器只有三层神经网络(深度最浅的“深度”学习网络),输入端和中间层之间,中间层和输出之间的连接就有10000×10000+10000×1000=1.1亿个。也就是这部机器有1亿多个旋钮。截至2017年,最大的神经网络已经号称有上万亿的参数,即上万亿个旋钮。这么多旋钮显然无法用人工去调节。
雾里下山:训练机器模型
幸运的是数学上200年前就有了“自动”调节旋钮的办法。这个办法叫作“最陡梯度法”,或者通俗地叫作“雾里下山法”。当我们训练一个机器学习模型时,我们事先知道每一张图片是什么物体(汽车、猫等已经标注的图片),我们输入汽车图片时,要求只有对应“汽车”的那个灯泡最亮。在我们调节旋钮之前,灯泡的亮和灭都是混乱的,和我们的要求有很大误差。这些误差是由旋钮的值决定的。如果把这些误差画成一幅图像,就像图3.6一样有很多山峰,误差就是山峰的高度,图像的横轴和纵轴就是旋钮的值。
图3.6用“最陡梯度法”寻找误差最小的“山谷”
图片来源:维基百科。
当我们输入第一张图片时,我们可能站在一个随机的位置,例如某一座山峰的山顶或半山腰,我们的任务就是走到最低的一个谷底(误差最小)。我们此时相当于在大雾中被困在山里只能看见眼前的山坡,一个最笨的办法就是“最陡下降法”:站在原地转一圈,找到一个最陡的下山方向往这个方向走一步。在这个新的位置上,再转一圈找到最陡的下山方向再走一步,如此循环,一直走到山脚为止。
在“最陡下降法”中每次转圈找最陡下山方向相当于用误差函数的偏微分方程求梯度。简单地讲,旋钮的每一步的调节值是可以算出来的。这样我们根据输出的误差一步一步地算出旋钮的调节值,直到满意为止。这种根据误差回头调节旋钮的方法也叫“反向传播算法”,意思是用输出误差一层一层地从输出端向输入端把各层的权重系数算出来。
AlphaGo的“上帝视角”
有了上面的基础,我们现在就可以理解为什么AlphaGo这么厉害。围棋棋盘有19×19=361个交叉点,每个交叉点可以二选一:白子或黑子。这样所有的摆法就是2,或者10。人类2000年来一共保留下来的围棋残局中盘大约3000万个。人类下过的棋局相当于大海里的一滴水(即使剔除那些明显没有意义的摆法)。一位棋手即使每天下2盘棋,50年内天天下,一生也只能下36500盘棋。图3.7是一张“雾里下山”的示意图。下棋的终极目标相当于在群山中找到最低的谷底(对应于最理想的走法)。如果所有可能的走法是绵延几千里的群山,人类棋手2000年来就相当于一直在同一个小山坳里面打转转。第一位棋手偶然的棋路会影响他的徒弟,以后的徒子徒孙都始终在这个小山坳附近徘徊。而机器学习像个“神行太保”,以比人快百万倍的速度迅速扫遍群山,很快就能找到一个远离人类徘徊了2000年的更低的山谷(可能还不是绝对最低,但比人类徘徊处低)。这也是连棋圣聂卫平都连呼“看不懂”AlphaGo棋路的原因。(见图3.7)
图3.7机器学习可以迅速扫过群山找到最低处
有人说,教练的任务是带领球队获得胜利,有人说,教练的任务是指导球员更加出色,有人说,作为教练的任务是让球队更加辉煌这些我都做到了,但是却还不够。而我要说的则是,作为教练,除了这些追求之外,最高的追求,是让足球运动,更加伟大。...
村里家徒四壁的穷兄弟花光积蓄买了一个丑媳妇,却是一个拥有穿越而来的杀手,从此只有不但把自己变成了最漂亮的媳妇,还带着相公发家致富,赚钱买地,成为豪绅。...
顾乐儿掉入海中被救起来意外发现自己竟然穿书了,还穿成一个作死女配。望着面前让人闻风丧胆的男主,顾乐儿痛定思痛美色虽可贵,生命价更高!她当众高调宣布我不喜欢苏白了,亦不会再纠缠他。本以为一别两宽各自安好,可是剧情画风却突变。某日午夜,男人一脸落寞抽着烟,你可知道暗恋是一个人的兵荒马乱?顾乐儿喝着酒,你装什么装?我还不知道你的尿性?嗨起来!男人起身压向她,好啊。后来外界传言苏爷的媳妇又野又狗,苏爷也被她带偏了,没有节操还不要脸!...
四年之前,家族被灭,林凡沦为家族余孽,机缘巧合成为上门女婿。为了复仇,他消失三年,浴血奋战,成为天下战神,傲世无双!战神归来,只为那个单纯善良的女孩苦等三年当我执起你的手,这天下便再无一人可欺你,辱你!!...
为了钱被逼嫁给一个只有五岁智商患有怪病,还死过五个老婆的男人,这个世界上没有谁比她更可悲了。偏偏她这位帅到极至的傻子老公在家里一点地位都没有,父母冷落他,兄弟姐妹欺负他,就连佣人都敢使唤他。当她刚想认命接受现实的时候,却意外怀孕了,孩子不是她那傻子老公的!家法难逃,世俗难奈,在她陷入万般绝境的时候,拯救她的居然是孩子的亲生父亲,那位冷酷帅气的一夜男人,而他的真实身份既然是最不起眼的他各种巧合,各种真相,各种震憾,究竟,谁才是她的真老公!!...
她和初恋同时落水,他选择救初恋,因为他欠初恋一条命,从那以后,她学会游泳。初恋公司失火,生死不明,他弃她生日去找初恋,因为性命攸关,从那以后,她知道原来他还兼职消防员。初恋不能生育,他要她捐赠子宫,因为他不要小孩,她留着子宫没用擦!简直欺人太甚!她甩他一脸离婚协议书,我什么都不要,包括你!再次相见,他对她死...