迷雾探险3 | 强化学习入门

2018-12-16  本文已影响40人  臻甄

看完《迷雾探险2》的深度学习入门,又发现了一些不错的文章:

通俗易懂的深度学习发展介绍:从最基本的神经网络算法(单个神经元模型的提出,到两层和三层的简单神经网络,到BP算法,到深度神经网络CNN)讲到增强学习
增强学习系列之(一):增强学习介绍:从动态规划算法和PageRank算法(和增强学习很像)讲到增强学习算法。
增强学习系列之(二):实现一个简单的增强学习的例子:Q-Learning算法+epsilon_greedy策略+tensorflow训练神经网络==>Deep Q Learning
增强学习系列之(三):实现一个打砖块的游戏:在openai的gym里面,针对breakout这款游戏的v3版本,实现AI打游戏。

强化学习的定义和通俗理解

1.定义

假定一个智能体(agent),在一个未知的环境中(当前状态state),采取了一个行动(action),然后收获了一个回报(return),并进入了下一个状态。最终目的是求解一个策略让 agent的回报最大化。


RL系统的概念图.png

增强学习当中经常用到的术语:

2. 强化学习最基础的解法:MPD(马尔可夫决策过程)

一个马尔可夫决策过程由五元组组成:M = (S, A, Psa, γ, R)

MDP 的动态过程如下:某个智能体(agent)的初始状态为s0,然后从 A 中挑选一个动作a0执行,执行后,agent 按Psa概率随机转移到了下一个s1状态,s1∈ Ps0a0。然后再执行一个动作a1,就转移到了s2,接下来再执行a2…,我们可以用下面的图表示状态转移的过程。
如果回报r是根据状态s和动作a得到的,则MDP还可以表示成下图:

3. 值函数

上面我们给出了MDP的定义,作为一个智能体(agent),当它在决定下一步应该走什么时,最简单的方式就是看下Reward函数的值是多少,即比较走不同动作的回报,从而做出决定。但是就像下棋的时候,我们每走一步都会向后考虑,所谓“走一步看三步”,所以这里我们只看一步即一次Reward函数是不够的,这就引出了值函数(Value Function)也叫折算累积回报(discounted cumulative reward)

3.1 状态值函数(state value function)

当我们遵循某个策略π,我们将值函数定义如下,对于状态序列中的每下一个状态,我们都设置一个衰减系数γ: 我们将上面的式子写作递推的样子如下: 另外当策略π,在状态s时,我们可以确定唯一的动作a,但是s经过动作a会进入哪个状态是不唯一的,比如同样是掷骰子操作,可能得到的状态有6种,那么利用Bellman等式我们便可以得到下面的公式: 再根据我们最初增强学习的目的,我们便可以得出,求V的目的就是想找到一个当前状态s下,最优的行动策略π,表示如下:

通俗的讲就是说,我需要判断一下当前的这个状态的价值是多少,从而让我可以选择最大化价值的那个状态来进行操作。当前状态的价值,就是之后的状态的价值的叠加,只不过越往后,噪声越大,就需要让他们的权重减小。而后面的所有状态的价值和,又可以写成下一个状态的价值。当前状态的reward我们是可以直接获得的,所以我们只需要计算下一个状态的权值函数就可以了

3.2 动作值函数(action value function)

上面我们的值函数的只与状态s有关,如果与状态s和动作a都有关,便称为动作值函数,即所谓的Q函数,如下:

从上式我们可以看出,我们不仅仅依赖状态s和策略π,并且还依赖于动作a。

综上我们可以将MDP的最优策略定义如下:

关于MDP的求解主要分为值迭代和策略迭代,分别站在不同的角度对MDP进行求解,这里我们不在赘述,网上有很多相关资料。下面我们简单阐述下动作值函数的值迭代求解方式,即所谓的Q-learning

4. Q-learning

Q学习的基本迭代公式如下:

从公式中我们也可以看出它是一种值迭代方式,因为我们每次更新的是Q函数的值,而非策略。简单起见,整理一个简单的例子加以说明。

详细的分析可以参考:Q-learning的一个极简的例子

假设我们有这样一个房间:

我们的目的是训练一个机器人,使得它在图中的任意一个房间都能够到达房间外。

OK,我们对房间进行建模: 并得到reward矩阵,那么机器人走到这个房间之后,就知道了,它需要走到相邻的房间,才能走到最后的目标房间,所以相邻的房间也被赋予了权重。 : 通过迭代,初始点也就有了权重。这个时候机器人就很省心了,只要向当前节点周围分值最高的点走过去就可以了。通过一下过程的迭代我们最终得出了我们的结果Q矩阵

可以看出,我们的机器人现在无论在哪个房间,都可以利用我们的Q矩阵顺利的走到屋外。

总结一下上面这个例子:增强学习的特征,就是从现有的状态出发,不断的优化自己的策略

5. 基于NEXT算法的马里奥AI游戏机器人

NEAT算法几个核心的概念是:

下图展示了算法从最一开始简单的神经网络,一直训练到后期的网络 利用NEAT算法实现马里奥的只能通关的基本思想便是,利用上面NEAT算法的基本观点,从游戏内存中获取实时的游戏数据,判断马里奥是否死忙、计算Fitness值、判断马里奥是否通关等,从而将这些作为神经网络的输入,最后输出对马里奥的操作,包括上下左右跳跃等操作,如下图:

大多数该算法实现马里奥的智能通关都依赖于模拟器,运用lua语言编写相应脚本,获取游戏数据并操作马里奥,真实例子见NeuroEvolution with MarI/O

马里奥实现效果图

6. 基于Deep Reinforcement Learning的马里奥AI实现

NEAT算法是相对提出较早的算法,在2013年大名鼎鼎的DeepMind提出了一种深度增强学习的算法,该算法主要结合了CNN和Q-Learning两种算法,DeepMind的研究人员将该算法应用在Atari游戏机中的多种小游戏中进行AI通关。

其基本算法核心便是我们之前介绍的CNN和增强学习的Q-Learning,游戏智能通关的基本流程如下图: 利用CNN来识别游戏总马里奥的状态,并利用增强学习算法做出动作选择,然后根据新的返回状态和历史状态来计算reward函数从而反馈给Q函数进行迭代,不断的训练直到游戏能够通关。研究人员在训练了一个游戏后,将相同的参数用在别的游戏中发现也是适用的,说明该算法具有一定的普遍性。下图反映了一个学习的过程

而同样的方法,将DRL应用在马里奥上,github上有一个开源的实现方式:aleju/mario-ai,其最终的实现效果图如下:

在CNN识别过程中,每4帧图像,才会进行一次CNN识别,这是识别速率的问题,图中曲线反映了直接回报函数和简介回报函数。

7. 增强学习常用策略:

  1. 蒙特卡洛方法:暴力遍历所有episode
    简单而言,蒙特卡洛方法就是对这个策略所有可能的结果求平均。我们向前走了以后,再做一个action,根据这个式子,直到episode结束,求出收益的和,就是向前走这个动作的一个采样。我们再不断地在这个状态采样,然后来求平均。等到采样变得非常非常多的时候,我们的统计值就接近期望值了。所以蒙特卡洛方法是一个非常暴力,非常直观的方法。

  2. 动态规划方法:在有向无环图结构的问题中可用
    这个其实就类似于我们在开篇的那个例子里面提到的。我们要确定向前走的这个动作的收益,那么就需要将它所有的子问题先全都计算完,然后取最大值,就是它的收益了。这个方法的好处就是效率高,遍历一遍就可以了;而缺点也很明显,需要子结构问题是一个有向无环图。

  3. Temporal Difference(时间差分)
    (1)时间差分,简称TD,是对蒙特卡洛方法的一种简化,也是在实际中应用最多的一种算法。
    (2)同样是要计算向前走的这个行为的价值的期望值,那么它就等于向前走了到达的那个状态的reward,加上它再转移到后继状态的期望值。有人会说这不就递归下去就是遍历了吗?不是,我们就观测前面一个状态,剩下的价值我们不去真的计算了,而是用神经网络来估算。这样我们不需要计算就可以得到它的价值了。这就是TD算法里面最简单的TD(0)算法。

8. 结合神经网络的增强学习——DQN

结合神经网络来对state和reward进行估算:很神奇的居然能收敛。
(1)可以把神经网络当成一个黑盒,输入是一个状态,输出是这个状态的价值。
(2)整个系统在运作过程中,通过现有的策略,产生了一些数据,获得的这些数据,在计算Reward值的时候会有所修正。然后我们用修正的值和状态,作为神经网络进行输入,再进行训练。最后的结果显示,这样做是可以收敛的,牛逼啊!

(3)神经网络的运用包括训练和预测两部分嘛,训练的时候输入是state,和这个state相应的value 。预测的时候输入是state,输出是这个state预估的value 结合神经网络的增强学习

9. 不同于DQN的Policy Gradient

10. 结合DQN和Policy Gradient的Actor Critic

11.DDPG(Deep Deterministic Policy Gradient)

12. A3C(Asynchronous Advantage Actor-Critic)


9-12节来源:强化学习入门简单实例 DQN

上一篇下一篇

猜你喜欢

热点阅读