神经计算原理
小木虫
·
·
科技·工程
本博客翻自 Fredric M.Ham 与 Ivica Kostanic 所著的《神经计算原理》。
本博客的目的是把原著翻译为 OIer 能更容易看懂的版本(原版的翻译简直不诗人,而且有些地方缺乏解释不利于高中生阅读),会略做精简。
文中的“笔者”指这篇博客的撰写者“小木虫”。
第一部分:神经计算的基本概念和部分神经网络体系结构及其学习规则
第一章:神经计算概述
本章并无实质性内容,故不作改编,有兴趣的读者可以选择自行查阅。
不过在此需要介绍一些概念。
神经网络的表现形式是一个有向图,上面的节点我们称之为神经元。
你可以把这张图看作一个大函数或者是黑箱子,图中会有若干参数,根据这些参数,你向神经网络内输入一些数据之后你能获得一些结果。
我们希望获得一些特别好的神经网络,并借此解决一些特定问题。
如果你的这张神经网络上的节点是可以被分层的,且每一层的节点只连向后一层的节点,那么我们称这是一个前馈神经网络,容易发现在这个网络上数据是单向传播且无反馈的,你向里输入数据的节点层我们称之为输入层,你向外取数据的层我们称之为输出层,剩下的层我们都称为隐藏层。
循环神经网络 更牛一些,他是有环的,换句话说,他是有反馈的,即一个节点的输出可能会影响其自身的,由于数据会在里面进行循环,所以我们称之为循环神经网络。
第二章:神经计算的基本概念
2.1 概述
本章讲解可执行各种功能的神经结构的基础,由于人工神经网络由许多相互链接的人工神经元所组成,所以本章将从神经元模型开始,初窥神经网络。
2.2 人工神经元的基本模型
我们可以将神经元看作一个有向带权图(神经网络)当中的一个节点 q,它接受若干输入并输出一个标量,一个神经元模型包含四个基本组成部分:
1.一组突触
“突触” 实际可以理解为一组连向 q 的有向带权边的权值,神经元 q 的第 i 个突触的权值记为 w_{q,i},这种下标记法是约定俗成的,而对突触的输入则是一个向量 x=[x_1,x_2,...,x_n]^T,x_i 输入给第 i 个突触,并通过权值 w_{q,i} 与节点 q 相连,即 x_i 用 w_{q,i} 相乘并贡献给求和装置。
2.求和装置
求和装置将叠加所有突触的输出,也就是说,每个输入与其突触权值相乘,再通过求和装置相加求和,求和后的值记作 u_q,包括加法器输出在内的所有运算构成一个线性组合器。
3.激活函数 f
激活函数又名“挤压”函数,当它为非线性函数时,它将限制神经元 q 输出 y_q 的幅度(这也是为什么称其为挤压函数)。
激活函数可以是连续的,二值的,双极值的,在某些情况也可以是线性的,当它不是线性的时候,f 的值域通常为 [0,1],[-1,1]。
在一个很大的神经网络中,这种限制可以加强网络的能力与鲁棒性。
4.阈值
阈值,记作 \theta_q,其会改变对激活函数的输入,即激活函数的输入为 u_q-\theta_q。
阈值还有另外的一种表现形式,叫 “偏置”,偏置是阈值的相反数,仅此而已。
用数学的方式来表示,神经元的输出为:
y_q=f((\sum_{i=1}^n w_{q,i}\times x_i)-\theta_q)
当然,你也许能注意到阈值 \theta_q 也可以写成突触权值的形式,其的输入为 -1,这是神经元模型的另一种表示形式。
2.3 基本激活函数
前文已经提到过激活函数的概念,但是我们并没有说明激活函数到底是如何定义的,需要注意的是,我们需要根据我们希望神经网络解决的问题来选择激活函数,接下来我们介绍四种最常见的激活函数。
1.线性函数(恒等函数)
f(x)=x
这种激活函数不对输入做任何处理就直接输出,十分平凡。
2.硬限幅器函数
f(x) =
\begin {cases}
0 & x < 0 \\
1 & x \geq 0 \\
\end {cases}
这是一个二值函数,我们也将其称为阈值函数。
我们同时也有对称硬限幅器函数:
f(x) =
\begin {cases}
-1 & x < 0 \\
0 & x = 0 \\
1 & x > 0\\
\end {cases}
有时我们也将此函数称为“符号函数”,因为其输出是其符号。
具有硬限幅器激活函数的人工神经元被称为 McCulloch-Pitts 模型,是一种相当古老的神经元。
在最初的研究中,突触权值和阈值都是预置的,而不是通过训练得到的,这样的神经元可以进行简单的逻辑运算功能,神经网络就起源于此。
读者可以尝试用若干个 McCulloch-Pitts 神经元制作基本的 OR、AND、NOR、XOR 逻辑门,借此理解神经元的工作。
3.饱和线性函数与分段线性函数
饱和线性函数表示为:
f(x) =
\begin {cases}
0 & x < -\frac{1}{2} \\
x+\frac{1}{2} & -\frac{1}{2} \leq x \leq \frac{1}{2}\\
1 & x > \frac{1}{2}\\
\end {cases}
对称饱和函数表示为:
f(x) =
\begin {cases}
-1 & x < -1 \\
x & -1 \leq x \leq 1\\
1 & x > 1\\
\end {cases}
4.sigmoid 函数
这种函数为构造人工神经网络最常用的激活类型,这里给出两种 S 函数。
第一类 sigmoid 函数为二值 S 形函数:
f(x)=\dfrac{1}{1+e^{-\alpha x}}
其中 \alpha 为该函数的倾斜参数,通过改变这个值可以得到不同形状的函数:
这个函数不仅平滑,连续,而且可微(甚至易于计算导数),拥有非常好的性质。
其导数可以被表示为:
f'(x)=\dfrac{\alpha e^{-ax}}{(1+e^{-\alpha x})^2}=\alpha f(x)\times [1-f(x)]
第二类 sigmoid 函数为双极值函数,可以是双曲正切 S 形函数:
f(x)=\tanh (\alpha x)=\dfrac{1-e^{-2\alpha x}}{1+e^{-2\alpha x}}

其导数为:
$$f'(x)=\alpha [1+f(x)][1-f(x)]$$
**值得指出的是,这两个 sigmoid 函数的导数都可以用其激活函数本身表示,这一点非常重要。**
有趣的是,神经元与激活函数这样的结构是有神经生理学的实验支持的,它与生物神经元十分相似。
### 2.4 人工神经元的 Hopfield 模型
照目前的资料来看,神经网络的新纪元开始于 Hopfield 在 1982 年发表的一篇论文。
在这篇论文中,霍普菲尔德给出了由简单处理单元构成的神经体系结构,这种处理单元建立在 McCulloch-Pitts 模型的基础上。尽管在此之前学术界就进行了神经网络领域的大量研究,但是这是第一篇将各种概念联系在一起并阐述其如何工作的研究。
Hopfield 神经网络是异步并行处理的、**完全互联(类似于完全图形式)的**。它具有检索存储模式的基本功能,以响应有噪声或不完全形式的模式。
其有两种形式,分别为离散时间模型与连续时间模型。对于离散时间模型,我们通常将对称硬限幅器作为激活函数。对于连续时间模型,我们将双曲正切 S 形函数作为激活函数。
和感知机(一个以硬限幅器作为激活函数的前馈神经网络)相比,**Hopfield 神经网络具有反馈功能,正因如此,我们将其视为递归神经网络**。
**我们将在 5.3 节中讨论该网络的细节**,在这里我将给出离散时间与连续时间的霍普菲尔德神经元模型来打下基础。
首先,Hopfield 网络是一个循环神经网络,它会随时间戳变化而变化,它在第 $i$ 时刻的状态取决于其在 $i-1$ 时刻的状态。
**接下来首先介绍离散时间模型的霍普菲尔德神经元**。

离散时间模型的霍普菲尔德神经元如上图所示,发现一个神经元在 $k$ 时刻的输出会作为整个网络在 $k+1$ 时刻的输入之一,与我们之前的介绍相符。
我们可以将神经元 $q$ 在 $k+1$ 时刻的输出写作:
$$y_q(k+1)=f[\sum_{i=1}^n w_{q,i}\times x_i(k)-\theta_q]$$
对于离散时间的霍普菲尔德神经网络,其突触权值矩阵 $W=[w_{q,i}](1\leq q,i \leq n)$ 是一个对角线为零的实对称矩阵。
**接下来我们介绍连续时间模型**。
连续型 Hopfield 网络的拓扑结构与离散型 Hopfield 网络相似,所不同的是,连续型 Hopfield 网络中节点的状态为模拟值且连续变化。基于生物存储器基本思想,连续模型与 1984 年发表。
连续时间模型里引入了一些生物学与物理学的内容,它使用电信号强度来表示系统中流通数据的大小,这部分对 OIer 来说可能会非常陌生(也难怪获得了诺贝尔物理学奖)。

此模型新加入了一个叫**积分器**的新元件,它由运算放大器、电容器 $C_q$ 与电阻器 $R_q$ 组成,积分器有一参数 $\gamma>0$,称为积分器的泄漏(遗忘)因子。
同时,神经元也有一新参数 $T_{cq}=R_qC_q$,称为第 $q$ 神经元的时间积分常量,**它决定着积分在整个系统内的作用强度**。
据此我们写出 $v_q(t)$ 的微分方程:
$$T_{cq}\dfrac{dv_q}{dt}=\gamma_qv_q + (\sum_{i=1}^n w_{q,i}x_i-\theta_q)$$
神经元的输出就是:
$$y_q=f(v_q)$$
观察 $v_q$ 的微分方程,发现这个事其实并不难理解,它的意义就是记录此前所有时刻输入的积分并减去它们随时间衰减的部分作为这个时刻的电位信号,通过修改 $T_{cq}$ 我们可以更改此前输入对此刻的影响,通过修改 $\gamma_q$ 我们可以更改电信号在系统中的衰减速度。
前面提到过,这个模型的激活函数为双曲正切 S 形函数,不要忘了。
其实若你令 $\dfrac{dv_q}{dt}=0,\gamma=1,\alpha\rightarrow \inf$,则我们可以从前式推导出离散时间模型的差分方程,这是容易理解的,因为在离散模型中电位的导数为 $0$,而衰减是瞬间的(电信号不会滞留),而当双曲正切 S 形函数的 $\alpha$ 趋近于无穷时,它会变为对称硬限幅器。
### 2.5 自适应线性单元和多重自适应线性单元
在 1960 年,最小均方(Least-Mean Square,LMS) 算法在加州斯坦福大学诞生。
他是一种学习算法,这种学习规则又被称作 Widrow-Hoff 学习规则或 $\delta$ 学习方法。Adaline(自适应线性单元)是根据 LMS 算法来更新突触权值的单个神经元。
在斯坦福,Widrow 和他的学生们开发了**第一个可训练的分层神经网络**,它具有多个自适应单元,称作 Madaline(多重 Adaline)。
用于训练单层网络的 LMS 算法是用于前馈多层感知机(见 3.3 节)的反向传播学习规则的前身。
LMS 算法是用于计算神经元突触权值调整的自适应算法,该算法以**最速下降方法**为基础,调整神经元权值,以**最小化神经元输出与预期输出之间的方差**,让我们从单个简单的自适应线性组合器开始,讨论 LMS,Adaline 和 Madaline 的细节。
#### 2.5.1 简单自适应线性组合器和 LMS 算法

现在我们希望对神经元模型进行若干次迭代,每次迭代会输入并给定一个期望输出,**我们希望神经元模型能逐渐预测下一个期望输出**。
首先,我们令 $d(k)$ 为这个神经元在第 $k$ 次迭代时的期望输出,$x(k)$ 为训练输入,$w(k)$ 为当前网络的权值向量,则期望响应和网络响应的差异可以被写为:
$$e(k)=d(k)-v(k)=d(k)-w^T(k)x(k)$$
我们首先假定输入 $x(k)$ 是零均值的,即 $E\{x\}=0$,宽平稳向量随机过程,容易发现这并不是一个限制。
为了得到线性组合器的学习规则,最通常使用的性能标准是**最小化网络输出与期望响应之间的误差平方**,这被称为均值平方误差标准,简称 MSE 标准,可以表示为:
$$J(w)=\dfrac{1}{2}E\{e^2(k)\}$$
其中 $E$ 为期望算子。
那么在给出 LMS 学习算法之前,我们先给出确定称为 Wiener-Hopf 解的最优权值向量 $w^*$ 的**传统方法**。
假定 $x(k),d(k)$ 均为统计上宽平稳总体,我们将前式展开化简,得到:
$$J(w)=\dfrac{1}{2}E\{d^2(k)\}-E\{d(k)x^T(k)\}w(k)+\dfrac{1}{2}w^T(k)E\{x(k)x^T(k)\}w(k)$$
可被写作:
$$J(w)=\dfrac{1}{2}E\{d^2(k)\}-p^T w(k)+\dfrac{1}{2}w^T(k)C_xw(k)$$
容易发现一个事,MSE 误差是一个**关于突触权值的二次函数**,这意味着在权值向量空间中,对于 $J(w)$ 的 MSE 曲面**有唯一的最小值**,因此我们可以从数学上计算出对于权值向量 $w$ 的性能度量的梯度,用于最优条件,可设定这个结果为 $0$,即:
$$\nabla_w J(w)=\dfrac{\partial J(w)}{\partial w}=-p+C_xw(k)=0$$
这是关于一个向量的数量微分,我们可以得到最优权值 $w^*$ 为:
$$w^*=C_x^{-1}p$$
上式是关于著名的线性组合器最优权值的 Wiener-Hopf 解的向量矩阵形式。
在神经网络与信号处理中,**上式的应用受限**,有两点原因:
1.求协方差矩阵 $C_x$ 的逆的计算量非常大。
2.它不适合于权值的联机修改,因为多数情况下协方差矩阵和互相关向量事先并不知道。
为了克服这些问题,Widrow 和 Hoff 发明了 LMS 算法,通过分析下图表示的 MSE 曲面的特征很容易解释 LMS 算法的思想。

为了在 $J(w)$ 最小时得到突触权值的最优值,**采用梯度下降法搜索误差曲面**,找到最小值(这时梯度为 $0$)。显然,通过沿曲面的负梯度方向改变权值可以到达误差曲面的底部。
由于不知道协方差矩阵和互相关向量时不能计算曲面的梯度,所以**在迭代训练过程中必须估计它们**。估计 MSE 梯度曲面最简单、最粗略的方法,可以通过取**瞬时误差曲面**的梯度得到,即在 MSE 的定义中**去掉期望算子** $E\{\}$。
此时 $J(w)$ 的梯度近似为:
$$\nabla_w J(w)=-e(k)x(k)$$
此时学习规则可写为:
$$w(k+1)=w(k)+\mu [-\nabla _w J(w)]=w(k)+\mu e(k)x(k)$$
上式即可被成为自适应线性组合器权值更新的 LMS 算法,上式中的 $\mu>0$ 通常称为**学习率参数,它指定在负梯度方向权值更新步骤的幅度**。若 $\mu$ 太小,则学习算法将缓慢修改权值,到达曲面底部需要相当多的迭代次数,如果设置的太大则会导致学习不稳定,这是因为我们之前对梯度采用的是估计法,因此学习参数设置的太大会导致对误差的加倍,使得权值不收敛。
**我们可以直接写出 LMS 算法的标量形式**:
$$e(k)=d(k)-\sum_{h=1}^n w_h(k)x_h(k)$$
$$w_i(k+1)=w_i(k)+\mu e(k)x_i(k)$$
对于 LMS 算法的连续时间形式,$\mu$ 取多大无所谓,**但是对于离散时间形式,为了确保稳定性学习率必须设置上界**,经过对其性质的严格讨论,我们有:
$$0<\mu< \dfrac{2}{\lambda_{\max}}$$
其中 $\lambda_{\max}$ 为输入协方差矩阵 $C_x$ 的最大特征值。简单来说,若学习率在上界以内则 LMS 算法收敛。
为了使 LMS 算法收敛,且对稳定性的影响减少,则学习率可接受值通常限制为:
$$0<\mu< \dfrac{2}{\text{trace}\{C_x\}}$$
$$\text{trace}\{C_x\}=\sum_{h=1}^n\lambda_h \geq \lambda_{\max}$$
前文对学习率参数的估计**假定我们至少要有对输入协方差矩阵的估计**,然而就如前文所说,要得到这种估计是**很困难的**。同时,即使其估计是可得到的,我们也**常设学习率为固定值**。
虽然固定学习率是产生最速下降算法的最简单形式,但是**随时间改变参数**也许更适合。固定学习率参数的最主要问题之一就是结果的精度,即如果固定的学习率参数过大,则突触权值的精度直接取决于其。但如果其太小则收敛太缓慢,而我们无法提前预知其是否过大或过小。
于是我们想到了一些随时间改变学习率的方法,在随机逼近文献最常用的形式为:
$$\mu(k)=\dfrac{K}{k}$$
其中 $K$ 为常量,容易发现随着训练的进行,**学习率将逐步降低趋于稳定**。
但是上式有一些问题,就是**它会导致学习率在训练初始阶段迅速减小**。合理的学习过程似乎是再以开始设置较大的学习率,然后随着网络收敛逐步减小。前人刚好发明了一个叫做“搜索而且收敛算法”的东西,它能满足我们的需求。
它分为两个阶段,正如其名“搜索”与“收敛”,在搜索阶段,学习率相当大而且几乎不怎么减小,在收敛阶段,学习率将逐步降为 $0$。
下式给出了学习率自适应调整的最简单形式:
$$\mu(k)=\dfrac{\mu_0}{1+\frac{k}{\tau}}$$
在上式中,$\mu_0 > 0,\tau >> 1$,在实践中,我们通常让 $100\leq \tau \leq 500$。如果适当地选择这两个参数,LMS 算法的收敛速度可以得到极大的改进,理想情况下,$\mu_0$ 应该在允许的范围内取较大的值。

**LMS 算法的小结**
1.设 $k=1$,初始化突触权值向量 $w$,为 $\mu_0,\tau$ 选值。
2.计算学习率参数 $\mu(k)=\dfrac{\mu_0}{1+\frac{k}{\tau}}$。
3.计算误差 $e(k)=d(k)-\sum_{h=1}^nw_h(k)x_h(k)$。
4.更新突触权值 $w_i(k+1)=w_i(k)+\mu(k)e(k)x_i(k),\forall 1\leq i\leq n$。
5.如果收敛则停止算法,否则 $k$ 自增,转到步骤 $2$。
原书在这里有个实验,但是挺无聊的,我就不搬了。
#### 2.5.2 自适应线性单元
Adaline 是利用 LMS 算法训练的**自适应模式分类网络**,是许多神经网络使用到的**基本构件块**。
下图为 Adaline 的结构:

可以看出该网络**由线性组合器和对称硬限幅器串联而成**。
在网络训练期间,由期望输出和线性组合器输出的误差称为**线性误差**,它是前面讨论的 LMS 方法的基础。描述误差的另外方法是采用期望输出和对称硬限幅器的输出的差异,这个误差被称为**量化器误差**,它是感知器学习规则的基础。因此,Adaline 和感知器十分相似,在 2.6 节将讨论它们的不同。
在 Adaline 训练期间,输入向量 $x=[1,x_1,x_2,...,x_n]$ (第一个 $1$ 表示偏置系数)和相应目标(期望输出)提交给网络。根据线性 LMS 算法,突触权值 $w$ 将自适应地改变。
在训练 Adaline 之后,对网络输入一个向量将导致一个标量输出。**因此,网络实际上是一个 $n$ 维向量空间向标量的映射**,这也是我们在第一章所描述的“函数”概念。
在 Adaline 训练期间,没有用到激活函数。因此其训练等同于自适应线性组合器的训练过程,**对称硬限幅器仅在训练了 Adaline 之后才使用**。
一旦适当地调整了权值,可以利用在训练阶段没有用过的各种输入测试神经元的响应,**若 Adaline 的响应与实际输出以很高的概率相容,则可以说产生了“泛化”**。
训练和泛化是 Adaline 两个非常重要的属性,一般来说对于任何神经网络也一样。
Adaline 的一个常见应用是少部分逻辑函数的实现,如 $\land,\lor,\lnot$,甚至 $\text{MAJ}$(多数)逻辑函数。**只有这些线性可分的逻辑函数能利用单个 Adaline 实现**。其中,三个逻辑函数在数学上可如此表示:
$$y=\text{sgn}[(\sum_{j=1}^nx_j)+1-n]=\text{AND}(x_1,x_2,...,x_n)=
\begin {cases}
+1 & \text{若所有} x_j=+1 \\
-1 & \text{otherwise} \\
\end {cases} $$
$$y=\text{sgn}[(\sum_{j=1}^nx_j)+n-1]=\text{OR}(x_1,x_2,...,x_n)=
\begin {cases}
+1 & \text{若有} x_j=+1 \\
-1 & \text{otherwise} \\
\end {cases} $$
$$y=\text{sgn}[(\sum_{j=1}^nx_j)]=\text{MAJ}(x_1,x_2,...,x_n)=
\begin {cases}
+1 & \text{若} x_j=+1 \text{为大多数} \\
-1 & \text{otherwise} \\
\end {cases} $$
这里本应该有这三个逻辑函数的示意图,但是我觉得这实在太过直观,就不放了。
**线性可分性:**
当提交一个输入模式时,Adaline 产生 $-1$ 或 $1$ 的输出。**从而,Adaline 充当将所有可能输入分成两类的分类器**。
我们给出一个只有两个输入外加一个偏置的 Adaline 来具体观察该性质:

在该神经元中,线性组合器的输出可表示为:
$$v(k)=w_1(k)x_1(k)+w_2(k)x_2(k)+w_0(k)$$
由于 $v(k)$ 的符号决定了硬限幅器的输出,所以此分类的边界线被定义为:
$$v(k)=0$$
即:
$$v(k)=w_1(k)x_1(k)+w_2(k)x_2(k)+w_0(k)=0$$
可写作:
$$x_2(k)=-\dfrac{w_1(k)}{w_2(k)}x_1(k)-\dfrac{w_0(k)}{w_2(k)}$$
发现这个式子可以表示为两个输入组成的平面上的一条直线,如下图所示:

从上图可以看出,直线把输入空间分割成了两个域,所有处在统一区域的输入向量会被分在同一类,不是 $1$ 就是 $-1$。若输入向量是三维的,那么区域会被平面分割,如果维度大于三,则边界就是超平面。**一般来说,Adaline 代表线性分类器,因此 Adaline 的应用限制在输入模式是线性可分离的**。
为了说明这一点,考虑下图的例子:

假设训练的网络需要对上图所示的分离边界表示的输入空间进行分离。**在这种情况下,由于边界不是直线,则不存在线性可分,故单个 Adaline 不能完成该任务。**
为了解决非线性可分离的模式分类问题,Adaline 的输入可由固定非线性进行**预处理**。有用的非线性包括多项式函数预处理网络输入。
考虑下图所示的具有二维输入的网络:

在这种情况下,输入到对称硬限幅器的信号可表示为:
$$v(k)=w_0(k)+w_1(k)x_1^2+w_2(k)x_1+w_3(k)x_1x_2+w_4(k)x_2+w_5(k)x_2^2$$
这篇博客的笔者认为这本质是通过升维来解决对于目前维度过于复杂的非线性问题。
如下图所示,这个条件表示二维输入空间的椭圆,也是 $\text{XNOR}$ 问题的解。

通过引入输入层的非线性,产生了非直线的分离边界。因此,若恰当选择非线性,可以训练网络将输入空间分割成两个非线性可分离子空间。**通常,具有非线性变换输入的 Adaline 可以使用与训练线性 Adaline 一样的方式进行。**
**线性误差修正规则:**
对于 Adaline,有两个基本的线性修正规则用来自适应调整网络的突触权值,分别称为 $\mu-\text{LMS}$ 和 $\alpha-\text{LMS}$。对于这些线性修正规则,网络权值的改变与线性组合器的输出和期望的输出的差成比例。
其中 $\mu-\text{LMS}$ 等同于我们前文介绍过的简单自适应线性组合器学习规则,**而 $\alpha-\text{LMS}$ 可以被视为 $\mu-\text{LMS}$ 的自适应正规化形式**(正规化指将一组数据挤压到值域 $[0,1]$ 内)。根据其更新网络的权值为:
$$w(k+1)=w(k)+\alpha \dfrac{e(k)x(k)}{\sum_{i=1}^n x_i(k)^2}$$
其中 $\sum_{i=1}^n x_i(k)^2$ 被称为**正则化项**。
对比两种学习规则,你会发现两个学习规则唯一不同点在于正规化项。然而,对于两种学习规则的机理解释则是**完全不同**的。
$\alpha-\text{LMS}$ 学习规则是依照**最小化扰动原理**设计的,具体来说,为了恰当响应新的输入模式而调整时,前面的训练模式的平均响应扰动程度最小。
因此,$\mu-\text{LMS}$ 建立在 **MSE 曲面的最小化**,而 $\alpha-\text{LMS}$ 更新权值是**为了减小当前误差**。
为了阐明这一点,对于 $\alpha-\text{LMS}$,改变 $w$ 对**当前误差**的改变可以写为:
$$\Delta e(k) = e(k+1) - e(k) = [d(k)-w(k+1)^Tx(k)]-e(k)$$
$$=\{d(k)-[w^T(k)+\alpha \dfrac{e(k)x(k)}{\sum_{i=1}^n x_i(k)^2}]x(k)\}-e(k)$$
$$=[e(k)-\alpha \dfrac{e(k)x^T(k)x(k)}{\sum_{i=1}^n x_i(k)^2}]-e(k)=-\alpha e(k)$$
我们由此发现 $\alpha=-\dfrac{\Delta e(k)}{e(k)}$,**它代表了误差相对变化或是训练过程每一步修正的当前部分的误差**。$\alpha$ 的选择控制稳定度和收敛速度,$\alpha$ 通常的设置范围为:
$$0.1<\alpha<1$$
由于 $\alpha-\text{LMS}$ 算法中 $\alpha$ 参数的选择不依赖于网络输入的范围,从这个角度上来说它是**自正则化**的。
当输入是双极值 $[-1,1]$ 时,正规化项等于权值数目,且不随输入模式的变化而变化。然而,若输入是二值 $[0,1]$ 时,对于这些具有零输入的权值不会发生调整,但是对于双极值输入,所有网络权值每次循环均调整,且**收敛速度趋于更快,因此,双极值输入模式一般常用**。
**如果你的输入已经经过了正规化,那么两种学习规则是数学上本质相同的。**
虽然 $\alpha$ 方法相较于 $\mu$ 方法在实现上更复杂,但是当网络权值梯度噪声水平(梯度估计与实际梯度之间的差异)比较大的时候,**可以证明会有更快的收敛**。
然而,可以证明 $\mu$ 方法具有**收敛到 MSE 曲面的最小点的优点**,而 $\alpha$ 方法对于非双极值输入**在均值意义下收敛到最小二乘解的近似值**。
**非线性权值修正规则:**
**已经证明在某些情况下,前面给出的线性权值修正规则不能用来分离某些线性可分离的训练模式**,当出现这种情况时,使用非线性学习规则有助于训练。我们将在 2.6 节讨论学习规则的这些类型。
**笔者注:这其实是很容易理解的,因为 Adaline 的训练和自适应简单线性组合器完全相同,它的训练只关心使线性误差的平方的平均值最小而不是使得答案误差的平方的平均值最小,但这种解有可能会导致一些模式没有被正确分类,下面笔者将举出一个例子来说明:**
考虑一个只有一个突触的 Adaline,即输入一个标量输出一个标量,此时权值 $w$ 为一个标量,那么显然有:
$$v(k)=x(k)w(k)+\theta(k)$$
然后我们现在有两种类型的输入和期望,每次迭代时收到任意一种类型的概率均为 $50\%$。
我们设 $\epsilon\rightarrow 0,\epsilon>0$。
第一种的输入为 $1-\epsilon$,期望输出为 $-\epsilon$。
第二种的输入为 $1$,期望输出为 $10^9$。
那么此时最优的解之一为: $w=5\times 10^8,\theta=0$,实际上只要 $w+\theta = 5\times 10^8$ 即可,但是如果在此基础上套上对称硬限幅器进行分类,**会发现所有的输入均会被分到第二种,正确率和随机回答是一样的**,但这个问题显然是线性可分类的,**出现这种问题是因为训练时的权值误差与我们衡量答案准确率的值不匹配,乘上了一个错误的权值**。
#### 2.5.3 多重自适应线性单元
我们在上一节已经阐述,除非使用输入的非线性变换,否则单个 Adaline 不能解决分离边界是非线性的输入空间分离问题。
解决非线性分离问题的方法之一是应用 Madaline(多重 Adaline)网络。
Madaline 的基本结构是几个 Adaline 组成的**单一前馈组织**构成。
Madaline 的基本类型有两种:成为 Madaline I 和 Madaline II。Madaline I 是最先被 Widrow 和 Hoff 引入的**单层网络**。
下图所示为 Madaline I 的结构:

Madaline II 是具有多输出的多层网络,如下图所示:

我们需要在此定义一下多层网络的层数,**它的意义是拥有处理单元的总层数,因此,在计算多层网络的总层数的时候不考虑输入层**,上图的层数为二。
显然,对于 Madaline I,我们可以通过设置其参数令其拥有**若干条线性边界线**,可以实现 XNOR 等逻辑函数的功能:

接下来我们来讨论一下 Madaline 的学习策略。
调整 Madaline 权值有两个基本学习策略。
第一个是 MRI 规则,它是 Madaline I 权值自适应的学习策略,权值更新算法将调整权值,**修正相对于期望响应 $d$ 的输出 $y$**。网络权值最初是随机设置的。此学习策略有许多不同的变化,如”绝对修正学习“(或快速学习)和”$\alpha-\text{LMS}$ 算法统计学习“(或慢速学习)。**其基本思想是调整线性输出 $v_j(k)$ 最接近 $0$ 的权值,因为这些权值反转输出响应只需要最小的权值变化**。
一般来说,我们**仅仅会调整必须的神经元**,在这个意义下 MRI 遵循最小扰动原则。**使用 MRI 算法有可能会使模型困在局部最小值上**。
第二个基本学习策略是 MRII,是 MRI 的扩展。它用来调整 Madaline II 的权值。最初权值同样随机,**训练模式以随机方式提出**。**以最小化训练集上的平均汉明误差为目标**。
同样的,MRII 算法也可能会导致模型困在局部最小值。
**这些学习策略不够好的原因是缺乏通过结构反向传播误差的能力**,这种结构可以用于调整网络权值,我们在第三章将详细地讨论反向传播算法。
### 2.6 简单感知器
前文中的图 2-19 (**自适应线性单元**)就可以被视作简单感知器。

区别在于,**我们使用量化器误差 $\tilde{e}(k)$ 而非线性误差 $e(k)$ 作为训练依据**。
学术界之后探讨了感知器的局限性,**最重要的一个就是它不能解决异或(XOR)问题**,尽管后来证实只要有恰当的处理层,它可以解决 XOR 问题,但是这对于感知器和神经网络的打击是巨大的。
标准的感知器学习规则如下:
$$w(k+1)=w(k)+\alpha \dfrac{\tilde{e}(k)}{2}x(k)$$
其中量化器误差:
$$\tilde{e}(k)=d(k)-y(k)$$
**与 Adaline 的学习规则不同,已经证明感知器学习规则可以分离任何线性可分离的训练模式。**
#### 2.6.1 Mays 感知器学习规则
Mays 提出了标准感知器学习规则的两个修正算法。这两个修正算法都使用所谓的“死亡区”,在零点附近 $\pm \gamma$。若线性组合器的幅度小于 $\gamma$,即 $|v(k)|<\gamma$,**则我们称线性组合器的输出 $v(k)$ 在“死亡区”内。**
Mays 的权值自适应算法可以总结如下:
**Mays 的增量自适应算法**
$$
w(k+1) =
\begin {cases}
w(k)+\alpha \tilde{e}(k)\dfrac{x(k)}{2\sum_{i=1}^n x_i(k)^2} & |v(k)| \geq \gamma \\
w(k)+\alpha d(k)\dfrac{x(k)}{\sum_{i=1}^n x_i(k)^2} & \text{otherwise}\\
\end {cases}
$$
如果死亡区 $\gamma=0$,则该算法会退化为感知器学习规则的标准形式。
若训练模式线性可分,Mays 已经证明该算法总是收敛的,能在有限步内分离模式。
**对于训练模式是非线性可分的情形,由于死亡区的原因,它通常会比标准形式更好**。
足够大的死亡区将导致权值向量的自适应远离零,并且停留在一个具有相对低的平均误差的区域。
对于标准感知器学习规则,非线性可分离输入模式导致训练无法终结,且常常无法产生低误差解。**而死亡区降低了权值对于误差的敏感性**。
**Mays 的修正松弛算法**
$$
w(k+1) =
\begin {cases}
w(k)& (|v(k)| \geq \gamma) \land (\tilde{e}(k)=0) \\
w(k)+\alpha e(k)\dfrac{x(k)}{\sum_{i=1}^n x_i(k)^2} & \text{otherwise}\\
\end {cases}
$$
注意到此式使用了线性误差。
这个学习规则与以前用于 Adaline 的 $\alpha-\text{LMS}$ 算法看上去十分相似,当 $\gamma \rightarrow \inf$ 时,该算法等同于标准感知器学习规则。
对于条件 $0 < \gamma < 1,0<\alpha\leq 2$,该算法保证收敛性,**并且在有限步内分离任何线性可分离输入模式**。
**对于非线性可分离的输入模式,其与 Mays 的增量自适应算法的效果相似**。
#### 2.6.2 具有 S 形激活函数的简单感知器
前面关于训练简单感知器的讨论均没有涉及**基于定义的性能度量的学习策略**。
下面考虑用 S 型激活函数代替对称硬限幅器的简单感知器:

仿照此前的 LMS 算法,在这种情况下的感知器学习规则以**最速下降方法**为基础,最优化瞬时性能函数,从基于 MSE 的性能度量导出用于调整网络权值的学习规则:
$$J(w_q)=\dfrac{1}{2}E\{\tilde{e}_q^2(k)\}$$
最小化的瞬时性能函数给出为:
$$J(w_q)=\dfrac{1}{2}E\{\tilde{e}_q^2(k)\}=\dfrac{1}{2}[d_q(k)-y_q(k)]^2=\dfrac{1}{2}[d_q^2(k)-2d_q(k)y_q(k)+y_q^2(k)]$$
其中
$$y_q(k)=f[v_q(k)]=f[x^T(k)w_q(k)+\theta_q]$$
假定 S 形激活函数为双曲正切 S 形函数,因此,上图的神经元输出可写作:
$$y_q(k)=\tanh[\alpha v_q(k)]$$
根据我们在 2.3 节讲过的内容,该激活函数关于 $v_q$ 的导数:
$$g[v_q(k)]=f'[v_q(k)]=\alpha\{1-f^2[v_q(k)]\}$$
综上,目前该感知器采用最速下降方法有如下形式:
$$w_q(k+1)=w_q(k)-\mu\nabla _w J(w_q)$$
计算其梯度:
$$\nabla_wJ(w_q)=-d_q(k)f'[v_q(k)]x(k)+f[v_q(k)]f'[v_q(k)]x(k)$$
$$=\{-d_q(k)+f[v_q(k)]f'[v_q(k)]x(k)\}$$
$$=-\tilde{e}_q(k)f'[v_q(k)]x(k)$$
我们将 $'[v_q(k)]=\alpha\{1-f^2[v_q(k)]\}$ 带入上式,得到:
$$\nabla_wJ(w_q)=-\alpha\tilde{e}_q(k)\{1-f^2[v_q(k)]x(k)\}=-\alpha \tilde{e}_q(k)[1-y_q^2(k)]x(k)$$
依据此梯度,我们可以写出离散时间学习规则:
$$w_q(k+1)=w_q(k)+\mu\alpha \tilde{e}_q(k)[1-y_q^2(k)]x(k)$$
标量形式我相信大家都会写,我就不写了。
**总之,上式就是反向传播训练算法的标准形式**。
该算法将在第三章中扩展到前馈多层感知器。
**例 2.2**
我们将使用本小节所示的具有 S 形激活函数的简单感知器来学习一个字母 E,该图像由 $25$ 个像素组成,即一个 $5\times 5$ 布尔矩阵,他也可以表示为一个 $25\times 1$ 的布尔向量:

使用之前所讲的感知器学习规则,设 $\alpha=1,\mu=0.25$。期望的神经元响应设置为 $d=0.5$。$10^{-8}$ 为终止训练的误差目标。
神经元的初始权值是随机的,在模型迭代 39 次后,神经元输出为 $y=0.50009$。下图显示了在训练过程中输出误差的情况:

**对字符识别采用神经计算方法的一个好处在于它可以接受有噪声的输入**。但是在这个例子中,可以证明:单个神经元不能矫正有噪声的输入。也就是说,它不具备单独矫正误差的能力。
例如:若修改 E 如图 2-31b 所示,此时模型会输出 $y=0.5204$。这看上去还可以,**但是简单感知器没有执行任何的误差矫正**。
如果进一步修改 E 到图 2-31c,则输出为 $y=0.6805$,这与 E 的真实目标相差更远,现在这个图像看上去更像字母 C。但是这仅仅是为了识别 E 而训练的神经元。**很明显,需要更多的神经元不仅仅是为了接受噪声,也是为了识别更多的字符**。这个可以通过多层感知器(3.3节)来实现。当我们研究 Hopfield 联想记忆(5.3节)时,将证明这个递归网络具有对提交给它的有噪声或不完整的输入进行补偿的能力,并且具备识别很多不同字符的能力。
### 2.7 前馈多层感知器

上图给出了一个具有三层的标准前馈多层感知器。