Artificial Neural Network 简明教程
Supervised Learning
顾名思义,{s0} 在教师的监督下进行。此学习过程是相依的。在受监督学习中训练 ANN 期间,将输入向量提供给网络,该网络会产生一个输出向量。将该输出向量与所需/目标输出向量进行比较。如果实际输出和所需的/目标输出向量之间存在差异,则会生成一个误差信号。在该误差信号的基础上,将调整权重,直到实际输出与所需的输出匹配。
Perceptron
由 Frank Rosenblatt 使用 McCulloch 和 Pitts 模型开发的感知器是人工神经网络的基本操作单元。它使用受监督的学习规则,并且能够将数据分类为两个类。
感知器的操作特征:它包含一个神经元,该神经元具有任意数量的输入和可调整权重,但神经元的输出根据阈值确定为 1 或 0。它还包含一个偏差,其权重始终为 1。下图给出了感知器的示意图表示。
因此,感知器具有以下三个基本元素 −
-
Links − 它有一组连接链接,其携带一个权重,其中偏置始终具有权重 1。
-
Adder − 它在将输入与各自的权重相乘后对其进行相加。
-
Activation function − 它限制神经元的输出。最基本的激活函数是 Heaviside 阶跃函数,它有两个可能的输出。如果输入为正,则该函数返回 1,如果任何负输入,则返回 0。
Training Algorithm for Single Output Unit
Step 1 − 初始化以下内容以启动训练 −
-
Weights
-
Bias
-
Learning rate $\alpha$
为了便于计算和简化,权重和偏差必须设置为 0,而学习率必须设置为 1。
Step 2 − 当停止条件不成立时,继续执行步骤 3-8。
Step 3 − 对每个训练向量 x 继续执行步骤 4-6。
Step 4 − 如下激活每个输入单元 −
x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)
Step 5 − 现在,使用以下关系获取净输入 −
y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}.\:w_{i}
其中 ‘b’ 为偏差, ‘n’ 为输入神经元的总数。
Step 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}
Step 7 − 如下调整权重和偏差 −
Case 1 − 如果 y ≠ t ,那么
w_{i}(new)\:=\:w_{i}(old)\:+\:\alpha\:tx_{i}
b(new)\:=\:b(old)\:+\:\alpha t
Case 2 − 如果 y = t ,那么
w_{i}(new)\:=\:w_{i}(old)
b(new)\:=\:b(old)
其中 ‘y’ 为实际输出, ‘t’ 为期望/目标输出。
Step 8 − 测试停止条件,即当权重无变化时发生。
Training Algorithm for Multiple Output Units
以下图表为多输出类别的感知器的架构。
Step 1 − 初始化以下内容以启动训练 −
-
Weights
-
Bias
-
Learning rate $\alpha$
为了便于计算和简化,权重和偏差必须设置为 0,而学习率必须设置为 1。
Step 2 − 当停止条件不成立时,继续执行步骤 3-8。
Step 3 − 对每个训练向量 x 继续执行步骤 4-6。
Step 4 − 如下激活每个输入单元 −
x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)
Step 5 - 使用以下关系来获得净输入 -
y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{ij}
其中 ‘b’ 为偏差, ‘n’ 为输入神经元的总数。
Step 6 - 应用以下激活函数来获取每个输出单元的最终输出 j = 1 to 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}
Step 7 - 如下方式为 x = 1 to n 和 j = 1 to m 调整权值和偏差 -
Case 1 - 如果 yj ≠ tj 则,
w_{ij}(new)\:=\:w_{ij}(old)\:+\:\alpha\:t_{j}x_{i}
b_{j}(new)\:=\:b_{j}(old)\:+\:\alpha t_{j}
Case 2 - 如果 yj = tj 则,
w_{ij}(new)\:=\:w_{ij}(old)
b_{j}(new)\:=\:b_{j}(old)
其中 ‘y’ 为实际输出, ‘t’ 为期望/目标输出。
Step 8 - 当权值没有改变时,测试终止条件。
Adaptive Linear Neuron (Adaline)
Adaline 的全称为自适应线性神经元,是一个具有单个线性单元的神经网络。它是由 Widrow 和 Hoff 在 1960 年开发的。关于 Adaline 的一些重要事项如下 -
-
它使用双极激活函数。
-
它使用 delta 规则进行训练来最小化实际输出和期望/目标输出之间的均方误差 (MSE)。
-
权值和偏差是可调的。
Training Algorithm
Step 1 − 初始化以下内容以启动训练 −
-
Weights
-
Bias
-
Learning rate $\alpha$
为了便于计算和简化,权重和偏差必须设置为 0,而学习率必须设置为 1。
Step 2 − 当停止条件不成立时,继续执行步骤 3-8。
Step 3 - 对每个双极训练对继续进行步骤 4-6 s:t 。
Step 4 − 如下激活每个输入单元 −
x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)
Step 5 - 使用以下关系来获得净输入 -
y_{in}\:=\:b\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{i}
其中 ‘b’ 为偏差, ‘n’ 为输入神经元的总数。
Step 6 − 使用以下激活函数获得最终输出 −
f(y_{in})\:=\:\begin{cases}1 & 若 y_{in}\:\geqslant\:0 \\-1 & 若 y_{in}\:<\:0 \end{cases}
Step 7 − 如下调整权重和偏差 −
Case 1 − 如果 y ≠ t ,那么
w_{i}(new)\:=\:w_{i}(old)\:+\: \alpha(t\:-\:y_{in})x_{i}
b(new)\:=\:b(old)\:+\: \alpha(t\:-\:y_{in})
Case 2 − 如果 y = t ,那么
w_{i}(new)\:=\:w_{i}(old)
b(new)\:=\:b(old)
其中 ‘y’ 为实际输出, ‘t’ 为期望/目标输出。
$(t\:-\;y_{in})$ 为计算所得的误差。
Step 8 − 测试停止条件,当权重没有变化或训练过程中的最高权重变化小于指定容差时会发生。
Multiple Adaptive Linear Neuron (Madaline)
Madaline 即多级自适应线性神经元,是一个由多个以并行方式连接的 Adaline 神经元组成的网络。它将只有一个输出单元。以下为关于 Madaline 的一些重要要点:
-
它就像一个多层感知器,其中 Adaline 神经元会在输入层与 Madaline 层之间充当隐藏单元。
-
如我们在 Adaline 架构中所看到的,输入层与 Adaline 层之间的权重和偏差是可以调节的。
-
Adaline 层和 Madaline 层具有固定的权重和偏差,均为 1。
-
训练可以通过 Delta 规则完成。
Architecture
Madaline 的架构包含 “n” 个输入层神经元、 “m” 个 Adaline 层神经元和 1 个 Madaline 层神经元。由于 Adaline 层位于输入层和输出层(即 Madaline 层)之间,因此可以将其视为一个隐藏层。
Training Algorithm
目前我们已经知道,只有输入层与 Adaline 层之间的权重和偏差需要调节,而 Adaline 层与 Madaline 层之间的权重和偏差是固定的。
Step 1 − 初始化以下内容以启动训练 −
-
Weights
-
Bias
-
Learning rate $\alpha$
为了便于计算和简化,权重和偏差必须设置为 0,而学习率必须设置为 1。
Step 2 − 当停止条件不成立时,继续执行步骤 3-8。
Step 3 − 针对每对双极训练数据执行步骤 4-7 s:t 。
Step 4 − 如下激活每个输入单元 −
x_{i}\:=\:s_{i}\:(i\:=\:1\:to\:n)
Step 5 − 使用以下关系获取每个隐藏层(即 Adaline 层)的净输入:
Q_{inj}\:=\:b_{j}\:+\:\displaystyle\sum\limits_{i}^n x_{i}\:w_{ij}\:\:\:j\:=\:1\:to\:m
其中 ‘b’ 为偏差, ‘n’ 为输入神经元的总数。
Step 6 − 使用以下激活函数获取 Adaline 层和 Madaline 层的最终输出:
f(x)\:=\:\begin{cases}1 & 若 x\:\geqslant\:0 \\-1 & 若 x\:<\:0 \end{cases}
隐层(Adaline)输出单元的输出
Q_{j}\:=\:f(Q_{inj})
网络最终输出
y\:=\:f(y_{in})
i.e. $\:\:y_{inj}\:=\:b_{0}\:+\:\sum_{j = 1}^m\:Q_{j}\:v_{j}$
Step 7 − 按如下方式计算误差并调整权重 −
Case 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 处更新,因为 t = 1 ,净输入接近 0。
Case 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’ 为期望/目标输出。
Case 3 − 如果 y = t 则,
权重不会发生任何变化。
Step 8 − 测试停止条件,当权重没有变化或训练过程中的最高权重变化小于指定容差时会发生。
Back Propagation Neural Networks
反向传播神经(BPN)是一个多层次神经网络,包含输入层、至少一个隐层和输出层。如同它的名称所暗示的,这种网络会发生反向传播。在输出层计算的误差,通过比较目标输出和实际输出,将会反向传播到输入层。
Architecture
如该图表所示,BPN 的架构具有三个相互连接的层,在这些层上具有权重。隐层和输出层也具有偏置,其权重始终为 1。显然,BPN 的工作分为两个阶段。一个阶段将信号从输入层传送到输出层,另一个阶段将误差从输出层反向传播到输入层。
Training Algorithm
对于训练,BPN 将使用二进制 S 形激活函数。BPN 的训练将具有如下三个阶段。
-
Phase 1 − 前馈阶段
-
Phase 2 − 误差的反向传播
-
Phase 3 − 权重的更新
所有这些步骤将在算法中按如下所示总结
Step 1 − 初始化以下内容以启动训练 −
-
Weights
-
Learning rate $\alpha$
为方便计算和简便起见,采用一些较小的随机值。
Step 2 − 当停止条件不成立时,继续执行步骤 3-11。
Step 3 − 对于每个训练对,继续执行步骤 4-10。
Phase 1
Step 4 − 每个输入单元接收输入信号 xi 并将其发送给所有 i = 1 to n 的隐藏单元
Step 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})
将隐藏层单元的这些输出信号发送到输出层单元。
Step 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})
Phase 2
Step 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}$ 传回隐藏层。
Step 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}
Phase 3
Step 9 − 每个输出单元 (ykk = 1 to m) 按照如下方式更新权重和偏差 −
v_{jk}(new)\:=\:v_{jk}(old)\:+\:\Delta v_{jk}
b_{0k}(new)\:=\:b_{0k}(old)\:+\:\Delta b_{0k}
Step 10 − 每个输出单元 (zjj = 1 to p) 按照如下方式更新权重和偏差 −
w_{ij}(new)\:=\:w_{ij}(old)\:+\:\Delta w_{ij}
b_{0j}(new)\:=\:b_{0j}(old)\:+\:\Delta b_{0j}
Step 11 − 检查停止条件,该条件可能是达到时期数或目标输出与实际输出匹配。
Generalized Delta Learning Rule
Delta 规则仅适用于输出层。另一方面,广义 Delta 规则,也称为 back-propagation 规则,是一种创建隐藏层期望值的方法。
Mathematical Formulation
对于激活函数 $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}}
对于隐藏单元 −
\Delta v_{ij}\:=\:-\alpha\frac{\partial E}{\partial v_{ij}}
=\:\alpha\:\delta_{j}\:x_{i}
这类神经网络基于模式关联,这意味着它们能够存储不同的模式,并且在给出输出时,它们可以通过与给定的输入模式进行匹配来生成一个存储的模式。这类内存也称为 Content-Addressable Memory (CAM)。联想式内存将存储的模式作为数据文件进行并行搜索。