Neural network ANN:用神经网络逼近非线性函数

Neural network ANN:用神经网络逼近非线性函数,neural-network,regression,supervised-learning,Neural Network,Regression,Supervised Learning,我正在学习建立回归问题的神经网络。它能很好地逼近线性函数。设置1-5–1个单元,在隐藏层和输出层中具有线性激活功能,可以实现该技巧,结果快速可靠。然而,当我尝试输入简单的二次数据(f(x)=x*x)时,会发生以下情况: 使用线性激活函数,它尝试通过数据集拟合线性函数 使用TANH函数,它尝试通过数据集拟合TANH曲线 这让我相信,当前的设置本质上只能学习线性关系,因为它重复了图表上激活函数的形状。但这可能不是真的,因为我见过其他实现完美地学习曲线。所以我可能做错了什么。请提供您的指导 关于

我正在学习建立回归问题的神经网络。它能很好地逼近线性函数。设置1-5–1个单元,在隐藏层和输出层中具有线性激活功能,可以实现该技巧,结果快速可靠。然而,当我尝试输入简单的二次数据(f(x)=x*x)时,会发生以下情况:

使用线性激活函数,它尝试通过数据集拟合线性函数

使用TANH函数,它尝试通过数据集拟合TANH曲线

这让我相信,当前的设置本质上只能学习线性关系,因为它重复了图表上激活函数的形状。但这可能不是真的,因为我见过其他实现完美地学习曲线。所以我可能做错了什么。请提供您的指导


关于我的代码

我的权重是随机化的(-1,1)输入没有标准化。数据集以随机顺序馈送。改变学习速度或添加图层不会对图片产生太大的影响

我创造了一个

可以使用此功能:

function trainingSample(n) {
    return [[n], [n]]; 
}
它产生一个单一的训练样本:一个由输入向量数组和一个目标向量数组组成的数组。 在本例中,它生成一个
f(x)=x
函数。将其修改为
[[n],[n*n]]
,就得到了一个二次函数

播放按钮位于右上角,还有两个输入框用于手动输入这些值。如果目标(右)框为空,则只能通过前馈测试网络输出


代码中还有一个网络配置文件,您可以在其中设置学习速率和其他内容。(搜索
var Config

我突然想到,在我描述的设置中,由于功能的选择,不可能学习非线性函数。在前向传递中,没有任何地方的输入依赖性大于1,这就是为什么我在输出中看到激活函数的快照。Duh.

我突然想到,在我描述的设置中,由于功能的选择,不可能学习非线性函数。在前向传递中,没有任何地方的输入依赖性大于1,这就是为什么我在输出中看到激活函数的快照。Duh.

你在哪里应用你的激活功能?在神经元中,在向前传递时,传递一个输入的总和。我已经对照教程数据进行了检查,向前传球效果很好。很明显,提供代码有问题,否则无法提供帮助,可能会有太多错误。@lejlot我在问题的底部添加了一个jsfiddle。谢谢你的评论。你在哪里应用你的激活功能?在神经元中,向前传递,传递一个输入的总和。我已经对照教程数据进行了检查,向前传球效果很好。很明显,提供代码有问题,否则无法提供帮助,可能会有太多错误。@lejlot我在问题的底部添加了一个jsfiddle。谢谢你的评论。