强化学习Q-Learning和DQN算法

发布时间 2023-10-20 00:08:51作者: SheepHuan

1 Q-Learning

强化学习中有stateaction的两个重要概念。而Q-Learning算法就是用来得到在state上执行action的未来预期奖励。具体的算法流程如下:

  1. 初始化一个Q-table。
  2. 在当前状态\(s\)选择一个动作\(a\)
  3. 执行动作\(a\),转移到新的状态\(s'\)
  4. 计算执行结果的奖励\(r\)
  5. 计算Q值,并更新Q-table,然后继续执行2。

这里要注意的点是Q值不等于奖励值\(r\)。具体的公式是:

\[Q(s,a):=Q(s,a)+\alpha[R(s,a)+\gamma\max_{a'}{Q(s',a')}-Q(s,a)] \]

  • \(Q(s,a)\),表示当前在状态\(s\)上执行动作\(a\)的Q值。
  • \(R(s,a)\),表示当前在状态\(s\)上执行动作\(a\)的Reward值。
  • \(\max_{a'}{Q(s',a')}\),表示在新状态\(s'\)上的最大的Q值(没错,考虑所有action的情况)。
  • \(\alpha\),是学习率(learning rate)。
  • \(\gamma\),是折扣率(discount rate)。

当完成最终的迭代后,我们会得到一个完整的Q-table。理论上大小是一个\(state \times action\)。每一种\(Q(s,a)\)都可以从中查到。而选取动作的策略一般就是取Q值最大的action。

2 DQN (Deep Q Network)

本质上来说,DQN做的事情和Q-Learning是一模一样的。只是DQN会用神经网络实现。

这里我们可以指出DQN和传统的Q-table形式的不同。同样是给定\(state\)\(action\)的数量,Q-table是通过一次次迭代完成填表。而DQN是输入state来估计所有的action的Q值。

1697730414863.png

虽然本质相同,但是实现上还是有所区别的。

2.1 两个网络

DQN算法需要两个结构相同的网络,分别是evaluate network和 target network。

  • evaluate network,主要是计算当前状态\(s\)的所有Q值,即输入\(s\),输出所有的\(Q(s,a)\)。这个网络会进行训练。
  • target network,这个网络主要用来估计下一状态的Q值,即输入\(s'\),输出所有的\(Q(s',a')\)。它的参数从evaluate network中复制而来,不会被训练。

2.2 贪婪策略

贪婪策略的核心就是设置一个阈值\(\epsilon\),每次去获取action是,先得到一个随机数,随机数小于\(\epsilon\)的话就去执行evaluate network得到输出动作a。否则就会随机选择一个动作。

2.3 经验回放

DQN算法额外添加了一个经验库memory,用来存储过去的数据(观察数据),\([state,action,reward,state']\)memory的数据有执行\(\epsilon\)-greedy时添加的。

刚开始memory里面没有足够的数据,只有当数据量达到一定程度后,才会开始从memory里面随机选择数据训练evaluate network。

设计记忆库memory并且随机选择经验喂给evaluate network的技巧打破了相邻训练样本之间相关性,试着想下,状态→动作→奖励→下一个状态的循环是具有关联的,用相邻的样本连续训练evaluate network会带来网络过拟合泛化能力差的问题,而经验回放技巧增强了训练样本之间的独立性。
(https://zhuanlan.zhihu.com/p/630554489)