简单的强化习实例讲解:概念篇

2017-09-06 安兴乐-siler 更多博文 » 博客 » GitHub »

计算机科学

原文链接 http://www.lelovepan.cn/2017/09/06/%E7%AE%80%E5%8D%95%E7%9A%84%E5%A2%9E%E5%BC%BA%E5%AD%A6%E4%B9%A0-%E5%AE%9E%E4%BE%8B%E7%B2%BE%E8%AE%B2-%E6%A6%82%E5%BF%B5%E7%AF%87.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


什么是强化学习

简单通俗来讲就是Agent在Environment中探索找到最优策略Policy,使得Reward最多的学习策略(游戏)。它是一个MDP(Markov Decision Process)马尔可夫决策过程:一个状态$S_{t}$是MarKov当且仅当 $P(S_{t+1}|S_{t})=P(S_{t+1}|S_{t},S_{t-1},...,S_{0})$。再通俗点讲就是未来只取决于现在。

不过扯这么个概念无非显摆数学很重要,西瓜书讲的更加的深入,我就是从西瓜书学的。不过按我这里讲的,你可以不用再从头推这么多大头的公式就可以大致理解算法过程。

Q表

我们假设刚开始遇见一个新的环境,不知道这里的生存法则,那就需要探索来找到每种“动作”所产生的“效益”(反馈),以后在这个环境中的行为就可以基于长时间在这里学习到的经验来决策。假设我们的生活就像游戏:和下面的大雄一样,刚来到这个世界上,父母还真就没告诉我们那些大道理“好好学习才能挣大钱”,那么我们就需要自己来长时间的反复探索(一切可以重来,但必须从头来过)。

大雄在$S_{1}$状态有两个选择:$a_{1}$睡觉和$a_{2}$认真学习。他如果选择了睡觉,有可能会梦见得到了静香,而如果好好学习,可能因为自己笨,作业不会做而备受打击。假设他还是选择了睡觉,那么他得到了一个“奖赏”(梦里见静香),达到了另外一个状态$S_{2}$,可是这个状态很不好:大雄因为成绩太差被他妈打了!之后他还可以继续选择“睡觉”或是“学习”.... 这样的循环往复很多次,最终以他娶了胖妹or静香作为状态的结束。

那么,我们定义每一种状态的每种行为都有一个得分:Q(S,a)。我们可以把上述过程用一个Q表来表示出来,

... .睡觉. .学习.
S1  -2 -1

根据上图,我们知道大雄采取某一种行动还会有额外的“奖励”。虽然睡觉比学习的状态得分低,但是“奖励”高:睡觉可以梦到静香,学习可能会倍受打击。大雄继续采取某个行动后,Q表会再次的“更新”(添加新状态,或者更改值)。大雄脑子一抽风,决定学习了,这次发现学习后不再是啥都不会了,而是成绩有所提高,于是这个状态下的行为终于有了好的效果。

于是我们更新这个Q表:

... .睡觉. .学习.
S1 -2 -1
S2 -4 1

这里的Q表显示如果大雄继续睡觉,那么他的状态就比较糟糕了;如果他一直学习的话,开始的S1可能也不是很好,但是S2状态下的学习会变好一点(坚持学习起效果了)。

那么他到底应该如何来做出选择呢(这里请忘掉我们已经有的先验知识:“好好学习才是正道”,因为我们是从白痴的状态来的)?

迭代更新

我们假定此时(S1状态)的决策是基于此时的行为带来的奖励,加上这个行为后的“结果”。也就是说如果睡觉(a1),那么奖励比较大(做个美梦),但是下一个状态的“后果”却不好;如果学习(a2),那么奖励很小(学习很累啊),但是下一个状态的“后果”却很好。所以我们得到S1状态下采取a1(a2则替换为对应的R)的Q值为:$$Q_{target}(S_{1},a_{1})=R_{1} + 𝛾maxQ(S_{2})$$
但是实际上的Q值$Q_{eval}(S_{1},a_{1})$刚开始的时候却是我们随便初始化的。所以这里我们就有了一个优化目标,就是让真实的$Q{S_{1},a_{1}}$等于$R_{1} + 𝛾*maxQ(S_{2})$。而 Q目标和Q现实之间有一个差距(理想与现实之间总是有差距的),我们定义为$$差距=Q_{target}(S_{1},a_{1})-Q_{eval}(S_{1},a_{1})$$。我们让$$Q(S_{1},a_{1}) := Q(S_{1},a_{1}) + 𝛼
差距$$。

  • 我们有了$Q_{target}(S_{1},a_{1})=R_{1} + 𝛾*maxQ(S)$,直接按照这个来更新Q值不好吗?
  • 为什么更新的时候$Q_{target}(S_{1},a_{1})=R_{1} + 𝛾*maxQ(S)$中取的是max值呢? 
  • 这里的为什么加上一个𝛼呢?它有什么具体含义呢?

我们需要明白,在开始的时候,我们随便初始化了一个Q表,里面都是随机值,并不精确,我们只能通过每一次的行动,让Q值不断的逼近$R + 𝛾*maxQ(S)$。,上述更新迭代公式,不正像极了反向传导中的梯度更新吗? 我们引入Q-learning的算法流程:

实例

(未完待续)