Page 150 - 《软件学报》2021年第8期
P. 150
2432 Journal of Software 软件学报 Vol.32, No.8, August 2021
解耦开.传统的 DQN 在计算目标 Q 值 Q target 时,直接在目标网络输出中找出各个动作的最大 Q 值,这样虽然可
以快速让 Q 值朝着可能的优化目标靠拢,但很容易导致过度估计问题.而 Double DQN 在计算目标 Q 值时,先在
预测网络 Q 中找到最大 Q 值对应的动作,然后再利用这个选择出来的动作在目标网络 Q′中去计算 Q target ,降低
动作选择与目标 Q 值计算之间的相关性,能够有效地避免过度估计问题.在 Double DQN 中,目标 Q 值的计算方
式如式(8)所示.
Q target ( , )s a = t r + t γ ⋅ Q s ⎜ ′ ⎛ t+ 1 ,argmax( (Q s t+ 1 , ; ));a θ ′ θ − ⎞ ⎟ (8)
t
⎝ a′ ⎠
其中,s t 和 a t 分别代表当前的状态和动作,r t 代表当前这步行为获得的即时奖励,s t+1 和 a′分别代表下一步的状态
和选择的行为,γ代表奖励衰减因子.在计算目标 Q 值时,先在当前网络中获得最大 Q 值对应的动作,再将该动作
放到目标网络中计算 Q 值,最后与衰减因子相乘后,加上当前奖励作为目标 Q 值.
在计算出 Q target 之后,本文算法的损失函数参照 Huber 损失函数 [31] ,定义如式(9)所示.
⎧ 1 2
≤
⎪ ⎪ 2 (Q target − Q eval ) , for | Q target − Q eval | 1
Loss (Q target ,Q eval ) = ⎨ (9)
⎪ | Q − Q | − 1 , otherwise
⎪ ⎩ target eval 2
若目标 Q 值与预测 Q 值差值不大于 1,损失值等于目标 Q 值与预测 Q 值差值平方的 1/2;否则,损失值等于
目标 Q 值与预测 Q 值差值绝对值减去 1/2.
在选择样本进行训练时,本文采用了经验回放机制 [32] .之所以采用这一方法,是因为在学习过程中得到的样
本前后之间是有依赖关系的,样本之间关联性过大.而深度神经网络作为有监督学习模型,要求数据满足独立同
分布,经验回放机制通过“存储-采样”操作能够很好地打破相邻样本之间的数据关联性.具体做法是,从以前的经
验回放池中随机采样进行训练.这样不仅能够提高样本利用率,使一个样本能够被多次使用,也能减少参与训练
的样本之间的相关性.
2.2.3 算法描述
本文所使用的模型训练算法伪代码如下所示.
算法 1. 模型训练算法.
输入:经验回放大小 M,批大小 B,动作选择系数ε max ,ε min ,ε decay ,奖励衰减系数γ,训练轮数 E,每轮最大步数 T,
目标网络更新频率 F.
−
1 初始化网络参数θ,θ 为随机值;初始化经验回放池 m 容量为 M;初始化动作选择系数ε=ε max
2 For episode=1,E do:
3 获得路口初始状态 s
4 For step=1,T do:
5 以概率ε选择一个随机动作 a∈{0,1,2,3};否则, a = argmax( ( , ; ))Q s a θ
a
6 执行动作 a,得到奖励 r 以及下一状态 s′
7 存储状态转移四元组(s,a,r,s′)进 m
8 更新状态 s←s′
9 更新动作转移系数ε←max(ε min ,ε⋅ε decay )
10 从 m 中随机获取 B 个状态转移元组 m′
11 For (s j ,a j ,r j ,s j+1 ) in m′ do
12 计算 Q eval (s j ,a j )=Q eval (s j ,a j ;θ)
13 计算 Q target ( , )s a = t r + t γ ⋅ Q s ⎜ ′ ⎛ t+ 1 ,argmax( (Q s t+ 1 , ; ));a θ ′ θ − ⎞ ⎟
t
⎝ a′ ⎠
14 计算 Loss(Q target ,Q eval )
15 根据 Loss 值,利用 Adam 优化器更新参数θ