我正在学习为回归问题构建神经网络。它适用于近似线性函数。在隐藏层和输出层中使用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
)
答案 0 :(得分:0)
我想到,在我描述的设置中,由于功能的选择,不可能学习非线性函数。在前向传递中我们没有输入高于1的功率依赖性,这就是我在输出中看到激活函数的快照的原因。咄。