强化学习-----DQN(Deep Q-network)
一、什么是DQN
DQN(Deep Q-Network)是一种基于深度学习和强化学习的算法,由DeepMind提出,用于解决离散动作空间下的马尔科夫决策过程(MDP)问题。它是首个成功将深度学习应用于解决强化学习任务的算法之一。DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。
那什么是Q-leaning?可以看上一篇文章
Q-learning是一种经典的强化学习算法,用于解决马尔可夫决策过程(Markov Decision Process,MDP)中的控制问题。它是基于值迭代(Value Iteration)的思想,通过估计每个状态动作对的价值函数Q值来指导智能体在每个状态下选择最佳的动作。
其算法的基本思想跟主要优势如下:
Q-Learning是强化学习算法中value-based的算法,Q即为Q(s,a),就是在某一个时刻的state状态下,采取动作a能够获得收益的期望,环境会根据agent的动作反馈相应的reward奖赏,所以算法的主要思想就是将state和action构建成一张Q_table表来存储Q值,然后根据Q值来选取能够获得最大收益的动作。
但是这种算法存在很大的局限性。在现实中很多情况下,强化学习任务所面临的状态空间是连续的,存在无穷多个状态,这种情况就不能再使用表格的方式存储价值函数。
为了解决这个问题,我们可以用一个函数Q(s,a;w)来近似动作-价值Q(s,a),称为价值函数近似Value Function Approximation,我们用神经网络来生成这个函数Q(s,a;w),称为Q网络(Deep Q-network),w是神经网络训练的参数。
二、DQN的训练过程
如上图所示,神经网络的的输入是状态s,输出是对所有动作a的打分
神经网络的训练是一个最优化问题,我们需要表示网络输出和标签值之间的差值,作为损失函数,目标是让损失函数最小化,手段是通过反向传播使用梯度下降的方法来更新神经网络的参数。
那么Q网络的标签值/目标值是什么呢?
TD target: y t = r t + γ ⋅ max a Q ( s t + 1 , a ; w ) y_{t}=r_{t}+\gamma \cdot \max _{a} Q\left(s_{t+1}, a ; w\right) yt=rt+γ⋅maxaQ(st+1,a;w)
1、初始化网络,输入状态 s t s_t st,输出 s t s_t st下所有动作的Q值
2、 利用策略(例如 ε − greddy),选择一个动作 a t ,把 a t 输入到环境中,获得新状态 s t + 1 和 r ; \text { 利用策略(例如 } \varepsilon-\text { greddy),选择一个动作 } a_{t} \text { ,把 } a_{t} \text { 输入到环境中,获得新状态 } s_{t+1} \text { 和 } \mathrm{r} \text {; } 利用策略(例如 ε− greddy),选择一个动作 at ,把 at 输入到环境中,获得新状态 st+1 和 r;
3、 计算TD target: y t = r t + γ ⋅ max a Q ( s t + 1 , a ; w ) \text { 计算TD target: } y_{t}=r_{t}+\gamma \cdot \max _{a} Q\left(s_{t+1}, a ; w\right) 计算TD target: yt=rt+γ⋅maxaQ(st+1,a;w)
4、 计算损失函数: L = 1 / 2 [ y t − Q ( s , a ; w ) ] 2 \text { 计算损失函数: } L=1 / 2\left[y_{t}-Q(s, a ; w)\right]^{2} 计算损失函数: L=1/2[yt−Q(s,a;w)]2
5、 更新 Q 参数,使得 Q ( s t , a t ) 尽可能接近 y t ,可以把它当做回归问题,利用梯度下降做更新工作 ; 更新 \mathrm{Q} 参数,使得 \mathrm{Q}\left(s_{t}, a_{t}\right) 尽可能接近 y_{t} ,可以把它当做回归问题,利用梯度下降做更新工作; 更新Q参数,使得Q(s