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:用神经网络逼近非线性函数的主要内容,如果未能解决你的问题,请参考以下文章