这个教程参考的是百度PaddlePaddle的RL系列教程:https://aistudio.baidu.com/aistudio/projectdetail/1445501
背景介绍
第一章节属于基础内容,第二课的数学知识总结的很好
1. 开始
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是强化学习中经典的环境库,下节课我们会用到里面的
CliffWalkingWapper
和FrozenLake
环境,为了使得环境可视化更有趣一些,直播课视频中演示的Demo对环境的渲染做了封装,感兴趣的同学可以在PARL代码库中的examples/tutorials/lesson1中下载gridworld.py使用。- CliffWalkingWapper 在悬崖边走路的游戏
- 参考:
- 代码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
参考内容
这部分网上已经有很多其他博主也已经学习过了,可以参考:
1.3 强化学习初印象
1.3.1 资料推荐
课程ppt小红小蓝捉迷藏的链接:
- https://openai.com/blog/emergent-tool-use/
- 相应的视频应该是来自b站,(直接搜索emergent-tool-use 也会有很多类似的视频)
红球绿球链接:
书籍
- 《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
-
李宏毅:
应用方向
- 游戏(马里奥、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参数说明,参考:
- 速度很慢,除了修改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
文件夹,但是里卖的内容打不开