Eugene Charniak的学术谱系

Charniak是布朗大学的教授,生于1946年,从20世纪60年代末起就从事自然语言处理(NLP)有关的研究。人类的语言是一种非常复杂的处理对象,语言处理涉及规则、统计、常识、语言学、知识系统等非常多的领域,Charniak的学术谱系恰好涵盖了上述领域的方方面面。

在长达半个世纪的研究生涯中,Charniak曾做出非常多的开创性工作,2011年美国计算语言学会(ACL)为他颁发了终身成就奖。他最广为人知的是“查尔尼克解析器”(Charniak parser),一个依存文法解析器,相关论文获2015年AAAI经典论文奖。他是把统计方法运用于自然语言处理的先驱之一,在“概率上下文无关文法”(PCFG)上做了大量有深远影响的工作。此外,他在机器翻译、机器问答、知识表示等问题上也涉猎广泛。

和很多大学教授不同,Charniak一直保持着亲自动手写程序的习惯。他是一个极为重视通过实践来检验理论的人,所以他的这本书,才能通过简明清晰的代码一步步引导读者接触复杂的概念,而不是把读者淹没在公式推导或者代码接口的细节里。通过实践抓住本质,可能是Charniak学术风格的鲜明特点,也是本书(以及他之前写的其他4本教科书)的突出优点。

Charniak攻读博士学位时的导师是麻省理工学院(MIT)的Marvin Minsky(1972,毕业年份,下同)。Minsky是人工智能领域的创始人之一,贡献广泛,是1969年图灵奖得主。也是在1969年,Minsky出版了《感知器》(Perceptrons)这本书,为第一次神经网络高潮画上了句号(这件事后面还要详细说)。其实早在1956年“人工智能”(Artificial Intelligence)这个词被造出来之前,Minsky已经在做神经网络相关的工作了,所以他的批评是非常有分量的。

顺带说一句,Minsky攻读博士学位时的导师是普林斯顿大学的Albert Tucker(1954)。Tucker是大数学家(Tucker再往上的学术谱系都是数学家、哲学家了),是规划理论、博弈论的“大拿”,“囚徒困境”概念的提出者。后来获得了诺贝尔奖的John Nash也是他的学生。后来Minsky、Charniak、Hendler也都研究过规划理论。在人工智能历史上,不同分支的理论往往被相互借鉴,这些大宗师们也得益于不局限于某一狭隘视角。

之后在20世纪70年代,Charniak和Minsky工作的时候,Minsky发明了一种知识表示方法——“框架”(Frame)理论,Charniak在早年也从事过框架理论的研究。后来James Hendler在布朗大学师从Charniak攻读博士学位(1985),继承了知识表示这个方向的工作,主攻主体(agent)理论、规划和知识推理方面。到了20世纪90年代,Hendler和Tim Berners-Lee等人开创了语义网(Semantic Web)这个领域,其演化到今天被称为“知识图谱”(Knowledge Graph)。

其实Charniak和Hendler的工作都是关于知识的,只是侧重点不同:Charniak主攻用统计方法理解文本里的知识(“经验主义”),Hendler主攻如何获取人的头脑里的知识(“理性主义”或者“符号主义”)。两者都可以追溯到Minsky的一些奠基性工作,但在人工智能的发展史上,两种技术路线又相互竞争,一种的高潮往往是另一种的低谷,追溯一下这些高潮和低谷的发展历程可能也有助于我们理解未来。当然在这个序里,我们的讨论会主要聚焦在神经网络和深度学习这个分支,其他方法只在必要的时候提及。

神经网络的周期律

神经网络的发展,迄今经历了三个周期,包括三次高潮和两次低谷。

  • 第一个周期(1943—1986),感知器时代。从1943年McCulloch-Pitts(MP)模型作为开端、1957年感知器的提出为标志性高潮起点,到1969年Minsky的《感知器》一书提出批判进入低谷,酝酿期14年,高潮期12年,之后低谷期17年。

  • 第二个周期(1986—2012),BP算法时代。以1986年误差反向传播(BP)算法为标志性高潮起点,并没有明确进入低谷的标志性事件,一般认为在1995年前后进入低谷。高潮期是9年,之后低谷期也是17年——真是一种历史的巧合。

  • 第三个周期(2012年至今),深度学习时代。以2012年深度学习在ImageNet竞赛大获全胜为标志性高潮起点,到现在还在高潮期中,尚未进入低谷。这次的高潮期已经持续了7年。

以上的周期年份,主要是对于美国的学术界而言,而在中国,以前则会滞后几年,不过在最近一个周期里,中美两国已经基本同步发展了。

我最早接触神经网络是在1996年。那时候虽然在美国神经网络已经进入了冬天,但是在20世纪90年代的中国计算机界,神经网络依然是一门“显学”,虽然不能说言必称神经网络,但相信神经网络是一种“万灵药”的想法还是非常普遍的。我当时的同学,有学土木的、机械的、电气的、仪器的,听说我是做神经网络的,都跑过来要合作用神经网络发论文,大体也行得通。我们拿它来做电力负载预测、桥梁结构优化,效果都是非常好的。

到20世纪90年代末,发现BP网络、Hopfield网络有这样那样的问题,那时候便有一个想法,为什么不能进一步利用网络的层次性,做一种层次化学习的神经网络呢?2001年,我带着这个想法去Iowa State University向Vasant Honavar学习人工智能。Honavar也是神经网络专家,那时他在这个领域研究了十几年了,但是他和我说,研究神经网络是再也得不到资助了,你必须换一个方向。

后来也的确是这样。那时候即使是做神经网络的人,也必须套着其他的“马甲”发表论文。我记得在Geoffrey Hinton他们发表那篇经典论文“A fast learning algorithm for deep belief nets”的2006年,ICDM、ICML这些机器学习的主流会议上,几乎没有关于神经网络的文章。“ICML不应该接受关于神经网络的文章”还是一种潜规则。Hinton他们的这篇文章,现在回过头来看预示了神经网络的复兴,但是文章名字也没有直接提到神经网络,而用了“belief nets”这样“安全”的名字——这能让人去联想贝叶斯或者概率图,当时的显学。

当时神经网络衰到什么程度呢?去翻一下那年的“神经网络大本营”NIPS 2006的论文集,大部分文章都不是关于神经网络的了,而是贝叶斯、马尔可夫网络和支持向量机(SVM,神经网络的“对头”)之类的。甚至在NIPS 2012,Hinton都用“自黑”开场:“我今天想告诉大家,其实过去这些年大家没有必要来参加NIPS。”(戏指过去这些年没啥进展)。真是让人唏嘘,“一个人的命运当然要靠自我奋斗,但是也要考虑历史的进程”。

之所以有这样的低谷,来自于之前极高的期待。神经网络的发展史上,反复出现“极高的期待”—“极度的怀疑”这种震荡。比如下面两段话分别出现在前两次高潮时期的媒体上:

海军披露了一台尚处初期的电子计算机,期待这台电子计算机能行走、谈话、看和写,自己复制出自身存在意识……Rosenblatt博士,康奈尔航空实验室的一位心理学家说,感知机能作为机械太空探险者被发射到行星上。(《纽约时报》,1958)

现在已经可以采购到神经网络程序,可用于预测标普500的动向,或者诊断心脏病。诺贝尔奖得主Leon Cooper说,这种技术最终会比电话里的晶体管还普遍。DARPA的Jasper Lupo认为,我相信这种技术比原子弹更重要。(《科学家》,1988)

现在第三次高潮正在进行中,类似的话近年在媒体上天天有,就不必在这里举例了。

在高潮期,不管啥都要蹭神经网络的热点,比如在1991年(第二个高潮的巅峰)《终结者2》电影中,施瓦辛格扮演的“终结者”机器人也说:“我的CPU是一个神经网络处理器,一个会学习的计算机。”(My CPU is a neural-net processor...a learning computer.)那时候没人能想到,仅仅4年之后这个领域就凉了,神经网络遇到了自己的“终结者”。

第一代终结者:异或问题

这几年关于神经网络起起伏伏的历史的文章已经很多,这里不打算复述这段历史的细节。感兴趣的读者可以参考尼克的《人工智能简史》一书中“神经网络简史”一章,和Andrey Kurenkov的“A Brief History of Neural Nets and Deep Learning”(神经网络和深度学习简史)。我们仅把讨论限于核心方法衰落与兴起的技术原因。

1969年Minsky(和Seymour Papert)在《感知器》一书里给感知器判了“死刑”。感知器的具体技术细节,请参考本书第1章“前馈神经网络”。Minsky的逻辑是:

(1)一层感知器只能解决线性问题;

(2)要解决非线性问题(包括分段线性问题),比如异或(XOR)问题,我们需要多层感知器(MLP);

(3)但是,我们没有MLP可用的训练算法。

所以,神经网络是不够实用的。这是一本非常严谨的专著,影响力很大。一般的读者未必能理解书中的推理及其前提限制,可能就会得到一个简单的结论:神经网络都是骗人的。

这并不意味着Minsky本人看衰人工智能领域,实际上1967年他说:“一代人内……创建人工智能的问题就会被事实上解决掉。”这里可能还有另外一个因素:在那个时候,他是很看好与神经网络竞争的“符号主义”和“行为主义”的方法的,比如框架方法、微世界方法等,他后面也转向心智与主体理论的研究,所以《感知器》这本书观点的形成可能也有路线之间竞争的因素。但很不幸的是,无论是1967年他对AI过于乐观的展望,还是1969年他(事后看)对连接主义方法过于悲观的判断,都对1973年AI进入全面的冬天起到了推波助澜的作用。这是“极高的期待导致极度的怀疑”的第一次案例——当然并不是最后一次。

说1969年《感知器》的观点事后看过于悲观,是因为在Minsky写这本书的时候,问题的答案——误差反向传播(BP)算法——其实已经出现了,虽然直到1974年Paul Werbos在博士论文中才把它引入了神经网络。只是要再等十几年,这个算法才被几个小组再次独立发现并广为人知。无独有偶,1995年前后神经网络再次进入低谷的时候,后来深度学习的那些雏形在20世纪80年代末其实已经出现了,也同样需要再花二十年才能被主流认知。

不管是不是合理,神经网络与它的其他AI难兄难弟一起,进入了一个漫长的冬天。当时研究经费的主要来源是政府,但这之后十几年几乎没有政府资助再投入神经网络。20世纪70年代到80年代初,AI退守的阵地主要是“符号主义”的专家系统。

第二周期的复兴:BP算法

1986年,David Rumelhart、Geoffrey Hinton和Ronald Williams发表了著名的文章“Learning representations by back-propagating errors”(通过误差反向传播进行表示学习),回应了Minsky在1969年发出的挑战。尽管不是唯一得到这个发现的小组(其他人包括Parker,1985;LeCun,1985),但是这篇文章本身得益于其清晰的描述,开启了神经网络新一轮的高潮。

BP算法是基于一种“简单”的思路:不是(如感知器那样)用误差本身去调整权重,而是用误差的导数梯度)。具体的算法,请参考本书第1章和第2章。

如果我们有多层神经元(如非线性划分问题要求的),那只要逐层地做误差的“反向传播”,一层层求导,就可以把误差按权重“分配”到不同的连接上,这也即链式求导。为了能链式求导,神经元的输出要采用可微分的函数,如s形函数(sigmoid)。

在20世纪80年代的时候,一批新的生力军——物理学家也加入了神经网络的研究阵地,如John Hopfield、Hermann Haken等。在计算机科学家已经不怎么搞神经网络的20世纪80年代早期,这些物理学家反而更有热情。与第一周期中常见的生物学背景的科学家不同,物理学家给这些数学方法带来了新的物理学风格的解释,如“能量”“势函数”“吸引子”“吸引域”等。对于上述链式求导的梯度下降算法,物理学的解释是在一个误差构成的“能量函数”地形图上,我们沿着山坡最陡峭的路线下行,直到达到一个稳定的极小值,也即“收敛”点。

1989年,George Cybenko证明了“万能近似定理”(universal approximation theorem),从表达力的角度证明了,多层前馈网络可以近似任意函数(此处表述忽略了一些严谨的前提细节)。进一步的理论工作证明了,多层感知器是图灵完备的,即表达力和图灵机等价。这就从根本上消除了Minsky对神经网络表达力的质疑。后续的工作甚至表明,假如允许网络的权重是所谓“不可计算实数”的话,多层前馈网络还可以成为“超图灵机”——虽然这没有现实工程意义,不过足以说明神经网络强大的表达力。

BP算法大获成功,引起了人们对“连接主义”方法的极大兴趣。数以百计的新模型被提出来,比如Hopfield网络、自组织特征映射(SOM)网络、双向联想记忆(BAM)、卷积神经网络、循环神经网络、玻尔兹曼机等。物理学家也带来了很多新方法和新概念,如协同学、模拟退火、随机场、平均场和各种从统计物理学中借鉴过来的概念。其实后来深度学习复兴时代的很多算法,都是在那时候就已经被提出来了。

回看20世纪80年代,你也许会发现今天探索过的很多想法当时都探索过,诸如自动控制、股市预测、癌症诊断、支票识别、蛋白质分类、飞机识别,以及非常多的军事应用等,都有成功的案例——这是20世纪60年代那一波未曾见的。因为有了这些可商业落地的应用,大量风险投资也加入进来,从而摆脱了单纯依靠政府资助发展的模式。

可以说,在那个时代,神经网络已经是“大数据”驱动的了。相比美好的承诺,新一代神经网络速度慢的缺点(这来自于大量的求导计算)也就不算什么了。而且出现了大量用硬件加速的神经网络——正如今天专用于深度学习的“AI芯片”。大量的公司去设计并行计算的神经网络,IBM、TI都推出了并行神经计算机,还有ANZA、Odyssey、Delta等神经计算协处理器,基于光计算的光学神经网络,等等。甚至Minsky本人都创办了一家并行计算人工智能公司“Thinking Machines”,产品名也充满暗示地叫“连接机”(蹭“连接主义”的名气)。和今天一样,也几乎每天都有头条,每一天都看起来更加激动人心,眼前的困难都可以被克服。

短短几年之内,极度的怀疑反转为(又一次的)极高的期待,以至于在之前引用的《科学家》1988年文章“神经网络初创企业在美国激增”中也表达了对这种期待的担心:

神经网络在金融领域如此之热,以至于有些科学家担心人们会上当。斯坦福大学教授、有三十年神经网络经验的Bernard Widrow说:“一些商业神经网络公司的信誓旦旦可能会把这个行业带入另一个黑暗时代。”

Widrow也是在Minsky的影响下进入AI领域的,后来加入斯坦福大学任教。他在1960年提出了自适应线性单元(Adaline),一种和感知器类似的单层神经网络,用求导数方法来调整权重,所以说有“三十年神经网络经验”并不为过。不过,当时他认为神经网络乃至整个人工智能领域风险有点高,于是他转向了更稳妥的自适应滤波和自适应模式识别研究。

顺便说一句,自适应滤波的很多方法在数学上和神经网络方法是相通的,甚至只是换了个名字,比如Widrow著名的“最小均方误差”(LMS)方法在后来的神经网络研究中也广为应用。我们在神经网络的起起伏伏中经常看到这样的现象(后面还会举更多的例子):

  • 当领域进入低谷,研究人员换了个名字继续进行研究。甚至1986年神经网络复兴的时候,Rumelhart编的那本论文集并没有叫“神经网络”,而是“并行分布式处理”(Parallel Distributed Processing)这个低调的名字。
  • 当领域进入高潮,那些潜伏的研究再次回归本宗——当然,很多原本不在其中的方法也会来“搭便车”。例如,支持向量机(SVM)方法虽然在20世纪60年代就有了,在20世纪90年代复兴的时候,采用的名字却是“Support Vector Network”,以神经网络的面貌出现,直到神经网络进入低谷才把“Network”去掉。

回到1986—1995年这段时间,什么都要和神经网络沾边才好发表。比如,那时候CNN不是指卷积神经网络(Convolutional Neural Network,见本书第3章),而是细胞神经网络(Cellular Neural Network)——一种并行硬件实现的细胞自动机,尽管这种算法本来和神经网络没有太大关系。顺便提一句,它的发明人是“虎妈”(蔡美儿)的父亲蔡少棠。

第二代终结者:收敛速度与泛化问题

神经网络从“飞龙在天”到“亢龙有悔”,也只花了几年时间,就又遇到了“第二代终结者”。有趣的是,第二代终结者的出现本身又是为了解决第一代终结者问题而导致的。

异或问题本质上是线性不可分问题。为了解决这个问题,在网络里引入非线性,以及将这些非线性函数组合的参数化学习方法(BP算法等)。但是这样复杂的高维非线性模型,在计算上遇到了很多挑战,基本上都是和链式求导的梯度算法相关的。

首先就是“慢”。训练一个规模不算很大的神经网络花上几天时间是很正常的,在中国就更艰苦了。1998年在读研究生时我得到的第一台计算机是一台“486”,在那上面运行MATLAB的神经网络程序,隐藏层节点都不敢超过20个。为什么这么慢呢?全连接的前馈网络,参数空间维数大幅增加,导致了维度灾难(The Curse of Dimensionality),参数组合的数量呈指数增长,而预测的精度与空间维数的增加反向相关,在20世纪90年代有限的算力支持下,规模稍大的问题就解决不了了。

“万能近似定理”虽然说明了我们可以逼近任意函数,但是并不保证有一个训练算法能够学习到这个函数。虽然后来我们知道,同样的神经元数量,多隐层会比单隐层收敛得更快(虽然单隐层和多隐层在表达力上对于连续函数没区别),但是那时候由于不能解决“梯度消失”的问题(后面还会讲到),很少人会用多隐层。所以,神经网络内在的结构性是不好的。那时候也有很多“打补丁”的方法,比如,通过进化神经网络来寻找最优节点结构,或者自适应步长迭代,等等,但事后看,都是些治标不治本的方法。

维度灾难的另一个后果是泛化问题。比如训练一个手写数字识别器,稍微变化一下图像可能就识别不了了。这个问题的原因是误差求导是在一个高维空间里,目标函数是一个多“峰值”和“谷底”的非线性函数,这就导致了梯度下降迭代终点(“吸引子”)往往不一定是希望找到的结果(全局最优解)。甚至,有些迭代终点根本不是任何目标模式,称为“伪模式”或者“伪状态”。

Hinton在2015年的一个教程里也总结了基于BP的前馈网络的问题。

(1)数据:带标签的数据集很小,只有现在(2015)的千分之一。

(2)算力:计算性能很低,只有现在(2015)的百万分之一。

(3)算法:权重的初始化方式和非线性模型错误。

后来,数据问题和算力问题被时间解决了,而算法问题早在2006年前后就被解决了(即深度学习革命)。

回到1995年,那时大家并没有Hinton在20年后的这些洞见,但是也能意识到神经网络的这些问题很难解决。再一次,“极高的期待导致极度的怀疑”,未能兑现的承诺导致了资金的快速撤离和学术热情的大幅下降。几乎所有的神经网络公司都关门了——至少有300家AI公司,包括Minsky的Thinking Machines(1994)也关门了。

这时候恰好出现了基于统计机器学习的其他竞争方法,导致大家逐渐抛弃了神经网络而转向统计机器学习,如支持向量机(SVM)、条件随机场(CRF)、逻辑回归(LR回归)等。其实这些方法也都和神经网络有千丝万缕的联系,可以证明与某些特定的网络等价,但是相对简单、快速,加上出现了一些成熟的工具,到20世纪90年代后期在美国就成为主流了。

这里只对SVM做一下分析。1963年SVM刚出现的时候,和单层感知器一样,都只能处理线性分类问题。两者后来能处理非线性问题,本质都是对原始的数据进行了一个空间变换,使其可以被线性分类,这样就又可以用线性分类器了,只是两者对如何做空间变换途径不同:

  • 对于神经网络,是用隐藏层的矩阵运算,使得数据的原始坐标空间从线性不可分转换成了线性可分;
  • 对于SVM,是利用“核函数”来完成这个转换的。

    1995年,由Vladimir Vapnik(LeCun在贝尔实验室的同事)等人以Support Vector Network的名义发布了改进后的SVM,很快就在多方面体现出了相较于神经网络的优势:无需调参,速度快,全局最优解,比较好地解决了上述BP算法的问题,很快就在算法竞争中胜出。因此,虽然第二次神经网络进入低谷没有一个标志性事件,但是一般认为Vapnik发表“Support Vector Network”这篇文章的1995年可以算转折点。

    SVM到底算不算神经网络的一种呢?其实线性的SVM和线性的感知器是等价的。两者都是从线性模型到深度学习之间过渡,即:

  • 线性模型;

  • 线性SVM ⇔ 单层感知器;
  • 非线性核SVM ⇔ 多层感知器;
  • 深度学习。

只是,SVM以牺牲了一点表达力灵活性(通常核函数不是任意的)为代价,换来了实践上的诸多方便。而神经网络在之后的17年里,逐渐从“主流”学术界消失了,直到跌到了“鄙视链”的最下面。据说Hinton从20世纪90年代到2006年大部分投稿都被会议拒掉,因为数学(相比统计机器学习)看起来不够“fancy”(新潮)。

20世纪90年代中期到2010年左右在整体上被认为是第二个AI冬天,神经网络无疑是其中最冷的一个分支。值得一提的是,这段时间内互联网兴起,连带导致机器学习方法和语义网方法的兴起,算是这个寒冬里两个小的局部春天。不过在这个神经网络“潜龙勿用”的第二个蛰伏期,有些学者依然顽强坚持着,转机又在慢慢酝酿。

第三周期的复兴:深度学习

Geoffrey Hinton、Yoshua Bengio和Yann LeCun获得2018年图灵奖是众望所归。在那漫长的神经网络的第二个冬天里,正是他们的坚持才迎来了第三周期的复兴,而且势头远远大于前面两次。其中,Hinton是1986年和2006年两次里程碑式论文的作者,也是BP算法和玻尔兹曼机的提出者;Bengio在词嵌入与注意力机制(见本书第4章)、生成式对抗网络(GAN,见本书7.4节)、序列概率模型上有贡献;LeCun独立发现并改进了BP算法,发明了卷积神经网络(见本书第3章)。

神经网络之所以翻身了,关键还是在一些经典的难问题上确实展示了实用性,把一些停滞了很久的问题向前推进了。先是体现在手写字符识别MNIST(2006)上,然后是在语音识别(2010)和图像分类ImageNet(2012)上。ImageNet ILSVRC 2012竞赛是神经网络方法第三次兴起的标志性事件。国内同步就有了报道,余凯当天在微博上说:

Deep learning令人吃惊!最近第三届ImageNet Challenge上,Hinton团队获得第一,Hit Rate@Top5 =84%,比第二名高出10%!第一届比赛,我带领的NEC团队获得第一,成绩是72%。去年第二届,Xerox Lab获得第一,但结果和我们前年的差不多,无实质进步。今年可是飞跃了。

之后另一个标志性事件是2016年AlphaGo击败围棋世界冠军李世石,背后基于深度强化学习方法(本书第5章)。这件事有极大的公众宣传效果,激发了一轮深度学习风险投资的狂潮。在机器阅读理解竞赛SQuAD上,自2018年以来,序列到序列学习模型(本书第6章)也取得了与人类匹敌的成绩。

效果是反驳一切怀疑的最好的武器。

为什么深度学习能战胜“第二代终结者”,取得这么好的成绩呢?我想从算法细节、算法哲学、工程成本三个角度谈一些个人看法。

1.从算法细节的角度分析

前面我们提到链式求导带来一系列问题。单隐层全连接造成收敛速度不够快,但是由于“梯度消失”(或对偶的“梯度爆炸”)问题,难以实现多隐层误差反向传播。而且,网络还有泛化能力不好、容易过拟合等问题。

它的解决方法其实并不复杂。首先,用分段线性函数ReLU: f(x)=max(0,x)取代sigmoid激活函数——这个函数甚至不是严格可微的。线性保证了它的导数不会趋近于零,分段线性则保证了我们可以分段逼近一个函数,尽管从理论上这个逼近不平滑,但是工程上够用。

实践表明,ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。这不是从理论推导出来的结果,而是有了实践之后,反过来总结出来的。我们发现单侧抑制一些神经元(ReLU的实际作用)会导致“表征稀疏”,而这反而是好事,既让表示更具有鲁棒性,又提高了计算效率。

这种丢弃信息反而提高效果的工程实践在深度学习的其他一些细节也有体现。比如,“丢弃”算法(dropout)通过每次训练让部分神经元“装死”来避免过拟合,卷积神经网络中引入“池化”(pooling)丢弃一些输入信息反而会指数级减小泛化误差。

以上种种工程技巧,基本原理并不复杂,一旦捅破窗户纸,不免给人“原来如此简单”的感觉。与当初战胜“第一代终结者”也颇有类似之处,就是并非依赖一个高深莫测的新理论,而是依赖一些朴素的“常识”,去从工程上想办法。

那为什么这些看似简单的方法,要过十几年才被接受呢?大概是因为学术界的遗忘周期是15年吧!三代博士过后大家基本就不记得从前了。正所谓“人心中的成见是一座大山”,直到连成见都被遗忘了,才会有新的开始。

2.从算法哲学的角度来分析

总的来说,神经网络的演进一直沿着“模块化+层次化”的方向,不断把多个承担相对简单任务的模块组合起来。BP网络是感知器的层次化,深度学习网络则是多个BP网络的层次化——当然后来也出现了多种非BP网络的深度层次化。Hinton最近提出的“胶囊”(capsule)网络就是要进一步模块化。层次化并不仅仅是网络的拓扑叠加,更重要的是学习算法的升级,例如,仅仅简单地加深层次会导致BP网络的梯度消失问题。

从本质上说,深度学习网络可以比经典的BP网络处理更复杂的任务,在于它的模块性,使得它可以对复杂问题“分而治之”(Divide and Conquer)。无论是多层前馈网络,还是循环神经网络,都体现了这种模块性。因为我们处理的问题(图像、语音、文字)往往都有天然的模块性,学习网络的模块性若匹配了问题本身内在的模块性,就能取得较好的效果。

这可以看成一种连接主义的“动态规划”,把原来全连接网络的训练这种单一决策过程,变成了多阶段决策过程。例如,在多层卷积网络对图像的处理中,会出现不同的层次依次“抽取”出了从基础特征到高层次模式的现象,每一层基于上一层的输入,就相当于很多子任务可以被重用了。所以这种方法也被称为表示学习(representation learning)方法。

这样的好处是多方面的,既极大提高了学习收敛的速度(解决了维度灾难),又可避免那些“不合理”的局部最优解(因为它们在模块性匹配的过程中被自然淘汰了)。

从这个角度去理解,深度神经网络是“优雅”的,在于它简洁而美。一个“好”的模型,通常是“优雅”的。这很难说是什么科学道理,但是就和物理学一样,一个计算机科学的算法,如果它是技术主干道上的一个有深远价值的东西,往往它是“美”的,简洁的,没有太多补丁。一个糟糕的算法,就好像托勒密的“本轮”,一个补丁套一个补丁,或者像在发明抗生素之前治疗肺结核的方法,神秘而不可解释。如之前给BP网络和Hopfield网络打各种补丁的方法,前置各种ad-hoc不变形特征提取器,用进化算法训练网络结构,用局部定位消除虚假吸引子,等等,数学上都高深莫测,但是效果并不好。现在回头看,那些模型都很“丑”。

深度学习把学习分层,不是个数学问题,而是个知识重用问题,每一层自然分解出不同等级的特征,从底层特征到高层特征。这样一下子就把原来打几千种补丁的必要性都消灭了。这个架构是优雅的,也同时解决了收敛速度问题和泛化问题,因为它触及了问题的本质。一个优雅的方法,基本的原理往往是特别好懂的,不用看公式就能懂。

这里多说一句,深度学习模型现在大火的同时,也出现了很多对它的“本轮”补丁,如一些几百层的神经网络模型。搞得这么复杂的模型,通常在技术演进上是旁支。

3.从工程成本角度分析

深度学习的成功,工具系统的可用性是很关键的因素。工具大大降低了运用这些方法的门槛。深度学习被采用,并不一定是因为它效果最好——许多场合可能就和传统方法的最好水平差不多。但是,发挥传统方法的最好水平需要一位有多年经验的“老中医”,而深度学习工具可以让一个刚出道的学生就达到相近或稍差的表现,在语音和图像场景上更可以超出传统方法。这从管理学和经济学上都带来了巨大的好处。

例如2006年Netflix推荐算法大赛,冠军团队利用集成算法,整合了107种算法,最后提高了10个百分点。而2016年,有人用Keras写了一段不到20行的深度神经网络程序就得到了类似的结果。又如基于深度学习的依存文法解析器senna和传统的Stanford parser相比,效果接近,略差一点,但是从建模复杂性上,senna就远远比Stanford parser简单了,senna只用了一个零头的代码量就达到了接近的效果。

以前需要“老中医”来做特征工程,现在交给深度学习来进行表示学习(representation learning),通过深度神经网络中的逐层加工,逐渐将低层的特征表示转化为高层的特征表示。

同样,以前也需要“老中医”来对核函数(kernel)、卷积模板(mask)等强烈依赖经验的计算单元进行选择或者构造,这限制了可能的学习种类。深度学习网络相当于可以从数据中学习kernel或者mask,大大提高了灵活性,降低了对经验的依赖。

又如,在深度学习中广泛采用预训练模型(如最近很火的BERT)。这个想法的本质是知识重用。可复用的预训练模型作为“工作母机”,可以被后续的工程再去针对特定的任务修正和调优。

综上所述,大量深度学习工具的出现,大大降低了神经网络的入门门槛,大大增加了神经网络工程师的供给总量,大大降低了领域专家介入成本,从而有利于控制工程总成本。

不过,现实的问题求解并不是单一工序。任何一个实际问题的解决,都需要工程上的细致的问题分解,并不总是存在“端到端”的方法,多种工具的组合运用是工程不可或缺的。随着深度学习的普及,最近几年毕业的学生,很多甚至不知道深度学习之外的方法了,连传统机器学习都丢掉了,更不用说规则方法了,这对实际解决问题将是有害的。

会有第三代终结者吗?

深度学习如今进入了本轮高潮的第7个年头,正如日中天,在前所未有的海量资金投入时,讨论是不是会有什么因素导致本轮高潮的结束似乎是杞人忧天。有人认为,这一次的神经网络复兴将是最后一次,因为神经网络将不可能再次进入低谷。不过,“一切伟大的世界历史事变……可以说都出现两次”。“极高的期待导致极度的怀疑”这件事已经发生两次了,如今正处在第三次“极高的期待”中,很多名人又开始担心人工智能威胁人类了。为了这一领域的健康发展,我们也应该审视深度学习是不是有其自身的边界,并提前想一想对这些边界的应对。

如之前的分析,第二代终结者问题(链式求导的副作用)恰恰是为了解决第一代终结者问题(非线性分类)而带来的新问题。那终结第三次神经网络高潮(深度学习)的会不会也是为了解决第二代终结者问题而导致的新问题呢?

暴力美学问题。当我们加深网络层次并引入模块性的时候,会带来什么副作用呢?现在深度学习反而变得越来越贵,层数越来越多,预训练模型也越来越昂贵,深度学习在很多场景下反而变成了“暴力美学”,成为拼数据、拼GPU的烧钱游戏。但是,其实去非巨头的企业走走就会知道,大多数的领域落地问题,还不能承担这种成本,尤其是很多机构组织的问题解决,必须从低成本小问题开始。“暴力美学”式的深度学习,就只能停留在“头部问题”(即存在大量数据和大量算力的问题)上,而难以解决大多数垂直领域问题。

炼丹问题。深度学习的结果越来越难以解释和定向优化,整个系统是个“炼丹”的黑箱。当然,这个问题不是深度学习独有的,是整个“连接主义”方法共同的问题。只是深度学习把这种“炼丹”推到了一个全新的高度,调参的效果往往不可理解,没法解释。但是非常多的应用问题,如医疗和自动驾驶,的确是需要可解释性和定向优化的,这就限制了应用的效果。

递归性序列问题。黑箱问题本身可能还不是致命的,但是它又带来了另一个问题:一些在人看起来很清晰的问题,基于海量的训练数据机器还是学习不好。这类问题通常是一种“递归性生成规则”,最简单的如数字的构成规则,基于这些规则可能生成无穷无尽的序列。基于纯语料对齐技术训练,就很难得到不出错的中英文数字翻译。类似的递归性序列不仅在语言中大量存在,在表格、篇章等结构中也广泛存在。深度学习到底能不能在工程上解决这类语法归纳(grammar induction)问题,还是个待实践的问题。

知识融合问题。这个问题也是近来学术界关注的热点。如何把先验知识或者“知识图谱”(即数据本身的结构性)融合进深度神经网络?各类的向量化方法被提出,语义并不依赖于把符号直接映射到模型世界的个体上,而取决于个体的统计特性。但是除了词向量,其他更复杂的知识结构(例如属性、二元关系和表达式)在工程上依然鲜有成功。在自然语言处理中,外源知识恐怕是难以避免的,目前的向量化方法,似乎还不足以独立完成这个 任务。

深度学习的这些问题(潜在的“第三代终结者”问题),也同样是难以仅仅用拓扑的改良来解决的,例如增加神经网络层数或者再提升数据的量级。可能需要我们进一步提出更先进的网络结构,或者融合其他的AI工具,而不仅是“打补丁”(和二十多年前一样)。读者可能也会得出自己的“终结者问题”。思考这些问题,并不意味着我们否定深度学习,而是有助于我们进一步拓宽思路。也许,如之前的两次复兴一样,答案并不复杂,需要的仅仅是从常识出发,去发现工程的技巧。

结语

下面两句话都是Minsky说的。

1970:“三到八年后,我们就会有一个机器,达到普通人类的智能水平。”——三年之后AI进入冬天。

2003:“1970年代以来,AI就脑死亡了。”——三年之后Hinton悄然举起复兴的大旗。

可见,即使是AI创始人自己,对未来的预测,也常常是错误的。

从某种程度上说,也许我们不可能走出周期律,它会一直陪伴着这个学科。因为人工智能可能和所有其他的计算机分支都不一样,她会一次又一次让我们着迷,因为爱而被冲昏头脑,又因为爱而对她生恨。这恰恰是她的魅力所在。

神经网络(包括深度学习)是最好的第一种算法和最后一种算法。当你对一个问题一无所知,请用神经网络。当一个问题已经被明确可解,神经网络总是可以帮你达到已知的最优结果。在两者之间,神经网络和其他算法一样优秀或者糟糕。神经网络模型在实践有效后通常都会经历简化,甚至部分“白箱”化。这在工程上是几乎一定会发生的。总之,它是一个“最不坏的选择”。

我们可以做到的是实事求是,一切从实践出发,一切从工程出发,去理解约束,理解落地细节,抓住本质。我们也会经历知其然、知其所以然,到知未然的认识深化过程。对神经网络这样一种颇为复杂的工具,比较和实践都是不可或缺的。

Charniak的这本书就是可以帮助您达到这一点的优秀参考书。它是一本实事求是的教材,它也是一本以工程为导向的指南,以Python和Tensorflow为实践工具,可以带你以清晰的逻辑进入实战,去领略基础的深度学习算法如CNN、RNN、LSTM、GAN等。这本书只是一个开始,正如本文前面所述,神经网络是一个有深厚历史渊源的学科,在未来还有很多其他的进阶话题等着对此有兴趣的读者去探索。

《深度学习导论》中文版序:认真读了Charniak的书,写写我对深度学习的见地相关推荐

  1. 增强学习导论 中文版

    增强学习导论 中文版 个人学习,进行翻译,放到GitHub与各位交流. https://github.com/holazzer/RL-book-zh-cn https://holazzer.githu ...

  2. 免费教材丨第56期:《深度学习导论及案例分析》、《谷歌黑板报-数学之美》

    小编说  离春节更近了!  本期教材        本期为大家发放的教材为:<深度学习导论及案例分析>.<谷歌黑板报-数学之美>两本书,大家可以根据自己的需要阅读哦! < ...

  3. 统计学习导论(ISLR)(三):线性回归(超详细介绍)

    统计学习导论(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习 ...

  4. 统计学习导论(ISLR)(五):重采样方法(交叉验证和bootstrap)

    统计学习导论(ISLR) 小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生. 参考资料: The Elements of Statistical Learning An Introdu ...

  5. 《深度学习导论及案例分析》一2.11概率图模型的推理

    本节书摘来自华章出版社<深度学习导论及案例分析>一书中的第2章,第2.11节,作者李玉鑑 张婷,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.11概率图模 ...

  6. 深度学习导论(6)误差计算

    深度学习导论(6)误差计算 一. 再谈误差计算 二. 神经网络类型 三. 模型的容量和泛化能力 四. 过拟合与欠拟合 1. 过拟合(Overfitting) 2. 欠拟合(Underfitting) ...

  7. 深度学习导论(5)手写数字识别问题步骤

    深度学习导论(5)手写数字识别问题步骤 手写数字识别分类问题具体步骤(Training an handwritten digit classification) 加载数据 显示训练集中的图片 定义神经 ...

  8. 深度学习导论(4)神经网络基础

    深度学习导论(4)神经网络基础 一. 训练深度学习模型的步骤 二. 线性层(或叫全链接层)(Linear layer(dense or fully connected layers)) 1. 定义一个 ...

  9. 深度学习导论(3)PyTorch基础

    深度学习导论(3)PyTorch基础 一. Tensor-Pytorch基础数据结构 二. Tensor索引及操作 1. Tensor索引类型 2. Tensor基础操作 3. 数值类型 4. 数值类 ...

最新文章

  1. 商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020
  2. .net 中,使用c# 语言 ,执行exe程序。
  3. JAVA中Map集合的使用举例
  4. ubuntu14.04使用rails连接mysql数据库
  5. centos7.2 mysql集群_Centos7.2下安装mysql-group-replication数据库集群
  6. c++ 读写文本文件
  7. BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】
  8. C++描述杭电OJ 2018.母牛的故事 ||
  9. docker 部署java_使用Java EE 7,WildFly和Docker进行持续部署–(第1部分)
  10. JavaWEB/JSP 中简单的验证码 springMVC
  11. 更新一波,微信第三方开发平台授权流程
  12. Sklearn环境搭建与常用包
  13. numpy.random 模块中文文档学习笔记
  14. PotPlayer优化与最高画质设置(最强本地播放器)
  15. 完全总结bash中的条件判断test [ [[ 使用
  16. WinCE开发流媒体播放器--MPEG4
  17. 解锁计算机桌面,电脑锁屏按什么键解锁
  18. js科学计算机,js网页在线科学计算器代码
  19. 在xcode上看不到输出: stepping may behave oddly; variables may not be available
  20. 【AndroidStudio】按钮基本操作(普通按钮、图片按钮、单选按钮设置)(单击事件监听器触发对话框和页面跳转)

热门文章

  1. 如何在远程 SSH 服务器上运行本地 Shell 脚本
  2. Unity 3D 关于cube等物体的颜色问题
  3. Cesium|xt3d绕圈飞行
  4. mysql+时间查询函数_mysql时间查询函数实例
  5. Echarts离线地图开发--实现web端 初始化世界地图,其他国家钻取到行政区,中国钻取到省市区的展示
  6. Nginx网络架构下的反向代理负载均衡upstream配置
  7. linux命令df卡住怎么办,df-h卡死的处理方法
  8. SQL练习 demo1_select_查询语句
  9. html 如何打开字幕,HTML5视频隐藏字幕关闭或开启方法
  10. JS学习笔记 (四) 数组进阶