【发布时间】:2012-12-03 13:18:39
【问题描述】:
我已经实现了一个简单的神经网络框架,它只支持多层感知器和简单的反向传播。它适用于线性分类和通常的 XOR 问题,但对于正弦函数逼近,结果并不那么令人满意。
我基本上试图用一个由 6-10 个神经元组成的隐藏层来近似正弦函数的一个周期。该网络使用双曲正切作为隐藏层的激活函数和输出的线性函数。结果仍然是对正弦波的粗略估计,需要很长时间才能计算。
我查看了encog 以供参考,但即使如此,我也无法通过简单的反向传播使其工作(通过切换到弹性传播,它开始变得更好,但仍然比@987654322 提供的超级流畅的 R 脚本差得多@)。那么我真的在尝试做一些不可能的事情吗?用简单的反向传播(没有动量,没有动态学习率)不可能近似正弦吗? R中神经网络库实际使用的方法是什么?
编辑:我知道即使使用简单的反向传播(如果您对初始权重非常幸运),也绝对可能找到足够好的近似值,但我实际上更想知道这是否是一种可行的方法。与我的实现甚至 encog 的弹性传播相比,我链接到的 R 脚本似乎收敛得非常快和健壮(在 40 个 epoch 中只有很少的学习样本)。我只是想知道我是否可以做一些事情来改进我的反向传播算法以获得相同的性能,或者我是否必须研究一些更高级的学习方法?
【问题讨论】:
-
你有没有让它工作?面临同样的问题。
-
不这么认为,但已经记不起所有细节了,因为这是 4 年前的事了。上面提到的 nnet 包是用 C 实现的,只有 700 行代码,然后在其上封装了一些 R。也许调查一下会给你一些想法。
-
我在 C/C++ 中实现这个。 My Network 在单个隐藏层使用 6 个神经元,在隐藏层使用 tanh 激活,在输出层使用线性激活。它在 1600 个 epoch 中收敛,不使用动量或优化器,这是您所要求的,还是 40 个 epoch 是您目标的基准?虽然,我正在努力为我的网络添加优化器和动力,但我会在这里分享。到目前为止,我应该分享我的方法吗?
-
如果你有一个表现良好的模型,并且可以提供清晰简洁的答案,请分享你的工作,我会接受答案。
标签: machine-learning neural-network