2016-05-18 43 views
0

在学习了大量的在线课程并阅读了许多论文后,我开始使用神经网络,但令我惊讶的是它未能概括简单的按位AND操作。神经网络未能概括简单的按位AND

输入:

Inp#1 - randomly generated number between 0-15, scaled down to (0,1) 
Inp#2 - 16 bit randomly generated unsigned int scaled down to (0,1) 

# Code snippet 
int in1 = (int)rand()%16; 
int in2 = (int)rand()%(0x0010000); 
in[0] = (fann_type)(in1/100.0); // not to worry about float roundup 
in[1] = (fann_type)(in2/100000.0); // not to worry about float roundup 

输出:

Out#1 = -1 if the corresponding bit specified by index inp#1 in inp#2 value is 0, otherwise 1 

# Code snippet 
int out1 = (in2 & (1<<in1)) ? 1 : -1; 
out[0] = (fann_type)out1; 

网络:尝试了许多不同的变化,下面是示例

A. 1 hidden layer with 30 neurons, 
    Activation Function (hidden): sigmoid, 
    Activation Function (output): sigmoid_symmetric (tanh), 
    Training method: RPROP 
    Learning rate: 0.7 (default) 
    Momentum: 0.0 (default) 
    RPROP Increase factor: 1.2 (default) 
    RPROP Decrease factor: 0.5 (default) 
    RPROP Minimum Step-size: 0 (default) 
    RPROP Maximum Step-size: 50 (default) 


B. 3 hidden layers each having 30 neurons, with the same params as in A 

C. tried the same networks also with scaling inputs to (-1,1) and using tanh for also hidden layer. 

数据集:5000个样本进行训练,5000用于测试和5000验证。尝试更大的数据集,没有成功

# examples from training set 
0.040000 0.321600 
-1 
0.140000 0.625890 
1 
0.140000 0.039210 
-1 
0.010000 0.432830 
1 
0.100000 0.102220 
1 

过程:在网络训练用的训练集和并行监测测试数据的MSE,以避免可能的过度拟合。

图书馆:使用多个,但主要与fann一起使用,并使用fanntool为gui。

任何想法?如果有任何特殊兴趣,可以上传数据集。

+0

你的学习率是多少?培训过程中成本函数的价值是什么? – gcucurull

+0

更新了描述以涵盖缺少的信息并提供了实际的代码片段。谢谢 – user1039384

+0

你在做什么是一个分类任务。为什么你使用-1,1输出和MSE代替0,1和log-loss?事实证明,这样的设置工作做得更好。顺便说一句。这个任务并不容易。对于神经网络来说,学习这样的操作看起来相当苛刻。 –

回答

1

如果我理解你的设置,你试着这样做:

  • 有架构的网络2-XXX-1(其中X - 隐藏的单位) - 因此2个输入,一个输出
  • 模型在输入

如果这是真的按位功能,这是非常特有的问题,和建筑的一个非常不错的选择。神经网络不是神奇的帽子,它们是非常大的模型家族。你试图做的是具有没有的特性,这是从功能到NN模型的预期。它在输入中是完全不流畅的,它有很多不连续性,它实际上是一堆if-else子句。

你应该怎么做?您应该将输入表示为位,因此您应该有32个输入,每个数字16个二进制输入,然后它将会毫无问题地学习您的功能。您以非常特定的方式编码输入(通过取其十进制表示形式),并期望您的网络将分解建模为二进制,然后在其上进行操作。神经网络将学习它,但是你可能需要相当复杂的网络来实现这样的操作 - 总而言之,原因在于你为网络提供了次优的表示,并构建了一个非常简单的网络,该网络最初设计用来近似平滑的功能。

+0

感谢您的反馈意见。我同意,但是这样做的原因是看看神经网络是否可以通过单独使用第一/第二隐藏层来获得更优化的表示,而不是手动地适应我给定的特定问题。我希望手工采摘功能完全是深层网络试图取代 – user1039384

+0

您的网络不深。正如我所说的,你会用当前的设置来解决它,但你需要更多的容量作为你正在试图建模的函数与计算模型无法比拟的。条款的线性组合不利于表达条款。此外,假设您在富输入空间中给出RAW输入,则将数据表示为偏差不是工程 – lejlot

+0

D1。您以高度压缩的方式提供您的数据。如果函数不是很平滑,2d输入对于nns很难 – lejlot