【强化学习纲要】1 概括与基础


周博磊《强化学习纲要》
学习笔记
课程资料参见: https://github.com/zhoubolei/introRL.
课件: https://github.com/zhoubolei/introRL/blob/master/lecture1.pdf.

1.1 课程简介

周博磊
研究方向:机器感知与机器决策结合
http://bzhou.ie.cuhk.edu.hk/

1.2 强化学习介绍

1.2.1 简介

在这里插入图片描述
一个agent(智能体)在不确定的environment(环境)下怎样最大化它的reward(奖励),agent始终与environment在交互,agent采取action决策后,action会放入到环境中,环境接收到agent的action后,会进行下一步,输出下一个状态以及agent获取到的reward(奖励)。agent目的是尽可能多的从环境中获取到reward。

1.2.2 与监督学习的对比

监督学习:图像识别
在这里插入图片描述
网络训练中,是已经把真实的label给了网络,假设网络给了错误的决策,就会告诉它你错了。
有两个假设:

  • data的数据是没有关联的
  • 我们告诉了learner正确的label

强化学习:打砖块
在这里插入图片描述

  • 不会得到立刻的反馈
  • data之间是连续的
    只有到最后游戏结束才有label,因此单个的action没有一个确切的label告诉你是否正确,存在奖励的延迟

对比:

  • 强化学习是序列数据,监督学习样本之间是独立的
  • learner并没有被告知正确的行为是什么,learner需要自己去发现哪些行为是可以得到最终的奖励的
  • 强化学习是要通过不断的试错来获得能力(Trial-and-error exploration),平衡exploration(探索)exploitation(开发) 的关系。
    exploration(探索):通过尝试一些新的行为,这些行为可能让你获得更高的收益,也可能一无所有。
    exploitation(开发) :采取已知的可以获得最大reward的action,重复这个行为。
  • 没有一个监督者,只有奖励信号,且有延迟
  • 强化学习过程中时间很重要,因为data间是有时间关联的,而不是i.i.d分布的
  • 强化学习中agent的行为会影响他之后得到的数据,因此强化学习中很重要的是怎样使得agent的行为一直稳定的提升

为什么关注强化学习:
强化学习取得的结果可以有超人类的效果 ,监督学习是需要人类标定,因此永远不可能超越人类;而强化学习需要在环境中探索,有很大的潜力可以超越人类
AlphaGo:https://www.youtube.com/watch%3Fv=WXuK6gekU1Y
其他举例:
下棋,羚羊奔跑,股票交易

深度强化学习:
深度学习+强化学习
类比传统的CV和deep CV
在这里插入图片描述
通过训练一个整体的神经网络,使得它既可以做特征提取,又可以做分类。

传统RL与deep RL
在这里插入图片描述
Deep RL:直接输入状态,通过端到端神经网络来拟合直接得到action。

RL当今发展的优势:

  • 更多的GPU支持trial-and-error的尝试
  • 通过尝试可以使得agent能够在环境中获得更多的信息,获得更多的reward
  • 端到端的训练,使得特征提取和价值估计可以一块优化

1.3 序列决策过程

1.3.1 介绍

强化学习研究的过程是agent和环境的交互
在这里插入图片描述
Reward(奖励)

  • 标量反馈型号
  • 决定了agent的某一时刻t做的动作是否得到奖励
  • 强化学习的目的是极大化agent获得的reward

举例:

  • 下棋的结果,胜负
  • 股票,获得的收益或损失
  • Atari游戏,是否获得分数

序列决策过程:

  • 强化学习的目的是极大化agent获得的reward
  • action有长期的影响
  • reward有延迟
  • 近期奖励和远期奖励之间的trade-off
  • 可以把整个状态看成一个关于历史的函数
    在这里插入图片描述
  • 在agent内部,也有一个函数来更新状态。
  • Full observability:当agent状态与环境状态等价的时候,我们就说这个环境是Full observability(全部可以观测)
  • Partial observability: agent观测不能包含所有运作状态。(POMDP)

1.3.2 RL agent组成成分

  • 决策函数(Policy function) :agent用来选取下一步的动作
  • 价值函数(Value function):对当前状态进行估价,价值函数越大,说明你进入这个状态越有利
  • 模型(Model):agent对于状态的理解,决定了它认为世界是怎样构成的
  1. Policy
  • agent 行为,把输入的状态变成行为
  • Stochastic policy( π \pi π函数)
    在这里插入图片描述
    当你在状态s时,输出一个概率(所有行为的概率),然后进一步对概率分布进行采样,得到真实采取的行为。
  • Deterministic policy:
    在这里插入图片描述
    采取极大化,采取最有可能的概率,是事先决定好了的。
  1. Value function
  • 定义:一个折扣的未来奖励的加和,进行某一个行为未来将得到多大的奖励
  • 折扣因子(Discount factor):由于我们希望尽可能在短的时间里面得到多的奖励,比如我们希望立刻得到一笔钱而不是以后。因此我们把折扣因子放入到价值函数中
  • 价值函数的定义其实是一个期望,小标是Π函数,意味着在我们已知一个policy function的时候到底可以得到多少的奖励
    在这里插入图片描述
  • Q-function
    在这里插入图片描述
    s-状态,a-动作,Q函数是强化学习算法在学习的一个函数,是一个期望表示当前状态当前动作未来可以获得的奖励,得到Q函数后,进入某种状态的最优行为可以通过Q函数得到。
  1. Model
  • 模型决定了下一个状态是什么样的
  • 转移状态:状态是怎么转移的
    在这里插入图片描述
  • 奖励函数:当前状态采取某个行为可以得到多大的奖励
    在这里插入图片描述

1.3.3 马尔可夫决策过程(MDPs)

这个决策过程可视化了状态之间的转移,以及之间采取的行为
之后详细讲解

1.3.4 示例:走迷宫

在这里插入图片描述

  • 采取policy-based RL
    知道每一个状态下最下的动作
    在这里插入图片描述
  • 采取Value-based RL
    利用价值函数来导向,每一个状态会返回一个价值,越接近终点值越大
    在这里插入图片描述

1.3.5 分类

  • 基于价值函数的(Value-based) agent

    • 简明学习:价值函数
    • 隐式学习:策略(从价值函数中推断出来的)
  • 基于策略的(Policy-based) agent

    • 直接学习策略
    • 没有价值函数
  • Actor-Critic agent

    • 即学习了策略又学习了价值函数
  • Model-based

    • 通过学习了状态转移来采取措施
  • Model-free

    • 没有通过状态转移也没有学习价值函数
    • 没有模型
      在这里插入图片描述

1.3.6 探索与开发

  • 强化学习是要通过不断的试错来获得能力(Trial-and-error exploration),平衡exploration(探索)exploitation(开发) 的关系。
  • exploration(探索):通过尝试一些新的行为,这些行为可能让你获得更高的收益,也可能一无所有。
  • exploitation(开发) :采取已知的可以获得最大reward的action,重复这个行为。

1.4 RL代码实现

1.4.1 Python coding

1.4.2 OpenAI

https://openai.com/
https://gym.openai.com/
https://github.com/openai/retro/tree/develop

1.4.3 测试案例

  1. Anaconda和OpenAI gym
  • Download and install Anaconda here
  • Install OpenAI gym
pip install gym
pip install gym[atari]
  1. Examples
  • Play with the environment
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
env.close()
  • Random play with CartPole-v0
import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
env.close()
  • Example code for random playing (Pong-ram-v0,Acrobot-v1,Breakout-v0)
python my_random_agent.py Pong-ram-v0
  • Very naive learnable agent playing CartPole-v0 or Acrobot-v1
python my_learning_agent.py CartPole-v0
  • Playing Pong on CPU (with a great blog). One pretrained model is pong_model_bolei.p(after training 20,000 episodes), which you can load in by replacing save_file in the script.
python pg-pong.py
python navigation_agent.py
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值