1. 概述
前面我们已经介绍了最早的神经网络:感知机。感知机一个非常致命的缺点是由于它的线性结构,其只能做线性预测(甚至无法解决回归问题),这也是其在当时广为诟病的一个点。
虽然感知机无法解决非线性问题,但是其给非线性问题的解决提供了一个思路。感知机的局限来自于其线性结构,如果我们能够给其加入非线性结构,比如先给输入做一个非线性变换,这样其就能拟合非线性问题。那么这就是我们这次要讲的前向神经网络。
2. 结构
前向神经网络(Feed-forward Neural Network)是一种多层的网络结构,非常典型的就是三层结构:输入层、隐藏层和输出层。层与层之间用权值(连线)连接。一般只有前一层的值才能作为后一层的值的输入,而反过来不能,也就是说不能有反馈(Feed-back),这也是其名字的又来。这个结构非常重要,因为名声赫赫的BP算法就是基于这个结构的。
网络中每一个点(神经元)都有值,设为$a_j$。其中输入层的a就等于x,其他层的a则由权值以及之前层的值来确定。每个神经元在参与后面神经元值的计算时,并不直接使用其自身的值,而是经过一个非线性激活函数(一般是tanh或sigmoid),得到激活值$z_j$,然后再参与计算。输入层用x表示,输出层一般用y表示,权值一般表示为W(包含bias)。下面以三层网络结构为例来表示这些值。
$a^{(0)}_j$ = $x_j$
$z^{(0)}_j$ = $h(a^{(0)}_j)$
$a^{(1)}_j$ = $\sum_{i}w^{(1)}_{ji}a^{(0)}_i$
$z^{(1)}_j$ = $h(a^{(1)}_j)$
$a^{(2)}_j$ = $\sum_{i}w^{(2)}_{ji}a^{(1)}_i$
$y_j$ = $\sigma(a^{(2)}_j)$
其中$x_0$ = 1 ,$a_0$ = 1(目的是为了省略bias项)。
这里我们举的例子是后一层的值只由前一层的值来决定,当然,这个限定并不是一定的。只要没有反馈结构,都能算作是前向神经网络。所以这里就衍生除了一种结构叫做skip layer,即当前层不仅仅由前一层决定,还可以由前几层的值决定。这个网络结构如下:
这个结构看上去好像输入跳过了隐藏层直接作用与输出,这也是其名字的由来。
3. 权值的对称性
这是神经网络为数不多的性质之一,使用的也比较少。以三层神经网络为例,假设中间层有M个神经元,如果我们交换其中两个神经元的位置(与其相连的权值也相应移动),那么网络的映射关系 y = f(x) 没有变化。所以对于这个三层网络来说,一共有M!个网络与其等价。这就是网络的对称性。