在 Python 中实现人工神经网络训练过程

17 Mar 2025 | 4 分钟阅读

ANN学习已成功用于学习实值、离散值或向量值函数,包括不同类型的特征景观、语音识别以及学习机器人控制技术等问题。ANN学习对训练数据中的错误具有抵抗力。生物体由高度复杂的、密集互连的网络构成,这一发现启发了人工神经网络(ANN)的发展。人脑由大约1011-1012个神经元组成的紧密连接网络构成。

神经网络由连接的I/O单元组成,每个单元都有一个与之对应的权重。你可以使用大型数据库来开发预测模型。人神经系统是该模型的基础。你可以用它来进行人类学习、计算机语音、图像识别等任务。

人工神经网络(ANN)是一种受大脑启发的信息处理范式。ANN的学习方式就像人类一样,通过模仿来学习。通过学习过程,ANN会针对特定目的进行定制,例如模式分类或数据分类。学习会导致神经元之间突触连接的变化。

Implementing Artificial Neural Network Training Process in Python

人脑中还有数千亿个神经元。这些神经元通过突触连接,突触是神经元通过冲动与其他神经元通信的点。一个神经元提供给另一个神经元的兴奋信号连接到该神经元的所有输入。如果目标神经元达到某个阈值,它将向前发送一个动作信号;这就是思维过程的运作方式。

通过利用矩阵在计算机上构建“网络”,计算机科学家可以模拟这一过程。这些网络可以被视为神经元的抽象,而不考虑所有的生物学复杂性。为了保持简单,我们将仅模拟一个可以解决线性分类问题的两层神经网络。

Implementing Artificial Neural Network Training Process in Python

例如,让我们设想一个问题,我们希望在给定一组输入和输出的情况下预测一个输出。

Implementing Artificial Neural Network Training Process in Python

请记住,第三列的值,即图2中每个训练示例中的输出,与输出直接相关。因此,测试示例的输出结果应为1。

训练过程包括以下步骤

  • 前向传播

顾名思义,输入信息通过网络向前馈送。每个隐藏层接收输入数据,根据激活函数进行处理,然后将其传递到下一层。为了产生输出,输入信息应该只向前馈送。在输出生成过程中,数据不得反向流动,因为那样会产生循环并导致无法生成输出。具有这种安排的网络称为前馈网络。前馈网络有助于信息的传播。

将权重乘以输入(只需使用随机数作为权重)

假设 Y = WiIi = W1I1 + W2I2 + W3I3。

为了确定神经元的输出,将结果通过Sigmoid算法运行。结果使用Sigmoid函数在0到1之间进行归一化:1/1 + e-y。

在正向传播过程中,每个隐藏层和输出层节点都会经历预激活和激活。

  • 反向传播

确定误差,即生成输出与预期输出之间的差异。根据误差,通过将误差乘以输入、Sigmoid曲线的梯度以及误差本身来调整权重。网络训练的基础是反向传播。它是一种根据上一周期(即迭代)记录的比率来调整神经网络权重的技术。通过正确调整权重,你可以降低误差率,并通过拓宽其适用性来提高模型的可靠性。

在神经网络中,“误差的反向传播”的缩写是“反向传播”。它是开发人工神经网络的常用技术。对于网络中的每个权重,该技术有助于计算损失函数的导数。

重复整个过程数千次迭代。让我们用Python代码写出整个过程。我们将使用NumPy库,以便我们能够轻松地进行所有矩阵计算。要运行代码,你需要先在你的电脑上安装NumPy库。

Implementing Artificial Neural Network Training Process in Python

输出

Our neural network expects the result to be 0.65980921 after 10 iterations. It doesn't look good because the correct response should be 1. We get 0.87680541 if we extend the iterations to 100. A smarter network is emerging! Following that, after 10000 iterations, we have 0.9897704, which is slightly closer and indeed a decent result.

下一主题Python私有变量