DQN(Nature DQN)算法流程讲解

DQN相较于传统的强化学习算法(Q-learning)有三大重要的改进:

(1)引入深度学习中的神经网络,利用神经网络去拟合Q-learning中的Q表,解决了Q-learning中,当状态维数过高时产生的“维数灾难”问题;

(2)引入目标网络,利用延后更新的目标网络计算目标Q值,极大的提高了网络训练的稳定性和收敛性;

(3)引入经验回放机制,使得在进行网络更新时输入的数据符合独立同分布,打破了数据间的相关性。

DQN(Nature DQN)算法流程讲解_第1张图片 上图是DQN的详细算法流程,讲解如下:

 首先,算法开始前随机选择一个初始状态,然后基于这个状态选择执行动作,这里需要进行一个判断,即是通过Q-Network选择一个Q值最大对应的动作,还是在动作空间中随机选择一个动作。

PS:在程序编程中,由于刚开始时,Q-Network中的相关参数是随机的,所以在经验池存满之前,通常将\varepsilon设置的很小,即初期基本都是随机选择动作。

在动作选择结束后,agent将会在环境(Environment)中执行这个动作,随后环境会返回下一状态(S_)和奖励(R),这时将四元组(S,A,R,S_)存入经验池。

接下来将下一个状态(S_)视为当前状态(S),重复以上步骤,直至将经验池存满。

当经验池存满之后,DQN中的网络开始更新。即开始从经验池中随机采样,将采样得到的奖励(R)和下一个状态(S_)送入目标网络计算下一Q值(y),并将y送入Q-Network计算loss值,开始更新Q-Network。往后就是agent与环境交互,产生经验(S,A,R,S_),并将经验放入经验池,然后从经验池中采样更新Q-Network,周而复始,直到Q-Network完成收敛。

loss = \frac{1}{2}(Q(S) - y))^{2}

PS:DQN中目标网络的参数更新是硬更新,即主网络(Q-Network)参数更新一定步数后,将主网络更新后的参数全部复制给目标网络(Target Q-Network)。

PS:在程序编程中,通常将\varepsilon设置成随训练步数的增加而递增,即agent越来越信任Q-Network来指导动作。

你可能感兴趣的:(学习,python,pycharm)