强化学习网络 DQN

  • 目的:让机器学会打游戏

    • 在每一个对局中,情景各不相同,所以我们需要让机器当场学习
    • 应用:Alpha Go; 王者荣耀 ai
  • 特点

      1. 没有监督数据,只有奖励 (reward) 信号
      • 例如围棋,可能性太多,一般不会通过已知情况进行计算
      1. 奖励信号不一定是实时的,可能存在延迟
      • 不同于贪心算法,我们可能要放弃局部胜利而获得最终胜利
      1. 时间是一个重要因素
      • 意思是样本之间存在时间维系的强关系
      1. 智能体 (Agent) 但前的动作 (Action) 影响后续接收到的数据
  • 要素

    • 奖励: RtR_t 是一个反馈信号,是一个标量

      • 工作目标是:最大化累积奖励

      • 基于奖励假设:所有问题的目标都可以被描述为最大化期望的累积奖励

        • 期望表示平均水平高,用于避免“赌博”的训练结果,也就是要求在稳定高水平下找更好的
    • 序列决策 Sequential Decision Making

      • 目标:选择一定的动作序列以最大化未来的总体奖励(是一系列)

        • 因此奖励反馈是延迟的
    • 智能体 Agent

      • 输入: 观测 OtO_t

      • 反馈: 奖励 RtR_t

      • 输出: 动作 AtA_t

      • 每一步的步骤:

          1. 接受 OtO_t, RtR_t, 执行 AtA_t
          1. 接受 AtA_t, 产生观测 Ot+1O_{t+1}, 产生奖励信号 Rt+1R_{t+1}
      • 历史与状态 History and State:

        • 历史是观测、行动和奖励的序列

          • Ht=O1,R1,A1,,Ot,RtH_t = O_1,R_1,A_1,\cdots,O_t,R_t (最后一次的 AtA_t 是不存在的,因为这是我们决策的结果)
        • 状态是接下来会发生的信息,是一个关于历史的函数

          • St=f(Ht)S_t = f(H_t)

          • 状态的主体有两个,一个是环境,一个是智能体

            • 环境状态 SteS_t^e 是环境内部状态, 对于智能体通常不可见,即使可见也包含大量不相干信息,这个是观测和奖励的内容来源
            • 智能体状态 StaS_t^a 是智能体内部对信息的表达,是历史的函数 Sta=f(Ht)S_t^a = f(H_t)
  • 训练思路

    • 首先我们要决定是 探索 Exploration 还是 利用 Exploitation

      • 这里会用到一个 ϵ\epsilon-贪心算法,也就是存在一个浮动(逐级衰减)的概率 ϵ\epsilon,我们每一个循环周期都有 ϵ\epsilon 的概率进行探索,有 1ϵ1- \epsilon 的概率进行利用
      • 探索 对应 随机生成操作,利用 对应通过已有的模型观测效果
      • 随着 ϵ\epsilon 的逐步减小,我们会发现探索的越来越小,利用的越来越多,这符合人类学习从 屁都不懂 进化到 精通 的进程
    • 接下来就是结果推演及训练

      • 我们先区分 reward 和 Q 值

        • reward 是环境反馈给个体的 ground truth
        • Q 是我们通过学习获得的对不同操作不同环境的价值判断函数
        • 也就是说我们的目的是找 maxQ(rt,at)\max Q(r_t,a_t) 或者说更加重要的是 arg maxaQ(rt,at)\argmax_a Q(r_t,a_t) 找到最好的动作 ata_t
      • 所以我们需要训练合理的 QQ 网络使得agent能够优秀的找到每一步的实际最好动作

        • 求损失的对象应该是 当前帧的最大 q 和 下一帧的最大 q

        • 我们目前可以有的就是当前帧的状态和下一帧的状态,我们需要用一个 Q 网络映射把a,s映射到q值

        • target_q 计算函数 target_q=reward+discount_factornext_max_q\operatorname{target\_q} = \operatorname{reward} + \operatorname{discount\_factor}\cdot \operatorname{next\_max\_q}

          • 折扣因子 $discount_factor $ (通常用 γ\gamma 表示) 用于当前状态的重要性,取值范围为[0,1)[0,1)
          • γ\gamma 越大,结果越贴近未来预期效果,γ\gamma 越小,结果越尊重当前的属性