【论文笔记】Aleph_star

本文提出的是一种类A star算法的路径规划算法,特点是运用深度神经网络代替了传统的A star算法中的启发式函数h(x),并称之为N star算法。最后用这种方法与N-Step Deep Q-Learning进行了,效率取得了显著的提升。

算法特点

特点:
1.用神经网络(特别是卷积神经网络)代替了基于规则的启发式
2.权重用强化学习来学习,具体是通过执行动作和获得奖励与模拟环境互动
3.算法基于模型,episodes不是线性的,所有已访问的states和可能的actions都保存在优先队列中,状态的转换保存在一个树型结构中
4.动作的value Q沿着树反向传播,以满足一个时差方程的变体
5.与MCTS(蒙特卡洛树搜索)不同,反向 传播只在树完成时执行,且只执行一次
6.一般的时差方程选择所有action中最大的Q值,而本文中选用“soft”的最大值的变体,如下:
【论文笔记】Aleph_star_第1张图片
(公式1)
r (s,a)代表在state S下执行action A的奖励;
γ为折扣系数;
A代表一组可能的actions,在不丧失一般性的前提下,假设这些actions在所有可能的states中都是相似的;
x代表在state s下执行action a所产生的state;
w是一个action的value权重因子,后面会解释;

  1. 启发式Hθ由一个具有参数θ的深度神经网络表示,并将传感器 S 作为输入,它们本身是state的函数
  2. 启发式算法利用某些损失函数来预测action的value,在参考的实现中使用:
    【论文笔记】Aleph_star_第2张图片
    (公式2)

其中,Qs是所有可能的a∈A的action在state s下的 action value的一个向量

9.实验中,得到的生成树非常高效,几乎没有分支,这个特性使得它在运行时可以使用。原因是,尽管在训练过程中使用了随机探索(exploration),但是在评估过程中使用了纯开发(exploitation).这与UCT(树的置信上限)方法相比或好或差取决于启发式的质量,依然有待讨论;

算法具体实现


N star 是一种基于模型的强化学习算法,它使用了agent(智能体)与模拟环境交互的常规概念。
训练算法由上图算法1中描述的随机构建初始化树组成。树的基本构成部分就是节点,它包含维持树型结构必不可少的信息(指向父节点和子节点的指针),以及 根据公式1要求的加权时间差将Q values 从叶节点反向传播到根结点的重要信息
1.反向传播只在树完成时执行,并且一次性对所有节点完成
2.添加新节点时,选择action不需要从根结点进行“rollout(随机推出)”,可能的actions和其父节点会被添加到最大化C+Qa(C为无折扣的总累积奖励)的优先队列中,并从该优先队列中检索。
3.actions的选择不仅最大化未来的折扣奖励(像DQN(深度强化网络)一样),而且考虑到了实际的奖励
4.树被反向传播后,经验被存储在经验缓冲区(experience buffer),这个经验缓冲区被用来使用某种梯度下降法更新启发式的权值θ
5.经验缓冲区被实现为一个元组数组[(Qs,S(s)),…],每个元组都包含一个向量,这个向量由action values和相同状态的传感器 构成
这个经验缓冲区(buffer)是通过迭代树的结点,计算传感器,并将新元组push进数组来构建的
6.公式1中的权重W(x,b)是action b之后探索的子节点的数量。这将为更加彻底的探索action带来更大的权重
7.对于一个好的启发式来说,大多数反向传播都是通过单一的主树树干进行的,因为它将会主导权重
8.在极端情况下,这将会收敛于N-step DQN.
9.对于完全未探索的结点,我们设所有的action的权值w=1;也可能使用其他的加权方案,例如设w=0, 和 w(argmax(Q))=1 (通过action value最大化分支进行反向传播时)(传统的Q-Learning),软最大化策略,或者根据结点深度进行加权
10. 也可以使用权重w的阈值,但我们发现简单的加权策略已经足够好了
11. 根据公式1的反向传播很容易实现,如果子节点总是在双亲节点之后线性的添加进树的数组,只需要反向迭代就可以保证当前节点的子节点都已被访问。
12. 最后,每一次训练迭代之后,探索参数 e和学习率都会更新,就像DQN中一样。
13. 许多应用于DQN中的改进也可以应用于N star算法中。经验重放可以包含基于损失的优先级(在伴随代码中实现);可以添加基于curiosity的探索奖励;可以修剪奖励;可以使用目标网络,等等
14. 在参考的实现中,没有使用目标网络,而是从经验缓冲区中移除了太老的节点,这样做的好处是每次经验只评估一次启发式
15. 另一个细节是关于优先队列的实现,为了搞笑的插入和删除values,它通过使用堆来实现
16. 高效的从堆中弹出随机value很难实现,因此我们不删除values,只是按照使用的方式对它们进行标记
17. 当已使用的values与未使用的values的数量之比超过阈值时,一个垃圾收集周期将会运行,它将会在没有标记条目的情况下重建data-structure
18. 对于运行时算法,启发式可以通过计算传感器输入,评估启发式并执行使得action value最大化的action来单独使用
19. 另外一个选择是在启发式的引导下且e=0的条件下创建一个小树,并作用于从根节点到最后一个添加的节点的action上。当e=0时,最后添加的节点最大化Qa+node.C也就是累积奖励+“过去”奖励。这与仅仅最大化Q的DQN和MCTS不同。如果启发式比较好,树会比MCTS 薄很多,使得即使很小的树也会很高效
20. 注意,算法1中假设episode无限长,也就是结束一个episode被认为是一件坏事,所以会得到最小的value 为0。这需要积极的奖励和积极的启发式。这种启发式行为可以通过多种方式执行,如在神经网络的末端通过一个abs()函数进行非线性传播
21. 算法1也假设一个树最少有两个节点,因为更小的树是否仍然可以被称为树是有争议的。

实验实施

我们实现了一个基于像素的驾驶环境,传感器表示为一个84✖️84的灰度图像,启发式架构与Minh et al.(2013)使用的架构高度相似,它包含了一个16个8✖️8的滤波器,步长为4的卷积层,后面跟着的是一个不可学习的层归一化,和一个a=0.3的leaky-relu non-linearity.

第二个卷积层包括了32个4✖️4的滤波器,其步长为2,后面跟着 layer normalization 和leaky-relu.

最后一个隐藏层是和256个线性单元,一个layer normalization ,以及 leaky-relus 完全连接的

输出层包括35个线性单元,作为A中actions的数量(7个转向角和5个加速度)

传感器如图1所示,没有使用多帧作为输入,而且由于模拟环境是我们自己开发的,我们选择将时间信息编码进像素值:汽车相对于马路的速度被编码进了背景和车本身当中;汽车相对于其他车的速度编码进了汽车目标车辆的颜色中;最后,转向角被编码进了图像的垂直边缘的颜色中。

奖励的使用和车速成正比,并乘以一个因子,这个因子偏好中心位置和与车道相切的角度。

一个小的固定的“keep-alive”奖励也被加入了每一个模拟时间步骤中。

启发式采用SGD进行训练,learning rate保持为恒定的0.01,gamma=0.98,batch size=64,e从初始值0.5到0.01变化

树的最大规模是5500个结点,训练最多持续1000次迭代

N-step DQN的实现非常接近N star,除了没有优先队列,且不允许有分支

还有更多的细节,都在参考的实现中

你可能感兴趣的:(自动驾驶,论文阅读,算法,机器学习)