目录
1. 引言
我们之前学过TD 算法 ,基本的TD算法的思路如下
- 观测到一个transition
- 计算TD target
- 计算TD error
- 梯度下降
我们发现一个transition在使用之后就会被丢弃了,我们不会在后面使用到它,这样的训练速度就非常慢:想象AI在打boss,但是一下就被秒了,它从中获取不到足够的信息,只能一遍又一遍地去刷boss,那又需要将前面的所以关卡打一遍,非常的费时。而且按照顺序使用state效果不好:两个相邻的state所包含的信息往往大致相同,甚至没有区别。
总结地来说朴素TD 算法有两个缺点:
- 浪费经验也就是transition
- 连续地使用的
具有强关联性,训练效果不好
2. 经验回放算法
从上面的问题中我们发现我们不应该将每个transition变成一次性用品,所以我们将每个使用过的transition放入一个盒子里,这个盒子就叫做replay buffer,就是一个缓冲区,这样便解决了经验浪费的问题,我们在对replay buffer中的transition进行随机选取,这样便解决了训练时相邻state强关联的问题,于是我们得到算法
- 从trajectory中选取
个transition将它们放入replay buffer中
- 将新观测到的transition放入replay buffer中,删去最其中最早的旧的transition以确保replay buffer中至多有
个transition
- 使用mini batch选取
个transition
- 计算所有的TD target
- 计算使所有TD error
- 使用SGD更新参数
,使得损失函数
减小
2. 优先经验回放
2.1 抽取方法改进
我们上面提到的经验回放算法是一开始是随机选取个transition,但是我们知道并不是所以的transition都具有同等重要的地位的,我们不会认为普通关卡比boss关卡重要因为普通关卡太多了而打boss的机会非常宝贵,所以我们要有选择性地抽取transition,我们可以用选取那些总是和我们预期策略不一致的state,因为预期不一致所以我们总是没选对策略从而在这里输掉,那么什么叫预期不一致呢?没错,TD error就是衡量实际和预期的量呀,先定义
为transition
被抽中的概率根据这个思路我们得到下面两种角度不同的选取方法
- 依据表达式
确定概率相对大小,思路很直接,注意这里的
是为了保证
- 依据表达式
这里的
是 transition
根据
排序得到的序号,最大的序号为1
2.2 学习率修正
我们知道,在学习中我们碰到难的知识点要沉下心慢慢学,AI也是如此,每个transition由于不同的TD error 而获得不同的被抽取概率,这就代表其重要,AI需要在这里也就不能学的太快否则效果不好,也就是说不同的被抽取概率对应着不同的学习率,计算公式如下transition 的学习率