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

ANN: Approximating non-linear function with neural network

我正在学习为回归问题构建神经网络。它可以很好地逼近线性函数。在隐藏层和输出层设置具有线性激活函数的 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

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