0.1 强化学习主要符号表:
主要符号表
a:标量 a:向量 A: 矩阵
R \mathbb{R} R:实数集 a r g a m a x f ( a ) arg_amaxf(a) arga​maxf(a) : f ( a ) f(a) f(a)取最大值时a的值 s:状态
a:动作 r:奖励 π \pi π:策略
γ \gamma γ:折扣因子 π ( s ) \pi(s) π(s):根据确定性策略 π \pi π在状态 s s s选取的动作 τ \tau τ:轨迹
V π ( s ) V_{\pi}(s) Vπ​(s):状态 s s s在策略 π \pi π下的价值 Q π ( s , a ) Q_{\pi}(s,a) Qπ​(s,a):状态 s s s在策略 π \pi π下采取动作 a a a的价值 G t G_t Gt​:时刻 t t t的回报
π θ \pi_{\theta} πθ​:参数 θ \theta θ对应的策略 J ( θ ) J(\theta) J(θ):策略 π θ \pi_{\theta} πθ​的性能度量
1.1 强化学习概述

强化学习(reinforcement learning,RL)讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)里面去最大化它能获得的奖励。

强化学习由两部分组成:智能体和环境。
在强化学习过程中,智能体与环境一直在交互。智能体在环境里面获取某个状态后,它会利用该状态输出一个动作(action),这个动作也称为决策(decision)。然后这个动作会在环境之中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。

**监督学习的特点:**输入的数据是没有关联的,且需要告诉学习器标签是什么。

强化学习这两点都不满足,以玩游戏为例,智能体得到的观测不是独立同分布的。(指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立,那么这些随机变量是独立同分布);上一帧与下一帧间其实有非常强的连续性;另外,我们并没有立刻获得反馈,游戏没有告诉我们哪个动作是正确动作,智能体不能立即得到反馈。

1.2 决策序列

环境有自己的函数 s t e = f e ( H t ) {s_t}^e = f^e\left( H_t \right) st​e=fe(Ht​),智能体的内部也有一个函数 s t a = f a ( H t ) {s_t}^a = f^a\left( H_t \right) st​a=fa(Ht​)。

当智能体的状态与环境的状态等价的时候,即当智能体能够观察到环境的所有状态时,我们称这个环境是完全可观测的(fully observed)。在这种情况下面,强化学习通常被建模成一个马尔可夫决策过程(Markov decision process,MDP)的问题。在马尔可夫决策过程中, o t = s t e = s a e o_t = {s_t}^e = {s_a}^e ot​=st​e=sa​e

当智能体只能看到部分的观测,我们就称这个环境是部分可观测的(partially observed)。
在这种情况下,强化学习通常被建模成部分可观测马尔可夫决策过程(partially observable Markovdecision process, POMDP)的问题。部分可观测马尔可夫决策过程可以用一个七元组描述: ( S , A , T , R , Ω , O , γ ) \left(S,A,T,R,\Omega,O,\gamma \right) (S,A,T,R,Ω,O,γ).中S 表示状态空间,为隐变量,A 为动作空间,
T(s′|s, a) 为状态转移概率,R 为奖励函数,Ω(o|s, a) 为观测概率,O 为观测空间,γ 为折扣因子。

1.3 动作空间

像雅达利游戏和围棋(Go)这样的环境有离散动作空间(discrete action space),在这个动作空间里,智能体的动作数量是有限的

在其他环境,比如在物理世界中控制一个智能体,在这个环境中就有连续动作空间(continuous action space)。在连续动作空间中,动作是实值的向量

1.4 智能体的组成成分和类型

对于一个强化学习智能体,它可能有一个或多个如下的组成成分。

  • 策略(policy)。智能体会用策略来选取下一步的动作。

    策略决定了智能体的动作,其包括随机性策略确定性策略

    • 随机性策略(stochastic policy)就是 π \pi π函数,即 π ( a ∣ s ) = p ( a t = a ∣ s t = s ) \pi(a|s) = p(a_t = a | s_t = s) π(a∣s)=p(at​=a∣st​=s)。输入一个状态s,输出一个概率。
    • 确定性策略就是智能体直接采取最有可能的动作,即 a ∗ = a r g m a x π ( a ∣ s ) a^{*} = argmax \pi(a | s) a∗=argmaxπ(a∣s)。
  • 价值函数(value function)。我们用价值函数来对当前状态进行评估。价值函数用于评估智能体进入某个状态后,可以对后面的奖励带来多大的影响。价值函数值越大,说明智能体进入这个状态越有利。

    • 我们可以把折扣因子放到价值函数的定义里面,价值函数的定义为:

      V π ( s ) ≐ E π [ G t ∣ s t = s ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s ] V_{\pi}(s) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s\right] Vπ​(s)≐Eπ​[Gt​∣st​=s]=Eπ​[∑k=0∞​γkrt+k+1​∣st​=s]

    • 另外一种价值函数:Q函数

      Q π ( s , a ) ≐ E π [ G t ∣ s t = s , a t = a ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s , a t = a ] Q_{\pi}(s, a) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s, a_{t}=a\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s, a_{t}=a\right] Qπ​(s,a)≐Eπ​[Gt​∣st​=s,at​=a]=Eπ​[∑k=0∞​γkrt+k+1​∣st​=s,at​=a]

      未来可以获得奖励的期望取决于当前的状态和当前的动作

  • 模型(model):模型表示智能体对环境的状态进行理解,它决定了环境中世界的运行方式。模型决定了下一步的状态。下一步的状态取决于当前的状态以及当前采取的
    动作。它由状态转移概率和奖励函数两个部分组成。

​ 状态转移概率: p s s ′ a = p ( s t + 1 = s ′ ∣ s t = s , a t = a ) p_{s s^{\prime}}^{a}=p\left(s_{t+1}=s^{\prime} \mid s_{t}=s, a_{t}=a\right) pss′a​=p(st+1​=s′∣st​=s,at​=a)

​ 奖励函数: R ( s , a ) = E [ r t + 1 ∣ s t = s , a t = a ] R(s, a)=\mathbb{E}\left[r_{t+1} \mid s_{t}=s, a_{t}=a\right] R(s,a)=E[rt+1​∣st​=s,at​=a]

当我们有了策略、价值函数和模型3 个组成部分后,就形成了一个马尔可夫决策过程(Markov decision process)

基于策略的强化学习(policy-based RL)方法: 策略梯度算法等

当学习好了这个环境后,在每一个状态,我们都会得到一个最佳的动作。我们给它一个状态,它就会输出对应动作的概率。基于策略的智能体并没有学习价值函数。

基于价值的强化学习(value-based RL)方法: Q 学习(Q-learning)、Sarsa等

所以通过学习的价值的不同,我们可以抽取出现在最佳的策略。显式地学习价值函数,隐式地学习它的策略。策略是其从学到的价值函数里面推算出来的。这种方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域);对于动作集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。

把基于价值的智能体和基于策略的智能体结合起来就有了演员-评论员智能体(actor-critic agent)。这一类智能体把策略和价值函数都学习了,然后通过两者的交互得到最佳的动作。其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。

有模型(model-based)强化学习智能体:

它通过学习状态的转移来采取动作。将任务表示成 < S , A , P , R > <S,A,P,R> <S,A,P,R>,如果四元组中元素均已知,且状态集合和动作集合在有限步内是有限集,则智能体可以对真实环境进行建模。当智能体知道状态转移函数 P ( s t + 1 ∣ s t , a t ) P\left(s_{t+1} \mid s_{t}, a_{t}\right) P(st+1​∣st​,at​) 和奖励函数 R ( s t , a t ) R\left(s_{t}, a_{t}\right) R(st​,at​)后,它就能知道在虚拟环境中某一状态下执行某一动作后能带来的奖励和环境的下一状态

免模型(model-free)强化学习智能体:

它没有去直接估计状态的转移,也没有得到环境的具体转移变量。智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新动作策略,这样反复迭代直到学习到最优策略。

利用OpenAI Gym 进行实验。是一个环境仿真库,里面包含了很多现有的环境

# -*- coding: utf-8 -*-
"""
Created on Wed May 25 16:44:28 2022@author: ygtrece
"""import gym
import numpy as np
env = gym.make('MountainCar-v0')
print('观测空间 = {}'.format(env.observation_space))
print('动作空间 = {}'.format(env.action_space))
print('观测范围 = {} ~ {}'.format(env.observation_space.low,env.observation_space.high))
print('动作数 = {}'.format(env.action_space.n))class BespokeAgent:def __init__(self, env): # 类似于构造函数passdef decide(self, observation): # 决策position, velocity = observationlb = min(-0.09 * (position + 0.25) ** 2 + 0.03,0.3 * (position + 0.9) ** 4 - 0.008)ub = -0.07 * (position + 0.38) ** 2 + 0.07if lb < velocity < ub:action = 2else:action = 0return action # 返回动作def learn(self, *args): # 学习passagent = BespokeAgent(env)def play_montecarlo(env, agent, render=False, train=False):episode_reward = 0. # 记录回合总奖励,初始化为0observation = env.reset() # 重置游戏环境,开始新回合while True: # 不断循环,直到回合结束if render: # 判断是否显示env.render() # 显示图形界面,图形界面可以用 env.close() 语句关闭action = agent.decide(observation)next_observation, reward, done, _ = env.step(action) # 执行动作episode_reward += reward # 收集回合奖励if train: # 判断是否训练智能体agent.learn(observation, action, reward, done) # 学习if done: # 回合结束,跳出循环breakobservation = next_observationreturn episode_reward # 返回回合总奖励env.seed(0) # 设置随机数种子,只是为了让结果可以精确复现,一般情况下可删去
episode_rewards = [play_montecarlo(env, agent) for _ in range(100)]
print('平均回合奖励 = {}'.format(np.mean(episode_rewards)))
env.close() # 此语句可关闭图形界面

输出结果:

观测空间 = Box([-1.2  -0.07], [0.6  0.07], (2,), float32)
动作空间 = Discrete(3)
观测范围 = [-1.2  -0.07] ~ [0.6  0.07]
动作数 = 3
平均回合奖励 = -105.4

总结一下 Gym 的用法:使用 env=gym.make(环境名) 取出环境,使用 env.reset()初始化环境,使用env.step(动作)执行一步环境,使用 env.render()显示环境,使用 env.close() 关闭环境。

【强化学习EasyRL学习笔记 - 1】相关推荐

  1. 强化学习RL学习笔记2-概述(2)

    强化学习笔记专栏传送 上一篇:强化学习RL学习笔记1-概述(1) 下一篇:强化学习RL学习笔记3-gym了解与coding实践 目录 强化学习笔记专栏传送 前言 Major Components of ...

  2. 强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need

    强化学习经典算法笔记19:无监督策略学习算法Diversity Is All You Need DIAYN核心要点 模型定义 目标函数的构造 DIAYN算法细节 目标函数的优化 SAC的训练 判别器的 ...

  3. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  4. 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现

    强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...

  5. [强化学习导论阅读笔记-1]什么是强化学习

    平时学算法都是碎片化的学习,基本上都是看看博客,知乎和论文(博客和知乎看的最多),提升是有的,但是总觉得缺点什么,可能是缺少完整的知识体系.毕业本来想搞嵌入式的,因为会点AI小知识,分到了AI实验室. ...

  6. 强化学习-2021学习笔记

    强化学习中文文档 强化学习 第一章 简介 1.1 强化学习 1.2 例子 1.3 强化学习的要素 1.4 局限性和范围 1.5 拓展例子:井子棋 1.6 小结 1.7 强化学习早期历史 第一部分 表格 ...

  7. 【EasyRL学习笔记】第三章 表格型方法(Q-Table、Sarsa、Q-Learning)

    文章目录 一.马尔可夫决策过程 1.1 有模型 1.2 免模型 1.3 有模型与免模型的区别 二.Q表格 三.免模型预测 3.1 蒙特卡洛方法 3.1.1 蒙特卡洛方法特点 3.1.2 蒙特卡洛方法步 ...

  8. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  9. 一文看懂深度学习——人工智能系列学习笔记

    深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...

最新文章

  1. AppStore审核2.1被拒大礼包过审经历
  2. 使用JNA,让java调用原生代码
  3. Codeforces 798C:Mike and gcd problem
  4. pytorch笔记——autograd和Variable
  5. 【案例】弱电机房用电负荷计算意义及计算方法
  6. 【网络安全】NFS服务安全加固
  7. 360急速浏览器JS的调试
  8. python下 help()使用方法
  9. SAP OData服务性能测量的四种办法
  10. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]
  11. 华为5720设置静态路由不通_【干货分享】交换机与路由器在环路中的处理机制了解一下!...
  12. Linux Shell 读取用户输入
  13. 用十万级数据进行讲解MySQL索引基础
  14. jquery addClass,removeClass 设置或删除类
  15. android device id修改器,修改硬盘ID硬盘序列号工具(Serial Number Changer)
  16. IT服务管理流程控制的绩效指标 KPI
  17. mac ios自动化 appium-doctor 安装opencv4nodejs爬坑记录
  18. blink usb无线网卡驱动 linux,BLINK无线网卡驱动下载
  19. linux阿里云服务器centos8操作系统安装mysql8.0详细教程
  20. JAVA鸡汤------一个牛人给java初学者的建议

热门文章

  1. 如何高效填写软件缺陷报告
  2. xml布局html 实例,XML - html教程,css布局
  3. docker制作centos7.9+apache2.4+php7.4镜像
  4. 2018年15大互联网趋势,你的技术方向走对了吗?
  5. 某瓣_sig参数逆向破解
  6. UVALive - 7139 Rotation 矩阵前缀和(imos和)
  7. 一个对文本信息统计的熵增验证程序
  8. 编写Android.mk把Android studio项目编译到AOSP源码中
  9. Webots的示例中心(demo)
  10. 使用go mod 飞速下载 gin,解决go get下载包失败的问题