白话强化学习系列(一)看完你还不懂怎么写强化学习你来找我

由于项目需求,需要学习强化学习,深度学习都学了,一直没接触过强化学习,希望能系统学习。可是看了很多文章,很多博客,我到现在对alphaZero还是理解不了,没看到一篇简单又深入的AZ分析,于是决定动手自己写一篇,在实践的基础上,通过理论推导,尽量用白话的方式展现AZ,并提供尽可能多的实践技巧。

学习AZ之前,我认为对Qlearning和pg都需要有较为深刻的理解,所以决定从头按照DQN、DPG、AlphaZero的顺序,将强化学习做一个梳理。希望系列文章能强化自己对强化学习的理解与应用。若能顺带帮助大家最好了。

写之前,先将引用放出来,以表达对前人的敬意。

  • 莫烦python的强化学习内容(虽然我没实现莫烦的代码,但是先学习了他的视频,已经很详细了,但个人觉得理论不够清楚,包括应用也不够具体)
  • alphaZero的五子棋实现(这篇文章是我学习AZ的主要代码来源)
  • 论文(原论文肯定要读一读的):
    AlphaZero: Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
    Playing Atari with Deep Reinforcement Learning(深度Q学习论文)
  • 书籍:《强化学习:原理与python实现》,肖智清,机械工业出版社(穷人买不起实体书,看的电子版,内容很充实,很全面,但是公式排版不够好,推导也太繁琐)
  • Diving deeper into Reinforcement Learning with Q-Learning(内容参考freecodecamp的这篇文章)注:机器之心有一篇翻译(通过 Q-learning 深入理解强化学习)

Q-learning

个人觉得Q-Learning是最简单的强化学习,便于训练,实现也很容易。从它开始理解强化学习是中偷懒的方式。

什么是强化学习

强化学习其实也是一个机器学习问题,学习得到一个智能体,能够根据环境,以最大效益的方式做出行动。专业的表达是,智能体能够根据当前状态(State),采取一定的动作(Action),并获得一定的回报(Reward),强化学习的目的就是最大化回报。

从定义也能看出,输入是状态S,输出是动作A,那么策略 π ( s , a ) \pi(s,a) π(s,a)(根据当前状态如何采取动作,用数据库的话说就是S和A的关系)就是强化学习的主要成果了。

目的和成果就是强化学习的两个关键点,行业认定的说法是:回报和策略。强化学习试图使得智能体具备通过策略最大化回报的能力。

学习强化学习的时候,记住这一点,策略和回报,很多东西都会变得自然而然,不会被公式和一大堆推理给搞迷糊。

举个简单的栗子,出生不久的小孩,你让他笑,他笑了,你就给个糖吃,他不笑你就打他,时间长了,他就知道,在你让他笑这个状态S下,他就得笑A,因为有糖吃这个回报比挨打这个回报也好太多了,他学会的就是S到A的策略 π \pi π。(这个栗子有些凶残了)

强化学习基本流程

学QL之前,还是提醒大家,牢记策略和回报。强化学习是一种机器学习,概率论还是主要方法,用概率来表示决策(其实就是马尔科夫决策过程),在状态S下,可以采取动作的概率分布,就是策略,取概率最大的动作作为策略的结果。下面开始推导:
π ( s , a ) \pi(s,a) π(s,a)表示S和A的关系(或者说S状态下采取动作A的概率)
取动作 A = { a 1 , a 2 , . . . . , a t , . . . } A=\{a_1, a_2,....,a_t,...\} A={ a1,a2,....,at,...}表示动作的集合
状态 S = { s 1 , s 2 , . . . . , s t , . . . . } S=\{s_1,s_2,....,s_t,....\} S={ s1,s2,....,st,....}表示状态的集合
当智能体做出决策时,先获取状态 s t s_t st下,然后计算A中每个动作的概率 π ( s t , a ) \pi(s_t,a) π(st,a),取概率最大的动作即:
a ∗ = arg max ⁡ a ∈ A π ( s t , a ) a^* = \argmax_{a\in A}\pi(s_t, a) a=aAargmaxπ(st,a)
以上是智能体的基本决策过程,那么 π \pi π是怎么来的呢?别忘了我们聊了这么久,回报还没说到。

看看经典的骑士和公主的故事,如图一。
骑士和公主

图一 骑士和工作的故事

假设你是一名骑士,并且你需要拯救上面的地图里被困在城堡中的公主。让我先定义回报的规则:

  • 你一次只能移动一步,并得-1 分,即扣1分
  • 如果碰到了一个敌人,得-100 分,并且游戏结束。
  • 如果进入到城堡中,得 100 分,游戏结束

每个状态都可以做一个动作,并产生新动作,直到游戏结束,记路径 τ = { s 1 , a 1 , r , s 2 , a 2 , r 2 . . . . , s t , a t , r t . . . , s T , r T } \tau=\{s_1, a_1,r_ ,s_2, a_2,r_2....,s_t,a_t,r_t...,s_T,r_T\} τ={ s1,a1,r,s2,a2,r2....,st,at,rt...,sT,rT}表示从开始状态到游戏结束状态的序列,每个状态s都可以做出决策,做一个动作a,并获得一定的回报r。还记得我们的目标吗?最大化回报:
τ ∗ = arg max ⁡ τ ∑ t = 0 T r t \tau^* = \argmax _{\tau} \sum^T_{t=0} r_t τ=τargmaxt=0Trt
目标列出来了,完全可以通过暴力求解,从初始状态到胜利,用一个表记录下每个路径和回报(Q-learning的概念Q-table就是这个记录表,暂时不用管),总回报最大的那条路径就是解(可能不止一条路径)。那我们求解的策略是什么呢,给定一个初始状态,通过查表,我就知道这个初始状态到结束最大回报的那个路径,一个路径中状态对应的动作就是策略。此时将表中查得的路径 τ \tau τ中各个状态 s t s_t st对应的动作 a t a_t at的策略设为1,即:
π ( s t , a t ) = 1 \pi(s_t, a_t) = 1 π(s

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值