神经网络结构
神经网络的结构就是神经元连接的方式。
前馈神经网络
- 第一层为输入,最后一层为输出,中间为隐层;
- 多于一个隐层的网络可称为深度神经网络。
递归/循环神经网络
多隐层的递归神经网络就是隐层到隐层连接缺失神经网络的一种特例。
- 比前馈神经网络强大得多;
- 连接图具备有向环结构;
- 存在各种形式的震荡(oscillation),动态行为十分复杂;
- 能够在很长时间内记住信息,但非常难以训练;
- 可以很自然的对序列数据建模;
与前馈神经网络不同,每个时间步采用相同的权值。
对称连接网络
- 类似递归神经网络,但是神经元之间的连接对称;
- 没有隐藏单元的对称连接网络称为”Hopfield nets”;
- 拥有隐藏单元的对称连接网络称为”Boltzmann machines”——拥有简单美妙的学习算法,比Hopfield nets强大,但不如递归网络。
第一代神经网络——感知器
- 在20世纪60年代,Frank Rosenblatt推广了感知器;
- 1969年,Minsky和Papert出版了“Perceptrons”,分析了感知器的性能及其局限性——许多人认为这些局限性也适用于所有神经网络;
- 目前感知器算法仍被广泛使用。
关于偏置(bias):
- 阈值等价于负偏置;
- 偏置可视为输入为1的分量对应的权值。
感知器收敛(训练)过程:
- 输出正确,则不改变权值;
- 错误输出0,用输入向量加上权值更新权值;
- 错误输出1,用输入向量减去权值更新权值;
可以这样理解:
- 错误输出0的情况:若期望$\mathbf{w^\mathsf{T}x} > 0$,实际为$\mathbf{w^\mathsf{T}x} < 0$,那么$\mathbf{w^\mathsf{T}x} + \mathbf{x^\mathsf{T}x}$更接近期望,则有$\mathbf{w}\leftarrow\mathbf{w}+\mathbf{x}$;
- 错误输出1的情况:若期望$\mathbf{w^\mathsf{T}x} < 0$,实际为$\mathbf{w^\mathsf{T}x} > 0$,那么$\mathbf{w^\mathsf{T}x} - \mathbf{x^\mathsf{T}x}$更接近期望,则有$\mathbf{w}\leftarrow\mathbf{w}-\mathbf{x}$。
若针对训练集存在这样的权值集,该方法可以确保找到正确的权值。
从几何角度理解感知器
权值空间:
- 权值的每个分量用一个维度表示;
- 空间中的点表示权值向量;
- 训练集表示为该空间中面的集合。
如上图所示:蓝色表示输入向量$\mathbf{x}$,绿色和红色分别表示正确和错误的权值向量$\mathbf{w}$,蓝色的输入向量(法线)确定了训练集中点所表示的面(与法线垂直),图中用黑色表示。
- 输入向量对应的输出为1时,与其夹角小于90度的向量可作为正确的权值,如上图左所示;
- 输入向量对应的输出为0时,与其夹角大于90度的向量可作为正确的权值,如上图中所示;
- 对所有输入都适用的权值向量,位于上图右所示的超锥体内。
为什么学习算法有效
当感知器存在错误时,通过输入更新权值。但是,输入向量“过长”时,更新可能越过可行的权值向量,如上图所示,更新权值可能越过黄色的可行向量。
定义如上图所示权值可行区域,经过有限步迭代,权值始终位于该区域内。
感知器的不足
感知器的局限性源于特征。采用恰当的特征,几乎可以胜任一切任务;如果特征使用不当,会受到很大的局限性。
对于如下二值特征的数据:
\[ \begin{aligned} (1,1)\rightarrow 1;\quad &(0,0)\rightarrow 1 \\ (1,0)\rightarrow 0;\quad &(0,1)\rightarrow 0 \end{aligned} \]
如果采用二值的阈值神经元,可得
\[ \begin{aligned} w_1+ w_2\geq \theta;\quad & 0\geq \theta \\ w_1 < \theta;\quad & w_2 < \theta \end{aligned} \]
显然以上不等式无解,也就是说二值的阈值神经元不能区分这些数据。
利用如上图所示的“数据空间”表示,空间中的每个点表示一个输入向量。权值向量定义了数据空间中的面。上图中的正负例不能通过面分开。
若采用形如上图所示的循环位移方式,二值的阈值神经元不能将相同数量的像素被点亮的模式分开。对于模式A,考虑所有可能的变换形式,每个像素能被4次激活(黑色表示)。这些模式的所有输入将是权值和的4倍。对于模式B也是同样的。这样就无法区分模式A与模式B。
没有隐层单元的网络能够学习的模型功能受限。为了解决感知器的不足,可利用隐层神经元:
- 更多线性单元构成的层并无帮助,应为这样也是线性的;
- 输出非线性仍不够。
因此,需要多个非线性隐层:
- 需要高效的算法调整所有的权值,而不仅是最后层,这非常困难;
- 隐层权值学习等价于特征学习,由于无法直接获知隐层的特性,隐层权值学习也非常困难。