Deep Learning的基本思想
假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>…..=>Sn => O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失(呵呵,大牛说,这是不可能的。信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理a信息得到b,再对b处理得到c,那么可以证明:a和c的互信息不会超过a和b的互信息。这表明信息处理不会增加信息,大部分处理会丢失信息。当然了,如果丢掉的是没用的信息那多好啊),保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。现在回到我们的主题Deep Learning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,…, Sn。
对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。
另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的Deep Learning方法。上述就是Deep Learning的基本思想。
浅层学习(Shallow Learning)和深度学习(Deep Learning)
浅层学习是机器学习的第一次浪潮。
20世纪80年代末期,用于人工神经网络的反向传播算法(也叫Back Propagation算法或者BP算法)的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用BP算法可以让一个人工神经网络模型从大量训练样本中学习统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显出优越性。这个时候的人工神经网络,虽也被称作多层感知机(Multi-layer Perceptron),但实际是种只含有一层隐层节点的浅层模型。
20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。这些模型的结构基本上可以看成带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。
深度学习是机器学习的第二次浪潮。
2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2)深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。
当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是可以用较少的参数表示复杂的函数)
深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。
Deep learning与Neural Network
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
Deep learning本身算是machine learning的一个分支,简单可以理解为neural network的发展。大约二三十年前,neural network曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:
1)比较容易过拟合,参数比较难tune,而且需要不少trick;
2)训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;
所以中间有大约20多年的时间,神经网络被关注很少,这段时间基本上是SVM和boosting算法的天下。但是,一个痴心的老先生Hinton,他坚持了下来,并最终(和其它人一起Bengio、Yann.lecun等)提成了一个实际可行的deep learning框架。
Deep learning与传统的神经网络之间有相同的地方也有很多不同。
二者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。
而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络(这里作者主要指前向神经网络)中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deep learning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用back propagation的机制,对于一个deep network(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradient diffusion(梯度扩散)。这个问题我们接下来讨论。
八、Deep learning训练过程
8.1、传统神经网络的训练方法为什么不能用在深度神经网络
BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源。
BP算法存在的问题:
(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;
(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);
(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;
8.2、deep learning训练过程
如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。
2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是:
1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。
将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。
deep learning训练过程具体如下:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;
2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。
如今,深度学习浪潮拍打计算机语言的海岸已有好几年,但是,2015年似乎才是这场海啸全力冲击自然语言处理(NLP)会议的一年。——Dr. Christopher D. Manning, Dec 2015
整个研究领域的成熟方法已经迅速被新发现超越,这句话听起来有些夸大其词,就像是说它被「海啸」袭击了一样。但是,这种灾难性的形容的确可以用来描述深度学习在过去几年中的异军突起——显著改善人们对解决人工智能最难问题方法的驾驭能力,吸引工业巨人(比如谷歌等)的大量投资,研究论文的指数式增长(以及机器学习的研究生生源上升)。在听了数节机器学习课堂,甚至在本科研究中使用它以后,我不禁好奇:这个新的「深度学习」会不会是一个幻想,抑或上世纪80年代已经研发出来的「人工智能神经网络」扩大版?让我告诉你,说来话长——这不仅仅是一个有关神经网络的故事,也不仅仅是一个有关一系列研究突破的故事,这些突破让深度学习变得比「大型神经网络」更加有趣,而是一个有关几位不放弃的研究员如何熬过黑暗数十年,直至拯救神经网络,实现深度学习梦想的故事。
机器学习算法的百年历史
线性回归:首先简单介绍一下机器学习是什么。
从二维图像上取一些点,尽可能绘出一条拟合这些点的直线。你刚才做的就是从几对输入值(x)和输出值(y)的实例中概括出一个一般函数,任何输入值都会有一个对应的输出值。这叫做线性回归,一个有着两百年历史从一些输入输出对组中推断出一般函数的技巧。这就是它很棒的原因:很多函数难以给出明确的方程表达,但是,却很容易在现实世界搜集到输入和输出值实例——比如,将说出来的词的音频作为输入,词本身作为输出的映射函数。
线性回归对于解决语音识别这个问题来说有点太无用,但是,它所做的基本上就是监督式机器学习:给定训练样本,「学习」一个函数,每一个样本数据就是需要学习的函数的输入输出数据(无监督学习,稍后在再叙)。
尤其是,机器学习应该推导出一个函数,它能够很好地泛化到不在训练集中的输入值上,既然我们真的能将它运用到尚未有输出的输入中。例如,谷歌的语音识别技术由拥有大量训练集的机器学习驱动,但是,它的训练集也不可能大到包含你手机所有语音输入。 泛化能力机制如此重要,以至于总会有一套测试数据组(更多的输入值与输出值样本)这套数据组并不包括在训练组当中。
通过观察有多少个正确计算出输入值所对应的输出值的样本,这套单独数据组可以用来估测机器学习技术有效性。概括化的克星是过度拟合——学习一个对于训练集有效但是却在测试数据组中表现很差的函数。既然机器学习研究者们需要用来比较方法有效性的手段,随着时间的推移,标准训练数据组以及测试组可被用来评估机器学习算法。
好了,定义谈得足够多了。重点是——我们绘制线条的联系只是一个非常简单的监督机器学习例子:要点在于训练集(X为输入,Y为输出),线条是近似函数,用这条线来为任何没有包含在训练集数据里的X值(输入值)找到相应的Y值(输出值)。别担心,接下来的历史就不会这么干巴巴了。让我们继续吧。
显然这里话题是神经网络,那我们前言里为何要扯线性回归呢?呃, 事实上线性回归和机器学习一开始的方法构想,弗兰克· 罗森布拉特(Frank Rosenblatt)的感知机, 有些许相似性。
心理学家罗森布拉特构想了感知机,它作为简化的数学模型解释大脑神经元如何工作:它取一组二进制输入值(附近的神经元),将每个输入值乘以一个连续值权重(每个附近神经元的突触强度),并设立一个阈值,如果这些加权输入值的和超过这个阈值,就输出1,否则输出0(同理于神经元是否放电)。
对于感知机,绝大多数输入值不是一些数据,就是别的感知机的输出值。但有一个额外的细节:这些感知机有一个特殊的,输入值为1的,「偏置」输入,因为我们能补偿加权和,它基本上确保了更多的函数在同样的输入值下是可计算的。
这一关于神经元的模型是建立在沃伦·麦卡洛克(Warren McCulloch)和沃尔特·皮兹(Walter Pitts)工作上的。他们曾表明,把二进制输入值加起来,并在和大于一个阈值时输出1,否则输出0的神经元模型,可以模拟基本的或/与/非逻辑函数。这在人工智能的早期时代可不得了——当时的主流思想是,计算机能够做正式的逻辑推理将本质上解决人工智能问题。
另一个图表,显示出生物学上的灵感。激活函数就是人们当前说的非线性函数,它作用于输入值的加权和以产生人工神经元的输出值——在罗森布拉特的感知机情况下,这个函数就是输出一个阈值操作。
然而,麦卡洛克-皮兹模型缺乏一个对AI而言至关重要的学习机制。这就是感知机更出色的地方所在——罗森布拉特受到唐纳德·赫布(Donald Hebb) 基础性工作的启发,想出一个让这种人工神经元学习的办法。赫布提出了一个出人意料并影响深远的想法,称知识和学习发生在大脑主要是通过神经元间突触的形成与变化,简要表述为赫布法则:
当细胞A的轴突足以接近以激发细胞B,并反复持续地对细胞B放电,一些生长过程或代谢变化将发生在某一个或这两个细胞内,以致A作为对B放电的细胞中的一个,效率增加。
感知机并没有完全遵循这个想法,但通过调输入值的权重,可以有一个非常简单直观的学习方案:给定一个有输入输出实例的训练集,感知机应该「学习」一个函数:对每个例子,若感知机的输出值比实例低太多,则增加它的权重,否则若设比实例高太多,则减少它的权重。更正式一点儿的该算法如下:
这个过程很简单,产生了一个简单的结果:一个输入线性函数(加权和),正如线性回归被非线性激活函数「压扁」了一样(对带权重求和设定阈值的行为)。当函数的输出值是一个有限集时(例如逻辑函数,它只有两个输出值True/1 和 False/0),给带权重的和设置阈值是没问题的,所以问题实际上不在于要对任何输入数据集生成一个数值上连续的输出(即回归类问题),而在于对输入数据做好合适的标签(分类问题)。
康奈尔航天实验室的Mark I 感知机,第一台感知机的硬件
罗森布拉特用定制硬件的方法实现了感知机的想法(在花哨的编程语言被广泛使用之前),展示出它可以用来学习对20×20像素输入中的简单形状进行正确分类。
自此,机器学习问世了——建造了一台可以从已知的输入输出对中得出近似函数的计算机。在这个例子中,它只学习了一个小玩具般的函数,但是从中不难想象出有用的应用,例如将人类乱糟糟的手写字转换为机机可读的文本。
很重要的是,这种方法还可以用在多个输出值的函数中,或具有多个类别的分类任务。这对一台感知机来说是不可能完成的,因为它只有一个输出,但是,多输出函数能用位于同一层的多个感知机来学习,每个感知机接收到同一个输入,但分别负责函数的不同输出。
实际上,神经网络(准确的说应该是「人工神经网络(ANN,Artificial Neural Networks)」)就是多层感知机(今天感知机通常被称为神经元)而已,只不过在这个阶段,只有一层——输出层。所以,神经网络的典型应用例子就是分辨手写数字。
输入是图像的像素,有10个输出神经元,每一个分别对应着10个可能的数字。在这个案例中,10个神经元中,只有1个输出1,权值最高的和被看做是正确的输出,而其他的则输出0。
多层输出的神经网络
也可以想象一个与感知机不同的人工神经网络。例如,阈值激活函数并不是必要的; 1960年,Bernard Widrow和Tedd Hoff很快开始探索一种方法——采用适应性的「自适应(ADALINE)」神经元来输出权值的输入,这种神经元使用化学「 存储电阻器」,并展示了这种「自适应线性神经元」能够在电路中成为「 存储电阻器」的一部分(存储电阻器是带有存储的电阻)。
他们还展示了,不用阈值激活函数,在数学上很美,因为神经元的学习机制是基于将错误最小化的微积分,而微积分我们都很熟悉了。
如果我们多思考一下 「自适应(ADALINE)」,就会有进一步的洞见:为大量输入找到一组权重真的只是一种线性回归。再一次,就像用线性回归一样,这也不足以解决诸如语音识别或计算机视觉这样的人工智能难题。
McCullough,Pitts和罗森布拉特真正感到兴奋的是联结主义(Connectionism)这个宽泛的想法:如此简单计算机单元构成的网络,其功能会大很多而且可以解决人工智能难题。而且罗森布拉特说的和(坦白说很可笑的)《纽约时报》这段引文的意思差不多:
海军披露了一台尚处初期的电子计算机,期待这台电子计算机能行走,谈话,看和写,自己复制出自身存在意识...罗森布拉特博士,康奈尔航空实验室的一位心理学家说,感知机能作为机械太空探险者被发射到行星上。
这种谈话无疑会惹恼人工领域的其他研究人员,其中有许多研究人员都在专注于这样的研究方法,它们以带有具体规则(这些规则遵循逻辑数学法则)的符号操作为基础。
MIT人工智能实验室创始人Marvin Minsky和Seymour Paper就是对这一炒作持怀疑态度研究人员中的两位,1969年,他们在一本开创性著作中表达了这种质疑,书中严谨分析了感知机的局限性,书名很贴切,叫《感知机》。
他们分析中,最被广为讨论的内容就是对感知机限制的说明,例如,他们不能学习简单的布尔函数XOR,因为它不能进行线性分离。虽然此处历史模糊,但是,人们普遍认为这本书对人工智能步入第一个冬天起到了推波助澜的作用——大肆炒作之后,人工智能进入泡沫幻灭期,相关资助和出版都遭冻结。
感知机局限性的视觉化。找到一个线性函数,输入X,Y时可以正确地输出+或-,就是在2D图表上画一条从+中分离出-的线;很显然,就第三幅图显示的情况来看,这不可能
因此,情况对神经网络不利。但是,为什么?他们的想法毕竟是想将一连串简单的数学神经元结合在一起,完成一些复杂任务,而不是使用单个神经元。换句话说,并不是只有一个输出层,将一个输入任意传输到多个神经元(所谓的隐藏层,因为他们的输出会作为另一隐藏层或神经元输出层的输入)。只有输出层的输出是「可见」的——亦即神经网络的答案——但是,所有依靠隐藏层完成的间接计算可以处理复杂得多的问题,这是单层结构望尘莫及的。
有两个隐藏层的神经网络
言简意赅地说,多个隐藏层是件好事,原因在于隐藏层可以找到数据内在特点,后续层可以在这些特点(而不是嘈杂庞大的原始数据)基础上进行操作。以图片中的面部识别这一非常常见的神经网络任务为例,第一个隐藏层可以获得图片的原始像素值,以及线、圆和椭圆等信息。
接下来的层可以获得这些线、圆和椭圆等的位置信息,并且通过这些来定位人脸的位置——处理起来简单多了!而且人们基本上也都明白这一点。
事实上,直到最近,机器学习技术都没有普遍直接用于原始数据输入,比如图像和音频。相反,机器学习被用于经过特征提取后的数据——也就是说,为了让学习更简单,机器学习被用在预处理的数据上,一些更加有用的特征,比如角度,形状早已被从中提取出来。
传统的特征的手工提取过程的视觉化
因此,注意到这一点很重要:Minsky和Paper关于感知机的分析不仅仅表明不可能用单个感知机来计算XOR,而且特别指出需要多层感知机——亦即现在所谓的多层神经网络——才可以完成这一任务,而且罗森布拉特的学习算法对多层并不管用。那是一个真正的问题:之前针对感知机概括出的简单学习规则并不是适用于多层结构。想知道原因?让我们再来回顾一下单层结构感知机如何学习计算一些函数:
这一规则并不适用多层结构的原因应该很直观清楚了:选取训练集中的例子进行训练时,我们只能对最终的输出层的输出结果进行校正,但是,对于多层结构来说,我们该如何调整最终输出层之前的层结构权值呢?
答案(尽管需要花时间来推导)又一次需要依赖古老的微积分:链式法则。这里有一个重要现实:神经网络的神经元和感知机并不完全相同,但是,可用一个激活函数来计算输出,该函数仍然是非线性的,但是可微分,和Adaline神经元一样;该导数不仅可以用于调整权值,减少误差,链式法则也可用于计算前一层所有神经元导数,因此,调整它们权重的方式也是可知的。
说得更简单些:我们可以利用微积分将一些导致输出层任何训练集误差的原因分配给前一隐藏层的每个神经元,如果还有另外一层隐藏层,我们可以将这些原因再做分配,以此类推——我们在反向传播这些误差。而且,如果修改了神经网络(包括那些隐藏层)任一权重值,我们还可以找出误差会有多大变化,通过优化技巧(时间长,典型的随机梯度下降)找出最小化误差的最佳权值。
反向传播的基本思想
反向传播由上世纪60年代早期多位研究人员提出,70年代,由Seppo Linnainmaa引入电脑运行,但是,Paul Werbos在1974年的博士毕业论文中深刻分析了将之用于神经网络方面的可能性,成为美国第一位提出可以将其用于神经网络的研究人员。有趣的是,他从模拟人类思维的研究工作中并没有获得多少启发,在这个案例中,弗洛伊德心理学理论启发了他,正如他自己叙述:
1968年,我提出我们可以多少模仿弗洛伊德的概念——信度指派的反向流动( a backwards flow of credit assignment,),指代从神经元到神经元的反向流动...我解释过结合使用了直觉、实例和普通链式法则的反向计算,虽然它正是将弗洛伊德以前在心理动力学理论中提出的概念运用到数学领域中!
尽管解决了如何训练多层神经网络的问题,在写作自己的博士学位论文时也意识到了这一点,但是,Werbos没有发表将BP算法用于神经网络这方面的研究,直到1982年人工智能冬天引发了寒蝉效应。实际上,Werbos认为,这种研究进路对解决感知机问题是有意义的,但是,这个圈子大体已经失去解决那些问题的信念。
Minsky的书最著名的观点有几个:
(1)我们需要用MLPs[多层感知机,多层神经网络的另一种说法)来代表简单的非线性函数,比如XOR 映射; (2)世界上没人发现可以将MLPs训练得够好,以至于可以学会这么简单的函数的方法。
Minsky的书让世上绝大多数人相信,神经网络是最糟糕的异端,死路一条。Widrow已经强调,这种压垮早期『感知机』人工智能学派的悲观主义不应怪在Minsky的头上。他只是总结了几百位谨慎研究人员的经验而已,他们尝试找出训练MLPs的办法,却徒劳无功。
也曾有过希望,比如Rosenblatt所谓的backpropagation(这和我们现在说的 backpropagation并不完全相同!),而且Amari也简短表示,我们应该考虑将最小二乘(也是简单线性回归的基础)作为训练神经网络的一种方式(但没有讨论如何求导,还警告说他对这个方法不抱太大期望)。但是,当时的悲观主义开始变得致命。
上世纪七十年代早期,我确实在MIT采访过Minsky。我建议我们合著一篇文章,证明MLPs实际上能够克服早期出现的问题...但是,Minsky并无兴趣(14)。事实上,当时的MIT,哈佛以及任何我能找到的研究机构,没人对此有兴趣。
我肯定不能打保票,但是,直到十年后,也就是1986年,这一研究进路才开始在David Rumelhart, Geoffrey Hinton和Ronald Williams合著的《Learning representations by back-propagating errors》中流行开来,原因似乎就是缺少学术兴趣。
尽管研究方法的发现不计其数(论文甚至清楚提道,David Parker 和 Yann LeCun是事先发现这一研究进路的两人),1986年的这篇文章却因其精确清晰的观点陈述而显得很突出。实际上,学机器学习的人很容易发现自己论文中的描述与教科书和课堂上解释概念方式本质上相同。
不幸的是,科学圈里几乎无人知道Werbo的研究。1982年,Parker重新发现了这个研究办法[39]并于1985年在M.I.T[40]上发表了一篇相关报道。就在Parker报道后不久,Rumelhart, Hinton和Williams [41], [42]也重新发现了这个方法, 他们最终成功地让这个方法家喻户晓,也主要归功于陈述观点的框架非常清晰。
但是,这三位作者没有止步于介绍新学习算法,而是走得更远。同年,他们发表了更有深度的文章《Learning internal representations by error propagation》。 文章特别谈到了Minsky在《感知机》中讨论过的问题。尽管这是过去学者的构想,但是,正是这个1986年提出的构想让人们广泛理解了应该如何训练多层神经网络解决复杂学习问题。而且神经网络也因此回来了!第二部分,我们将会看到几年后,《Learning internal representations by error propagation》探讨过的BP算法和其他一些技巧如何被用来解决一个非常重要的问题:让计算机识别人类书写。
更多相关知识和参考文章来源可以关注我的博客站点
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。