我在java中创建了一个简单的神经元网络: https://github.com/wutzebaer/Neuronal
它只有3个神经元;输入隐藏输出
当输入是> 0.7输出应为1,否则为0
问题1: 当我将我的费率设置为1时,它似乎快速发散,当我选择0.1时,它不会产生结果。为什么这样,我认为较小的费率只需要更长的时间。
问题2: 为什么我这样一个简单的问题只能获得99%的命中率?神经网络不能解决这个问题吗?
问题3: 每层神经元的数量似乎没有多大影响,但是当我选择2层或更多层时,结果会更糟,即使长时间学习也是如此。为什么?不是更好的层次吗?
问题4: 我的微积分是正确的吗?我已经将我的值与http://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/comment-page-1/#comment-17063进行了比较,并将它们更正为1个隐藏层。但我不知道我是否已正确抽取n层p>
我在这里查看了我的小项目: https://github.com/wutzebaer/Neuronal
CODE
'rules'=>array(
'<action:\w+>' => 'site/<action>',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
答案 0 :(得分:1)
问题1:当我将我的费率设置为1时,它似乎快速发散,当我选择0.1时,它不会产生结果。为什么这样,我认为较小的费率只需要更长的时间。
较小的费率需要更长的时间,但很难说多久。也许你没有运行足够的迭代。
如果1
太大且0.1
太小,请尝试0.2, 0.3, ...
,直到找到合适的内容,并尝试更改迭代次数。
您也可以尝试在学习中添加momentum。
问题2:为什么我这样一个简单问题的命中率只有99%?神经网络不能解决这个问题吗?
您可能患有overfitting。你用什么数据训练你的网,你在测试什么?
99%
并不是很糟糕,但你可以通过正规化(例如weight decay),使用更小的网络(更少的隐藏单元)或使用更多的训练数据来完善它。在您的情况下,培训数据应该很容易生成。
问题3:每层神经元的数量似乎没有太大影响,但是当我选择2层或更多层时,即使长时间学习,结果也会更糟。为什么? Aren的更多层次更好?
就像你说的,你的问题非常简单。更多层将导致更复杂的网络,这将过度填充您的简单数据。更大的网络,更强大,将简单地记住您的训练数据,并且它将在测试数据上表现不佳。
更深层次的网络也可能出现其他问题,例如渐变渐变和重量过大。不要使用深度网络来解决这些简单的问题。更大并不总是更好。