百度强化学习训练营总结

news/2024/5/19 1:53:11 标签: 深度学习, 强化学习

百度强化学习训练营总结

PARL是百度公司开发的一个强化学习框架。作为一个机器学习小白,也是因为身边的同学推荐,才知道这个课程, 在这个课程上面了解到paddlepaddle 和 PARL 。作为一个不是计算机专业方向的学生,了解到机器学习的相关知识主要途径还是b乎。之前也只听过Tensorflow, PyTorch 以及 scikit-learn这些学习框架。 强化学习是机器学习的一个重要分支, 强化学习的三个个基本要素分别是智能体(Agent),环境(Environment)以及算法(Algorithm)。强化学习的主要思想是机器人(Agent) 和环境(Environment)的交互学习,其中 Agentaction会影响环境,环境返回rewardstate ,这个交互过程是一个马尔可夫决策过程。

1. PARL框架的特点

可复现性保证:我们提供了高质量的主流强化学习算法实现,严格地复现了论文对应的指标;

大规模并行支持:框架最高可支持上万个CPU的同时并发计算,并且支持多GPU强化学习模型的训练

可复用性强:用户无需自己重新实现算法,通过复用框架提供的算法可以轻松地把经典强化学习算法应用到具体的场景中;

良好扩展性:当用户想调研新的算法时,可以通过继承我们提供的基类可以快速实现自己的强化学习算法;

2. PARL框架的结构

PARL框架

PARL框架三大件分别是Model, Algorithm, Agent。

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

3. 强化学习的算法

本次学习接触到的强化学习的算法 SARSA, Q-Learning, DQN, DDPG。

3.1 表格型方法 SARSA 和 Q-Learning

前面提到强化学习让智能体通过与环境的交互学习解决问题,强化学习通常包括这么几个概念:

  • 状态 State (S)
  • 动作 Action (A)
  • 奖励 Reward ®

使用走迷宫的例子来表示

走迷宫
红色方框是我们的智能体,任务是要在4x4的迷宫中找到黄色圆圈的宝藏,并学习到达宝藏的最佳路径。如果以左上角的初始状态为S0,那么整个迷宫一共有16个状态(State)(从左到右从上到下分别是S0到S15)。智能体的**行动(Action)**有四个: 分别是向左(A1)向右(A2)向上(A3)和向下(A4)移动。如果找到黄色圆圈(宝藏)奖励(Reward)为1,掉入黑色陷阱奖励(Reward)为-1,其他地方为0。

Q表格

Q table A c t i o n 1 Action_1 Action1 A c t i o n 2 Action_2 Action2 A c t i o n 3 Action_3 Action3 A c t i o n 4 Action_4 Action4
S 0 S_0 S00000
S 1 S_1 S10000
S N S_N SN0000

当智能体处于 S 0 S_0 S0的状态时,如果刚好选择了 A 2 A_2 A2,那么下一个状态就是 S 1 S_1 S1(注意有一定的概率会选择其他的Action, 而到达其他的状态)。行动之后,我们就需要更新 Q ( S 0 , A 2 ) Q(S_0,A_2) Q(S0,A2)的数值。Q表格的更新策略 Q ( S 0 , A 2 ) 新 = Q ( S 0 , A 2 ) 旧 + α [ Q ( S 0 , A 2 ) 目 标 − Q ( S 0 , A 2 ) 旧 ] Q(S_0,A_2)新 = Q(S_0,A_2)旧+ \alpha[Q(S_0, A_2)目标-Q(S_0,A_2)旧] Q(S0,A2)=Q(S0,A2)+α[Q(S0,A2)Q(S0,A2)]

SARSA 的五个首字母分别代表着当前的 State Action Reward 和下一步的S' A'SARSA算法的更新Q表格策略是

Q ( S 0 , A 2 ) = Q ( S 0 , A 2 ) + α [ R ( S 1 ) + γ ∗ Q ( S 1 , A ) − Q ( S 0 , A 2 ) ] Q(S_0,A_2) = Q(S_0,A_2)+ \alpha[R(S_1)+\gamma*Q(S_1, A)-Q(S_0,A_2)] Q(S0,A2)=Q(S0,A2)+α[R(S1)+γQ(S1,A)Q(S0,A2)]

Q-Learning方法和SARSA方法不同的地方在于

Q ( S 0 , A 2 ) = Q ( S 0 , A 2 ) + α [ R ( S 1 ) + γ ∗ m a x Q ( S 1 , A ) − Q ( S 0 , A 2 ) ] Q(S_0,A_2) = Q(S_0,A_2)+ \alpha[R(S_1)+\gamma*maxQ(S_1, A)-Q(S_0,A_2)] Q(S0,A2)=Q(S0,A2)+α[R(S1)+γmaxQ(S1,A)Q(S0,A2)]

Q-Learning通过max函数每次都寻找回报最大的路径。

3.2 基于神经网络算法 DQN

通过优化函数 Q ( S , A , θ ) Q(S,A,\theta) Q(S,A,θ) 中的回归模型参数 θ \theta θ 去拟合Q表格。 需要明白两个概念,一个是Q网络,一个是targrtQ网络,Q网络是我们预测网络,targrt Q网络可以认为是我们的训练网络,训练的目标是找到目标Q值:,这里目标Q值的定义依据时间差分算法(n-step TD,一般采用单步时差更新,步数越长,参考的奖励值数量也越多,网络的远见能力越强,),认为目标Q值就是策略最佳状态,然后去依据梯度SGD:去更新Q网络的参数,同时在更新Q网络的参数的同时,也要更新target Q网络的参数,这里体现了其off-policy的特性,离线学习的方式不需要实时学习,利用经验回放的方式,学习到的经验可以共享。

DQN使用神经网络来近似代替Q表格,它的更新方式本质上和Q-Learning算法是一致的。
QLearning
DQN

3.3 策略梯度算法DDPG

DDPG(Deep Deterministic Policy Gradient) 它是Actor-Critic, DQN 和策略梯度的结合。

  • Critic : Critic网络的作用是预估Q, 输入动作和状态
  • Actor:Actor输出一个动作,这个动作输入到critic后能够获得最大的Q值

参考:

  1. AI学习笔记——Q Learning

  2. 基于神经网络的DQN方法


http://www.niftyadmin.cn/n/1665600.html

相关文章

处理for-in用在数组上时候出现的诡异现象的问题

问题复现 var arr [a, b, c]; var sid [Go]; for (var key in arr) {sid[key 1] arr[key]; } console.log(sid) 很简单的问题,最后的输出结果却是: [ Go, , , , , , , , , , , b, , , , , , , , , , c ] 问题分析 通过上面的输入结果我们可以发现这么…

Lisk:一个JavaScript开发者区块链平台

区块链有能力通过多个垂直方向改变人类的日常生活,Lisk基金会联合创始人兼总裁Max Kordek在本文中提到了Lisk,开源的重要性以及如何使区块链更容易访问。 Lisk:一个JavaScript开发者区块链平台 ▲Max Kordek JAXenter:你认为区块链…

作用域声明提升

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>函数作用域</title></head><body><script> /* let 没有变量提升*/ for (var i 0; i < 10; i) { con…

Play Framework

拯救java程序员的神器Play Framework&#xff1a;http://developer.51cto.com/art/201202/320053.htmPlay Framework中文小站&#xff1a;http://play-framework.herokuapp.com/ 转载于:https://blog.51cto.com/gudaoqing/1962571

CentOS 配置PHP支持socket扩展

PHP有很多扩展功能&#xff0c;我们在初次安装的时候并没有安装某些扩展&#xff0c;可能在使用的过程中&#xff0c;又需要用到这些扩展。php提供了一个phpize工具供我们安装需要的扩展。下面以安装socket扩展来介绍phpize的使用1.找到自己的php安装目录&#xff0c;例如我的目…

c++string

string string 的修改 方法描述插入str.insert(pos, n,c)在pos之前插入n个字符cstr.insert(pos, s2)在pos之前插入 s2str.insert(pos, s2, pos2, len)在pos之前插入s2从下标pos2开始的len个字符str.insert(pos, cp, len)在pos之前插入cp所指数组的前len个字符删除str.erase(p…

数组查找元素

#include<stdio.h> #include<stdlib.h> void shuzhu1(int a[],int n)//找出数组中第一次出现只1次的数 {int i,c0;for(i0;i<n;i){for(int ji;j<n;j){if(a[i]a[j]){c;}}if(c1){printf("%d",a[i]);break;}else{c0;}} }void shuzhu2(int a[],int n)//…

Slicy 发布简化响应式开发的 adapt.js 插件

adapt.js 最初是切图网方便内部开发弄的一款响应式开发插件&#xff0c;可以简化你的响应式工作&#xff0c;支持4种常规分辨率响应&#xff0c;hd、desktop、flatbed、phone 。 常规写法&#xff1a; media(min-width:1250px) and (max-width:1921px) {body{ background:red;…