监督学习

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

感知器

感知器是由Frank Rosenblatt利用McCulloch和Pitts模型开发的,是人工神经网络的基本操作单元。它采用监督学习规则,能够将数据分为两类。

感知器的操作特性:它由一个具有任意数量输入以及可调权重的单个神经元组成,但神经元的输出为 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}\:>\: heta\0 & if \: - heta\:\leqslant\:y_{in}\:\leqslant\: heta\-1 & if\:y_{in}\:<\:- heta \end{cases}$$

步骤 7 − 调整权重和偏差如下 −

案例 1 − if 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 −测试停止条件,当权重没有变化时会发生这种情况。

多输出单元的训练算法

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

训练算法

步骤 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}\:>\: heta\0 & if \: - heta\:\leqslant\:y_{inj}\:\leqslant\: heta\-1 & if\:y_{inj}\:<\:- heta \end{cases}$$

步骤 7 − 调整 x = 1 到 nj = 1 到 m 的权重和偏差,如下所示 −

情况 1 − if yj ≠ tj 然后,

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

$$b_{j}(新)\:=\:b_{j}(旧)\:+\:\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 to m) 更新权重和偏差,如下所示 −

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

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

步骤 10 −每个输出单元 (zjj = 1 to p) 按照以下方式更新权重和偏差 −

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

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

步骤 11 − 检查停止条件,可能是达到的 epoch 数,也可能是目标输出与实际输出匹配。

广义 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 group$$

$$=\:-[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}$$