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

Posted

技术标签:

【中文标题】ANN:用神经网络逼近非线性函数【英文标题】:ANN: Approximating non-linear function with neural network 【发布时间】:2017-04-01 20:44:20 【问题描述】:

我正在学习为回归问题构建神经网络。它可以很好地逼近线性函数。在隐藏层和输出层中设置具有线性激活函数的 1-5-1 单元可以解决问题,并且结果快速可靠。但是,当我尝试输入简单的二次数据 (f(x) = x*x) 时,会发生以下情况:

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

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

这让我相信当前的设置本质上除了线性关系之外无法学习任何东西,因为它在图表上重复激活函数的形状。但这可能不是真的,因为我已经看到其他实现非常完美地学习曲线。所以我可能做错了什么。请提供您的指导。


关于我的代码

我的权重是随机的 (-1, 1) 输入未标准化。数据集以随机顺序输入。改变学习率或增加层,并没有太大的改变。

我创建了一个jsfiddle,

玩的地方就是这个函数:

function trainingSample(n) 
    return [[n], [n]]; 

它产生一个单一的训练样本:一个输入向量数组和一个目标向量数组的数组。 在这个例子中,它产生一个f(x)=x 函数。修改为[[n], [n*n]],就得到了二次函数。

播放按钮在右上角,还有两个输入框可以手动输入这些值。如果目标(右)框为空,则可以仅通过前馈来测试网络的输出。

代码中还有一个网络的配置文件,可以在里面设置学习率等。 (搜索var Config

【问题讨论】:

你在哪里应用你的激活函数? 在神经元中,在前向传递中,将输入的总和传递给它。我检查了教程数据,前向传递效果很好。明显是BP的问题 提供你的代码,不然帮不上忙,可能出错的东西太多了。 @lejlot 我在问题的底部添加了一个 jsfiddle。感谢您的 cmets。 【参考方案1】:

我突然想到,在我所描述的设置中,由于特征的选择,不可能学习非线性函数。在正向传递中,我们的输入依赖性功率高于 1,这就是为什么我在输出中看到我的激活函数的快照。呵呵。

【讨论】:

以上是关于ANN:用神经网络逼近非线性函数的主要内容,如果未能解决你的问题,请参考以下文章

激活函数总结

MLP多层感知机网络——BPN反向传播神经网络

阅读《ANN和CNN异同分析》

常用激活函数比较

使用神经网络和 ReLU 逼近正弦函数

实践认识--ANN