-1

介绍

我对人工智能、机器学习和神经网络非常陌生。

我尝试在FANN (快速人工神经网络)库 (C++) 的帮助下编写一些东西来测试这种系统的能力。

编程

我编写了一小段代码来生成一个学习文件来处理监督学习。我已经做了一些测试,但这一次是为了理解隐藏层的组织和人工智能能力之间的关系,以解决同样的问题。

为了解释我的观察,我将使用符号ABC-[...]-X来描绘A输入神经元、第一个隐藏层上的B神经元、第二个隐藏层上的C神经元、...和​​X输出神经元的配置。

在那些测试中,学习数据是工作NOT 函数 (f(0)=1 ; f(1)=0) 的 2k 随机结果(在许多语言中相当于“!”)。还要注意,一个 Epoch 代表所有学习数据的 1 个训练测试。“AI”将代表经过训练的 ANN。

学习数据没有出错。

你可以在我的 GitHub Repo上找到完整的源代码。

更多不是更好

首先,我注意到 1-1-1 系统在 37 个 Epochs 中比 1-[50 层 5 个神经元]-1 在 20k 个 Epochs 中更强大(0.0001 对 0.25 的错误率)。

我的第一个想法是第二个 AI 需要更多的训练,因为要最小化更多的成本,但我不确定这是唯一的原因。

这导致我尝试使用相同的神经元总数进行一些测试。

相等不相等

1-2-2-1 配置似乎比 1-4-1 更有效

实际上,当我对这两种不同的配置进行测试时,我得到了这些输出(我自己编写了测试程序)。这是两个不同的测试,“9**”是测试的当前索引。

测试包括向 AI 提供 0 到 1 之间的随机整数并打印输出。每个测试都是单独运行的。

// 1-2-2-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 1.000000, output : 0.009162
[938]Number : 0.000000, output : 1.000000
[939]Number : 0.000000, output : 1.000000
[940]Number : 1.000000, output : 0.009162
[941]Number : 0.000000, output : 1.000000
[942]Number : 0.000000, output : 1.000000

// 1-4-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 0.000000, output : 1.000000
[938]Number : 1.000000, output : 0.024513
[939]Number : 0.000000, output : 1.000000
[940]Number : 0.000000, output : 1.000000
[941]Number : 1.000000, output : 0.024513
[942]Number : 1.000000, output : 0.024513

您会注意到第一个配置给出的结果比第二个更接近 0。(0.0091620.024513)。这不是 IEEE 编码问题,如果我运行另一个测试,这两个值不会改变。

那是什么原因呢?让我们试着弄清楚。

  • 我们在第一个配置中有多少个“突触”?

第一的

first[0]->second[0]
first[0]->second[1]

然后

second[0]->third[0]
second[0]->third[1]
second[1]->third[0]
second[1]->third[1]

最后

third[0]->first[0]
third[1]->first[0]

所以我们总共得到2 + 4 + 2 = 8 个突触。(因此有 8 种不同的权重可能性)。

  • 第二种配置呢?

第一的

first[0]->second[0]
first[0]->second[1]
first[0]->second[2]
first[0]->second[3]

最后

second[0]->third[0]
second[1]->third[0]
second[2]->third[0]
second[3]->third[0]

所以我们总共得到4 + 4 = 8 个突触。(仍然有 8 种不同的权重可能性)。

在这两个系统上,我们都有4 个激活函数(每个神经元 1 个)。

我们如何才能在具有相同属性的情况下获得显着的能力差异?

4

1 回答 1

3

一般来说,拥有大量节点和权重会导致神经网络过度专业化。举一个极端的例子:如果你有几千张图像,一个拥有十亿个节点(以及更多权重)的神经网络将冒着学习训练数据中每个像素的风险,而不是找出“眼睛”的概念,”耳朵”,……组成“脸”。因此,当您展示具有不同图像的过度专业化的神经网络时,它不会对它们起作用(或者至少不是那么好)。它还没有解决抽象概念(例如“猫有耳朵和眼睛”而“房子有窗户”)。

虽然在您的测试中没有太多需要过度专业化的地方,但您可能仍然会看到一些(次要)影响。

相同的性质: 权重的数量相同,但结构不同。由直线节点 (1-1-1-...-1) 组成的神经网络的行为将与更紧凑的节点 (1-20-1) 完全不同。1-1-1-...-1 网络甚至可能无法学习 1-20-1 网络可以学习的内容(尽管有一些关于学习布尔代数所需的节点数/权重的规则我不记得他们)。

我怀疑,“1-4-1”显示出与预期结果的更大偏差,因为每个中间节点都受到更多权重的影响——每个节点的权重越多,训练所需的时间就越长。

在 1-2-2-1 网络中,第一个中间层每个节点只有一个权重作为输入,第二个中间层每个节点有 2 个权重,输出层每个节点有两个权重。因此,您最多可以为每个中间节点“摆动”两个值。

我不知道你的神经网络的细节(应用权重的函数),但如果你想到下面的例子,它可能会让事情变得清楚:

  • 假设函数是 f(weight, input) = input*weight + constant
  • 进一步我们的网络是1-1(即它有一个权重要确定)

如果那个权重是 -1 且常数为 1,那么您就有了否定功能。该神经网络在训练速度和准确性方面都将击败任何更大的网络。任何具有更多节点(以及权重)的网络都必须计算出所有权重的微妙平衡,直到找到一个代表“否定”概念的网络——可能神经网络中会有很多零(即“忽略该输入” ") 和一个进行否定的路径。

作为进一步工作的食物:神经网络擅长处理模糊数据,而不太擅长将代数函数精确到第 10 位。

于 2016-12-30T16:53:05.053 回答