神经网络中的学习率对层数的影响

大家好,我用Java创建了一个简单的 neuronal 网络: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进行了比较,对于一个隐藏层它们是正确的。但我不知道对于n层是否正确地进行了抽象

我已经在我的小项目中检查过了:https://github.com/wutzebaer/Neuronal

代码

...

回答:

问题1:当我将学习率设为1时,似乎很快就会发散;当我选择0.1时,它却无法得出结果。为什么会这样?我以为较小的学习率只是需要更长的时间。

较小的学习率确实会需要更长的时间,但具体需要多长时间很难确定。也许你运行的迭代次数不够。

如果1太大而0.1太小,可以尝试0.2, 0.3, ...直到找到合适的值,同时也可以尝试改变迭代次数。

你还可以尝试在学习过程中加入动量来优化学习过程。

问题2:为什么在这样一个简单的问题上,我只能得到99%的命中率?这不是神经网络完全可以解决的问题吗?

你可能遇到了过拟合的问题。你用什么数据来训练你的网络,又用什么数据来测试呢?

99%的命中率已经不错了,但你可以通过正则化(例如权重衰减)、使用更小的网络(减少隐藏单元)或使用更多的训练数据来达到完美的效果。在你的情况下,生成训练数据应该非常容易。

问题3:每层的神经元数量似乎没有太大影响,但当我选择2层或更多层时,结果反而更差,即使长时间学习也是如此。为什么?更多的层不是更好吗?

正如你所说,你的问题非常简单。更多的层会导致网络更加复杂,这会使网络过拟合你的简单数据。更大的网络由于更强大,会简单地记住你的训练数据,但在测试数据上的表现会很差。

对于更深的网络,还可能出现其他问题,比如梯度消失和权重变得过大。对于这样简单的任务,不要使用深层网络。更大并不总是更好。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注