我是人工智能,机器学习和神经网络的新手。
我尝试在FANN (快速人工神经网络)库(C ++)的帮助下对某些内容进行编码,以测试此类系统的功能。
我制作了一段代码,生成一个学习文件来处理有监督的学习。我已经做过一些测试,但是这个是为了理解隐藏层之间的关系而做的。组织和AI能力,以解决同样的问题。
为了解释我的观察,我将使用符号 ABC - [...] - X 来描绘 A 输入神经元的配置, B 第一个隐藏层上的神经元,第二个,......和 X 输出神经元上的 C 神经元。
在那些测试中,学习数据是工作 NOT函数(f(0)= 1; f(1)= 0)的2k随机结果(相当于'!& #39;在许多语言中)。另请注意,Epoch代表对所有学习数据的1次训练测试。 " AI"将代表训练有素的人工神经网络。
学习数据没有出错。
您可以在my GitHub Repo上找到完整的源代码。
首先,我注意到1-1-1系统在37个时代中比1个[50个5个神经元]更强大 - -1在20k时期(0.0001错误率与0.25)。
我的第一个问题是,第二个AI需要更多的培训,因为要减少更多的成本,但我不确定这是唯一的原因。
这使我尝试使用相同的神经元总数进行一些测试。
1-2-2-1配置似乎比1-4-1
更有效实际上,当我对这两种不同的配置进行测试时,我得到了那些输出(测试程序是我自己编写的)。 这是两个不同的测试," 9 **"是目前的测试指标。
测试包括给AI提供0到1之间的随机int并打印输出。每项测试都是单独进行的。
// 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.009162 对 0.024513 )。这不是IEEE编码问题,如果我再次进行测试,这2个值就不会改变。
原因是什么?让我们试着弄清楚。
第一
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个)。
答案 0 :(得分:3)
一般,有很多节点&权重可导致神经网络过度专业化。在一个极端的例子中:如果你有几千个图像,一个拥有十亿个节点(以及更多权重)的神经网络将冒险学习训练数据中的每一个像素,而不是找出“眼睛”的概念,耳朵“,......构成一张”脸“。因此,当您使用不同的图像呈现过度专业化的神经网络时,它将不会对它们起作用(或者至少不那么好)。它没有弄清楚抽象概念(例如“猫有耳朵和眼睛”而“房子有窗户”)。
虽然在你的测试中没有太多的过度专注,但你可能仍会看到一些(次要的)效果。
相同的属性: 权重的数量是相同的,但结构是不同的。由直线节点(1-1-1 -... -1)组成的神经网络将与更紧凑的节点(1-20-1)完全不同。一个1-1-1 -... -1网络甚至可能无法了解1-20-1网络可以学到什么(虽然有一些关于你需要学习布尔代数的节点/权重数量的规则,尽管我不记得了。)
我怀疑,“1-4-1”显示出与预期结果的更多偏差,因为每个中间节点受到更多权重的影响 - 每个节点获得的权重越多,训练所需的时间就越长。
在1-2-2-1网络中,第一个中间层每个节点只有一个权重作为输入,第二个中间层每个节点有2个权重,输出层每个节点有两个权重。所以最多,每个中间节点可以“摆动”两个值。
我不知道您的神经网络的细节(应用权重的功能),但是如果您想到以下示例,它可能会使事情变得清晰:
如果一个权重为-1且常数为1,则表示您具有否定函数。该神经网络在训练速度和准确性方面都会击败任何更大的网络。任何具有更多节点(以及权重)的网络必须计算出所有权重的微妙平衡,直到找到代表“否定”概念的网络 - 可能神经网络中会有很多零(即“忽略输入” “)和一条做出否定的道路。
作为进一步工作的食物:神经网络在模糊数据方面表现良好,而且将代数函数降到第10位也不太好。