文章目录

  • 1. 理论部分
    • 1.1 初探强化学习
    • 1.2 强化学习基础
    • 1.3 强化学习简史
    • 1.4 强化学习应用
  • 2. 实验部分
    • 2.1 Gym
    • 2.2 小车上山 (MountainCar-v0)

1. 理论部分

1.1 初探强化学习

  1. 什么是强化学习?
  • 维基百科定义:强化学习(Reinforcement learning, RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。强化学习是除了监督学习和非监督学习之外的第三种基本的机器学习方法。
  • 个人理解:强化学习又名增强学习,源于行为心理学,表示生物为了趋利避害而更频繁实施对自身有利的策略。以专业术语来说,强化学习是研究智能体在与复杂且不确定的环境进行交互时,如何使获得的累计奖励最大化的一类算法。强化学习的目标,是寻找一个给定的马尔可夫决策过程的最优策略。
  1. 强化学习可以解决什么问题?如何解决?

强化学习一般用以解决智能决策 (序贯决策) 问题,找寻一个决策序列,使得目标函数最优。智能决策问题是那些需要连续不断地做出决策,才能实现最终目标的问题。在强化学习中,智能体通过与环境的不断交互来学习状态到动作的映射关系,以期获得最大化的累积回报。

  1. 强化学习的特征
  • 试错探索:智能体通过试错探索环境来理解环境。
  • 延迟奖励:智能体借助延迟的奖励信号来学习。奖励有正负,正强化和负强化都能够起到强化的效果。
  • 时序数据:强化学习的数据间具备较强的时间关联性,不是独立同分布的。
  • 动作影响数据:强化学习没有所谓现有的数据集,数据都是在训练过程中产生的,这意味着智能体的行为将会影响它的数据。
  1. 强化学习、监督学习和非监督学习

监督学习、无监督学习和强化学习是机器学习的三大方法。

  • 强化学习:通过智能体与环境的交互来寻找最优策略。不存在正确答案,通过奖励信号来学习,关注更长远的性能。
  • 监督学习:学习带标签数据中的固有规则。监督学习解决的是智能感知的问题, 在大量差异化的输入及其标签上进行学习。监督学习的思想是学习带标签数据的抽象特征并分类。监督学习使用的数据是独立同分布的。监督学习重点关注模型的泛化性能。
  • 无监督学习: 寻找无标签数据中的隐藏模式,旨在发现数据间的隐含结构,一般用于聚类等任务。非监督学习无标签无奖励值,只有数据特征 。非监督学习的训练数据是独立同分布的,数据间无前后依赖关系。

  监督学习算法的上限是人类的表现,标签源于人类标注决定了它永远不可能超越人类。强化学习则潜力无限,它在环境里面自己探索学习,这让它可以获得超越人类的表现,如 AlphaGo 击败人类最强围棋选手。

1.2 强化学习基础

  如上图所示,强化学习主要由智能体 (Agent)、环境 (Environment)、状态 (State)、动作(Action) 和奖励(Reward) 组成。智能体与环境的交互是一个序列决策过程,智能体在当前状态 StS_tSt​ 选择一个动作 AtA_tAt​,执行动作,进入下一状态 St+1S_{t+1}St+1​, 同时得到即时奖励 Rt+1R_{t+1}Rt+1​。如此循环,绩效选择动作,进入新的状态并获得相应奖励值。在强化学习中,这一过程一般被建模成一个马尔科夫决策过程 (Markov Decision Process,MDP)。

  • 智能体:强化学习中的决策者和学习者,它可以做出决策和接受奖励。
  • 环境:强化学习系统中除智能体外的所有事物,它是智能体交互的对象。环境本身可以是确定性的或者不确定性的,可以是已知的或是未知的。我们可以选择对环境进行建模或者不建模。
  • 状态观测:状态是对环境的完整描述,环境受智能体动作的影响。观测是以智能体的视角,对状态的部分描述,可能会遗漏环境中的一些信息。
  • 奖励:环境给智能体的一种标量反馈信号。奖励是智能体的学习目标,智能体被期待能够最大化一段时间里的总奖励。
  • 策略:从状态到动作的映射,智能体依据策略选择动作。策略是强化学习的学习对象,强化学习通过改进策略以期最大化总奖励。
  • 价值函数vπ(s)v_π(s)vπ​(s):智能体在状态 sss 下依据策略 πππ 执行动作后的价值,用以评估一个状态的好坏。这个价值一般用累积回报的期望来描述(累积回报是个随机变量,无法作为价值函数的定义)。即时奖励Rt+1R_{t+1}Rt+1​ 高并不代表后续的奖励值也高,因此价值函数 vπ(s)v_π(s)vπ​(s) 需要综合考虑当前奖励和后续奖励,通常被定义为:
    vπ(s)=Eπ(Rt+1+γRt+2+γ2Rt+3+...∣St=s)=Eπ[∑k=0∞γkRt+k+1∣St=s]v_π(s)=\mathbb{E}_π(R_{t+1}+γR_{t+2}+γ^2R_{t+3}+... |S_t=s)=\mathbb{E}_π[\sum^{\infty}_{k=0}\gamma^k R_{t+k+1}|S_t=s]vπ​(s)=Eπ​(Rt+1​+γRt+2​+γ2Rt+3​+...∣St​=s)=Eπ​[k=0∑∞​γkRt+k+1​∣St​=s]
    其中 γ∈[0,1]γ \in [0, 1]γ∈[0,1] 为奖励衰减因子,控制着即时奖励在累积回报中的占比。
  • 状态转化模型Pss′aP^a_{ss^′}Pss′a​:在状态 sss 下选取动作 aaa 转至下一个状态 s′s^′s′ 的概率。
  • 探索-利用困境(exploration-exploitation dilemma):选择一个新动作以期获得更高回报,还是选择当前已知能够产生最大回报的动作?关于探索和利用的平衡,一般使用探索因子 ϵ∈[0,1]ϵ \in [0, 1]ϵ∈[0,1] 来控制。

1.3 强化学习简史

  • 两个关键时间节点
  • 1998 年之前:表格型强化学习算法;
  • 1998 年:强化学习导论第一版出版, 系统总结了之前强化学习算法的各种进展;
  • 1998 年至 2013 年:发展出各种直接策略搜索的方法;
  • 2013 年:DQN 算法的提出;
  • 2013 年之后:深度强化学习,深度学习感知能力和强化学习决策能力的结合。
  • 三条主线
  • 主线 1:试错学习。模仿心理学上动物的学习方式。
  • 主线 2:最优控制。动态规划法,通过求解贝尔曼方程来间接解决最优控制问题,存在“维数灾难”问题。
  • 主线 3:时间差分法 (第一次研究热潮)。Q-learning 算法成功将最优控制与时间差分法结合。DQN 算法首次将深度学习与强化学习结合,开创了深度强化学习这一全新分支,重新掀起强化学习的研究热潮。

1.4 强化学习应用

行走智能体 机械臂抓取
机械臂翻魔方 穿衣智能体

2. 实验部分

2.1 Gym

  OpenAI 是一个非盈利的人工智能研究公司。Open AI 公布了非常多的学习资源以及算法资源,他们之所以叫 Open AI,就是他们把所有开发的算法都进行开源。OpenAI 的 Gym 是一个研究和比较强化学习相关算法的开源工具包,其中包含了许多经典的仿真环境和各种数据。Gym 库提供了许多问题和环境(或游戏)的接口,而用户无需过多了解游戏的内部实现,通过简单地调用就可以用来测试和仿真。可通过如下语句查询 Gym 库中注册了哪些环境:

from gym import envsenv_specs = envs.registry.values()
env_ids = [env_spec.id for env_spec in env_specs]
for env_name in env_ids:print(env_name)

2.2 小车上山 (MountainCar-v0)

  小车上山的环境如上图所示,一个小车在一段范围内行驶。在任一时刻,在水平方向看,小车位置的范围是 [-1.2, 0.6],速度的范围是 [-0.07, 0.07]。在每个时刻,智能体可以对小车施加 3 种动作中的一种:向左施力、不施力、向右施力。智能体施力和小车的水平位置会共同决定小车下一时刻的速度。当某时刻小车的水平位置大于 0.5 时,控制目标成功达成,回合结束。控制的目标是让小车以尽可能少的步骤达到目标。一般认为,如果智能体在连续 100 个回合中的平均步数 ≤110,就认为问题解决了。在这个环境中,每一步的奖励都是 -1,回合的回报值就是总步数的负数。下面给出实例代码:

# coding=utf-8
import gym
from gym import envs
import numpy as npdef env_info(env):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):  # 学习passdef play_montecarlo(env, agent, render=False, train=False):episode_reward = 0.  # 初始化回合总奖励observation = env.reset(seed=0)  # seed保证结果精确复现while True:  if render:  # 界面渲染env.render()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  # 返回累积回报if __name__ == "__main__":env = gym.make('MountainCar-v0')  # 构建环境env_info(env)  # 环境信息agent = BespokeAgent(env)  # 智能体for _ in range(100):episode_rewards = play_montecarlo(env, agent)print('平均回合奖励 = {}'.format(np.mean(episode_rewards)))env.close()  # 关闭环境
  • 结果

【参考】

  1. Datawhale 强化学习教程;
  2. 《Easy RL:强化学习教程》(王琦,杨毅远,江季);
  3. Sutton RS, Barto AG. Reinforcement learning: An introduction. MIT press; 2018 Nov 13.
  4. 《强化学习:原理与Python实现》(肖智清);
  5. 刘建平强化学习系列博客;

Task 01 强化学习基础相关推荐

  1. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  2. 强化学习基础总结(三)

    强化学习基础总结(三) @(Machine Learning) 覆盖以下几个主题: Markov过程 Markov奖励过程 Markov决策过程 MDPs扩展 MDP简介 MDP是用于正式描述强化学习 ...

  3. 强化学习基础知识梳理(4)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第四章:价值函数近似 主要内容包括: 价值函数近似基本原理介绍(Value Functio ...

  4. 深度强化学习基础知识 思维导图

    学习了王树森老师的深度强化学习入门课件,将各个算法整理在如下思维导图中. 深度强化学习基础知识 思维导图

  5. 强化学习基础篇(五):Dyna-Q 算法

    强化学习基础篇(五):Dyna-Q 算法 (Dynamic Programming) 1. 简介 2. Dyna-Q 3. Dyna-Q 代码实践 4. 小结 文章转于 伯禹学习平台-动手学强化学习 ...

  6. 股票操作之强化学习基础(二)(Q-learning、Sarsa、Sarsa-lambda)

    股票操作之强化学习基础(二)(Q-learning.Sarsa.Sarsa-lambda) 1. Q-learning Q-learning是强化学习一个比较基础的算法,很多强化学习的升级算法都是在q ...

  7. 强化学习——基础概念

    强化学习--基础概念 一.强化学习问题的提出 奖励 Reward 环境 Environment 状态 State 二.智能体 Agent 策略 Policy 价值函数 Value function 模 ...

  8. 强化学习基础知识梳理(5)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第五章:策略优化基础 主要内容: 基于策略优化的强化学习 常见策略优化算法:Policy ...

  9. Easy_RL 01:强化学习基础

    目录 0 Overview 1 RL概况 1.1 RL定义 1.2 RL中的建模问题 Environment & State Action Agent 2 RL实践(python) 3 RL应 ...

最新文章

  1. Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed...
  2. C语言比较好的风格梳理
  3. R语言PCA主成分分析(Principle Component Analysis)实战1
  4. 天池赛题解析:零基础入门语义分割-地表建筑物识别-CV语义分割实战(附部分代码)
  5. wether.html5.qq.com,weather.html
  6. ubuntu安装javahadoop
  7. java自动推断类型_Java 7的类型推断
  8. java两个文件夹比较路径_比较Java中两个文件的路径
  9. 北大清华的状元之争:一个典型的囚徒困境
  10. 移除元素所有事件监听_DOM 事件模型或 DOM 事件机制
  11. unity打包android 乱码,Unity3d发布IOS9应用时出现中文乱码的解决方法
  12. Redis操作命令(一)
  13. python中continue用法案例_记录今天学习python中for与while循环针对break和continue的用法...
  14. Bailian3713 外星人翻译用数字转换模块【递归+映射】
  15. Python中各种括号的区别、用途及使用方法
  16. 联想计算机无线网络设置密码,联想(Lenovo)路由器怎么设置密码?
  17. C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码
  18. 初步使用计算机教学案列,中小学信息技术教学案例
  19. java超级计算器,jdk自带类
  20. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...

热门文章

  1. 安全测试之sql注入测试
  2. python3:实现输出等边三角形、直角三角形
  3. 网易视频云郭再荣:打造一体化多场景的视频云平台
  4. Python之文档测试
  5. anaconda调用TensorFlow出现dtypes.py:526: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of typ
  6. SQL语句中生成UUID方法
  7. c语言程序电机,直流电机控制C语言程序
  8. uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)
  9. Centos7笔记之Postfix邮件服务器搭建
  10. python抓取经典评论_通过Python抓取天猫评论数据