斯图加特神经网络模拟器

作者:Ed Petron

传统的算法解决方案方法需要应用明确的定义和程序。这一要求使得它们对于图像或声音识别等应用来说是不切实际或不合适的,在这些应用中,逻辑规则不存在或难以确定。当输入数据可能不完整或失真时,这些方法也是不合适的。神经网络为算法方法提供了一种替代方案。它们的设计和运行在很大程度上模仿了人类大脑和其他生物系统中神经元通过突触连接形成的網絡。人们也可以将神经网络称为人工神经网络或人工神经系统。另一种常用的名称是“连接主义”,因为它处理由原始计算单元的互连网络执行的信息处理。本文的目的是向读者介绍一般的神经网络以及斯图加特神经网络模拟器 (SNNS) 的使用。

为了理解神经网络处理不太完美数据的能力的意义,我们将在此预览一个简单的字符识别应用程序,并在稍后演示它。我们将开发一个神经网络,它可以对字母字符的 7x5 矩形矩阵表示进行分类。

图 1. 理想的字母 “A”

除了能够将图 1 中的表示分类为字母 “A” 之外,我们还希望能够对图 2 做同样的事情,即使它有一个额外的像素被填充。正如典型的程序员可以看到的那样,传统的算法解决方案方法在这种情况下不容易应用。

图 2. 模糊的 “A”

神经网络的运行原理

神经网络由简单的处理单元 (PE) 的互连网络组成。每个 PE 都是以下三种类型之一

  • 输入:这些接收要处理的输入数据。

  • 输出:这些输出处理后的数据。

  • 隐藏:如果给定应用中使用这些 PE,则它们提供中间处理支持。

PE 的选定对之间存在连接。这些连接以实数的形式将输出从一个元素传递到与其连接的所有元素。每个连接也被分配一个数值权重。

PE 在离散时间步长 t 中运行。PE 的操作最好被认为是一个两阶段函数。第一阶段计算所谓的净输入,它是其输入元素和分配给相应输入连接的权重的加权和。对于第 j 个 PE,时间 t 的值计算如下

Stuttgart Neural Network Simulator

其中 j 标识所讨论的 PE,xi(t) 是时间 t 时来自 i 标识的 PE 的输入,wi,j 是分配给从 ij 的连接的权重。

第二阶段是将一些输出函数(称为激活函数)应用于加权和。这个函数可以是任意数量的函数之一,而选择使用哪一个函数取决于应用程序。一个常用的函数被称为逻辑函数

Stuttgart Neural Network Simulator

它总是取 0 到 1 之间的值。一般来说,时间 t+1 时第 j 个 PE 的激活 Aj 取决于时间 t 的加权和 netj 的值

Stuttgart Neural Network Simulator

在某些应用中,步骤 t+1 的激活也可能取决于前一步骤 t 的激活。在这种情况下,激活将指定如下

Stuttgart Neural Network Simulator

为了帮助读者理解上述讨论,图 3 中的图示显示了一个示例网络。

图 3. 示例神经网络

该网络具有输入 PE(编号为 1、2 和 3)、输出 PE(编号为 8 和 9)和隐藏 PE(编号为 4、5、6 和 7)。查看 PE 编号 4,您可以看到它有来自 PE 1、2 和 3 的输入。然后 PE 编号 4 的激活变为

Stuttgart Neural Network Simulator

如果激活函数是如上所述的逻辑函数,则 PE 编号 4 的激活变为

Stuttgart Neural Network Simulator

这种类型的网络的典型应用将涉及将输入模式识别为有限集合的元素。例如,在字符分类应用程序中,我们希望将每个输入模式识别为字符 A 到 Z 之一。在这种情况下,我们的网络将为字母 A 到 Z 中的每个字母都有一个输出 PE。要分类的模式将通过输入 PE 输入,理想情况下,只有一个输出单元将被激活为 1。其他输出 PE 将激活为 0。在输入数据失真的情况下,我们应该选择激活值最大的输出作为网络最佳猜测。

刚刚描述的计算系统显然与传统的计算系统截然不同,因为它缺少包含指令和数据的内存单元阵列。相反,它的计算能力包含在连接之间权重的相对大小中。这些权重是如何导出的将在下一节中讨论。

除了能够处理不完整或失真的数据外,神经网络本质上是并行的。因此,可以很容易地使神经网络利用并行硬件平台,例如 Linux Beowulf 集群或其他类型的并行处理硬件。另一个重要的特点是容错性。由于其分布式结构,神经网络中的一些处理单元可能会失效,而不会导致整个应用程序失败。

训练

与被编程为执行特定功能的传统计算机系统相反,神经网络是经过训练的。训练包括向网络展示一系列输入以及每种情况下的预期输出。预期输出和实际输出之间的误差用于调整权重,以减少误差。这个过程通常会重复进行,直到误差为零或非常小。

训练方法因应用而异,没有通用的解决方案。作为一个例子,我们转向对所谓的梯度下降或最速下降法的一般讨论。在这里,每个训练模式的误差被量化为

Stuttgart Neural Network Simulator

其中 Ep 是模式 p 的误差,并且

Stuttgart Neural Network Simulator
pk 是模式 p 和输出 PE k 的预期输出和实际输出之间的差异。误差 Ep 也可以被认为是网络中连接权重集合的标量值函数
Stuttgart Neural Network Simulator

考虑到这一点,最小化 Ep 涉及沿负梯度 - 的方向移动权重

Stuttgart Neural Network Simulator
Ep。选定权重 wi 的权重变化可以计算为
Stuttgart Neural Network Simulator

其中 nu 是 0 到 1 之间的一些常数。函数 F 通常是混沌且高度非线性的。在这种情况下,实际梯度分量可能是一个非常大的值,可能会导致我们越过解决方案。常数 nu 可用于抑制这种情况。

我包含上面的讨论主要是为了让具有一些多元微积分基本知识的读者受益。对于其他人来说,真正重要的是要知道,通过迭代过程,神经网络被调整以适应其问题域。因此,神经网络被认为是称为自适应系统的更广泛的计算系统类别的一部分。

使用 SNNS 进行原型设计

尽管神经网络的实际实现和运行可以在从专用特殊用途模拟电路到大规模并行计算机的各种平台上完成,但最实用的是传统工作站。可以从头开始编写模拟程序,但设计人员可以通过使用几种可用的神经网络原型设计工具之一来节省大量时间。其中一个工具是斯图加特神经网络模拟器 (SNNS)。

SNNS 演示

开始使用 SNNS 最简单的方法是试用发行版附带的示例网络之一。其中之一是本文开头讨论的字符识别问题的解决方案。

调用 SNNS 后,管理器(图 4)和横幅(图 5)窗口将出现。

图 4. SNNS 管理器

图 5. SNNS 横幅

从管理器窗口中选择文件选项会向用户显示文件选择框(图 6)。

图 6. SNNS 文件选择

文件选择器使用 .net、.pat 等扩展名来过滤所选目录中的文件名。我们将加载 letters_untrained.net 文件,因为我们想查看训练过程的实际效果。我们还将加载 letters.cfg 配置文件和包含训练模式的 letters.pat 文件。

加载文件后,在管理器窗口中选择显示选项将向用户显示未训练网络的图形显示(图 7)。

图 7. SNNS 未训练网络显示

此窗口在左侧显示输入单元,在中心显示隐藏单元层,在右侧显示输出单元。输出单元标有字母 A 到 Z,以指示网络进行的分类。请注意,在图 7 显示中,由于网络此时未训练,因此尚未显示任何连接。

图 8. SNNS 控制窗口

从管理器窗口中选择控制选项会向用户显示控制窗口(图 8)。训练和测试从控制窗口定向。训练基本上涉及迭代过程:输入训练向量,测量预期输出和实际输出之间的误差,并调整权重以减少误差。这是对每个训练模式完成的,并且重复整个过程,直到误差减少到可接受的水平。标记为 ALL 的按钮为周期窗口中输入的次数重复整个训练数据集的权重调整过程。可以使用图形窗口(图 9)监控训练进度。

图 9. SNNS 图形窗口

在图形窗口中,水平轴显示训练周期数,垂直轴显示误差。

图 10. 部分训练的网络

图 10 显示了一个部分训练的网络。与图 7 中的未训练网络相比,此图片显示了一些连接正在形成。这张照片与图 9 同时拍摄。经过足够的训练重复后,我们得到了一个类似于图 11 所示的网络。请注意,当在左侧输入字母 A 时,训练后的网络会在右侧激活相应的输出单元为 1。

图 11. 训练后的网络

为了快速检查网络是否可以泛化,使用训练数据集的修改版本进行测试,其中 A 矩阵中的一个点设置为零而不是一,而一个错误的点设置为一而不是零。图 12 表明,失真版本的字母 A 仍然可以被识别。

图 12. 失真 A 的测试

正如在关于训练的部分中指出的那样,可以使用许多不同的方法来调整连接权重作为训练过程的一部分。要使用的正确方法取决于应用程序,并且通常通过实验确定。SNNS 可以自动应用许多可能的训练算法之一。可以从连接到控制窗口的下拉菜单中选择训练算法。

SNNS 从 ASCII 文本文件中读取网络定义和配置数据,这些文件可以使用任何文本编辑器创建和编辑。它们也可以通过从管理器窗口调用 bignet 选项来创建。bignet 允许通过填写表格上的常规特征来创建网络。可以通过使用文本编辑器手动编辑数据文件或使用 SNNS 中的其他选项来进行改进。训练和测试数据文件也是纯 ASCII 文本文件。

SNNS 的其他显着功能包括

  • 用于工作站集群的基于远程过程调用 (RPC) 的工具

  • 一个名为 snns2c 的工具,用于将网络定义转换为 C 子程序

  • 用于网络 2-D 和 3-D 可视化的工具

获取和安装 SNNS

有关获取和安装 SNNS 的完整说明,请访问 http://www.informatik.uni-stuttgart.de/ipvr/bv/projekte/snns/obtain.html。 预打包的二进制文件也可作为 Debian 发行版的一部分提供。请查看 http://www.debian.org/ 以获取离您最近的 Debian FTP 站点。

总结

神经网络能够解决没有已知算法或定义逻辑规则集的问题。它们松散地基于神经生物学过程,因此能够做出对人类来说直观上显而易见,但使用传统计算机过程极其难以解决的决策。由于其分布式特性,它们也比传统系统更不易损坏且不易发生故障。它们的内在并行性为使用并行硬件实现高度优化的性能提供了机会。斯图加特神经网络模拟器 (SNNS) 是用于原型设计基于神经网络模型的计算机系统的强大工具。

资源

Stuttgart Neural Network Simulator
Ed Petron 是一位对异构计算感兴趣的计算机顾问。他拥有印第安纳大学的音乐学士学位和查普曼学院的计算机科学学士学位。他的主页,位于 www.leba.net/~epetron 的技术和网络计算主页,致力于 Linux、X 窗口系统、异构计算和自由软件。可以通过电子邮件 epetron@leba.net 与 Ed 联系。
加载 Disqus 评论