Reinforcement Learning 1

本文深入探讨强化学习的基本概念,包括RL的应用如AlphaGo、聊天机器人和视频游戏。详细解析Policy Gradient方法,涵盖Actor的选择、梯度上升更新、基线函数引入及优势函数的理解,旨在构建高效学习策略。

1. RL几个应用

Learning to play AlphaGo

  • Supervised(监督学习的方式)
    • 从老师那里学习,即通过打标签的方式学习
    • 比如看棋谱学,但棋谱是人下的,人下的那一步就是最优的吗?
  • Reinforement Learning
    • 从经验中学习,其实人可能都不知道哪一步是最优的
  • AlphaGo的学习方式
    • 先做Supervised Learning,从高手棋谱中学习
    • 通过Supervised Learning训练出两个模型,他们互相博弈

Learning a Chat-Bot

  • 如何评判生成句子的好坏是关键问题,总不能一直“See you”循环下去。
  • 预测将来可能出现的做法
    • 在RL中引入生成对抗网络
    • 判别生成的句子是否符合真实数据的分布

Playing Video Game

  • 两个常用的游戏平台
    • Gym
    • Universe
  • episode,一局游戏,从开始到结束

2. RL的概念

RL的难点

  • Reward Delay 奖励延迟

    比如,打飞机游戏中,只有开火才会拿到Reward,但左右操作不会。但左右操作又会影响最后得分的高低,毕竟就算一直开火而不躲避也会导致被子弹击中从而导致游戏结束。所以,这就需要机器能够合理规划以获得长期的利益。

  • Agent采取的行为会影响之后的行为

    Agent需要充分的探索它所处的环境。还是以打飞机游戏为例,若是Agent从来都没有尝试过开火,那么它永远无法得到高分。

RL常用的做法

  • Policy-Based,主要目的是学习一个Actor
  • Value-Based,主要目的是学习一个Critic
  • 那现在比较流行的做法是:Actor + Critic

3. RL三个步骤

Neural Network as Actor

  • Input:机器的观察,Vector或者是Matrix
  • OutPut:输出层每一个神经元代表一个动作

Goodness of Actor 1

  • 给定一个Actor πθ(s)\pi_\theta(s)πθ(s),神经网络就是Actor,参数为θ\thetaθ 。使用πθ(t)\pi_\theta(t)πθ(t)来玩游戏,那么总体的Reward如下:

    Total Reward:Rθ=∑t=1TrtTotal~Reward : R_\theta = \sum_{t=1}^Tr_tTotal Reward:Rθ=t=1Trt

  • 由于环境是一直在变化的(输入会变),比如打游戏玩家不同的位置、画面等,所以就算是同一个Actor玩千百次游戏最后得到的RθR_\thetaRθ也会不一样。而强化学习的目的是最大化Reward从而选择出最佳的Actor,那么直接最大化RθR_\thetaRθ是没有意义的,而应该最大化所有RθR_\thetaRθ的期望。

  • 定义Rˉθ\bar{R}_\thetaRˉθRθR_\thetaRθ的期望值,所以最终的目的应该是最大化Rˉθ\bar{R}_\thetaRˉθ。当玩的所有局获得的Reward期望最大时,就说明这个Actor整体上达到了较好的能力。(可用随机放回采样钞票来类比,若是整体期望很大,那么盒子里钞票值普遍都比较大,即Reward普遍比较大)。

Goodness of Actor 2

  • 将一个episode考虑为一个τ\tauτ,即一场游戏的开始到结束这个过程。这个过程有千百种,有些经常出现,有些不太出现。τ\tauτ的定义如下:

    τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}\tau = \{s_1, a_1, r_1, s_2, a_2, r_2, ..., s_T, a_T, r_T\}τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}

    其中sis_isi代表当前的状态,aia_iai代表采取的动作,rir_iri代表收获的Reward。

  • 当一个Actor开始玩游戏的时候,每一个τ\tauτ都有一定的概率出现,我们用P(τ∣θ)P(\tau|\theta)P(τθ)来代表不同的τ\tauτ出现的概率。那么所有RθR_\thetaRθ的期望为:

    Rˉθ=∑τR(τ)P(τ∣θ)\bar{R}_\theta = \sum_{\tau}R(\tau)P(\tau|\theta)Rˉθ=τR(τ)P(τθ)

    这个公式的理解方式类比于离散随机变量求期望:假设可以穷举所有的τ\tauτ,那么Rˉθ\bar{R}_\thetaRˉθ应该为每种τ\tauτ出现的机率乘上该τ\tauτ能够获取的总体Reward的总值。

  • Rˉθ\bar{R}_\thetaRˉθ的进一步思考:由于总体的目标是希望选择的Actor在不同的τ\tauτ下都能够获得尽可能高的RewardRewardReward,那么使得Rˉθ\bar{R}_\thetaRˉθ最大的那个Actor就是我们所需要的。

  • 由于前穷举所有的τ\tauτ可能性很低,那么只能用一个Actor玩N场游戏得到{τ1,τ2,...,τ3}\{\tau^1, \tau^2, ..., \tau^3\}{τ1,τ2,...,τ3}来类比所有的τ\tauτ。也就相当于从P(τ∣θ)P(\tau|\theta)P(τθ)中采样N次,那么每个τ\tauτ出现的概率应该为1N\frac{1}{N}N1,所以Rˉθ\bar{R}_\thetaRˉθ近似为:

    Rˉθ=∑tR(τ)P(τ∣θ)≈1N∑1NR(τn)\bar{R}_\theta = \sum_tR(\tau)P(\tau|\theta) \approx \frac{1}{N}\sum_1^NR(\tau^n)Rˉθ=tR(τ)P(τθ)N11NR(τn)

    相当于把N个τ\tauτR(τ)R(\tau)R(τ)求和并取平均。

Pick the best Actor 1

  • 根据前文,已将问题转化为:

    θ∗=arg maxθRˉθ=arg maxθ ∑τR(τ)P(τ∣θ)\theta^* = arg~\underset{\theta}{max}\bar{R}_\theta = arg~\underset{\theta}{max}~\sum_{\tau}R(\tau)P(\tau|\theta)θ=arg θmaxRˉθ=arg θmax τR(τ)P(τθ)

  • 那么就可以采用梯度上升来更新模型的参数

    • Start with θ0\theta^0θ0
    • θ1=θ0+η∇Rˉθ0\theta^1 = \theta^0 + \eta\nabla\bar{R}_{\theta^0}θ1=θ0+ηRˉθ0
    • θ2=θ1+η∇Rˉθ1\theta^2 = \theta^1 + \eta\nabla\bar{R}_{\theta^1}θ2=θ1+ηRˉθ1

Pick the best Actor 2

那么∇Rˉθ\nabla\bar{R}_\thetaRˉθ到底该怎么求呢?

  • 根据Rˉθ\bar{R}_\thetaRˉθ的公式,可以得到:

    ∇Rˉθ=∑τR(τ)∇P(τ∣θ)\nabla\bar{R}_\theta = \sum_\tau R(\tau)\nabla P(\tau|\theta)Rˉθ=τR(τ)P(τθ)

    • 其中,R(τ)R(\tau)R(τ)θ\thetaθ并没有关系,所以不需要求梯度。因为Reward是环境给的,比如游戏中的计分板,我们不需要计分的具体过程和规则,只要拿到值就可以了。
    • 所以即使R(τ)R(\tau)R(τ)不可微,不知道其具体的functionfunctionfunction也没有关系,只要给了输入能够给输出就行。
  • 再进一步看上面的式子,可以推导出:

    ∇Rˉθ=∑τR(τ)∇P(τ∣θ)=∑τR(τ)P(τ∣θ)∇P(τ∣θ)P(τ∣θ)≈1N∑n=1NR(τn)∇log⁡P(τn∣θ)\nabla\bar{R}_\theta = \sum_\tau R(\tau)\nabla P(\tau|\theta) \\ = \sum_\tau R(\tau)P(\tau|\theta)\frac{\nabla P(\tau|\theta)}{P(\tau|\theta)} \\ \approx \frac{1}{N}\sum_{n=1}^N R(\tau^n) \nabla\log P(\tau^n|\theta)Rˉθ=τR(τ)P(τθ)=τR(τ)P(τθ)P(τθ)P(τθ)N1n=1NR(τn)logP(τnθ)

    约等于已在上文解释,因为无法穷取所有的τ\tauτ,故只能采样类比。那么每个τ\tauτ出现的概率应该为1N\frac{1}{N}N1,可以提到求和前面。

Pick the best Actor 3

根据上文的推导,问题就转化为了∇log⁡P(τn∣θ)=?\nabla\log P(\tau^n|\theta) = ?logP(τnθ)=?,那么该怎么求呢?

  • 前文定义τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}\tau = \{s_1, a_1, r_1, s_2, a_2, r_2, ..., s_T, a_T, r_T\}τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT},故可以得到:

    P(τ∣θ)=P(s1)P(a1∣s1,θ)P(r1,s2∣s1,a1)P(a2∣s2,θ)...P(\tau|\theta) = P(s_1)P(a_1|s_1, \theta)P(r_1,s_2|s_1, a_1)P(a_2|s_2, \theta)...P(τθ)=P(s1)P(a1s1,θ)P(r1,s2s1,a1)P(a2s2,θ)...

    • P(s1)P(s_1)P(s1)代表游戏开始画面出现的几率
    • P(a1∣s1,θ)P(a_1|s_1, \theta)P(a1s1,θ)代表θ1\theta_1θ1下的Actor,在s1s_1s1状态下,取动作a1a_1a1的机率
    • P(r1,s2∣s1,a1)P(r_1,s_2|s_1, a_1)P(r1,s2s1,a1)代表,在s1s_1s1状态下采取动作a1a_1a1,获取r1r_1r1并指向状态s2s_2s2的概率
  • 那么,上面的式子可以进一步写为:

    P(τ∣θ)=P(s1)∏t=1TP(at∣st,θ)P(rt,st+1∣st,at)=log⁡P(s1)+∑t=1Tlog⁡P(at∣st,θ)+log⁡P(rt,st+1∣st,at)P(\tau|\theta) = P(s_1)\prod_{t=1}^TP(a_t|s_t, \theta)P(r_t, s_{t+1}|s_t, a_t) \\ = \log P(s_1) + \sum_{t=1}^T \log P(a_t|s_t,\theta) + \log P(r_t, s_{t+1}|s_t, a_t)P(τθ)=P(s1)t=1TP(atst,θ)P(rt,st+1st,at)=logP(s1)+t=1TlogP(atst,θ)+logP(rt,st+1st,at)

    其中log⁡P(s1)\log P(s_1)logP(s1)log⁡P(rt,st+1∣st,at)\log P(r_t, s_{t+1}|s_t, a_t)logP(rt,st+1st,at)都是与θ\thetaθ无关的项,与游戏环境相关。

  • 于是,可以得到:

    ∇log⁡P(τ∣θ)=∑t=1T∇log⁡P(at∣st,θ)\nabla \log P(\tau|\theta) = \sum_{t=1}^T \nabla \log P(a_t|s_t, \theta)logP(τθ)=t=1TlogP(atst,θ)

Pick the best Actor 4

根据上文的推导,最终的问题可以转化为如下式子:

∇Rˉθ≈1N∑n=1NR(τn)∇log⁡P(τn∣θ)=1N∑n=1NR(τn)∑t=1Tn∇log⁡P(atn∣stn,θ)=1N∑n=1N∑t=1TnR(τn)∇log⁡P(atn∣stn,θ)\nabla \bar{R}_\theta \approx \frac{1}{N}\sum_{n=1}^N R(\tau^n) \nabla\log P(\tau^n|\theta) \\ = \frac{1}{N}\sum_{n=1}^N R(\tau^n) \sum_{t=1}^{T_n} \nabla \log P(a_t^n|s_t^n, \theta) \\ = \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n)\nabla \log P(a_t^n|s_t^n, \theta)RˉθN1n=1NR(τn)logP(τnθ)=N1n=1NR(τn)t=1TnlogP(atnstn,θ)=N1n=1Nt=1TnR(τn)logP(atnstn,θ)

最后得到的一项式子是非常直觉的,可以体现学习过程中很多重要的信息,将在下面一一列出。

  • 机器在τn\tau^nτn过程中,在stns_t^nstn的状态下采取行动atna_t^natn导致

    • R(τn)R(\tau^n)R(τn)为正,则希望这个atna_t^natn出现的机率越大越好,需调整θ\thetaθ来增加P(atn∣stn)P(a_t^n|s_t^n)P(atnstn)
    • R(τn)R(\tau^n)R(τn)为负,则希望这个atna_t^natn出现的机率越小越好,需调整θ\thetaθ来降低P(atn∣stn)P(a_t^n|s_t^n)P(atnstn)
  • P(atn∣stn,θ)P(a_t^n|s_t^n, \theta)P(atnstn,θ)的意思是:在某一τ\tauτ过程中,在ttt时刻的所观测的状态stns_t^nstn,采取动作atna_t^natn的概率。

    • P(atn∣stn,θ)P(a_t^n|s_t^n, \theta)P(atnstn,θ)乘以的是该τ\tauτ整体的Reward R(τn)R(\tau^n)R(τn),而不是当前时刻ttt采取行动后的Reward R(τtn)R(\tau^n_t)R(τtn)
    • 所以,训练完毕后的Actor每次采取的动作往往是为了最大化整体的利益,而不是局部的利益。这就可以避免前文提到的问题:打飞机只有开火才能获得Reward,而左移、右移不会有任何Reward,但会对最大化Reward有帮助,所以机器每次做的决策要考虑全局而不是一直开火。
  • ∇log⁡P(atn∣stn,θ)\nabla \log P(a_t^n|s_t^n, \theta)logP(atnstn,θ)为什么要取log⁡\loglog?分母P(atn∣stn,θ)P(a_t^n|s_t^n, \theta)P(atnstn,θ)的作用是什么呢?

    ∇log⁡P(atn∣stn,θ)=∇P(atn∣stn,θ)P(atn∣stn,θ)\nabla \log P(a_t^n|s_t^n, \theta) = \frac{\nabla P(a_t^n|s_t^n, \theta)}{P(a_t^n|s_t^n, \theta)}logP(atnstn,θ)=P(atnstn,θ)P(atnstn,θ)

    • 举个例子,如有以下的τ\tauτ过程
      • τ13\tau^{13}τ13,采取行动a,R(τ13)=2R(\tau^{13}) = 2R(τ13)=2
      • τ15\tau^{15}τ15,采取行动b,R(τ15)=1R(\tau^{15}) = 1R(τ15)=1
      • τ17\tau^{17}τ17,采取行动b,R(τ17)=1R(\tau^{17}) = 1R(τ17)=1
      • τ33\tau^{33}τ33,采取行动b,R(τ33)=1R(\tau^{33}) = 1R(τ33)=1
    • 虽然动作a会有更高的Reward,但由于动作b出现次数很多,在求和所有R之后,b动作带来的总Reward会更高;这就导致机器将b出现的机率调高,以获得总体的Reward更高。故虽然a可以获取更高的Reward,机器也会限制它的发生机率。
  • 在看了上述例子之后,我们再回头解释分母P(atn∣stn,θ)P(a_t^n|s_t^n, \theta)P(atnstn,θ)存在的意义,其实∇P(atn∣stn,θ)P(atn∣stn,θ)\frac{\nabla P(a_t^n|s_t^n, \theta)}{P(a_t^n|s_t^n, \theta)}P(atnstn,θ)P(atnstn,θ)相当于对各种action出现的次数做了normalize,从而使得机器不会偏好出现次数过高的action,而是综合评价出现次数和单次行动获得的Reward。

通过上述对目标函数直观的解释和理解,我们可以发现目标函数不仅保证了全局利益,也能保证得到做出合理决策的Actor。

Add a Baseline 1

若是R(τ)nR(\tau)^nR(τ)n一直为正,会发生什么事情?

  • 理想状态下,不会有什么问题。若有三个动作a、b、c,通过充分的采样,三个动作都发生了,那么三个动作在进行梯度下降的时候都会有相应的提升。

  • 但若采样不充分,导致某个动作没有发生如动作a没有发生,就会使得动作b、c的机率增加,而a的机率减小。所以,我们希望R(τn)R(\tau^n)R(τn)有正有负,那么可以添加一项b≈E(R(τn))b \approx E(R(\tau^n))bE(R(τn))

    ∇Rˉθ=1N∑n=1N∑t=1Tn(R(τn)−b)∇log⁡P(atn∣stn,θ)\nabla \bar{R}_\theta = \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b)\nabla \log P(a_t^n|s_t^n, \theta)Rˉθ=N1n=1Nt=1Tn(R(τn)b)logP(atnstn,θ)

Add a BaseLine 2

  • 假设有两个τ\tauτ的片段如下:

    • (sa,a1,r=5), (sb,a2,r=0), (sc,a3,r=−2), R=3(s_a, a_1, r=5),~(s_b, a_2, r=0),~(s_c, a_3, r=-2), ~ R=3(sa,a1,r=5), (sb,a2,r=0), (sc,a3,r=2), R=3
    • (sa,a1,r=−5), (sb,a2,r=0), (sc,a3,r=−2),R=−7(s_a, a_1, r=-5),~(s_b, a_2, r=0),~(s_c, a_3, r=-2), R=-7(sa,a1,r=5), (sb,a2,r=0), (sc,a3,r=2),R=7
  • 在上面两个例子中,执行a2a_2a2并不会获得太差的Reward。但在原始的Policy Gradient中,乘上的权重为R(τn)R(\tau^n)R(τn),即一场游戏的总Reward,这虽然能考虑全局收益,但同时拉低了某些好的action出现的概率,从而使得当前Actor出现偏好。

  • 如在上述的例子中,a2a_2a2之前采取的动作其实和a2a_2a2将产生的结果并没有任何关系,a2a_2a2之后产生的结果只和a2a_2a2之后的动作相关。故可以修改Policy Gradient为:

    ∇Rθˉ≈1N∑n=1N∑t=1Tn[∑t′=tTnrt′n−b]∇logPθ(atn∣stn)\nabla\bar{R_\theta} \approx \frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}[\sum_{t^{'}=t}^{T_n}r_{t^{'}}^n - b]\nabla logP_\theta(a_t^n|s_t^n)RθˉN1n=1Nt=1Tn[t=tTnrtnb]logPθ(atnstn)

    即将权重从全局的Reward修改为,采取动作ata_tat之后所有Reward的总和

  • 再进一步,由于当前的action对后续动作的影响会随着时间的推移而逐渐减弱,故需要乘上一个衰减因子γ<1\gamma < 1γ<1,于是式子更新为:

    ∇Rθˉ≈1N∑n=1N∑t=1Tn[∑t′=tTnγt′−trt′n−b]∇logPθ(atn∣stn)\nabla\bar{R_\theta} \approx \frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}[\sum_{t^{'}=t}^{T_n}\gamma^{t^{'}-t} r_{t^{'}}^n - b]\nabla logP_\theta(a_t^n|s_t^n)RθˉN1n=1Nt=1Tn[t=tTnγttrtnb]logPθ(atnstn)

  • 中间的那一项称之为Advantage Function,即

    Aθ(st,at)=∑t′=tTnγt′−trt′n−bA^\theta(s_t, a_t) = \sum_{t^{'}=t}^{T_n}\gamma^{t^{'}-t} r_{t^{'}}^n - bAθ(st,at)=t=tTnγttrtnb

参考资料:台大李宏毅强化学习。推荐本文和宝可梦大师的现场教学一起食用,效果更佳~

本文为作者原创,转载需注明出处!

### 关于Reinforcement Learning Toolbox 的使用指南和教程 #### 安装 Reinforcement Learning Toolbox 对于希望利用强化学习解决复杂问题的研究者来说,安装合适的工具箱至关重要。MATLAB提供了一个名为Reinforcement Learning Toolbox的软件包,它允许用户设计和训练策略以应对各种挑战。为了安装此工具箱,在MATLAB环境中执行`add-on`探索器中的搜索操作或者直接调用命令行指令 `matlab.addons.install('reinforcement-learning-toolbox')` 来获取最新版本。 #### 创建环境模型 创建自定义环境是构建强化学习解决方案的第一步。可以基于Simulink或MATLAB函数来描述系统的动态特性。通过定义状态空、动作空以及奖励机制,能够精确刻画目标场景下的交互过程[^1]。 #### 设计智能体架构 选择适合特定应用场景的学习算法同样重要。该工具箱支持多种类型的代理配置方案,包括但不限于DQN (Deep Q-Networks), DDPG (Deep Deterministic Policy Gradient) 和SAC (Soft Actor-Critic). 用户可以根据实际需求挑选最恰当的方法,并调整超参数设置优化性能表现。 #### 训练与评估 一旦完成了上述准备工作,则可启动训练流程让智能体不断试错积累经验直至收敛至最优解附近。期应密切监控度变化趋势并适时作出相应修改;同时也要记得保存中成果以便后续分析比较之需。当达到预期效果之后便入测试环节验证其泛化能力是否满足要求。 ```python % MATLAB code snippet demonstrating how to train an agent using the toolbox. agentOptions = rlDDPGAgentOptions; agentOptions.SampleTime = Ts; % Set sample time as defined earlier agentOptions.DiscountFactor = 0.99; criticNetwork = createCriticNetwork(numObservations, numActions); actorNetwork = createActorNetwork(numObservations, numActions); agent = rlDDPGAgent(actorNetwork, criticNetwork, agentOptions); trainOpts = rlTrainingOptions(... 'MaxEpisodes', MaxNumEpisodes,... 'StopOnError','on',... 'Verbose',false,... 'Plots','training-progress'); trainingStats = train(agent, env, trainOpts); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值