监督学习
顾名思义,监督学习是在老师的监督下进行的。这个学习过程是依赖的。在监督学习下训练ANN时,输入向量被呈现给网络,网络将产生一个输出向量。这个输出向量与期望/目标输出向量进行比较。如果实际输出和期望/目标输出向量之间存在差异,则会产生误差信号。在此误差信号的基础上,将调整权重,直到实际输出与期望输出匹配。
感知器
感知器是由Frank Rosenblatt利用McCulloch和Pitts模型开发的,是人工神经网络的基本操作单元。它采用监督学习规则,能够将数据分为两类。
感知器的操作特性:它由一个具有任意数量输入以及可调权重的单个神经元组成,但神经元的输出为 1 或 0,具体取决于阈值。它还包含一个权重始终为 1 的偏差。下图给出了感知器的示意图。
因此,感知器具有以下三个基本元素 −
链接 − 它将具有一组连接链接,这些链接带有权重,其中包括始终具有权重 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 到 n 和 j = 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 的基本结构类似于感知器,具有额外的反馈回路,借助该回路将实际输出与期望/目标输出进行比较。在训练算法的基础上进行比较后,权重和偏差将被更新。
训练算法
步骤 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 和 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 ≠ t 且 t = 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 ≠ t 且 t = -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 的工作分为两个阶段。一个阶段将信号从输入层发送到输出层,另一个阶段将误差从输出层反向传播到输入层。
训练算法
对于训练,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}$$