从零实践强化学习之RL初印象(GYM+PARL)

昨天听了曾两度夺得NeurIPS强化学习赛事冠军的飞桨强化学习PARL团队核心成员科老师的课程,不得不说,满满的干货,于是今天打算再看一遍回放,并好好地做一下笔记。

在学习强化学习之前,我们先思考一下,我们想追求的智能是什么?

人类追求的智能是什么?

在这里插入图片描述

对人类来说,人的智能可以分为两部分:

  • 一小部分是天生遗传的
  • 绝大部分是要依靠我们出生之后的努力学习

后天的学习一般分两种:

  • 一种是有前人的经验了,我们直接模仿,依葫芦画瓢。
  • 另一种是没有任何的经验,我们只能在摸索中去前进和环境交互、探索

举个例子,一个人如果一出生就与世隔绝的话,他很有可能学不到任何东西。一个小孩,他从一出生开始就会挥一下胳膊、瞪一下腿,其实就已经开始和周围的环境产生的交互。交互会产生经验,小孩子会慢慢地知道做什么事情,大家会笑;做什么事情会被批评。

强化学习是一门灵感来源于心理学的学科。每个人都是过去经验的总和,你过去的经验造成了现在的你。

人类的智能是学习而来的,那人工智能可以像人类一样"学习"吗?

人工智能可以像人类一样"学习"吗?

答案是肯定的!

监督学习就是让人工智能像人类一样去模仿,给他一个样本,然后用神经网络训练一个模型,去学习怎么根据现有的样本预测新的数据

而更吸引人的是强化学习,他追求的是像人一样的自学,在没有人教学的情况下只能自己和环境交互,在交互中学习。这时又分为两种情况:

  • 已知的环境,就好像有一张地图,可以提前规划路径
  • 未知的环境,只能勇敢地探索与不断地试错

当然,在未知的环境里学习是更加困难的

科老师也推荐了一些资料,用于初学者学习:
在这里插入图片描述

强化学习的概念及应用

强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。

核心思想:
  智能体agent在环境environment中学习,根据环境的状态state(或观测到的observation),执行动作action,并根据环境的反馈 reward(奖励)来指导更好的动作。

注意:从环境中获取的状态,有时候叫state,有时候叫observation,这两个其实一个代表全局状态,一个代表局部观测值,在多智能体环境里会有差别,但我们刚开始学习遇到的环境还没有那么复杂,可以先把这两个概念划上等号。

智能体通过分析经验数据来学习,什么样的情况下应该做什么事情,这其实和我们人类的学习是类似的:
在这里插入图片描述
在这里插入图片描述
比较典型的例子是Flappy bird:
在这里插入图片描述
走迷宫的游戏也可以用到强化学习:
在这里插入图片描述
不仅如此,强化学习还能应用在用户个性化推荐上:
在这里插入图片描述

强化学习的应用其实非常广泛:
在这里插入图片描述

强化学习的核心知识

强化学习与其他机器学习的关系

在这里插入图片描述
举一个强化学习与监督学习的例子:
在这里插入图片描述
同样都是一张小熊的图片,监督学习输出的是灰熊,强化学习输出的是装死这个动作。也就是说,监督学习关注的是认知,而强化学习关注的是决策

如果换一张发怒的熊的图片,监督学习的输出是不变的,但是强化学习的输出可能要换一下动作。

不过监督学习也可以在输出的基础上加上if…else…判断语句,使监督学习也能输出动作,但是if…else…里的判断其实是人类的经验,是在前人的基础上总结出来的,牺牲了无数人尝试(装死的人都活下来了,逃跑的人都受到了灰熊的攻击)

强化学习其实就是直接把这些经验学习进来,跨越了从认知到决策的巨大鸿沟

如果从样本来分析的话:

  • 监督学习的样本都是独立的
  • 强化学习的上一个样本会影响下一个样本的决策

因此,监督学习是有瓶颈的,标注的样本决定了它的"天花板";而强化学习并不需要太多的样本。

智能体学习的两种方案

在这里插入图片描述

  • 基于价值的方法:
    给每个状态都赋予一个价值的概念,来代表这个状态是好还是坏,这是一个相对的概念,让智能体往价值最高的方向行进。基于价值是确定性的。

  • 基于策略的方法:
    制定出多个策略,策略里的每个动作都有一定的概率,并让每一条策略走到底,最后查看哪个策略是最优的。基于策略是随机性的。

强化学习的分类

在这里插入图片描述
一般来说,无模型的强化学习是比较热门的

框架库与环境库

  • 强化学习经典环境库GYM将环境交互接口规范化为:
    重置环境reset()、交互step()、渲染render()
  • 强化学习框架库PARL将强化学习框架抽象为:
    Model、Algorithm、Agent三层,使得强化学习算法的实现和调试更方便和灵活。

在这里插入图片描述

熟悉强化学习环境(代码实践)

PARL开源库地址:https://github.com/PaddlePaddle/PARL

另外,请安装好gym:
在这里插入图片描述
进入PARL:
在这里插入图片描述
找到examples下的lesson1后进入python环境:

在这里插入图片描述

import gym
from gridworld import CliffWalkingWapper

env = gym.make("CliffWalking-v0") #创建悬崖环境
env = CliffWalkingWapper(env) #产生可视化界面
env.reset() #初始化

然后用env.render()渲染一下,就会出现如下界面:
在这里插入图片描述

让这只小乌龟向前走一步:

env.step(0)
env.render()

渲染后:
在这里插入图片描述
这里解释一下,因为小乌龟只能前后左右地走,于是用0、1、2、3代表这四个动作

输出是:

(24, -1, False, {'prob': 1.0})
  • 第一个值表示小乌龟的状态,即当前所处的位置
  • 第二个值表示reward,因为目的是让小乌龟以最短的路径抵达终点,所以每走一步都会受到惩罚,如果要获得高分的话,那么就要以最短的路径行进
  • 第三个字段表示游戏是否结束,如果游戏结束则为True
  • 第四个字段是info字段,一般不怎么会用到

下面我们试着走到黄格子的地方:
在这里插入图片描述
可以看到这时已经返回True了,那么这一轮的游戏就结束了,如果要开启新一轮的游戏,只需要reset()一下就可以了

所以一般来说,我们可以用一个for循环去跑强化学习的任务:

import gym
import numpy as np

# 环境1:FrozenLake, 可以配置冰面是否是滑的
# env = gym.make("FrozenLake-v0", is_slippery=False)  # 0 left, 1 down, 2 right, 3 up

# 环境2:CliffWalking, 悬崖环境
env = gym.make("CliffWalking-v0")  # 0 up, 1 right, 2 down, 3 left

# PARL代码库中的`examples/tutorials/lesson1`中`gridworld.py`提供了自定义格子世界的封装,可以自定义配置格子世界的地图

env.reset()
for step in range(100):
    action = np.random.randint(0, 4)
    obs, reward, done, info = env.step(action)
    print('step {}: action {}, obs {}, reward {}, done {}, info {}'.format(\
            step, action, obs, reward, done, info))
    env.render()

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/106800911
今日推荐