监督神经网络



顾名思义,监督学习是在教师的监督下进行的。这个学习过程是依赖性的。在监督学习下训练ANN时,将输入向量呈现给网络,网络将产生一个输出向量。将此输出向量与所需的/目标输出向量进行比较。如果实际输出与所需的/目标输出向量之间存在差异,则会生成错误信号。根据此错误信号,将调整权重,直到实际输出与所需输出匹配。

感知器

感知器是由弗兰克·罗森布拉特使用麦卡洛克-皮茨模型开发的,是人工神经网络的基本操作单元。它采用监督学习规则,能够将数据分类为两类。

感知器的操作特性:它由一个具有任意数量输入的神经元以及可调节的权重组成,但神经元的输出取决于阈值,为1或0。它还包括一个偏差,其权重始终为1。下图给出了感知器的示意图。

Perceptron

因此,感知器具有以下三个基本元素:

  • 连接 - 它将有一组连接链接,这些链接携带权重,包括一个始终权重为1的偏差。

  • 加法器 - 它在输入乘以各自的权重后对它们进行加法。

  • 激活函数 - 它限制神经元的输出。最基本的激活函数是具有两种可能输出的Heaviside阶跃函数。如果输入为正,则此函数返回1,对于任何负输入则返回0。

训练算法

感知器网络可以针对单个输出单元以及多个输出单元进行训练。

单个输出单元的训练算法

步骤1 - 初始化以下内容以开始训练:

  • 权重
  • 偏差
  • 学习率 $\alpha$

为了简便计算和简化,权重和偏差必须设置为0,学习率必须设置为1。

步骤2 - 当停止条件不为真时,继续执行步骤3-8。

步骤3 - 对于每个训练向量x,继续执行步骤4-6。

步骤4 - 按如下方式激活每个输入单元:

$$x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)$$

步骤5 - 现在使用以下关系获得净输入:

$$y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}.\:w_{i}$$

这里'b'是偏差,'n'是输入神经元的总数。

步骤6 - 应用以下激活函数以获得最终输出。

$$f(y_{in})\:=\:\begin{cases}1 & if\:y_{in}\:>\:\theta\\0 & if \: -\theta\:\leqslant\:y_{in}\:\leqslant\:\theta\\-1 & if\:y_{in}\:<\:-\theta \end{cases}$$

步骤7 - 按如下方式调整权重和偏差:

情况1 - 如果y ≠ t,则

$$w_{i}(new)\:=\:w_{i}(old)\:+\:\alpha\:tx_{i}$$

$$b(new)\:=\:b(old)\:+\:\alpha t$$

情况2 - 如果y = t,则

$$w_{i}(new)\:=\:w_{i}(old)$$

$$b(new)\:=\:b(old)$$

这里'y'是实际输出,'t'是所需的/目标输出。

步骤8 - 测试停止条件,当权重没有变化时将发生此条件。

多个输出单元的训练算法

下图是用于多个输出类的感知器架构。

Training Algorithm

步骤1 - 初始化以下内容以开始训练:

  • 权重
  • 偏差
  • 学习率 $\alpha$

为了简便计算和简化,权重和偏差必须设置为0,学习率必须设置为1。

步骤2 - 当停止条件不为真时,继续执行步骤3-8。

步骤3 - 对于每个训练向量x,继续执行步骤4-6。

步骤4 - 按如下方式激活每个输入单元:

$$x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)$$

步骤5 - 使用以下关系获得净输入:

$$y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{ij}$$

这里'b'是偏差,'n'是输入神经元的总数。

步骤6 - 应用以下激活函数以获得每个输出单元j = 1到m的最终输出:

$$f(y_{in})\:=\:\begin{cases}1 & if\:y_{inj}\:>\:\theta\\0 & if \: -\theta\:\leqslant\:y_{inj}\:\leqslant\:\theta\\-1 & if\:y_{inj}\:<\:-\theta \end{cases}$$

步骤7 - 按如下方式调整x = 1到nj = 1到m的权重和偏差:

情况1 - 如果yj ≠ tj,则

$$w_{ij}(new)\:=\:w_{ij}(old)\:+\:\alpha\:t_{j}x_{i}$$

$$b_{j}(new)\:=\:b_{j}(old)\:+\:\alpha t_{j}$$

情况2 - 如果yj = tj,则

$$w_{ij}(new)\:=\:w_{ij}(old)$$

$$b_{j}(new)\:=\:b_{j}(old)$$

这里'y'是实际输出,'t'是所需的/目标输出。

步骤8 - 测试停止条件,当权重没有变化时将发生此条件。

自适应线性神经元 (Adaline)

Adaline代表自适应线性神经元,是一个具有单个线性单元的网络。它由Widrow和Hoff于1960年开发。关于Adaline的一些要点如下:

  • 它使用双极激活函数。

  • 它使用delta规则进行训练,以最小化实际输出与所需/目标输出之间的均方误差 (MSE)。

  • 权重和偏差是可调节的。

架构

Adaline的基本结构类似于感知器,它具有一个额外的反馈循环,借助该循环,实际输出与所需的/目标输出进行比较。比较后,根据训练算法,将更新权重和偏差。

Architecture Adaptive Linear

训练算法

步骤1 - 初始化以下内容以开始训练:

  • 权重
  • 偏差
  • 学习率 $\alpha$

为了简便计算和简化,权重和偏差必须设置为0,学习率必须设置为1。

步骤2 - 当停止条件不为真时,继续执行步骤3-8。

步骤3 - 对于每个双极训练对s:t,继续执行步骤4-6。

步骤4 - 按如下方式激活每个输入单元:

$$x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)$$

步骤5 - 使用以下关系获得净输入:

$$y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{i}$$

这里'b'是偏差,'n'是输入神经元的总数。

步骤6 - 应用以下激活函数以获得最终输出:

$$f(y_{in})\:=\:\begin{cases}1 & if\:y_{in}\:\geqslant\:0 \\-1 & if\:y_{in}\:<\:0 \end{cases}$$

步骤7 - 按如下方式调整权重和偏差:

情况1 - 如果y ≠ t,则

$$w_{i}(new)\:=\:w_{i}(old)\:+\: \alpha(t\:-\:y_{in})x_{i}$$

$$b(new)\:=\:b(old)\:+\: \alpha(t\:-\:y_{in})$$

情况2 - 如果y = t,则

$$w_{i}(new)\:=\:w_{i}(old)$$

$$b(new)\:=\:b(old)$$

这里'y'是实际输出,'t'是所需的/目标输出。

$(t\:-\;y_{in})$是计算出的误差。

步骤8 - 测试停止条件,当权重没有变化或训练期间发生的最高权重变化小于指定的容差时,将发生此条件。

多自适应线性神经元 (Madaline)

Madaline代表多自适应线性神经元,是一个由许多Adaline并行组成的网络。它将有一个输出单元。关于Madaline的一些要点如下:

  • 它就像一个多层感知器,其中Adaline充当输入和Madaline层之间的隐藏单元。

  • 输入和Adaline层之间的权重和偏差(如我们在Adaline架构中看到的)是可调节的。

  • Adaline和Madaline层具有固定的权重和偏差1。

  • 可以使用Delta规则进行训练。

架构

Madaline的架构由输入层的“n”个神经元、Adaline层的“m”个神经元和Madaline层的1个神经元组成。Adaline层可以被认为是隐藏层,因为它位于输入层和输出层(即Madaline层)之间。

Adaline

训练算法

到目前为止,我们知道只有输入和Adaline层之间的权重和偏差需要调整,而Adaline和Madaline层之间的权重和偏差是固定的。

步骤1 - 初始化以下内容以开始训练:

  • 权重
  • 偏差
  • 学习率 $\alpha$

为了简便计算和简化,权重和偏差必须设置为0,学习率必须设置为1。

步骤2 - 当停止条件不为真时,继续执行步骤3-8。

步骤3 - 对于每个双极训练对s:t,继续执行步骤4-7。

步骤4 - 按如下方式激活每个输入单元:

$$x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)$$

步骤5 - 使用以下关系获得每个隐藏层(即Adaline层)的净输入:

$$Q_{inj}\:=\:b_{j}\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{ij}\:\:\:j\:=\:1\:to\:m$$

这里'b'是偏差,'n'是输入神经元的总数。

步骤6 - 应用以下激活函数以获得Adaline和Madaline层的最终输出:

$$f(x)\:=\:\begin{cases}1 & if\:x\:\geqslant\:0 \\-1 & if\:x\:<\:0 \end{cases}$$

隐藏(Adaline)单元的输出

$$Q_{j}\:=\:f(Q_{inj})$$

网络的最终输出

$$y\:=\:f(y_{in})$$

$\:\:y_{inj}\:=\:b_{0}\:+\:\sum_{j = 1}^m\:Q_{j}\:v_{j}$

步骤7 - 计算误差并调整权重如下:

情况1 - 如果y ≠ tt = 1,则

$$w_{ij}(new)\:=\:w_{ij}(old)\:+\: \alpha(1\:-\:Q_{inj})x_{i}$$

$$b_{j}(new)\:=\:b_{j}(old)\:+\: \alpha(1\:-\:Q_{inj})$$

在这种情况下,将更新Qj上的权重,其中净输入接近0,因为t = 1

情况2 - 如果y ≠ tt = -1,则

$$w_{ik}(new)\:=\:w_{ik}(old)\:+\: \alpha(-1\:-\:Q_{ink})x_{i}$$

$$b_{k}(new)\:=\:b_{k}(old)\:+\: \alpha(-1\:-\:Q_{ink})$$

在这种情况下,将更新Qk上的权重,其中净输入为正,因为t = -1

这里'y'是实际输出,'t'是所需的/目标输出。

情况3 - 如果y = t,则

权重不会发生变化。

步骤8 - 测试停止条件,当权重没有变化或训练期间发生的最高权重变化小于指定的容差时,将发生此条件。

反向传播神经网络

反向传播神经网络 (BPN) 是一种多层神经网络,由输入层、至少一个隐藏层和输出层组成。顾名思义,此网络将进行反向传播。通过比较目标输出和实际输出,在输出层计算出的误差将反向传播到输入层。

架构

如示意图所示,BPN的架构具有三个互连层,这些层上具有权重。隐藏层和输出层也具有偏差,其权重始终为1。从图中可以清楚地看出,BPN的工作分为两个阶段。一个阶段将信号从输入层发送到输出层,另一个阶段将误差从输出层反向传播到输入层。

Back Propogation

训练算法

为了进行训练,BPN将使用二进制S型激活函数。BPN的训练将包含以下三个阶段。

  • 阶段1 - 前馈阶段

  • 阶段2 - 误差的反向传播

  • 阶段3 - 权重的更新

所有这些步骤将在算法中总结如下

步骤1 - 初始化以下内容以开始训练:

  • 权重
  • 学习率 $\alpha$

为了简便计算和简化,请取一些小的随机值。

步骤2 - 当停止条件不为真时,继续执行步骤3-11。

步骤3 - 对于每个训练对,继续执行步骤4-10。

阶段1

步骤4 - 每个输入单元接收输入信号xi并将其发送到隐藏单元,对于所有i = 1到n

步骤5 - 使用以下关系计算隐藏单元的净输入:

$$Q_{inj}\:=\:b_{0j}\:+\:\sum_{i=1}^n x_{i}v_{ij}\:\:\:\:j\:=\:1\:to\:p$$

这里b0j是隐藏单元上的偏差,vij是来自输入层i单元的隐藏层j单元上的权重。

现在通过应用以下激活函数计算净输出

$$Q_{j}\:=\:f(Q_{inj})$$

将这些隐藏层单元的输出信号发送到输出层单元。

步骤6 - 使用以下关系计算输出层单元的净输入:

$$y_{ink}\:=\:b_{0k}\:+\:\sum_{j = 1}^p\:Q_{j}\:w_{jk}\:\:k\:=\:1\:to\:m$$

这里b0k⁡是输出单元上的偏差,wjk是来自隐藏层j单元的输出层k单元上的权重。

通过应用以下激活函数计算净输出

$$y_{k}\:=\:f(y_{ink})$$

阶段 2

步骤 7 − 计算误差修正项,对应于每个输出单元接收到的目标模式,如下所示 −

$$\delta_{k}\:=\:(t_{k}\:-\:y_{k})f^{'}(y_{ink})$$

在此基础上,更新权重和偏差,如下所示 −

$$\Delta v_{jk}\:=\:\alpha \delta_{k}\:Q_{ij}$$

$$\Delta b_{0k}\:=\:\alpha \delta_{k}$$

然后,将 $\delta_{k}$ 反馈到隐藏层。

步骤 8 − 现在每个隐藏单元将是来自输出单元的其增量输入之和。

$$\delta_{inj}\:=\:\displaystyle\sum\limits_{k=1}^m \delta_{k}\:w_{jk}$$

误差项可以计算如下 −

$$\delta_{j}\:=\:\delta_{inj}f^{'}(Q_{inj})$$

在此基础上,更新权重和偏差,如下所示 −

$$\Delta w_{ij}\:=\:\alpha\delta_{j}x_{i}$$

$$\Delta b_{0j}\:=\:\alpha\delta_{j}$$

阶段 3

步骤 9 − 每个输出单元 (ykk = 1 到 m) 更新权重和偏差,如下所示 −

$$v_{jk}(new)\:=\:v_{jk}(old)\:+\:\Delta v_{jk}$$

$$b_{0k}(new)\:=\:b_{0k}(old)\:+\:\Delta b_{0k}$$

步骤 10 − 每个隐藏单元 (zjj = 1 到 p) 更新权重和偏差,如下所示 −

$$w_{ij}(new)\:=\:w_{ij}(old)\:+\:\Delta w_{ij}$$

$$b_{0j}(new)\:=\:b_{0j}(old)\:+\:\Delta b_{0j}$$

步骤 11 − 检查停止条件,该条件可以是达到时期数或目标输出与实际输出匹配。

广义 Delta 学习规则

Delta 规则仅适用于输出层。另一方面,广义 Delta 规则,也称为反向传播规则,是一种创建隐藏层期望值的方法。

数学公式

对于激活函数 $y_{k}\:=\:f(y_{ink})$,隐藏层和输出层上的净输入的导数可以由以下公式给出

$$y_{ink}\:=\:\displaystyle\sum\limits_i\:z_{i}w_{jk}$$

以及 $\:\:y_{inj}\:=\:\sum_i x_{i}v_{ij}$

现在需要最小化的误差是

$$E\:=\:\frac{1}{2}\displaystyle\sum\limits_{k}\:[t_{k}\:-\:y_{k}]^2$$

利用链式法则,我们有

$$\frac{\partial E}{\partial w_{jk}}\:=\:\frac{\partial }{\partial w_{jk}}(\frac{1}{2}\displaystyle\sum\limits_{k}\:[t_{k}\:-\:y_{k}]^2)$$

$$=\:\frac{\partial }{\partial w_{jk}}\lgroup\frac{1}{2}[t_{k}\:-\:t(y_{ink})]^2\rgroup$$

$$=\:-[t_{k}\:-\:y_{k}]\frac{\partial }{\partial w_{jk}}f(y_{ink})$$

$$=\:-[t_{k}\:-\:y_{k}]f(y_{ink})\frac{\partial }{\partial w_{jk}}(y_{ink})$$

$$=\:-[t_{k}\:-\:y_{k}]f^{'}(y_{ink})z_{j}$$

现在假设 $\delta_{k}\:=\:-[t_{k}\:-\:y_{k}]f^{'}(y_{ink})$

连接到隐藏单元 zj 的权重可以由以下公式给出 −

$$\frac{\partial E}{\partial v_{ij}}\:=\:- \displaystyle\sum\limits_{k} \delta_{k}\frac{\partial }{\partial v_{ij}}\:(y_{ink})$$

代入 $y_{ink}$ 的值,我们将得到以下结果

$$\delta_{j}\:=\:-\displaystyle\sum\limits_{k}\delta_{k}w_{jk}f^{'}(z_{inj})$$

权重更新可以如下进行 −

对于输出单元 −

$$\Delta w_{jk}\:=\:-\alpha\frac{\partial E}{\partial w_{jk}}$$

$$=\:\alpha\:\delta_{k}\:z_{j}$$

对于隐藏单元 −

$$\Delta v_{ij}\:=\:-\alpha\frac{\partial E}{\partial v_{ij}}$$

$$=\:\alpha\:\delta_{j}\:x_{i}$$

广告