聊一聊我对强化学习的理解
对应的代码请访问我的GitHub:fxyang-bupt(可能你进去之后发现什么都没有,那是因为我注册了新的账号还在整理,这并不影响你先follow一下我的GitHub~)
目前正在把我的文字内容和代码整理成网络书籍的方式发布出来,敬请期待…
我很想把它做成一套简单易懂的白话系列,奈何做这种事真的不简单。我参考了很多资料,比如:
《白话强化学习与PyTorch》
《深入浅出强化学习:原理与入门》
《强化学习入门:从原理到实践》
“莫烦Python”
博客园 “刘建平Pinard” 的博客
北大 “ShusenTang” 的GitHub
……
这是一门比较前言的理论,目前正在发光发热。我并不推荐大家一开始就阅读大部头的《Reinforcement Learning》这本书,假期我花了一个月的时间去啃,效果并不好。反而是这种“平易近人”的教程更适合入门。不过各种“平易近人”的教程都会充斥着笔者自己的理解,这种事容易陷入到自嗨的怪圈,笔者自认为自己举了一个特别通俗的例子,而读者却一头雾水。
所以我把我在学习和实践过程中遇到的困惑,又做了二次解读的加工。有了这个系列的文章,希望能够有所贡献。成为帮助你入门的N多资料的其中之一。
我的代码用的框架比较杂,PyTorch TensorFlow1 TensorFlow2……都有。有人会在意TensorFlow2出来以后,1不是被淘汰了,为什么还要用?
5G都出了多长时间了,你那个卡的要死的4G手机换了吗?企业也是一样的。所以还是得用…
希望毕业后我也能成为像 莫烦 和 Charlotte77 一样的知识分享者~这是自己的一个小兴趣
价值函数的引入
强化学习问题归结为:智能体Agent在给定的Environment中,观察它的状态State,做出动作Action,并得到一定的奖励Reward。我希望能在这个环境中,通过不断地探索,找到一套最为合理地行为策略policy。
我把Agent从初始状态开始一直到状态结束的过程称为一幕(episode)数据。通过计算一幕数据累计Reward的大小来判断policy的好坏程度。而我们把累计Reward转化为两个概念:状态的价值(用 v v v表示),在某状态下行为的价值(用 q q q表示)。他们统称为价值函数。
如果在一幕数据中,经历的状态全部都是价值最高的状态,或者做出的行为都是价值最高的行为,那么这就根据当前的价值函数得出的最优策略。
状态价值函数
在策略 π \pi π和状态 s s s下,采取一系列行动会到达终止状态。期间得到的累计折扣回报就是该策略下,状态 s s s的价值,用 v π ( s ) v_\pi(s) vπ(s)表示。因为从状态 s s s开始到终止状态的路径不唯一,为了确定性的衡量状态 s s s的价值, v π ( s ) v_\pi(s) vπ(s)一般是一个期望函数:
v π ( s ) = E π ( G t ∣ S t = s ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s ) v_\pi(s)=E_\pi(G_t|S_t=s)=E_\pi(R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...|S_t=s) vπ(s)=Eπ(Gt∣St=s)=Eπ(Rt+1+γRt+2+γ2Rt+3+...∣St=s)
它的物理意义可以理解为,如果你到达了状态 s s s,那么接下来直到你到达终止状态的回报值我就已经知道是 v π ( s ) v_\pi(s) vπ(s)了。
与上面相同,还有一个概念:(状态-动作)价值函数
q π ( s , a ) = E π ( G t ∣ S t = s , A t = a ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s , A t = a ) q_\pi(s,a)=E_\pi(G_t|S_t=s,A_t=a)\\=E_\pi(R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...|S_t=s,A_t=a) qπ(s,a)=Eπ(Gt∣S