西湖大学的强化学习数学原理视频学习总结

本文详细介绍了强化学习的基本概念,如状态、动作、策略和回报,以及与之相关的数学原理。接着,探讨了贝尔曼公式及其在值迭代和策略迭代中的应用。此外,文章还涵盖了蒙特卡洛方法、TD学习和策略梯度算法,包括DQN和Actor-Critic方法,并强调了在实际问题中如何利用这些算法进行优化。最后,推荐了在OpenAIGym库中应用这些算法的实践资源。
摘要由CSDN通过智能技术生成

断断续续在B站把西湖大学赵世钰老师的‘【强化学习的数学原理】课程:从零开始到透彻理解’看完了,感觉非常棒的一门课程视频,涉及了一些基础的数学定理,也很多细节,用起来可以直接用,但如果不懂得整个脉络,基本上很短时间就忘得差不多了,因此,根据自己的思路整理起来,以便自己记忆。

一、基本概念或者名词

state  、state value  分别用S,和V(S)表示

 action、action value 用a和P(s,a)表示,

policy    用π表示

return  针对一个trajectory中所有的rewards加起来

reward  用r表示

trajectory

episode

discaunted rate 一般在计算return时加个折扣率,在(0,1)之间,最大就越远视。

强化学习一定要以随机变量,及由概率事件组成的视角出发,经常提到的期望就是在某个概率模型(决策)下的期望(平均值),一个s采取某个a有概率,一个s采取了a后跳到某个s'也有概率。

强化学习是基于markov desition process的,因此有以下概念

state transition probability    p(s‘|s,a)

reward probabiliy p(r|s,a)

policy  π(a|s)

强化学习的目标就是寻找最优policy,什么是最优策略,就是在最优策略下,V(s)每一个状态下的state value都大于或等于其他策略下对应state的V(s)

什么是state value呢,就是在某个状态s出发获得的reward期望,与return的区别就算,return是对应一条trajectory的,而state value是对应多条trajectory的(因为每个方向都会有概率,导致多条trajectroy的可能)

什么是action value ,就是在某个s下,采用某个action后得到的reward,与state value却别,从贝尔曼公式可以看出,它是state value 的一部分值,state value考虑了所有action的reward,但action value 只是在当前s下选择某个action得到的reward。

因此有以下公式表达:

 二、贝尔曼公式

matrix-vector 形式

 

 是在某个s下的即时reward的平均值,组起来就是一个向量,

是一个状态转移矩阵,即某个状态下转移到其他状态的概率,第i行代表第i个状态下跳到其他所有状态的概率,其实这个就是环境 模型

贝尔曼公式求解:两种方法

1.解析解方法

如果状态空间很大,没法求,一般不用

2.数值逼近方法

三,贝尔曼最优公式

首先理清state value 和action value的关系

 

 知道了所有v(s)就知道了q(s,a),知道了所有q(s,a)就知道了v(s)

 基于这个思路,就可以用迭代方法求出贝尔曼最优公式(应用到contraction mapping theorem)

 

 四、值迭代和策略迭代

1.value iteration

值迭代其实就是贝尔曼最优公式求解过程的迭代

2.policy iteration

策略迭代其实就是 先估计一个策略Π,根据这个策略利用贝尔曼公式求解所有v(s)(有两种方法,上面提到),有了所有v(s),一般用迭代发求出v(s),知道了v(s)就知道了所有

p(s,a),利用贪婪原理(跟值迭代哪个一样),得到一个新的策略,其核心就是p(s,a),策略就根据每个s下最大的p(s,a)来选取策略,这个以此迭代

3.value iteration和policy iteration的区别

很像,都是用贪婪算法去更新策略Π,但是value iteration 在更新v的时候是没有利用迭代求出v的,他迭代过程中的v不是在某个策略下的v(s),而只是一个优化过程中的一个值(取值于最大

q(s,a) ),但是策略迭代时每次策略迭代后,求的v是在该策略下的v(s),每次求v需要迭代,即大迭代里面有迭代。通俗讲就是值迭代时值关于state value 逼近的过程,而策略迭代时策略逼近最优策略的过程。

由于策略迭代中的每一次迭代中都有求解贝尔曼公式中求解v(s)的很多次迭代,而值迭代中只有一次,这样就两个极端,那么就有一个截断了的策略迭代,指定在每一轮策略下的v(s)求解不是无穷多次迭代,而是有限次的迭代即可,这就是truncated policy iteration。

五、蒙特卡洛算法

1.前面通过贝尔曼求解都是在环境模型已知的情况下,即每个state下可能采取的a的概率以及跳转到其他s的概率等,但更一般的时环境模型时不知道的,就有了后面的各种算法

蒙特卡洛算法(MC) 基本思想就是在policy iteration中不是通过模型计算v(s),进而计算 

q(s,a),再更新策略的,而是通过经验数据,计算v(s)的,其他的就跟策略更新一样。

MC  basic

在模型不知道的情况下,如状态转移矩阵 不知道的情况下,在policy iteration中是不能用迭代的方法求出V(s)的,但是我们有经验(数据),利用q(s,a)最原始定义(计算他的期望return)如下:

跑很多次,每个状态下都跑过很多条episode,这样就有在s下很多次return,直接求这些经验数据的平均,就得到了q(s,a),一句话利用经验数据求出,而不是模型得到。这是蒙特卡洛算法的核心

2.MC basic 的一个算法推广 MC exploring starts

其根本是解决MC basic 里面经验数据利用不高的弊端,以为每一个(s,a)下的episode只利用一次,就是计算q(s,a),但这个episode其实还包含了其他的(s‘,a),因此可以利用起来就有了这个MC exploring starts

3.前面哪个算法需要生成的episode尽可能的遍历或所有(s,a),但物理世界里很难做到,这就催生了另外一个 算法,MC - ε greedy

其思想就是,之前在更新策略里面,在某个s下找到让q(s,a)最大的那个action,并让采用这个action的概率为1,其他统统为0,这就导致在某给s下采用a的概率几种在其中一个里面,很硬,可以变得更soft,最大的那个q(s,a) 的a的概率不给1,而是给比1小的概率,其他的也给个大于0的的概率,即下面

六,第6章和第7章都是有关一些数学算法的理论和推到

第6章是 stochastic approximation 和stochastic gradient descent

这个理论其实就是去优化g(x)=0问题,这个g(x)经常是求一个梯度的函数,因为梯度=0一般是一个极值,其思想就是我有很多数据,利用这些数据去求解g(x)=0

基于这个理论才推出了第7章的temporal -difference (TD)(这个数学理论推出的东西很像那个神经网络里面优化梯度的SGD,移动指数加权平均)

我的理解就是这个理论就是用来处理实时数据的,MC算法都是episode出来后才处理,有了TD算法就可以在每一次action后得到一次数据就处理,不用等长长的episode跑完后才处理。如实时更新v(s)

 基于TD的理论,就推出了sarsa、n_stepsarsa、expect sarsa 和 Q_learning 

这些算法都是围绕着下面这个公式

 这些算法就是TD target()不同而产生的,

前面的值迭代或者策略迭代 后出来的结果时每个状态可能都是有最大的v(s),但是TD求出来后可能只有当前你关系的那个出发点的v(s)时最大的,其他出发点很可能不是最优的。

七、value function approximation

前面的值迭代或者策略迭代,或者TD算法下的sarsa等算法,其v(s)或者q(s,a)都是通过离散的方式记录,即像一个网格里面,一个格子对应一个相关的值,这样如果状态空间和action空间很多,就需要很多个格子(空间)且没有泛化型,这个原因就有了value function approximation。即用经验数据去拟合一个函数去求值v(s)或者q(s,a),这个拟合函数可以是线性也可也时非线性,现在都是用神经网络去拟合

 利用sarsa和Q_learning  的TD target代入就得到了sarsa和Q_learning结合value function approximation的算法:

 

整个框架跟之前的sarsa基本一样,就是更新q(s,a)时,是通过拟合函数更新参数以获得q的更新。

Q_learning与value function approximation结合就有如下

 

 而利用神经网络去拟合函数q(s,a,w)就推出的DQN(deep  Q_learning)

 为了用梯度下降的方法优化q(s,a,w),就用了一种方法去做,就是两个网络,一个是主网络main network,即后面那个q(S,A,w),还有一个是target network,就是q(S‘,a,w),主网络是实时更新w的,但是target network是隔一段时间从住网络那里copy  w来更新w的

八、policy gradient

前面的value function approximation是通过经验数据拟合一个函数求value(state value或者action value),进而更新policy,这里是直接用经验数据拟合应给策略函数求策略值,而不再像离散的情况得到策略。

拟合函数首先要考虑的是loss fuction ,进而用梯度的方法求极值,这里的拟合函数记为:

π(a|s,θ),θ就是参数,现在一般用神经网络拟合。

用函数的方式求策略,需要定义一个标量的数,以优化求最大值,这里引出两个计算标量的metric:

1.关于state value的,求出最大的平均值,就是求期望

这里d(s)与v(s)有两种不同的关系,一个是互相独立的,一个是相关的,独立的就简单直接是均匀分布,即1/|s|状态空间个数分之一,这个计做v0,相关的就复杂点就是之前提过的有这样的关系:

其实 可以写成 

2.是关于reward的,实际上它是等价于第一种关于state value的

 在具体中,有以下做法

 

 

 这个就是关于r的metric

 上面两个metric其实是等价的:

 哪如何求策略metric的梯度呢?

有一个统一的写法:

 

 

 为什么要引入ln呢,主要是为了写成Expecation的形式:

有Expectation,可以用采用近似,

 因为带ln,因此要保证π(a|s,θ)大于0,需要引入softmax fuction

 在引入神经网络后,其实很简单,就是最后输出层加一个softmax 激活函数

 由于有expectation,因此可以用采用近似,以此梯度可以用以下方式求出:

 近似q(s,a)的方法有两种,一个是蒙特卡洛和TD

 那如何采样呢?

 

 用蒙特卡洛的方法求q(s,a)就是REINFORCE方法,这个方法是offline的,因为蒙特卡洛需要跑完一个episode后可以,以此下面θ的更新是在遍历完条episode才更新。

九、Actor-Critic methods (AC)

Actor --- policy update

Critic --- policy evaluation

1.QAC 

跟REINFORCE 差不多,只是在计算action value(即q(s,a))时方法不一样,这里用的是SARSA的方法,属于TD的算法,因为可以一边跑episode,每一步就可以更新action value数据,进而更新策略函数中的参数θ,从而更新策略:

 这里就需要两个神经网络,一个是q(s,a,w)还有一个是Π(a|s,θ)

2.A2C(advance AC)

其实就是引入了一个baseline(偏置),不改变期望(平均值),但影响方差

其目的就是每次采样的action value 不是以其值作为影响因素,而是以每次采样其相对平均值的幅值来作为影响因素,即类似神经网络那种namorlization

baseline的选择就是v(s),不要忘了,v(s)就是在该s下的action value(q(a,s))的期望,即平均。这样就有了:

 

 这样就只有一个v(s)的网络,而不需要在来一个q(s,a),当然后面还有一个Π的神经网络。

 3.off_policy actor critic

前面提到的都是on_policy 的,当前的数据需要根据当前的策略更新,这就导致之前的历史数据没法用了,这里就有一个方法可以充分利用历史数据,即你可以先跑,有完整的数据后再计算,即off policy的。

这个方法要用到important sampling 理论,属于概率论方面的数学公式

大致的意思是,我在一个已知的概率分布下有数据,现在我在一个新的概率分布下有数据,但我不知道这个新的概率分布是怎样的,那么我可以通过前面一个已知概率分布的经验知识去求这个新的概率分布。

 

 基于这个important sampling 就有了这个off policy的AC算法

 

 其他的跟A2C一样

 

这个β(a|s}是一个定值,历史数据 

4.Deterministic actor-critic

前面的方法都是stotastic的,但假如action有无穷多的时候,stotastic就不行了,需要deterministic的

 这里的μ就是直接把状态空间转成动作空间,就是给我一个s,就直接输出一个动作,比如往上走或往下走

有了定义,就需要找目标函数

 

 

 这个deterministic 看得有点懵,会用就好吧

十、这些算法都有去openai的gym库里找环境进行实现,这里推荐b站的一个视频,里面提供有一些代码,可以去跑跑,b站搜 “强化学习 简明教程 代码实战”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值