深度学习算法(第36期)----强化学习之时间差分学习与近似Q学习
上期我们一起学习了强化学习中的马尔科夫决策过程的相关知识,
深度学习算法(第35期)----强化学习之马尔科夫决策过程
今天我们学习强化学习中的时间差分学习与Q学习的相关知识。
时间差分学习
具有离散动作的强化学习问题通常可以被建模为马尔可夫决策过程,但是智能体最初不知道转移概率是什么,并且它不知道奖励会是什么。它必须经历每一个状态和每一次转变并且至少知道一次奖励,并且如果要对转移概率进行合理的估计,就必须经历多次。
时间差分学习(TD 学习)算法与数值迭代算法非常类似,但考虑到智能体仅具有 MDP 的部分知识。一般来说,我们假设智能体最初只知道可能的状态和动作,没有更多了。智能体使用探索策略,例如,纯粹的随机策略来探索 MDP,并且随着它的发展,时间差分学习算法基于实际观察到的转换和奖励来更新状态值的估计,如下:
其中 α是学习率(比如:0.01)。
TD 学习与随机梯度下降有许多相似之处,特别是它一次处理一个样本的行为。就像 SGD 一样,只有当你逐渐降低学习率时,它才能真正收敛(否则它将在极值点震荡)。
对于每个状态S,该算法只跟踪智能体离开该状态时立即获得的平均奖励,加上它稍后得到的奖励(假设它的行为最佳)的期望。
类似地,此时的Q 学习算法是 Q 值迭代算法的改编版本,适应于转移概率和回报在初始未知的情况如下:
对于每一个状态动作对(s,a),该算法跟踪智能体在以离开状态S到动作a时获得的即时奖励平均值r,加上它稍后得到奖励的期望。由于目标策略将最优地运行,所以我们取 Q 值的最大值作为下一个状态的估计值。
以下是如何实现 Q 学习:
import numpy.random as rnd
learning_rate0 = 0.05
learning_rate_decay = 0.1
n_iterations = 20000
s = 0 # 在状态 0开始
Q = np.full((3, 3), -np.inf) # -inf 对应着不可能的动作
for state, actions in enumerate(possible_actions):
Q[state, actions] = 0.0 # 对于所有可能的动作初始化为 0.0
for iteration in range(n_iterations):
a = rnd.choice(possible_actions[s]) # 随机选择动作
sp = rnd.choice(range(3), p=T[s, a]) # 使用 T[s, a] 挑选下一状态
reward = R[s, a, sp]
learning_rate = learning_rate0 / (1 + iteration * learning_rate_decay)
Q[s, a] = learning_rate * Q[s, a] + (1 - learning_rate) * (reward + discount_rate * np.max(Q[sp]))
s = sp # 移动至下一状态
给定足够的迭代,该算法将收敛到最优 Q 值。这被称为离线策略算法,因为正在训练的策略不是正在执行的策略。令人惊讶的是,该算法能够通过观察智能体的随机行为进行学习(好比是醉酒的猴子教你怎么打高尔夫球一样)最佳策略。我们能做得更好吗?
探索策略
当然,只有在探索策略充分探索 MDP 的情况下,Q 学习才能起作用。尽管一个纯粹的随机策略能够保证最终多次访问每一个状态和每个转换,但这却需要很长的时间去完成。因此,一个更好的选择是使用 ε 贪婪策略:在每个步骤中,它以概率ε随机地或以概率为1-ε贪婪地选择具有最高 Q 值的动作。ε 贪婪策略的优点(与完全随机策略相比)是,它将花费越来越多的时间来探索环境中有趣的部分,因为 Q 值估计越来越好,同时仍花费一些时间访问 MDP 的未知区域。以ε为很高的值(例如,1)开始,然后逐渐减小它(例如,下降到 0.05)是很常见的。
相比于依赖于探索的机会,另一种方法是鼓励探索策略来尝试它以前没有尝试过的行动。这可以作为附加于 Q 值估计的奖励,如下:
其中:
N计算了在状态s时选择动作a的次数
f是一个探索函数,例如f(q,n)=q+K/(1+n),其中K是一个超参数,它衡量智能体被吸引到未知状态的程度。
近似 Q 学习
Q 学习的主要问题是,它不能很好地扩展到具有许多状态和动作的大型(甚至中等)的 MDP。比如试着用 Q 学习来训练一个智能体去玩 Ms. Pac-Man。Ms. Pac-Man 可以吃超过 250 粒小球,每一粒都可以存在或不存在(即已经吃过)。因此,可能状态的数目大于 2 的 250 次幂,约等于 10 的 75 次幂(并且这是考虑颗粒的可能状态)。这比在可观测的宇宙中的原子要多得多,所以你绝对无法追踪每一个 Q 值的估计值。
解决方案是找到一个函数,使用可管理数量的参数来近似 Q 值。这被称为近似 Q 学习。多年来,人们都是手工在状态中提取并线性组合特征(例如,最近的小鬼的距离,它们的方向等)来估计 Q 值,但是 DeepMind 表明使用深度神经网络可以工作得更好,特别是对于复杂的问题。它不需要任何特征工程。用于估计 Q 值的 DNN 被称为深度 Q 网络(DQN),并且使用近似 Q 学习的 DQN 被称为深度 Q 学习。
好了,至此我们大致了解了时间差分学习和近似Q学习的一些知识,下期我们将使用深度 Q 学习来训练一个智能体去玩 Ms. Pac-Man,就像 DeepMind 在 2013年所做的那样。代码可以很容易地调整,调整后学习去玩大多数 Atari 游戏的效果都相当好。在大多数动作游戏中,它可以达到超人的技能,但它在长时运行的游戏中却不太好。希望有些收获,欢迎留言或进社区共同交流,喜欢的话,就点个赞吧,您也可以置顶公众号,第一时间接收最新内容。