我在java中编写了自己的神经网络,我从感知器开始,扩展到具有S形激活功能的多层网络,通过SGD和反向传播进行学习。
我目前正在测试它,单层和多层分类和回归工作,线性和非线性。
但是,如果我在y方向引入一个移位,如
f(x)= 2 * x + 40
我的网络只是近似于倾向而不是+ 20.如果我监控权重,它会告诉我偏差(负责这种转变)正在改变,但是非常缓慢,即使我让它学会成千上万时代几乎没有达到解决方案。
Linear function where y=2*x + 40
类似的问题是方形函数,其中
f(x)= x ^ 2
,我可以让我的网络像我想要的那样大而深,它不会完美地收敛,只是一个非常粗略的近似,就像两个线性图。我认为这也是由于偏差权重没有正确收敛或至少非常缓慢。
neural network approximated square function, with 10 hidden neurons and one output
无论如何,我现在的问题是,这是正常的,我应该训练更长时间或引入动量或重量衰减期限,或者如果我实施了错误。
PS:如果有必要,我可以提供代码,我只想尽可能地缩短代码。不是真的有用,但我希望它至少清楚我的意思。提前感谢您的所有时间!