到目前为止,我们只讲解过由一个感知器所构成的神经网络。单个感知器算法并不是很强大,他们学习不了过于复杂的概念。为了学习更加复杂的概念,我们需要把更多的感知器连接在一起从而组成更高级的网络模型。
把多个感知器分层连接在一起就构成了一个前馈神经网络。我们的输入单元也相应地被抽象成输入层。在输入层和输出层之间的被称为隐藏层。它们相对于这个网络的输入和输出是“隐身的”。
最后一层是输出层。当一个网络中有n层需要进行计算时,我们称这个网络有n层。换句话说,这个网络具有n-1个隐藏层和1个输出层。
接下来,我们来看一个简单的神经网络解决现实问题的例子:我们将用一个已经训练好的神经网络来预测明天的温度区间。
我们将使用一个简单的双层前馈神经网络。它只需要两个输入值:今天的最高和最低温度。
输入层会接收这两个输入值,然后传递给位于隐藏层的四个感知器去进行运算。隐藏层的输出会接着传递到位于输出层的两个输出单元。这两个单元会生成最后的结果,也就是 这个网络对于明天最高和最低气温的预测。
在这个网络中,位于隐藏层的每一个节点都有一个ReLU函数,但是最后一层却是一个线性层(也就是没有任何激活函数)。在这里我们并不需要控制感知器的输出,那为什么我们还是要使用激活函数呢?ReLU在这里究竟起到了什么作用?
这其中的原因是,即便我们有多个相连的线性层,从数学的角度看,这个更复杂的网络和只有单个线性层的网络是没有本质区别的。为了让这些被添加的层起到作用,我们需要加入ReLU函数让这些隐藏层变成非线性的。
有了这些激活函数,我们就可以连接起足够多的隐藏层来让神经网络学习更复杂的任务,例如在第零章中所展示的手写数字识别任务。
我们已经理解了前馈神经网络的基本原理,现在就来看一看如何训练一个网络模型来识别手写数字吧!
在这一章中,我们探究了前馈神经网络中的每一个元素是如何相互合作来解决复杂问题的。在下一章中,我们将解析第零章中所使用到的可以识别手写数字的神经网络。
But what *is* a Neural Network?
Deep Learning: Feedforward Neural Network
Neural Networks - Architecture - Stanford CS
隐藏层:一个神经网络中位于中间的所有执行数学运算的层。
节点:一个复杂神经网络中的单个感知器。
ReLU:线性整流函数。一种被经常用于增加非线性的激活函数