7.20更新,(这两天进度略慢,基本只学了第四章,还没学完,简单记录下吧!)首先我们必须要明确的一个概念,RL有三个组成部分:

  • 演员 actor
  • 环境 environment
  • 奖励函数 reward function

其中,环境和奖励函数是无法控制的,而是开始学习之前给定的,所以,只能做的就是调整演员的policy,使得reward最大。同时,演员的策略决定action。
如果用深度学习来做RL的话,策略π就是一个网络,中间会有一些θ的参数。
智能体看到的就是网络的输入,他也会影响我们训练的结果。输入是智能体看到的画面,通常由像素组成,而输出是可以执行的action,在神经网络里,有几个action,就有几个神经元。

策略梯度

**策略梯度是一个会花很多时间来采样数据的算法,大多数时间都在采样数据。**在一场游戏中,我们把环境输出的s与演员输出的动作a组合起来成为一条轨迹,
可以得到:

Trajectory τ={s1,a1,s2,a2,⋯,st,at}\text { Trajectory } \tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\} Trajectory τ={s1​,a1​,s2​,a2​,⋯,st​,at​}

给定演员的参数θ,可以计算每一个轨迹发生的概率:

pθ(τ)=p(s1)pθ(a1∣s1)p(s2∣s1,a1)pθ(a2∣s2)p(s3∣s2,a2)⋯=p(s1)∏t=1Tpθ(at∣st)p(st+1∣st,at)\begin{aligned} p_{\theta}(\tau) &=p\left(s_{1}\right) p_{\theta}\left(a_{1} \mid s_{1}\right) p\left(s_{2} \mid s_{1}, a_{1}\right) p_{\theta}\left(a_{2} \mid s_{2}\right) p\left(s_{3} \mid s_{2}, a_{2}\right) \cdots \\ &=p\left(s_{1}\right) \prod_{t=1}^{T} p_{\theta}\left(a_{t} \mid s_{t}\right) p\left(s_{t+1} \mid s_{t}, a_{t}\right) \end{aligned}pθ​(τ)​=p(s1​)pθ​(a1​∣s1​)p(s2​∣s1​,a1​)pθ​(a2​∣s2​)p(s3​∣s2​,a2​)⋯=p(s1​)t=1∏T​pθ​(at​∣st​)p(st+1​∣st​,at​)​

通过上面的式子可以知道的事,可以计算某一个episode里面出现这样的轨迹的概率有多大,每一条轨迹出现的概率取决于环境的动作和智能体的动作
在某一场游戏里面, 某一个回合里面,我们会得到 R。我们要做的事情就是调整演员内部的参数 θ使得 R 的值越大越好。 但实际上奖励并不只是一个标量,奖励其实是一个随机变量。R 其实是一个随机变量,因为演员在给定同样的状态会做什么样的行为,这件事情是有随机性的。
这个地方,我们怎么处理呢,我的理解是,轨迹Trajectory的概率是不一样的,这取决于在的某一个episode里面,是不是游戏很快over了,如果over了就说明对应trajectory的p很小,所以每一个轨迹trajectory对应的奖励是不一样的,总的reward必须对于trajectory出现的概率进行加权,也就是期望值。因此,我们得到一个expected reward的总值:

Rˉθ=∑τR(τ)pθ(τ)=Eτ∼pθ(τ)[R(τ)]\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]Rˉθ​=∑τ​R(τ)pθ​(τ)=Eτ∼pθ​(τ)​[R(τ)]

在这里我们通常使用的方法就是gradient ascent来max这个expected reward。
说一下什么是梯度上升,通常来说,在中学里,我们学的导数是求一个可以写出表达式函数的极值的方法,但是,有时候有些函数即使能够写出表达式,求得的导数依然不是极值,这种情况我们通常就会使用迭代的方法来解,也就是最优化算法,引入一个α作为步长(MACHINE LEARNING中)。通常来说也可以理解为求偏导。
(这地方不放公式了,如果有疑问也可以百度一下)。
组合一下下面几个公式,我们可以把最终的trajectory求和后写成expected value最终的值:

注意一下,上面这张图片的最后一行公式,是怎么推导的呢?

=Eτ∼pθ(τ)[R(τ)∇log⁡pθ(τ)]≈1N∑n=1NR(τn)∇log⁡pθ(τn)=1N∑n=1N∑t=1TnR(τn)∇log⁡pθ(atn∣stn)\begin{aligned} &=E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ &=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \end{aligned}​=Eτ∼pθ​(τ)​[R(τ)∇logpθ​(τ)]≈N1​n=1∑N​R(τn)∇logpθ​(τn)=N1​n=1∑N​t=1∑Tn​​R(τn)∇logpθ​(atn​∣stn​)​

这里特别要说明的就是,得到的这个期望值是没法计算的,所以需要用采样的方式采样N个trajectory并计算每一个值,然后再把每一个值加起来,得到梯度。用这个updated gradient去更新agent。
(具体公式推导下面还是列一下。。)

∇log⁡pθ(τ)=∇(log⁡p(s1)+∑t=1Tlog⁡pθ(at∣st)+∑t=1Tlog⁡p(st+1∣st,at))=∇log⁡p(s1)+∇∑t=1Tlog⁡pθ(at∣st)+∇∑t=1Tlog⁡p(st+1∣st,at)=∇∑t=1Tlog⁡pθ(at∣st)=∑t=1T∇log⁡pθ(at∣st)\begin{aligned} \nabla \log p_{\theta}(\tau) &=\nabla\left(\log p\left(s_{1}\right)+\sum_{t=1}^{T} \log p_{\theta}\left(a_{t} \mid s_{t}\right)+\sum_{t=1}^{T} \log p\left(s_{t+1} \mid s_{t}, a_{t}\right)\right) \\ &=\nabla \log p\left(s_{1}\right)+\nabla \sum_{t=1}^{T} \log p_{\theta}\left(a_{t} \mid s_{t}\right)+\nabla \sum_{t=1}^{T} \log p\left(s_{t+1} \mid s_{t}, a_{t}\right) \\ &=\nabla \sum_{t=1}^{T} \log p_{\theta}\left(a_{t} \mid s_{t}\right) \\ &=\sum_{t=1}^{T} \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right) \end{aligned}∇logpθ​(τ)​=∇(logp(s1​)+t=1∑T​logpθ​(at​∣st​)+t=1∑T​logp(st+1​∣st​,at​))=∇logp(s1​)+∇t=1∑T​logpθ​(at​∣st​)+∇t=1∑T​logp(st+1​∣st​,at​)=∇t=1∑T​logpθ​(at​∣st​)=t=1∑T​∇logpθ​(at​∣st​)​

Note: 两个p都来自于env,而一个p_θ来自于环境,由于两个p都与环境无关,所以它们对应的log再取梯度都等于0,上式就可以只化成p_θ的梯度。
如何理解下面?在采样到的数据里面,s和a在某个时刻t应该是trajectory的一个状态动作对,我们根据trajectory得到的奖励来增加or降低该轨迹的概率,如果reward正,就增加;reward负,就减少。

由上图我们也可以知道,为了更新,代入这个总的expected reward的公式里面,我们采样时,要搜集很多的s_t和a_t的动作对。更新参数θ也需要一个对应的learning rate,更新的θ应该是原来的θ加上梯度,而学习率调整可以用Adam方法。(关于Adam再单独出一篇博客。。。。)
你要拿你的 agent,它的参数是θ,去跟环境做互动, 也就是拿你已经训练好的 agent 先去跟环境玩一下,先去跟那个游戏互动一下, 互动完以后,你就会得到一大堆游戏的纪录。同时,和环境的互动有随机性。。。
你就可以把采样到的东西代到这个梯度的式子里面,把梯度算出来。也就是把这边的每一个 s 跟 a 的对拿进来,算一下它的对数概率(log probability)。你计算一下在某一个状态采取某一个动作的对数概率,然后对它取梯度,然后这个梯度前面会乘一个权重,权重就是这场游戏的奖励。 有了这些以后,你就会去更新你的模型。
这就是大概PG的一个流程。。。
注意:一般PG采样的数据,只能用一次,更新参数后,要丢掉原始数据,重新采样,再去更新参数。
说几点注意的实现的细节:

  • 类似于一个分类问题,目标函数是最小化交叉熵,我们这里是最大化likelihood
  • 强化学习与分类问题不同的地方时姚成一个权重
  • 每一次训练数据要进行加权

策略梯度实现技巧

(这部分时间原因,后面会补充上细节)

  1. 添加基线
  2. 分配合适的credit

REINFORCE 算法

上一章也学习过蒙特卡洛和时序差分的区别,蒙特卡洛一个回合更新一次,时序差分一个步骤更新一次,所以时序差分的更新频率更高,它也使用Q函数来金斯表示未来的总奖励。下图也给出了两种不同的expected reward的式子。

Policy gradient methods can be implemented using the log_prob() method, when the probability density function is differentiable with respect to its parameters. A basic method is the REINFORCE rule:

Δθ=αr∂log⁡p(a∣πθ(s))∂θ\Delta \theta=\alpha r \frac{\partial \log p\left(a \mid \pi^{\theta}(s)\right)}{\partial \theta}Δθ=αr∂θ∂logp(a∣πθ(s))​

补一个代码:

probs = policy_network(state)
m = Categorical(probs)
action = m.sample()
next_state, reward = env.step(action)
loss = -m.log_prob(action) * reward
loss.backward()

近端策略优化PPO

很重要的一个概念是importance sampling:
概率密度函数提供的概率分部信息来生成随机变量的取值就是采样。
没学完。。。
明天接着补好了(最近三天一直在忙暑期课程)
害,加油吧。

Reference:
【1】https://datawhalechina.github.io/easy-rl/#/chapter4/chapter4
【2】王琦等,Easy RL蘑菇书,强化学习教程
【3】pytorch官方文档

强化学习蘑菇书Easy RL 第四五章相关推荐

  1. 强化学习蘑菇书Easy RL第二、三章学习(马尔可夫决策过程、表格型方法)

    马尔可夫决策过程概述 Markov Process(MP)通常来说是未来状态的条件概率分布仅依赖于当前的状态.在离散随机过程里,我们需要把随机变量所有可能取值的集合放到一个状态空间里,在强化学习里,我 ...

  2. 强化学习蘑菇书Easy RL第一章

    强化学习第一章(蘑菇书) 强化学习的概念 之前也学过一点,但是不够系统,想利用这一次机会好好把一些概念理顺清楚. 第一部分肯定是强化学习的概念问题.强化学习(reinforcement learnin ...

  3. 【强化学习】《Easy RL》- Q-learning - CliffWalking(悬崖行走)代码解读

    目录 0. 前言 1. 超参数 2. 训练 2.1 初始化环境和智能体 2.2 智能体选择动作 2.3 环境接收动作并反馈下一个状态和奖励 2.4 智能体进行策略更新(学习) 3. 结果处理 3.1 ...

  4. 强化学习蘑菇书学习笔记04

    第六章 DQN基本概念 关键词 DQN(Deep Q-Network): 基于深度学习的Q-learning算法,其结合了 Value Function Approximation(价值函数近似)与神 ...

  5. 学习笔记|强化学习(Reinforcement Learning, RL)——让AlphaGo进化得比人类更强

    文章目录 1. 题外话:人类棋手的最后赞礼 2. 强化学习概述 2.1 强化学习的目标也是要找一个Function 2.2 强化学习的三个基本步骤 2.2.1 定义一个function 2.2.2 定 ...

  6. 【githubshare】深度学习蘑菇书,覆盖了强化学习、马尔可夫决策过程、策略梯度、模仿学习

    GitHub 上的深度学习技术书籍:<蘑菇书 EasyRL>,覆盖了强化学习.马尔可夫决策过程.策略梯度.模仿学习等多个知识点. GitHub:github.com/datawhalech ...

  7. 强化学习笔记3:RL agent的主要组成部分

    对于一个强化学习 agent,它可能有一个或多个如下的组成成分: 策略函数(policy function),agent 会用这个函数来选取下一步的动作. 价值函数(value function),我 ...

  8. 【论文笔记】强化学习论文阅读-Model-Based RL 9篇

    简要介绍了一下Model-Based RL领域的经典论文(2018年以前). 文章目录 引子 a. Model is learned Imagination-Augmented Agents for ...

  9. 图灵奖得主John Hopcroft推荐的这本强化学习入门书

    动手学强化学习 John Hopcroft 1986年ACM图灵奖得主.上海交通大学校长特别顾问 本书的一个重要特点是实现了理论与代码的有机结合,学生在学习强化学习的主要概念时,可以方便地使用这些代码 ...

最新文章

  1. 美研究最新生物活性玻璃 可消灭致命的细菌
  2. Docker(五):Docker Volume
  3. 如何限制HTML5“数字”元素中的可能输入?
  4. nginx下启动php-fpm相关错误信息集锦(长期补充)
  5. python语音在线编辑-Python实时语音识别控制
  6. HDU 2842 Chinese Rings(矩阵高速功率+递归)
  7. Git Bash推送GitHub不成功---密钥设置
  8. Sharepoint COMException 0x81020037
  9. 贝叶斯网络学习Python环境搭建(pgmpy)
  10. linux资源异常无法fork,linux 下 fork 后的文件资源处理问题
  11. 3D数学 学习笔记(4) 几何图元
  12. ibm刀箱服务器型号查询,IBM 服务器模块 刀箱模块
  13. 网络安装CentOS 7
  14. 使用积分图像进行自适应二值化[Derek Bradley, Gerhard Roth, 2007]
  15. 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
  16. T三茶说:客来敬茶,茶艺师教您如何奉茶!
  17. Burp Suite使用介绍(一)
  18. 【经典贪心练习】金银岛
  19. GaussDB架构(下)
  20. 怎样管理可以明确职责分工

热门文章

  1. elclipse tptp的安装使用
  2. uni-app接入友盟
  3. 在家里如何赚钱?5个在家赚钱的方法,让你日进斗金!
  4. 国际数字文创产业园区助力成都打造文创名城
  5. 01-vue(v-text,插值语法,v-html,v-model,v-on,v-bind,vue中的this,事件按键修饰符)
  6. ns3 学习资料和方法
  7. 【解决】ocam录制失败。 导致: WASRecord: pAudioClient- Initialize failed. (hr=0x80070005
  8. MCE公司:免疫治疗新课题——好心情,要保持!
  9. PPT里怎么加入边翻页幻灯片边连续播放音乐?
  10. 互联网快讯:瑞幸回应价格异常;极米H3S、极米Z6X Pro受用户青睐;知网回应被中科院停用