单层感知机的能力不足是被明斯基用数学严格证明的,这确实是板上钉钉、谁也无法翻案的事实。要摆脱神经网络的困境,只剩下从训练多层神经网络这个方向上突破这一条途径了。站在今天回望,我们当然已经知道多层神经网络肯定不是无法训练的,可是那时候的主流学者并不这样乐观,麻省理工学院的教授伯纳德·威德罗(Bernard Widrow,1929—)当时曾写道<sup>○一</sup>:
“他(指罗森布拉特)总结了几百位谨慎研究人员的经验,尝试找出训练多层感知机的办法,却徒劳无功。也曾有过希望,比如他提出所谓的 Back Propagation 算法<sup>○二</sup>,以及一些学者表示过应该考虑将最小二乘法作为训练神经网络的一种方式,但都没有讨论到具体操作细节,譬如该怎样求导等问题,人们无法对这些方法抱有太大期望。”
训练多层神经网络这件事情到底有多难,以至于将一群精英学者挡在门外,演变成神经网络的生存危机的?经过前面基础知识的铺垫,我们已经可以尝试自己去回答这个问题了。
神经网络是机器学习众多算法、模型中的一种,在第 6 章讲机器学习时,我们面向的是全部的统计学习方法,并未局限于任何特定的模型和算法,换言之,统计学习的所有步骤和思路对训练神经网络都是有效的。因此,我们要训练一个神经网络,同样应该先考量神经网络的输出和真实结果之间的误差,然后选择恰当的损失函数来表示误差,再根据梯度下降等优化算法,一步一步修正神经网络的权值参数,最后得到能拟合真实结果的神经网络模型。而在这些步骤中,优化模型这一步就遇到了巨大的困难。
对于单层神经网络而言,因为它只有一个输入层和一个输出层,输出层的输出值与实际值之间的误差是显而易见的,所以我们要得到模型的权值参数,直接对损失函数求导然后应用梯度下降算法优化即可<sup>○一</sup>。可是应用在多层神经网络情况就复杂多了,由于有了中间隐层的存在,它作为下一层神经元的输入,是通过逐层传递到输出层之后,才间接地影响模型的输出结果的。每一个隐层神经元的输出都不是神经网络的最终输出值,不能直接拿来和实际值进行比较,这样就没有办法直接通过对损失函数求导得到梯度来计算出每个隐层的每个神经元的权值参数了。
244
第三部分 第三波高潮
○一 资 料 来 源:http://www.andreykurenkov.com/writing/ai/a-brief-history-of-neural-nets-and-deep-learning/。
○二 这与我们稍后要说的“误差反向传播”算法名字类似,但并非同一个算法。