受人类神经系统启发,人工神经网络 是一种用于处理数据的网络,它包含三种类型的层,即输入层、隐藏层和输出层。基本的神经网络仅包含两层,即输入层和输出层。这些层之间通过加权路径连接,用于计算净输入数据。在这一部分,我们将讨论两种基本的神经网络类型:没有任何隐藏层的 Adaline 和只有一个隐藏层的 Madaline。
1. Adaline (自适应线性神经元)
- 只有一个线性单元的网络被称为 Adaline (Adaptive Linear Neural,自适应线性神经元)。具有线性激活函数的单元被称为线性单元。在 Adaline 中,只有一个输出单元,且输出值为双极性的 (+1, -1)。输入单元和输出单元之间的权重是可调的。它使用 Delta 规则,即 $w{i}(new)=w{i}(old) + \alpha(t-y{in})x{i}$,其中 $w{i}$、$y{in}$ 和 $t$ 分别是权重、预测输出值和真实值。
- 这种学习规则旨在最小化激活值与目标值之间的均方误差。Adaline 由可训练的权重组成,它将实际输出与计算输出进行比较,并根据计算出的误差应用训练算法。
#### 工作流程:
!Adaline Network-removebg-preview.jpg)Adaline 结构图
首先,计算 Adaline 网络的净输入,然后对其输出应用激活函数,接着将其与原始输出进行比较。如果两者相等,则直接输出;否则,将误差发送回网络,并根据通过 Delta 学习规则计算出的误差更新权重。即 $w{i}(new)=w{i}(old) + \alpha(t-y{in})x{i}$,其中 $w{i}$、$y{in}$ 和 $t$ 分别是权重、预测输出值和真实值。
架构:
!Adaline ArchitectureAdaline 架构图
在 Adaline 中,所有的输入神经元通过加权连接路径直接连接到输出神经元。存在一个激活函数为 1 的偏置 b。
算法:
步骤 1: 初始化权重,设为较小的随机值(不要设为零)。设定学习率 $\alpha$。
步骤 2: 当停止条件为 False 时,执行步骤 3 到 7。
步骤 3: 对每个训练集执行步骤 4 到 6。
步骤 4: 设置输入单元 $xi$ 的激活值为 $si$ (i=1 到 n)。
步骤 5: 计算输出单元的净输入
$$y{in} = \sum wix_i + b$$
这里,b 是偏置,n 是神经元的总数。
步骤 6: 更新权重和偏置 (i=1 到 n)
$$w{i}(new) = w{i}(old) + \alpha(t-y{in})x{i}$$
$$b(new)=b(old) + \alpha(t-y_{in})$$
并计算
误差:$(t-y_{in})^2$
当预测输出和真实值相同时,权重将不会改变。
步骤 7: 测试停止条件。停止条件可能是当权重变化率很低或不再变化时。
代码实现
问题:使用 Adaline 网络设计 OR 门?
解决方案:
- 最初,假设所有权重都是较小的随机值,例如 0.1,并将学习率设置为 0.1。
- 同时,设置最小平方误差为 2。
- 权重将被更新,直到总误差大于最小平方误差。
x2
—
1
-1
1
-1
- 计算净输入 $y{in} = \sum wi x_i + b$
$y_{in} = 0.1\times1 + 0.1\times1 +0.1 =0.3$ (当 x1=x2=1)
- 现在,计算 $(t-y_{in})=(1-0.3)=0.7$
- 现在,更新权重和偏置
$wi(new) = wi(old) + \alpha(t-y{in})xi$
$w_1(new) = 0.1 + 0.1(1-0.3)1 = 0.17$
$w_2(new) = 0.1 + 0.1(1-0.3)1 = 0.17$
$b(new)=b(old) + \alpha(t-y_{in})$
$b(new)= 0.1 + 0.1(1-0.3) = 0.17$
- 计算误差 $error = (t-y_{in})^2 = 0.7^2 = 0.49$
类似地,对其他输入向量重复相同的步骤,你会得到下表:
x2
yin
∆w1
∆b
w2 (0.1)
(t-yin)^2
—
—
—
—
—
—
1
0.3
0.07
0.07
0.17
0.49
-1
0.17
0.083
0.083
0.087
0.69
1
0.087
-0.0913
0.0913
0.1783
0.83
-1
0.0043
0.1004
-0.1004
0.2787
1.01这是第 1 个 Epoch,其中总误差为 $0.49 + 0.69 + 0.83 + 1.01 = 3.02$。因此将运行更多的 Epoch,直到总误差变得小于等于最小平方误差,即 2。
Python3
`
# Import necessary libraries
import numpy as np
#Adaline neural network
def Adaline(Input, Target, lr=0.2, stop=0.001):
weight = np.random.random(In