Q-Learning 值太高

2023-12-10

我最近尝试在 Golang 中实现基本的 Q-Learning 算法。请注意,我对强化学习和人工智能总体来说是新手,所以这个错误很可能是我的。

以下是我如何在 m,n,k 游戏环境中实施解决方案: 在每个给定的时间t,代理持有最后的状态动作(s, a)以及由此获得的报酬;代理选择一个动作a'基于 Epsilon 贪婪策略并计算奖励r,然后继续更新值Q(s, a)为了时间t-1

func (agent *RLAgent) learn(reward float64) {
    var mState = marshallState(agent.prevState, agent.id)
    var oldVal = agent.values[mState]

    agent.values[mState] = oldVal + (agent.LearningRate *
        (agent.prevScore + (agent.DiscountFactor * reward) - oldVal))
}

Note:

  • agent.prevState在采取行动之后和环境响应之前(即在代理移动之后和其他玩家移动之前)保持先前的状态我用它来代替状态动作元组,但我不太确定是否这是正确的做法
  • agent.prevScore保留对先前状态动作的奖励
  • The reward参数表示当前步骤的状态动作的奖励(Qmax)

With agent.LearningRate = 0.2 and agent.DiscountFactor = 0.8由于状态-动作值溢出,代理无法达到 100K 集。 我正在使用 golangfloat64(标准 IEEE 754-1985 双精度浮点变量)在大约溢出±1.80×10^308和产量±Infiniti。我想说这个价值太大了!

这是以学习率训练的模型的状态0.02和折扣系数0.08播放了 200 万集(其中有 100 万个游戏):

Reinforcement learning model report
Iterations: 2000000
Learned states: 4973
Maximum value: 88781786878142287058992045692178302709335321375413536179603017129368394119653322992958428880260210391115335655910912645569618040471973513955473468092393367618971462560382976.000000
Minimum value: 0.000000

奖励函数返回:

  • 代理获胜:1
  • 代理丢失:-1
  • Draw: 0
  • 比赛继续:0.5

但您可以看到最小值为零,最大值太高。

值得一提的是,我发现Python脚本中的一种更简单的学习方法效果非常好,而且感觉实际上更智能!我用它玩的时候,大多数时候都是平局(一不小心它就赢了),而用标准的Q-Learning方法,我根本不能让它赢!

agent.values[mState] = oldVal + (agent.LearningRate * (reward - agent.prevScore))

有想法该怎么解决这个吗? 这种状态-动作值在 Q-Learning 中正常吗?!


Update:在阅读了巴勃罗的答案以及尼克对此问题提供的轻微但重要的编辑后,我意识到问题是prevScore包含上一步的 Q 值(等于oldVal) 而不是上一步的奖励(在本例中为 -1、0、0.5 或 1)。

进行此更改后,代理现在表现正常,并且在 2M 次之后,模型的状态如下:

Reinforcement learning model report
Iterations: 2000000
Learned states: 5477
Maximum value: 1.090465
Minimum value: -0.554718

在与经纪人的 5 场比赛中,我赢了 2 场(经纪人没有意识到我连续有两颗石子),平局 3 场。


奖励函数可能是问题所在。强化学习方法试图最大化预期总奖励;它在游戏中的每一步都会获得正奖励,因此最佳策略是玩得尽可能长! q 值,定义价值函数(在某种状态下采取行动然后表现最佳的预期总回报)正在增长,因为正确的期望是无限的。为了激励获胜,你应该在每个步骤都有一个负奖励(有点像告诉代理快点获胜)。

请参阅 3.2 目标和奖励强化学习:简介更深入地了解奖励信号的目的和定义。你面临的问题实际上是书中的练习3.5。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Q-Learning 值太高 的相关文章

随机推荐