多智能体时代的降临

多智能体强化学习第一篇—Deep Q-learning

Q-learning 算法

强化学习问题一般以马尔可夫过程为问题背景,将问题建模为( S , A , P , r , γ S,A,P,r,\gamma S,A,P,r,γ) 形式,其中 S S S为状态空间, A A A为动作空间, P P P为状态转移函数, r r r为收益函数。agent通过在某个状态选择某个动作与环境进行交互,使得环境发生动态演变,agent可以获取相应的收益。强化学习问题的目标就是找到一组最优的动作序列 π \pi π,使得agent得到的最终收益最大。
一种很自然的想法便是,对于特定的一个状态,我给定每一个动作一个值去表示该动作的价值,那么在状态推演的过程中,我在每一次的状态上都选择价值最大的动作,那么在整个的推演过程中所获得的最终收益就会最大,这变产生的value-base的学派,该学派以价值函数为关键点,用Q函数来表示状态-动作价值,即 Q π ( s , a ) Q_\pi(s,a) Qπ​(s,a)表示策略 π \pi π在状态s时动作a的价值。
因为强化学习的目标是最大化收益函数,并且马尔可夫过程是一个动态推演过程,设计到时序的问题,所以有两个公式可以作为收益函数的表示方法。以有限时间步长为例,一种表示形式是平均收益奖励函数,即 R π = E [ r 1 + r 2 + ⋯ + r T T ∣ π ] R_\pi=E[\frac{r_1+r_2+\cdots+r_T}{T}|\pi] Rπ​=E[Tr1​+r2​+⋯+rT​​∣π],另一种是带有折扣因子的奖励函数,即 R π = E [ r 1 + γ r 2 + γ 2 r 3 + ⋯ + γ T − 1 r T ∣ π ] R_\pi=E[r_1+\gamma r_2 + \gamma ^{2}r_3+\cdots+\gamma^{T-1}r_T|\pi] Rπ​=E[r1​+γr2​+γ2r3​+⋯+γT−1rT​∣π],其中折扣因子的存在有两个作用,一是为了更加看重当前收益,降低未来收益的重要性,二是为了当T趋于无穷大时,收益函数保持收敛。由马尔可夫控制动态理论,最大化全程收益等价于最大化每一个时刻后的收益,所以动作价值函数定义为 Q π ( s t , a t ) = E [ r t + 1 + γ r t + 2 + ⋯ + γ T − t − 1 r T ∣ π ] Q_\pi(s_t,a_t)=E[r_{t+1}+\gamma r_{t+2}+\cdots+\gamma ^{T-t-1}r_{T}|\pi] Qπ​(st​,at​)=E[rt+1​+γrt+2​+⋯+γT−t−1rT​∣π]。
Q-learning是一种model-free的方法,动态迭代的方法使得 Q t Q_t Qt​逐步趋近于 Q ∗ Q^* Q∗,迭代公式为
Q t + 1 ( s t , a t ) = Q t ( s t , a t ) + α ( r t + 1 + γ Q t ( s t + 1 , a t + 1 ) − Q t ( s t , a t ) ) Q_{t+1}(s_t,a_t) = Q_t(s_t,a_t)+\alpha(r_{t+1}+\gamma Q_t(s_{t+1},a_{t+1})-Q_t(s_t,a_t)) Qt+1​(st​,at​)=Qt​(st​,at​)+α(rt+1​+γQt​(st+1​,at+1​)−Qt​(st​,at​))
其中 α \alpha α为学习率。
Q-learning算法的收敛性已被证明。随着t的不断增大,最终 Q t ( s t , a t ) Q_t(s_t,a_t) Qt​(st​,at​)会收敛到最优状态-动作价值函数 Q ∗ ( s t , a t ) Q^*(s_t,a_t) Q∗(st​,at​)。其中 Q ∗ ( s t , a t ) = m a x π Q π ( s t , a t ) Q^*(s_t,a_t)=max_\pi Q_\pi(s_t,a_t) Q∗(st​,at​)=maxπ​Qπ​(st​,at​)满足贝尔曼方程:
Q ∗ ( s t , a t ) = E [ r t + 1 + σ Q ∗ ( s t + 1 , a t + 1 ) ] Q^*(s_t,a_t)=E[r_{t+1}+\sigma Q^*(s_{t+1},a_{t+1})] Q∗(st​,at​)=E[rt+1​+σQ∗(st+1​,at+1​)]
Q ∗ Q^* Q∗对应的最优策略记为 π ∗ \pi^* π∗。
通常使用Q-learning算法的方法是建立一个Q表格,以状态为纵索引,以动作为索引。Q表格用来存储状态-动作价值,每一次迭代便对表格内的内容进行更新,Q-learning算法的局限性便由此产生,当状态空间和动作空间过于庞大时,表格所占据的内存便会很大,并且遍历表格需要更大的复杂度,如果每一个状态的动作集合不同,那么表格中也会存储很多无效值,造成内存的浪费。深度Q-learning算法会很好的解决这个问题。

Deep Q-learning算法

Deep Q-learning算法用神经网络拟合状态-动作价值函数,可以实现端对端的训练。
Deep Q-learnig的拥有两个网络结构,一个是用来训练的预测网络 Q ( s , a ; θ ) Q(s,a;\theta) Q(s,a;θ),一个是用来拟合真实值的目标网络 Q ( s , a ; θ ^ ) Q(s,a;\hat{\theta}) Q(s,a;θ^),利用 L ( θ ) = E [ ( r t + 1 + σ Q ( s t + 1 , a t + 1 ; θ ^ ) − Q ( s t , a t ) ) 2 ] L(\theta)=E[(r_{t+1}+\sigma Q(s_{t+1},a_{t+1};\hat{\theta}) - Q(s_t,a_t))^2] L(θ)=E[(rt+1​+σQ(st+1​,at+1​;θ^)−Q(st​,at​))2]作为优化函数对网络进行反向传播进行训练。下图为DQN网络的代码结构:
多智能体时代的降临

Deep Q-learning有如下两个创新点:
一 replay buffer网络使用一个buffer存储agent与环境的交互样本,在训练时,随机从buffer中采样,这样的优点有:1.可以提高样本的利用率 2.可以避免样本之间的强相关性,因为深度学习的训练要求样本集是独立同分布的,而强化学习的样本具有强烈的时序性,所以将样本数据放在buffer中进行打乱采样,可以对网络进行有效的训练
二 target network 上面说到DQN有两个网络架构:预测网络和目标网络,因为深度学习的训练要求label是固定不变的,所以在DQN中要求目标网络的参数更新速度慢于预测网络,通常几十个epoch才更新一次target network,这样才会使得网络的训练更加稳定。

上一篇:Ruby learning-Ruby使用技巧,语法以及变量类型(未完)


下一篇:Python:文件路径处理