【发布时间】:2017-05-14 22:28:29
【问题描述】:
简介
我对人工智能、机器学习和神经网络非常陌生。
我尝试借助 FANN (快速人工神经网络) 库 (C++) 编写一些东西来测试这种系统的能力。
编程
我编写了一小段代码来生成一个学习文件来处理监督学习。我已经做了一些测试,但这一次是为了理解隐藏层的组织和人工智能能力之间的关系,以解决同样的问题。
为了解释我的观察,我将使用符号 ABC-[...]-X 来描绘 A 输入神经元的配置,B i> 个神经元在第一个隐藏层,C 个神经元在第二个,...,X 个输出神经元。
在这些测试中,学习数据是 工作 NOT 函数 (f(0)=1 ; f(1)=0) 的 2k 随机结果(在许多语言中相当于 '!' )。还要注意,一个 Epoch 代表所有学习数据的 1 个训练测试。 “AI”将代表经过训练的 ANN。
学习数据没有出错。
你可以在my 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.009162 对 0.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 个)。
我们如何才能在相同属性的情况下获得显着的能力差异?
【问题讨论】:
-
这个问题不太适合 StackOverflow,你可以试试Cross Validated。
-
很难说。神经网络是复杂的野兽。他们有很多旋钮和按钮(“超参数”)可以调整和破解。它们在机器学习社区中也被称为“黑匣子”,这种模型不能解释自己(为什么它们工作或为什么不工作,或者为什么一组超参数比其他的更好)。 a lot of research 还在继续。为了训练好的模型并更好地理解它们,您需要好的工具,例如现代神经网络框架:TensorFlow、Theano、Torch 等。
标签: c++ neural-network artificial-intelligence conv-neural-network fann