强化学习--DoubleDQN
系列文章目录强化学习提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、强化学习是什么?二、核心算法(深度强化学习)Double DQN总结前言强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实
系列文章目录
强化学习
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。
一、强化学习是什么?
强化学习是智能体(Agent)以“试错”的方式进行学习,通过与环境进行交互获得的奖赏指导行为,目标是使智能体获得最大的奖赏,强化学习不同于连接主义学习中的监督学习,主要表现在强化信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作。由于外部环境提供的信息很少,RLS必须靠自身的经历进行学习。通过这种方式,RLS在行动-评价的环境中获得知识,改进行动方案以适应环境。
理解:强化学习其实就是和人一样,一开始是什么都不懂的,所谓吃一堑长一智,他像一个新生的孩子,它在不断的试错过程中慢慢知道了做什么有奖励,做什么对得到奖励会有一定的价值,做什么会被打。在这个过程中不会像监督学习一样有个师傅带你,完全需要自己去摸索,就像修仙宗门一样,有背景的宗门弟子是继承掌门之位(监督),创立宗门的人是开山立派(强化),必须一步一个脚印去不断成长。
其实强化学习吸引我的就是因为它主要使用在游戏上,例如:
在 Flappy bird 这个游戏中,我们需要简单的点击操作来控制小鸟,躲过各种水管,飞的越远越好,因为飞的越远就能获得更高的积分奖励。
机器有一个玩家小鸟——Agent
需要控制小鸟飞的更远——目标
整个游戏过程中需要躲避各种水管——环境
躲避水管的方法是让小鸟用力飞一下——行动
飞的越远,就会获得越多的积分——奖励
二、核心算法(深度强化学习)Double DQN
Double DQN算法,从Double DQN相对于Natural DQN(传统DQN)的优势:
DQN基于Q-Learning,Q-Learning中有Qmax,Qmax会导致Q现实当中的过估计(overestimate)。而Double DQN就是用来解决出现的过估计问题的。在实际问题中,如果你输出你的DQN的Q值,可能就会发现,Q值都超级大,这就是出现了overestimate。
DQN和Double DQN最大的不同在于:Q_target的计算方法。
DQN的Q_target计算方法:
直接将新的状态输入老的神经网络,返回最大的Q值
Double DQN的计算方法:
案例是将两个网络根据一个小游戏环境进行的训练:
sess = tf.Session()
with tf.variable_scope('Natural_DQN'):
natural_DQN = DoubleDQN(
n_actions=ACTION_SPACE, n_features=3, memory_size=MEMORY_SIZE,
e_greedy_increment=0.001, double_q=False, sess=sess
)
with tf.variable_scope('Double_DQN'):
double_DQN = DoubleDQN(
n_actions=ACTION_SPACE, n_features=3, memory_size=MEMORY_SIZE,
e_greedy_increment=0.001, double_q=True, sess=sess, output_graph=True)
sess.run(tf.global_variables_initializer())
-------------------不同点如下:-------------------
if self.double_q:
max_act4next = np.argmax(q_eval4next, axis=1) # the action that brings the highest value is evaluated by q_eval
selected_q_next = q_next[batch_index, max_act4next] # Double DQN, select q_next depending on above actions
else:
selected_q_next = np.max(q_next, axis=1) # the natural DQN
红色传统DQN的值普遍都比double高,会导致overestimate(过估计)。
总结
DoubleDQN以及后面以DQN为基础的变体都是为了提高DQN的效率,因为DQN相当于一个大众化的容器,很多东西都适合,但是却无法提升训练效果的性能,所以如果可以优化成DoubleDQN或者后面的DuelingDQN,就尽量优化性能。
更多推荐
所有评论(0)