欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

轻松了解PARL强化学习入门篇:从零开始探索

最编程 2024-07-19 09:21:33
...

1.1 概念认识

1.1.1 强化学习 vs 其他

强化学习与监督学习的区别

  • 强化学习、监督学习、非监督学习是机器学习里的三个不同的领域,都跟深度学习有交集。
  • 监督学习寻找输入到输出之间的映射,比如分类和回归问题。
  • 非监督学习主要寻找数据之间的隐藏关系,比如聚类问题。
  • 强化学习则需要在与环境的交互中学习和寻找最佳决策方案。
  • 监督学习处理认知问题,强化学习处理决策问题
  • 监督学习的样本一般是独立同分布的,而强化学习的序列决策数据,当前的决策会受到上一个决策的影响

1.1.2 强化学习的如何解决问题

  • 强化学习通过不断的试错探索,吸取经验和教训,持续不断的优化策略,从环境中拿到更好的反馈。
  • 强化学习有两种学习方案:基于价值(value-based)、基于策略(policy-based)

1.1.3 强化学习的算法和环境

  • 经典算法:Q-learning、Sarsa、DQN、Policy Gradient、A3C、DDPG、PPO
  • 环境分类:离散控制场景(输出动作可数)、连续控制场景(输出动作值不可数)
  • 强化学习经典环境库GYM将环境交互接口规范化为:重置环境reset()、交互step()、渲染render()
    • gym是环境 environment
  • 强化学习框架库PARL将强化学习框架抽象为Model、Algorithm、Agent三层,使得强化学习算法的实现和调试更方便和灵活。
    • parl是智能体/agent/算法部分

1.2 代码实践

1.2.1 环境配置

  • GYM是强化学习中经典的环境库,下节课我们会用到里面的CliffWalkingWapperFrozenLake环境,为了使得环境可视化更有趣一些,直播课视频中演示的Demo对环境的渲染做了封装,感兴趣的同学可以在PARL代码库中的examples/tutorials/lesson1中下载gridworld.py使用。

    • CliffWalkingWapper 在悬崖边走路的游戏
    • 参考:
      • 强化学习 Sarsa 实战GYM下的CliffWalking爬悬崖游戏
      • github地址:gym-cliffwalking:在这里插入图片描述
    • 代码github地址:代码中有说明https://github.com/openai/gym/blob/master/gym/envs/toy_text/cliffwalking.py
    • FrozenLake 在gym官网中可以看到这个游戏的动画视频:https://gym.openai.com/envs/#toy_text在这里插入图片描述
    • 代码github地址:代码中有说明https://github.com/openai/gym/blob/master/gym/envs/toy_text/frozen_lake.py
  • PARL教程中的jupyter使用的Python版本是3.7,就建立一个一样的好了。

    • 新建conda环境
    # 新建环境
    conda create -n rl37 python=3.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    # 安装gym包
    pip install gym
    # 如果速度慢,可以考虑换一个chanel
    pip install gym -i https://mirrors.aliyun.com/pypi/simple/
    # 配置jupyter notebook内核
    pip install ipykernel
    python -m ipykernel install --user --name rl37 --display-name "rl37"
    
  • PARL开源库地址:https://github.com/PaddlePaddle/PARL


参考内容
这部分网上已经有很多其他博主也已经学习过了,可以参考:

  • PARL强化学习公开课学习笔记(二)基于Q表格求解RL问题(Sarsa&Q-Learning)
  • 初识Paddle实现强化学习

1.3 强化学习初印象

1.3.1 资料推荐

课程ppt小红小蓝捉迷藏的链接:

  • https://openai.com/blog/emergent-tool-use/
  • 相应的视频应该是来自b站,(直接搜索emergent-tool-use 也会有很多类似的视频)
    • 【AI捉迷藏】初代天网?[中文字幕] Multi-Agent Hide and Seek

红球绿球链接:

  • https://github.com/PaddlePaddle/PARL/tree/develop/examples/MADDPG

书籍

  • 《Reinforcement Learning:An Introduction(强化学习导论)》(强化学习教父Richard Sutton 的经典教材): http://incompleteideas.net/book/bookdraft2018jan1.pdf

论文

  • DQN. “Playing atari with deep reinforcement learning.”
    https://arxiv.org/pdf/1312.5602.pdf
  • A3C. “Asynchronous methods for deep reinforcement learning.”
    http://www.jmlr.org/proceedings/papers/v48/mniha16.pdf
  • DDPG. “Continuous control with deep reinforcement learning.”
    https://arxiv.org/pdf/1509.02971
  • PPO. “Proximal policy optimization algorithms.”
    https://arxiv.org/pdf/1707.06347

前沿研究方向

  • Model-base RL,Hierarchical RL,Multi Agent RL,Meta Learning

视频推荐

b站(视频下方评论区有很多自发总结的笔记,博客等,可以借鉴)

  • 周博磊:https://space.bilibili.com/511221970/channel/detail?cid=105354在这里插入图片描述

  • 李宏毅:

    • 2020年的:https://www.bilibili.com/video/BV1UE411G78S?from=search&seid=4251874130512301757
    • 2018年的:https://www.bilibili.com/video/av24724071

应用方向

  • 游戏(马里奥、Atari、Alpha Go、星际争霸等)
  • 机器人控制(机械臂、机器人、自动驾驶、四轴飞行器等)
  • 用户交互(推荐、广告、NLP等)
  • 交通(拥堵管理等)
  • 资源调度(物流、带宽、功率等)
  • 金融(投资组合、股票买卖等)
  • 其他
  • 在这里插入图片描述

1.4 强化学习核心知识

在这里插入图片描述
deep reinforcement learning an overview,论文地址:https://arxiv.org/pdf/1701.07274.pdf
在这里插入图片描述
在这里插入图片描述
算法框架库
在这里插入图片描述
环境库
在这里插入图片描述

  • 离散:输出的动作是可数的(动作空间是个数字)
  • 连续:输出的动作是不可数的(比如机器人关节移动的角度)
  • 控制机器人移动,旋转角度是连续,开关是离散
  • DQN是一个面向离散控制的算法,即输出的动作是离散的。
    • 对应到Atari 游戏中,只需要几个离散的键盘或手柄按键进行控制。
    • 然而在实际中,控制问题则是连续的,高维的,比如一个具有6个关节的机械臂,每个关节的角度输出是连续值,假设范围是0°~360°,归一化后为(-1,1)。若把每个关节角取值范围离散化,比如精度到0.01,则一个关节有200个取值,那么6个关节共有2006
    • 参考:https://www.cnblogs.com/alan-blog-TsingHua/p/9727175.html

在这里插入图片描述

1.5 gym,PARL(PaddlePaddle Reinforcement Learning)

1.5.1 环境安装

安装参考github说明:https://github.com/PaddlePaddle/PARL/tree/develop/examples/tutorials

windows上只支持python3.7的环境

安装依赖

  • paddlepaddle>=1.8.5
    • 可参见官网,安装语句类似于pytorch,没有cuda11.0的支持
    • 参考:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/1.8/install/pip/windows-pip.html
    • 暂时安装没有cpu的版本,1.8.5好了
    	 python -m pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple
    

在这里插入图片描述
报了一个问题,OpenCV不兼容,parl安装的时候也报了。。。后续如果出问题就重新安装一下好了

  • parl==1.3.1
    • 安装参考github链接:https://github.com/PaddlePaddle/PARL
    • windows上只支持python3.7
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple parl --upgrade
    
    • 但是这样安装之后,其实那些例子还是没法使用,要git clone一部分,参考github文档QuickStart:https://github.com/PaddlePaddle/PARL/tree/develop/examples/QuickStart
    pip install gym
    git clone --depth 1 https://github.com/PaddlePaddle/PARL.git 
    cd PARL
    pip install .
    
    • 关于depth 1参数说明,参考:
      • https://blog.****.net/qq_43827595/article/details/104833980
    • 速度很慢,除了修改hosts文件,可以考虑使用其他加速方式,慢慢等也可以,几十KB的走,也就1小时左右吧就下好了
  • gym
    • 直接查看了gym的版本是0.18.0

1.5.2 gym简单使用

跟着老师的步骤敲就可以,使用ipython编辑环境会报错,就使用原生的python编辑就好,暂时没有遇到OpenCV版本导致的错误,哈哈哈。
在这里插入图片描述

程序介绍
将gridworld.py程序和gym中的cliffwalkingwapper.py一起看,

  • https://github.com/PaddlePaddle/PARL/blob/develop/examples/tutorials/lesson1/gridworld.py
  • https://github.com/openai/gym/blob/master/gym/envs/toy_text/cliffwalking.py

大致说明一下这个程序里用到的一些东西
env.reset()复位,让这个小乌龟回到初始位置,初始位置是36号格子
在这里插入图片描述
env.step()让小乌龟进行一个动作,

  • UP = 0
  • RIGHT = 1
  • DOWN = 2
  • LEFT = 3

env.render()每次环境状态(小乌龟走了一步之后,图会改变)发生改变,要重新渲染这个图才能看到新的环境状态。
下面是先0,上一步,再1,右一步之后小乌龟的位置(环境的状态)
每次step返回的四个值分别表示:

  • 24 当前乌龟的位置,
  • -1是reward,
  • False,游戏是否结束,是否到达黄色终点位置
  • 概率 1.0 暂时这个程序用不到转移函数概率
    在这里插入图片描述

1.5.3 PARL

在这里插入图片描述
在这里插入图片描述

1.6 总结

在这里插入图片描述

1.7 课后作业

在这里插入图片描述

pip install paddlepaddle==1.6.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install parl==1.3.1
pip install gym

git clone --depth=1 https://github.com/PaddlePaddle/PARL.git
cd PARL/examples/QuickStart
python train.py

在这里插入图片描述
可以看到目录里有一个这个程序运行后的效果gif图。此外,程序输出信息类似:
在这里插入图片描述
最后目录中会产生一个新的model_dir文件夹,但是里卖的内容打不开
在这里插入图片描述