代码之家  ›  专栏  ›  技术社区  ›  Fardin K.

Q-Learning值过高

  •  4
  • Fardin K.  · 技术社区  · 8 年前

    我最近尝试在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))
    }
    

    注:

    • agent.prevState 在采取行动之后和环境响应之前(即,在代理移动之后和其他玩家移动之前),我会保持先前的状态,但我不太确定这是否是正确的方法
    • agent.prevScore 将奖励保留到上一状态操作
    • 这个 reward 参数表示当前步骤状态操作的奖励( Qmax )

    具有 agent.LearningRate = 0.2 agent.DiscountFactor = 0.8 由于状态操作值溢出,代理无法达到100K集。 我在用戈朗的 float64 (标准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
    • 绘制:0
    • 游戏继续:0.5

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

    值得一提的是,我在python脚本中找到了一种更简单的学习方法,它工作得非常好,实际上感觉更智能!当我使用它时,大多数时候结果都是平局(如果我玩得不小心,它甚至会赢),而使用标准的Q-Learning方法,我甚至不能让它赢!

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

    有什么解决办法吗? 这种状态动作值在Q-Learning中正常吗?!


    更新: 在阅读了巴勃罗的答案以及尼克对这个问题的轻微但重要的编辑后,我意识到问题是 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场平局。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Nick Walker    8 年前

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

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

        2
  •  1
  •   Pablo EM    8 年前

    如果我理解得很好,在你的Q-learning更新规则中,你使用的是当前奖励和以前的奖励。然而,Q-learning规则只使用一个奖励( x 是状态和 u 是动作): enter image description here

    另一方面,您假设当前奖励与 Qmax 值,这不是真的。因此,您可能误解了Q学习算法。