65.9K
CodeProject 正在变化。 阅读更多。
Home

用于结构性能评估的神经网络设计/构建器

2016年9月8日

MIT

5分钟阅读

viewsIcon

22182

downloadIcon

51

它测试了用于通用类型神经网络问题的神经网络结构选择器标准。

引言

人工神经网络 (ANN) 可用于许多领域,实现各种应用。尽管它们具有独特的优势,例如非参数性质、任意决策边界能力以及易于适应不同类型的数据,但它们也存在一些固有的局限性。

局限性在于结构问题。这个问题有三个因素:隐藏层的数量、这些层的大小以及层之间的连接级别。

这些因素可能会影响网络的分类效果和估计。大型人工神经网络充当记忆库,其中输入和输出的参数几乎被记忆,因此当输入向量在训练集的范围内时,网络将返回几乎与实际数据相同的值,但在范围之外,值往往与真实值非常不同。

此外,小型网络在分类方面表现不佳,但在估计训练集范围之外的数据时性能有所提高。

在本文中,我们使用反向传播神经网络进行监督训练,此外,我们将专注于确定最佳网络结构,而不是修改网络结构(这可以作为另一篇文章)。

背景

主要问题在于找到合适的结构来平衡网络层之间的大小和连接数量,以便它能够同时进行分类和估计,且误差最小。

在本项目中,我们提出了一种由一组数据(来自 CSV 文件)训练的人工神经网络生成器。该数据集将分为两部分:训练集和监控集。将使用训练集对每个网络进行训练迭代,并根据均方误差和在训练有素的网络监控组件向量的评估中的差异幅度平均值来排序。通过选择表现最佳的一半网络来进行剪枝。重复此过程,直到出现一个可能是解决该问题的最佳结构的网络。

在每次迭代中,训练数量呈指数增长。网络并行训练,利用此类问题是可并行化的。此外,我们使用了具有 Sigmoid 激活函数的层,以便所有输入和输出都进行了归一化。结果以及二次平均误差值均已标准化。

此外,本文涉及时间独立问题,其中每个训练样本彼此独立。诸如自动控制问题之类的场景不在此解决方案之列。对于这类问题,网络必须配置为包含 n 个输入向量,这些向量代表对象状态、控制向量以及 n 个状态与 n(t+1) 状态之间的时间间隔。输出向量必须是对象的 n(t+1) 状态。

Using the Code

BrainsProcessorBase 类

此类实现并定义了三种 ANN 处理器将使用的一些方法和属性:Standalone、Master 和 Slave。

创建 ANN

创建 ANN 的第一步是加载要处理的数据并选择输出参数。在本文中,我们将使用一个供水系统的数据,该系统有八个泵连接在不同的位置和高度,具有不同的特性。我们将仅使用每天的供水量数据。目的是确定系统对每个泵的影响,并生成能够根据所有其他泵的数据来估计某个泵的供水量的 ANN。要获取完整信息,我们必须拥有某天的所有供水量数据。

之后,我们将选择隐藏层的大小和数量,例如

这将生成一层、两层和三层的组合,例如 10-10-10 或 15-13-6 组合。执行此操作的方法(名为 Combox)如下所示:

    public List<int[]> Combox(ListBox listBox4)
        {
            var l = new List<string>();
            var data = listBox4.Items.Cast<object>().Select(i => i.ToString().Split
                       ('-').Select(int.Parse).ToArray()).ToList();
            int ii = 0;
            foreach (var item in data)
            {
                string a = "";
                var lx = new List<string>();
                for (int i = item[0]; i <= item[1]; i++)
                {
                    a = "_" + i;
                    if ((l.Count <= item[1] - item[0]) && ii == 0)
                    {
                        l.Add(a);
                    }
                    else
                        foreach (var itemx in l.ToList())
                            lx.Add(itemx + a);
                }
                l.AddRange(lx.ToArray());
                ii++;
            }
            return l.Distinct().Select(i => i.Split(new[] { "_" }, 
              StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray()).ToList();
}

独立模式

在此模式下,程序生成所有结构并训练和测试所有这些结构。在每次迭代中,遵循均方误差倍数和计算结果与验证样本结果之间差异总和的选择器标准,选择表现最佳的一半。

使用此 多项式函数 的数据,以及如下图所示的参数

迭代结果显示如下:

集群主模式

在此模式下,程序可以配置为主集群节点,或作为服务于主节点的从节点。每个要包含在集群中的计算机都将配置该过程,并选择操作模式。从节点实例无法设计 ANN 架构,它们仅接收主实例的 ANN 组、训练集和验证测试。它们运行 n 个训练轮次并将结果发送回主实例,主实例在所有 ANN 都经过训练和评估后,选择表现最佳的一半组,重新分配所有剩余的 ANN,增加训练轮次数并重复此过程,直到只有一个 ANN 获胜。

主集群的参数可以配置如下:

集群从模式

在此模式下,实例将连接到主实例并等待指令。它接收训练和验证集、ANN,训练所有 ANN 并将其发送回主实例。

分发过程

在训练过程开始时,主实例会查询所有已注册的从实例,以了解每个实例可用的核心数量和 CPU 最高速度。然后,它根据以下条件为每个从实例分配一定数量的 ANN (i):

对于获得的单位数少于一的从实例,主实例每次迭代仅分配一个 ANN 进行处理。对于其余的从实例,它分配 floor(i) 个 ANN。主实例承担所有剩余的 ANN 进行训练。

参考文献

  • Taskin Kavzoglu,“Determining Optimum Structure for Artificial Neural Networks”。在 1999 年 9 月 8-10 日于英国卡迪夫举行的第 25 届遥感学会年会技术会议和展览会上,第 675-682 页。
© . All rights reserved.