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 优化器更新参数θ
   145   146   147   148   149   150   151   152   153   154   155