之前的文章介绍了Q-learning, 介绍了深度学习(Deep Learning),DQN顾名思义就是将两者结合起来。DeepMind公司也就是用DQN从玩各种电子游戏开始,直到训练出阿尔法狗打败了人类围棋选手。本文就简单地介绍一下DQN的基本概念。
1. Q-Learning 和 深度学习回顾
Q-learning是通过不停地探索和更新Q表中的Q值从而计算出机器人行动的最佳路径的,公式为
Q(s0,a2)新=Q(a0,a2) 旧 + α* [Q(s0,a2)目标 - Q(s0,a2)旧]
Q(s0,a2)目标 =R(s1) + γ*max Q(s1,a)
深度学习就是用神经网络来学习数据,常见的深度学习网络如全连接的,CNN,RNN等等。
2. DQN搭建
为什么玩电子游戏没办法直接用Q-learning 来学习最佳路径呢?因为电子游戏的每一帧图片就可以是一种状态,游戏中的角色又可以有多种动作(上下左右,下蹲跳跃等等)。如果用Q表来记录每一个动作所对应的状态,那么这张Q表将大到无法想象。
DQN不用Q表记录Q值,而是用神经网络来预测Q值,并通过不断更新神经网络从而学习到最优的行动路径。
DeepMind 用DQN来玩电子游戏,他们将游戏画面的像素转换成深度神经网络的输入数据(状态s),用CNN(卷积神经网络)来预测动作a(a1,a2,a3 ....), 和对应的Q(s, a1), Q(s, a2),Q(s, a3)...
然后算法通过更新神经网络(NN)中的参数(w, b ...),来更新NN,从而优化模型得到最优解。
3. 记忆库(Experience replay)和Fixed Q-target(固定Q-目标)
DQN中有两个神经网络(NN)一个参数相对固定的网络,我们叫做target-net,用来获取Q-目标(Q-target)的数值, 另外一个叫做eval_net用来获取Q-评估(Q-eval)的数值。
我们在训练神经网络参数时用到的损失函数(Loss function),实际上就是q_target 减 q_eval的结果 (loss = q_target- q_eval )。
反向传播真正训练的网络是只有一个,就是eval_net。target_net 只做正向传播得到q_target (q_target = r +γ*max Q(s,a)). 其中 Q(s,a)是若干个经过target-net正向传播的结果。
训练的数据是从记忆库中随机提取的,记忆库记录着每一个状态下的行动,奖励,和下一个状态的结果(s, a, r, s')。记忆库的大小有限,当记录满了数据之后,下一个数据会覆盖记忆库中的第一个数据,记忆库就是这样覆盖更新的。
q_target的网络target_net也会定期更新一下参数,由于target_net和eval_net的结构是一样的。更新q_target网络的参数就是直接将q_eval 的参数复制过来就行了。
见下图DQN的基本结构
![img_8e178531ddd2a2d86ed1ec43918955ba.png](https://yqfile.alicdn.com/img_8e178531ddd2a2d86ed1ec43918955ba.png?x-oss-process=image/resize,w_1400/format,webp)
随机抽取记忆库中的数据进行学习,打乱了经历之间的相关性,使得神经网络更新更有效率,Fixed Q-targets 使得target_net能够延迟更新参数从而也打乱了相关性。
Deep Mind 就是靠CNN, 记忆库和Fixed Q-target这三把利剑让机器学会了如何玩游戏,甚至在电子游戏中还能打败人类玩家。
参考文献: Playing Atari with Deep Reinforcement Learning
相关文章
AI学习笔记——求解最优MDP
AI学习笔记——MDP(Markov Decision Processes马可夫决策过程)简介
AI学习笔记——Q Learning
AI学习笔记——Sarsa算法
AI学习笔记——卷积神经网络(CNN)
文章首发steemit.com 为了方便墙内阅读,搬运至此,欢迎留言或者访问我的Steemit主页