【问题标题】:Self learning neural network with Encog [closed]使用 Encog 的自学习神经网络 [关闭]
【发布时间】:2013-09-19 13:44:26
【问题描述】:

神经网络(BP FF)能否通过试验自学(自主)如何控制螺旋桨避免坠落和稳定?

神经网络类型:多层、反向传播、前馈、sigmoid 激活。

为简单起见,仅采用垂直螺旋桨控制和垂直速度。

输入:垂直速度。

输出:螺旋桨功率(只向下,所以只向上推)

由于反向传播神经网络会从输出和期望输出的差异中得到错误,它如何在不知道期望输出的情况下自学(实际上,它需要学习期望输出)。

如果我将误差作为垂直速度(stopped=no error),那么它会更合适,但是如何更改 Encog 的 ResilientPropagation 或 BackPropagation 类的误差函数?

我需要自己编写整个网络类来实现这种学习吗?因为没有初始训练数据。只有新创建的发动机功率和速度数据。(如果我可以生成训练数据,那么我就会知道如何控制发动机,因此不需要神经网络)

最适合这项工作的神经网络类型是什么?

【问题讨论】:

  • 这是强化学习的问题。我认为,对该领域的完整解释超出了 SO 的范围。
  • 是否有可能将输出绑定到附加输入,以便 NN 了解其输出并以某种方式将其错误降至最低?也许输入+输出(反馈)的垂直速度但只有单个螺旋桨功率作为另一个输出?我的意思是只考虑其中一个输出的错误。

标签: java neural-network encog


【解决方案1】:

正如@larsmans 在评论中所指出的,这可以通过Reinforcement Learning 范式来解决。在神经网络的背景下,目前最流行(也是唯一?)的方法是使用两个神经网络:

  • actor 网络:它了解 agent 在给定 state 下应该采取什么行动(在这种情况下为螺旋桨功率)(在这种情况下为垂直速度) )

  • critic network:学习价值,在未来强化方面agent可以“希望”从这个状态

这种方法称为Actor-Critic 方法。您需要做的只是设计加固功能。在您的情况下,这似乎很简单,因为它可能等于垂直速度,并会因偏离某个预定义的高度而受到额外的惩罚(否则网络将学会等待一段时间,直到螺旋桨掉落并自行停止)。

主要问题将是调整所有参数以使所有这些正常工作,但是问题似乎很简单,因此可能不是很困难。

【讨论】:

  • 所以评论家为自己和演员产生了一个错误(版本速度)。然后actor使用误差改变它的重量并改变它的螺旋桨功率输出?从系统的新状态,两个 NN 获得新的输入并产生新的输出(错误和螺旋桨)。我唯一添加的就是奖励?
  • Critic 产生诸如“预期强化”或“状态的优点”之类的东西,包括可以从该状态到达的未来状态的上下文。一个状态有多“好”是由你的强化函数定义的。我提供的第二个链接是 Sutton&Barto 的 RL 中的关键书。整本书免费提供:webdocs.cs.ualberta.ca/~sutton/book/the-book.html。你会在那里找到非常详细的解释。
  • 这不类似于用“良好状态”改变神经网络的训练集吗?如果状态错误,则更改该训练输出,以便为该输入学习更好的输出。无论如何,我会先尝试强化一个,然后是可变训练集。
  • 是的,从概念上讲,这似乎与更改其他网络的训练集非常相似。然而,通常在此类问题中 - 魔鬼隐藏在细节中 :) 祝你好运!
  • 这不是唯一的方法。 Bandit 梯度下降是一种流行的强化学习算法,我怀疑它应该适用于反向传播。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2014-09-03
  • 2016-05-25
  • 2019-03-15
  • 2011-08-17
  • 2020-10-29
相关资源
最近更新 更多