百度深度强化学习框架PARL技术学习笔记

2023-11-03

前言:寄语

这是一门深度强化学习基础实践课程,为了避免大家被数学公式劝退,理论方面讲的不是太深,科老师是两度世界冠军,说这是目前国内最好的强化学习实践课程也不为过,强化学习是机器学习的最强范式,主要是负责决策,和负责感知的深度学习结合起来,就构成了强人工智能,是未来人工智能最令人激动和期待的地方

基础准备和预习

学习这门课需要以下基础:
1,高等数学
2,线性代数
3,概率论
4,Python面向对象编程
5,Numpy
数学基础不太好的同学可以先跳过部分数学知识点,先从编程算法入手,多Print一下状态信息,对算法流程有一定的理解后,再去看理论推导,看理论的时候一定要看图书,图书歧义少,一般都是经过时间检验的,实践的话推荐看视频上手快。

学习这门课程最好对强化学习理论有一定的基础理论理解,这样上手更快一些,科老师后面的课程不解释这些基础概念
1,状态值函数 state value function
2, 状态-动作值函数 state-action value function
3, bellman方程

第一节课:玩个简单的迷宫游戏吧

在这里插入图片描述
游戏目标:让Agent小乌龟自己学会避开所有的陷阱,走到目的地,拿到最终奖励
游戏结果:小乌龟通过不停的action试错,从当前的状态state1,转移到下一个状态state2,获得奖励R,然后综合评价所有的策略,把产生的最大奖励值的作为最优策略,用最少的步数走到目的地,是不是很神奇。

接下来就是谈一下什么是强化学习了,简单来说,强化学习的目的是为了求得最优策略,而深度学习则是为了拟合非线性和感知认知
在这里插入图片描述
打个广告:推荐一下百度强化学习框架PARL,支持并行计算,能够让学习速率大大的提升,对于初学者,这是一个非常友好的框架,而且源代码是开源的,学有余力的同学可以去学源码
源码链接
https://github.com/PaddlePaddle/PARL
在这里插入图片描述

第二节课:基于表格型方法求解RL

首先解释下我们为什么要求解RL,这个概念非常重要,总的来说,求解RL的本质就是求解状态值函数或者动作状态值函数,只有知道这两个函数里面的任何一个,我们才能找到最优策略,才能告诉Agent怎么走才是最优的,获得的累计奖励最大,当然也可以直接求解优化策略

1, SARSA算法

在这里插入图片描述
用白话来讲,SARSA算法的表现形式是Q(S,A),即对某个状态下的一个动作做估值计算,以下是实践代码

pip install gym
import gym
import numpy as np
import time

class SarsaAgent(object):
    def __init__(self, obs_n, act_n, learning_rate=0.01, gamma=0.9, e_greed=0.1):
        self.act_n = act_n      # 动作维度,有几个动作可选
        self.lr = learning_rate # 学习率
        self.gamma = gamma      # reward的衰减率
        self.epsilon = e_greed  # 按一定概率随机选动作
        self.Q = np.zeros((obs_n, act_n))

    # 根据输入观察值,采样输出的动作值,带探索
    def sample(self, obs):
        #
        # 1. 请完成sample函数功能
        if np.random.uniform(0,1) < (1.0 - self.epsilon):
            action = self.predict(obs)
        else:
            action = np.random.choice(self.act_n)
        return action
        #

    # 根据输入观察值,预测输出的动作值
    def predict(self, obs):
        # 2. 请完成predict函数功能
        Q_list = self.Q[obs, :]
        maxQ = np.max(Q_list)
        action_list = np.where(Q_list == maxQ)[0]
        action = np.random.choice(action_list)
        return action
#学习方法,也就是更新Q-table的方法
    def learn(self, obs, action, reward, next_obs, next_action, done):
        """ on-policy
            obs: 交互前的obs, s_t
            action: 本次交互选择的action, a_t
            reward: 本次动作获得的奖励r
            next_obs: 本次交互后的obs, s_t+1
            next_action: 根据当前Q表格, 针对next_obs会选择的动作, a_t+1
            done: episode是否结束
        """
        
        # 3. 请完成learn函数功能(Sarsa)
        predict_Q = self.Q[obs, action]
        if done:
         target_Q = reward  # 没有下一个状态了
        else:
         target_Q = reward + self.gamma * self.Q[next_obs,next_action]  # Sarsa
        self.Q[obs, action] += self.lr * (target_Q - predict_Q)  # 修正q
  
    # 保存Q表格数据到文件
    def save(self):
        npy_file = './q_table.npy'
        np.save(npy_file, self.Q)
        print(npy_file + ' saved.')
    
    # 从文件中读取数据到Q表格中
    def restore(self, npy_file='./q_table.npy'):
        self.Q = np.load(npy_file)
        print(npy_file + ' loaded.')``
    def run_episode(env, agent, render=False):
    total_steps = 0 # 记录每个episode走了多少step
    total_reward = 0

    obs = env.reset() # 重置环境, 重新开一局(即开始新的一个episode)
    action = agent.sample(obs) # 根据算法选择一个动作

    while True:
        next_obs, reward, done, _ = env.step(action) # 与环境进行一个交互
        next_action = agent.sample(next_obs) # 根据算法选择一个动作
        # 训练 Sarsa 算法
        agent.learn(obs, action, reward, next_obs, next_action, done)

        action = next_action
        obs = next_obs  # 存储上一个观察值
        total_reward += reward
        total_steps += 1 # 计算step数
        if render:
            env.render() #渲染新的一帧图形
        if done:
            break
    return total_reward, total_steps

    def test_episode(env, agent):
    total_reward = 0
    obs = env.reset()
    while True:
        action = agent.predict(obs) # greedy
        next_obs, reward, done, _ = env.step(action)
        total_reward += reward
        obs = next_obs
        # time.sleep(0.5)
        # env.render()
        if done:
            break
    return total_reward
```python
在这里插入代码片

2,Q-Learning算法

在这里插入图片描述
算法展示,总的来说结构和Sarsa很类似,算法最大的区别是更新公式不一样Sarsa选择的是后一个动作整体的期望,Q-Learning选择的是后一个动作的最大值,下面是演示代码


class QLearningAgent(object):
    def __init__(self, obs_n, act_n, learning_rate=0.01, gamma=0.9, e_greed=0.1):
        self.act_n = act_n      # 动作维度,有几个动作可选
        self.lr = learning_rate # 学习率
        self.g
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度深度强化学习框架PARL技术学习笔记 的相关文章

随机推荐

  • JDBC的配置文件与工具类的封装

    package cn sxt login utils import java io IOException import java sql Connection import java sql DriverManager import ja
  • mybatis插入动态表名

    项目场景 项目中需要动态的选择插入的数据表名 但是在实际使用过程中总会遇到部分问题 问题描述 在xml中填写sql语句 由于表中含有月份信息 需要动态的选择表名 然而用 的方式传参 总是显示语句错误
  • 基于centOS7.5 x64/openjdk1.8/tomcat8.5/nginx1.16/nodejs/mysql8.0/redis3/git的服务器环境配置)

    基于centOS7 5 64 openjdk1 8 tomcat nginx nodejs mysql5 7 git的服务器环境配置 我以前的三年和未来的三年从事网站开发 主要手段是JAVA python nodejs 前端大套间 偶尔写写
  • qml绘制仪表盘控件

    刚开始上手qt 说实话迷得很啊 不过qt做的界面是真的漂亮 之前在b站看qt官方发布的一些视频 仪表盘煞是好看 今天倒腾了一天 用qml绘制了一个简单的汽车仪表控件 趁现在还热着 先记下来 新建一个空的qml工程 创建工程的时候要注意 工程
  • PostMan学习记录10 - 上传文件

    后台代码示例 PostMapping upload public String upload RequestParam name files required false MultipartFile files try if files n
  • 目标检测系列:Faster RCNN、FPN

    Faster RCNN FPN Faster RCNN 动机 Fast RCNN虽然对于检测的速度已经接近于达到实时 但是候选区域的提取方法依然是依赖于传统的算法例如选择性搜索 而选择性搜索在CPU上要实现一张图像的候选区域提取需要达到2秒
  • 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战 第4版 Struts 2 Spring4 Hibernate整合开发 含CD光盘1张 国家级奖项获奖作品升级版 四版累计印刷27次发行量超10万册的轻量级Java EE经典著作 李刚 编著 ISBN 978
  • 概率论【常见的五种分布】--猴博士爱讲课

    4 常见的五种分布 1 6 符合均匀分布 求概率 均匀分布U a b 2 6 符合泊松分布 求概率 泊松分布P A lambda是参数 x是某某次数 如果是这样的 千万不要用1 P X 6 这种 要一个一个算 3 6符合二项分布 求概率 4
  • 面试官,我已经掌握了MyBits,你看我还有机会吗?

    一 MyBatis 面试题 1 什么是 Mybatis 2 Mybaits 的优点 3 MyBatis 框架的缺点 4 MyBatis 框架适用场合 5 MyBatis 与 Hibernate 有哪些不同 6 和 的区别是什么 7 当实体类
  • Docker - 国内镜像的配置及使用

    开发十年 就只剩下这套Java开发体系了 gt gt gt Docker国内镜像 DaoCloud Docker加速器阿里云 开发者平台 微镜像 希云cSphere镜像广场 时速云灵雀云网易蜂巢 阿里云的Docker加速器 阿里云 开发者平
  • 对老赵写的简单性能计数器的修改

    对老赵写的简单性能计数器的修改 早上看到老赵写的这个性能计数器 感觉很实用 不过老赵用了很多 C 3 0 的新语法 还用了 VISTA 和 Server 2008 下特有的Win32 API 对于还在用C 2 0 或者还工作在 XP 或者
  • nginx启动只有master没有worker_探究Nginx的工作原理,才知道为什么这么高效!

    1 Nginx的模块 Nginx的模块从结构上分为核心模块 基础模块和第三方模块 核心模块 HTTP模块 EVENT模块和MAIL模块 基础模块 HTTP Access模块 HTTP FastCGI模块 HTTP Proxy模块和HTTP
  • 平面设计除了PS还有哪些工具推荐

    平面设计在我们的日常生活中无处不在 无论是传统媒体还是网络媒体 我们每天都会沉浸在大量的平面设计作品中 因此 我们或多或少会对设计有自己的看法 其实 即使是非专业人士 市场上也有很多平面设计软件 本文盘点了平面设计的五大软件 1 即时设计
  • Android 6.0 解决recyclerview 在 scrollview 中不能全部显示,高度不正常的问题。

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 这个问题困扰了我半天 国内百度上的资料非常的烂 根本无法解决问题 在android 4 5 版本中 scrollview 包含了一个recyclerview 滚动一切正常
  • 教你使用windeployqt工具来进行Qt的打包发布

    Qt 官方开发环境使用的动态链接库方式 在发布生成的exe程序时 需要复制一大堆 dll 如果自己去复制dll 很可能丢三落四 导致exe在别的电脑里无法正常运行 因此 Qt 官方开发环境里自带了一个工具 windeployqt exe 问
  • ARM64基础14:ARM64的中断处理之GIC400实现(以树莓派4采用的BCM2711芯片为例)

    接上篇 ARM64基础13 ARM64的异常处理之中断处理 以树莓派4采用的BCM2711芯片为例 1 GIC的诞生背景 传统中断控制器 比如树莓派4b的legacy interrupt controller 具备 中断enable寄存器
  • osgEarth+VS2015开发环境搭建

    前言 osgEarth是基于OpenSceneGraph OSG 实现的3DGIS引擎 而OSG是一个开源的三维实时场景图形开发框架 学习osgEarth之前最好先学习下OSG 这是OSG官网有很多学习资料可以参考 osgEarth同时支持
  • STM32CubeMX官网下载方法

    目录 CubeMX下载 芯片包下载 和CubeIDE区别 CubeMX下载 主要是对下载链接做个记录 不再从打开百度 搜索ST这样一步步记录 点击STM32CubeMX STM32Cube initialization code gener
  • 共识算法 PBFT浅析

    PBFT是PracticalByzantine Fault Tolerance的缩写 意为实用拜占庭容错算法 该算法是Miguel Castro 卡斯特罗 和Barbara Liskov 利斯科夫 在1999年提出来的 解决了原始拜占庭容错
  • 百度深度强化学习框架PARL技术学习笔记

    目录 前言 寄语 基础准备和预习 第一节课 玩个简单的迷宫游戏吧 第二节课 基于表格型方法求解RL 1 SARSA算法 2 Q Learning算法 第三节课 基于神经网络求解RL 第三节课 基于策略梯度求解RL 第四节课 连续动作空间上求