神经网络的架构
下一章我们将介绍神经网络在分类手写数字方面的不错成绩。作为铺垫,让我们解释几个关于神经网络不同部分命名的术语。假设下面的神经网络:
像之前提到的,神经网络最左边的那层叫输入层,里面的神经元叫输入神经元。最右面叫输出层包含着输出神经元,在这个例子里,只有一个输出神经元。中间的那层叫隐含层,因为这一层的神经元即不是输入也不是输出。"隐含"这个术语或许听起来有一点神秘——我第一次听到时以为可能代表物理或数学方面的特殊含义——但它真得只是代表“即不是输入也是输出”的意思。上面的网络只有单个隐含层,但有些神经网络有多个隐含层。例如,下面的四层网络有2个隐含层:
有点令人困惑的是,因为一些历史原因,这样的多层网络有时被称之为多层感知机或者MLP,尽管是由Sigmoid神经元组成而不是感知器。在本书中我不会使用MLP这个术语,因为我觉得会引起困扰,但还是想提醒你它的存在。
神经网络里设计输入和输出层通常很简单。比如,假设我们尝试判断一个手写数字写的是否是“9”。一种自然的设计方式是将图片像素的灰度编码到输入神经元里。如果图片是一个64x64的灰度图像,那么我们将有4,096=64×64个输入神经元,将灰度缩放到0到1之间的适当比例。输出只有一个神经元,当输出值小于0.5时表示“输入的图像不是9”,当值感动0.5的时候表示“输入的图像是9”。
虽然神经网络的输入和输出层通常设计起来很简单,但隐含层的设计完全像是在设计一件艺术品。实际上,把隐含层的设计总结成一些简单的经验规则是不现实的。反而,神经网络的研究者们开发出许多设计隐含层的启发式方法,这可以帮助人们让他们的网络实现他们想要的行为。例如,有的启发式方法可以用来权衡隐含层的数量和训练网络所需的时间。我们在本书的后面遇到许多像这样的启发式方法。
目前为止,我们已经讨论了这一次的输出作为下一次的输入。这的网络叫做前馈神经网络。这意思着网络里没有循环——信息总是向前反馈,曾来不回馈。如果我们有循环,我们需要靠σ函数依赖于输出的输入作为终止。这很难理解,所以我们不允许出现循环。
尽管如此,其他的人工神经网络模型里反馈循环是可行的。这些模型被叫做递归神经网络。这些模型的想法是让神经元在某个时间限度内点火。点火会刺激其他神经元,它们可能在一小会之后点火,也是有一个时间限度。这仍然会引起更多神经元点火,所以经过一段时间后,我们将看到一连串神经元点火了。递归不会在这种模型里引起问题,因为一个神经元的输出只会在一段时间后影响它的输入,不是立刻。
递归神经网络比前馈神经网络的影响小稍小,部分原因是递归网络的学习算法没有那么强力(至少到目前为止)。但递归网络仍然很有趣。它比前馈网络更加接近我们大脑的工作原理。并且可能递归网络可以解决非常重要的问题,这些问题只能用递归网络来解决,对前馈网络来说难度巨大。尽管如此,为了限定我们的讨论范围,在本书中我将继续聚焦于被应用更加广泛的前馈网络。