神经网络详解
一一 前言前言 让我们来看一个经典的神经网络。 这是一个包含三个层次的神经网络。红色 的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层) 。输入层有 3 个 输入单元,隐藏层有4 个单元,输出层有2 个单元。后文中,我们统一使用这种 颜色来表达神经网络的结构。 图 1 神经网络结构图 设计一个神经网络时, 输入层与输出层的节点数往往是固定的,中间层则可 以自由指定; 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向, 跟训练时的 数据流有一定的区别; 结构图里的关键不是圆圈(代表“神经元” ) ,而是连接线(代表“神经元” 之间的连接) 。每个连接线对应一个不同的权重(其值称为权值) ,这是需要训练 得到的。 除了从左到右的形式表达的结构图, 还有一种常见的表达形式是从下到上来 表示一个神经网络。这时候,输入层在图的最下方。输出层则在图的最上方,如 下图: 图 2 从下到上的神经网络结构图 二二 神经元神经元 2. 2.结构结构 神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突, 而输出可以类比为神经元的轴突,计算则可以类比为细胞核。 下图是一个典型的神经元模型:包含有3 个输入,1 个输出,以及 2 个计算功能。 注意中间的箭头线。这些线称为“连接” 。每个上有一个“权值” 。 图 3 神经元模型 连接是神经元中最重要的东西。每一个连接上都有一个权重。 一个神经网络的训练算法就是让权重的值调整到最佳, 以使得整个网络的预测效果最好。 我们使用 a 来表示输入,用 w 来表示权值。一个表示连接的有向箭头可以这样理解: 在初端, 传递的信号大小仍然是a, 端中间有加权参数w, 经过这个加权后的信号会变成a*w, 因此在连接的末端,信号的大小就变成了a*w。 在其他绘图模型里,有向箭头可能表示的是值的不变传递。 而在神经元模型里,每个有 向箭头表示的是值的加权传递。 图 4 连接(connection) 如果我们将神经元图中的所有变量用符号表示, 并且写出输出的计算公式的话, 就是下 图。 图 5 神经元计算 可见 z 是在输入和权值的线性加权和叠加了一个函数g 的值。在 MP 模型里,函数 g 是 sgn 函数,也就是取符号函数。这个函数当输入大于0 时,输出 1,否则输出 0。 下面对神经元模型的图进行一些扩展。 首先将 sum 函数与 sgn 函数合并到一个圆圈里, 代表神经元的内部计算。其次,把输入 a 与输出 z 写到连接线的左上方,便于后面画复杂的 网络。最后说明,一个神经元可以引出多个代表输出的有向箭头,但值都是一样的。 神经元可以看作一个计算与存储单元。 计算是神经元对其的输入进行计算功能。 存储是 神经元会暂存计算结果,并传递到下一层。 图 6 神经元扩展 当我们用“神经元”组成网络以后,描述网络中的某个“神经元”时,我们更多地会用 “ 单元” (unit)来指代。同时由于神经网络的表现形式是一个有向图,有时也会用“ 节 点” (node)来表达同样的意思。 神经元模型的使用可以这样理解: 我们有一个数据,称之为样本。样本有四个属性,其中三个属性已知,一个属性未知。 我们需要做的就是通过三个已知属性预测未知属性。 具体办法就是使用神经元的公式进行计算。三个已知属性的值是a1,a2,a3,未知属 性的值是 z。z 可以通过公式计算出来。 这里,已知的属性称之为特征,未知的属性称之为目标。假设特征与目标之间确实是线 性关系,并且我们已经得到表示这个关系的权值w1,w2,w3。那么,我们就可以通过神经 元模型预测新样本的目标。 三三 单层神经网络(感知器)单层神经网络(感知器) 2 2 结构结构 下面来说明感知器模型。 在原来 MP 模型的“输入”位置添加神经元节点,标志其为“输入单元”。其余不变, 于是我们就有了下图:从本图开始,我们将权值w1, w2, w3 写到“连接线”的中间。 图 7 单层神经网络 在“感知器”中,有两个层次。分别是输入层和输出层。 输入层里的“输入单元”只负 责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。 我们把需要计算的层次称之为“计算层” ,并把拥有一个计算层的网络称之为“单层神 经网络” 。 有一些文献会按照网络拥有的层数来命名, 例如把 “感知器” 称为两层神经网络。 但在本文里,我们根据计算层的数量来命名。 假如我们要预测的目标不再是一个值, 而是一个向量,例如[2,3]。那么可以在输出层再 增加一个“输出单元” 。 下图显示了带有两个输出单元的单层神经网络,其中输出单元z1 的计算公式如下图。 图 8 单层神经网络(Z1) 可以看到,z1 的计算跟原先的 z 并没有区别。 我们已知一个神经元的输出可以向多个神经元传递,因此z2 的计算公式如下图。 图 9 单层神经网络(Z2) 可以看到,z2 的计算中除了三个新的权值:w4,w5,w6 以外,其他与 z1 是一样的。 整个网络的输出如下图: 图 10 单层神经网络(Z1 和 Z2) 目前的表达公式有一点不让人满意的就是:w4,w5,w6 是后来加的,很难表现出跟原 先的 w1,w2,w3 的关系。 因此我们改用二维的下标,用W x,y 来表达一个权值。下标中的 x 代表后一层神经元的 序号,而 y 代表前一层神经元的序号(序号的顺序从上到下) 。 例如,w 1,2 代表后一层的第 1 个神经元与前一层的第 2 个神经元的连接的权值。 根据以 上方法标记,我们有了下图。 图 11 单层神经网络(扩展) 如果我们仔细看输出的计算公式, 会发现这两个公式就是线性代数方程组。 因此可以用 矩阵乘法来表达这两个公式。 例如,输入的变量是[a1,a2,a3](代表由 a1,a2,a3 组成的列向量) ,用向量 a 来表示。方程的左边是[z1,z2],用向量 z 来表示。 系数则是矩阵 W(2 行 3 列的矩阵,排列形式与公式中的一样) 。 于是,输出公式可以改写成: g( W* a) = z 这个公式就是神经网络中从前一层计算后一层的矩阵运算。 T T 3. 3.效果效果 与神经元模型不同,感知器中的权值是通过训练得到的。 因此,根据以前的知识我们知 道,感知器类似一个逻辑回归模型,可以做线性分类任务。 我们可以用 决策分界来形象的表达分类的效果。决策分界就是在二维的数据平面中划 出一条直线,当数据的维度是3 维的时候,就是划出一个平面,当数据的维度是n 维时,就 是划出一个 n-1 维的超平面。 下图显示了在二维平面中划出决策分界的效果,也就是感知器的分类效果。 图 12 单层神经网络(决策分界) 感知器只能做简单的线性分类任务。 四四 两层神经网络(多层感知器)两层神经网络(多层感知器) 1. 1.引子引子 两层神经网络是本文的重点, 因为正是在这时候, 神经网络开始了大范围的推广与使用。 Minsky 说过单层神经网络无法解决异或问题。但是当增加一个计算层以后,两层神经 网络不仅可以解决异或问题, 而且具有非常好的非线性分类效果。 不过两层神经网络的计算 是一个问题,没有一个较好的解法。 1986 年,Rumelhar 和 Hin