在下一节中,我将介绍一个能够很好地分类手写数字的神经网络。作为准备, 为神经网络的不同部分命名是很有帮助的。假设我们有如下的网络:
就像之前提到的,网络中最左边的一层被称为输入层,这一层中的神经元被称为输入神经元,最右边的一层或者输出层包含输出神经元,在这个例子中,只有一个输出神经元。中间层被称为隐含层,因为这一层中的神经元既不输入也不输出。术语“隐含”也许听起来有些神秘——第一次我听到这个术语的时候我认为它一定有些哲学或者数学意味——但是它的意思真的仅仅是“既不输入也不输出”。上面的神经网络只有一个隐层,但是有些神经网络有多个隐层。例如,下面这个四层网络有两个隐含层:
令人有些困惑的,由于历史原因,像上面的这种多层神经网络有时被称为多层感知机( multilayer perceptrons)或者MLPs,尽管组成它的是sigmoid神经元而不是感知机。在本书中,我不会使用MLP这个术语,因为我认为它令人困惑,但是我会提醒你它任然是存在的。
网络中输入和输出层的设计往往很简单。例如,假设我们视图是识别一个手写图片是否写的是“9”,一种设计神经网络很自然的方式是为输入神经元编码图片像素的强度。 如果图片是64 x 64的灰度图,像素强度按比例映射到0到1之间,使用64 x 64 = 4096个输入神经元输入。输出层将只含有一个神经元,输出值小于0.5意味着“输入照片不是9”,值大于0.5表明“输入图片是9”。
虽然输入和输出层的设计通常很简单,但是隐含层的设计就相当的有艺术了。特别是,淡出总结一些简单的规则作为隐层的设计是不对的。取而代之的是,神经网络工作者为隐含层开发了很多启发式设计,这使得网络符合预期。例如,这种启发式方法可以用来帮助人们在隐层层数和训练网络所需时间这两者之间找到平衡。接下来在这本书中可以遇到好几处这样的启发式设计。
目前为止,我们讨论的神经网络均是把上一层的输出作为下一层的输入,像这样的网络被称为前馈神经网络,这意味着在网络中没有回路——信息总是向前传播的,用不反向反馈。如果有了回路,最终的情况就是输入依赖于输出。这很难立理解,所以我们不允许出现这种情况。
然而,反馈回路在其它的一些人工神经网络中是可能的。这些模型被称为递归神经网络。这种模型的关键在于神经元在变为非激活态之前会保持激活态一段有限的时间。这种激活态可以刺其他的神经元,被激励的神经元在随后的一段时间内也会保持激活态。这会引起更多的的神经元被激活,一段时间后我们将得到一个级联的神经元激活系统。在这样一个模型中,回路不会引起问题,因为神经元的输出在一段时间之后才会影响到它的输入,它不是实时的。
递归神经网络比前馈神经网络的影响小,部分原因是递归神经网络的学习算法不够强大(至少目前为止)。但是递归神经网络任然是非常有趣的。他们比前馈神经网络更接近我们的大脑的工作方式。并且可以解决一些只能通过极度复杂的前馈神经网络解决的复杂问题。然而,限于本书的范围,在本书中,我们会集中在使用更广泛的前馈神经网络。