百度系强化学习的先导工程知识梳理

本文是使用百度的强化学习框架的前置知识铺垫,梳理了几个必要的python包及其熟悉流程,算是一个百度系强化学习的先导工程知识梳理。

文章目录

    • PaddlePaddle pkg
    • PARL pkg
    • Gym Pkg
    • Turtle pkg

PaddlePaddle pkg

  • PaddlePaddle是百度开源的深度学习框架,类似的深度学习框架还有谷歌的Tensorflow、Facebook的Pytorch等. PaddlePaddle (PArallel Distributed Deep LEarning)是一个易用、高效、灵活、可扩展的深度学习框架

    pip install -U paddlepaddle
    
  • 快速开始 paddle https://www.paddlepaddle.org.cn/documentation/docs/zh/1.6/beginners_guide/quick_start_cn.html

  • 这里有很多基础概念 https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/index_cn.html

  • 几个重要的概念

    • 抽象语法树: 类似于抽象语法树的形式来搭建神经网络
    • Program: 一段描述模型的程序,一套语法树, 一段 Fluid program
    • Block: 顺序,条件,循环三大block, 一整块的缩进
    • OperatorTensor
  • Paddle 的设计思想 https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/advanced_usage/design_idea/fluid_design_idea.html

PARL pkg

PARL 名字来源于PAddlepaddle Reinforcement Learning, 是一款基于百度 PaddlePaddle 打造的深度强化学习框架。这个框架主要是建立一个智能体。构建环境的话需要和gym配合使用。

PARL 的特点包括:

  • 提供了高质量的主流强化学习算法实现
  • 大规模并行支持。框架最高可支持上万个CPU的同时并发计算,并且支持多GPU强化学习模型的训练。
  • 可复用性强。用户无需自己重新实现算法,通过复用框架提供的算法可以轻松地把经典强化学习算法应用到具体的场景中。
  • 良好扩展性。当用户想调研新的算法时,可以通过继承我们提供的基类可以快速实现自己的强化学习算法。

使用PARL的目标是构建一个强化学习智能体,构建主要基于3个类:

  • Model 用来定义前向(Forward)网络,这通常是一个策略网络(Policy Network)或者一个值函数网络(Value Function),输入是当前环境状态(State)
  • Algorithm 定义了具体的算法来更新前向网络(Model),也就是通过定义损失函数来更新Model。一个Algorithm包含至少一个Model
  • Agent 负责算法与环境的交互,在交互过程中把生成的数据提供给Algorithm来更新模型(Model),数据的预处理流程也一般定义在这里。

Gym Pkg

  • Gym 是一个模型环境的仿真器,或者说一个环境模型库。有一些标准的环境模型,比如cart-pole 系统,走迷宫的环境等等。

    The gym library is a collection of test problems — environments — that you can use to work out your reinforcement learning algorithms.

    Gym 的开发本意以类比于计算机视觉社群中的ImageNet(ImageNet是一个大量被标注了的数据集),gym 是为了提供一个标准的强化学习测试环境,以用来验证和比较不同的算法。

  • 可参考的文章:

    • https://gym.openai.com/docs/ 比较基本的系统性介绍

    • https://zhuanlan.zhihu.com/p/26985029 有关于源代码的提示

  • 熟悉Gym 的小练习

    env = gym.make('CartPole-v0')
    
    obs = env.reset()
    obs, r, done, info = env.step(a)
    env.render()
    env.close()
    
    print(env.action_space)
    #> Discrete(2)
    print(env.observation_space)
    #> Box(4,)
    print(env.observation_space.high)
    #> array([ 2.4       ,         inf,  0.20943951,         inf])
    print(env.observation_space.low)
    #> array([-2.4       ,        -inf, -0.20943951,        -inf])
    
    
  • 熟悉Gym 的小练习

    import gym
    import time
    env = gym.make('CartPole-v0')   #创造环境
    obs = env.reset()       #初始化环境,observation为环境状态
    count = 0
    for _ in range(100):
        a = env.action_space.sample()  #随机采样动作
        obs, r, done, info = env.step(a)  #与环境交互,获得下一步的时刻
        if done:             
            break
        env.render()         #绘制场景
        count+=1
        # time.sleep(0.1)      #每次等待0.2s
    print(count)             #打印该次尝试的步数
    
  • 问题 Error in/usr/bin/python3’: malloc(): memory corruption`

    • 单步执行的时候执行到 env.render() 会memory corruption 的错误
    • 解决:暂时搁置,循环跑起来的时候没问题的
  • 问题 在 anaconda spyder 中跑小乌龟画图的时候,跑完后图形界面关不掉

    • 解决:preference的 run 选择 execute in an external system terminal. 这个方法不大好。建议仍然改为 execute in current console
    • 解决:输入 env.close()即可
  • cart-pole 的实现源码在哪 ?

    • https://github.com/openai/gym/blob/5404b39d06f72012f562ec41f60734bd4b5ceb4b/gym/envs/classic_control/cartpole.py

Turtle pkg

  • turtle is a graphical library. The onscreen pen that you use for drawing is called the turtle and this is what gives the library its name.

  • 参考

    • https://docs.python.org/3.3/library/turtle.html
    • https://realpython.com/beginners-guide-python-turtle/#getting-to-know-the-python-turtle-library
  • Requirement for using Turtle

    • python 3 above.
    • Turtle is a built-in library.
    • need a physical screen to visualize
  • 熟悉Turtle 的小练习

    import gym
    import turtle
    import numpy as np
    import time
    
    canvas = turtle.getscreen()  # generate a canvas
    t = turtle.Turtle()     # initialize a turtle (a directed pen)
    t.forward(200)
    t.left(90)
    t.goto(0,100)
    t.home()
    # t.forward(200)
    t.circle(60)
    t.dot(20)
    turtle.bgcolor("grey")
    turtle.title("My Turtle Program")
    input()      # to pause the python script
    

你可能感兴趣的:(强化学习,python,机器学习)