热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PaddlePaddle飞桨入门之旅(③)

——记2020.6.16百度“强化学习7日打卡营”在线课程用着百度提供免费的GPU资源,打定主意要跟上百度每个PaddlePaddle相关的公开课程。6月16号开始的是强化学习相关

——记2020.6.16百度“强化学习7日打卡营”在线课程

用着百度提供免费的GPU资源,打定主意要跟上百度每个PaddlePaddle相关的公开课程。

6月16号开始的是强化学习相关的课程,用五天时间讲解强化学习的基本问题,围绕百度团队开发的PARL框架对强化学习进行入门讲解。

五天视频课程内容:

PaddlePaddle飞桨入门之旅(③)

一、强化学习初印象

强化学习:智能体agent与环境env交互,根据反馈奖励reward指导动作action;通过不断学习训练,完善某一任务的动作策略。

分类:

PaddlePaddle飞桨入门之旅(③)

  强化学习 监督学习
  侧重决策 认知
  序列数据 独立同分布数据
  延迟奖励 即时奖励

后续4次讲解课程,由浅入深地分别从连续/离散动作、连续/离散环境角度讲解强化学习问题定义与实现。

二、基于表格型方法求解RL

离散动作(可数动作状态,例如控制二维平面的机器人,输出控制是前后左右四个运动方向)

离散环境(环境状态可数,如Grid形式地图,机器人位置和当前反馈都是可数状态)

Q表格

当前状态s下,执行动作a的收益为r,如果每次决策只看本次动作reward,智能体的动作策略就成为极为短视的greedy算法,无法解决复杂的对抗问题;

需要考虑状态s下执行动作a的综合预期收益,即从较长远角度考虑动作a的收益,引入Q度量状态s下动作a的综合预期收益,即从本次动作a后,一直到后续任务结束,获得的总reward期望,记为Q。

理论上对Q的计算应该是在状态s下执行动作a后,对后续所有可能执行的action(直到任务结束)及收益进行概率加权求和(状态转移概率),即以类似全概率公式形式计算所有后续任务分支的期望收益,作为状态s下执行动作a的Q。

维护一张Q表格,即不同状态s下所有action对应的Q值(由于状态s和动作a都是离散可数的,所以可以维护这样一张Q表格)。

通过TD时序差分方式更新Q表格

对于model-free问题,没有现成的奖励函数Reward function,需要不断与环境交互才能获得动作奖励,无法从理论上根据全概率公式更新Q值。

通过不断与环境交互,获得大量交互数据,对每条动作轨迹Trajectory(从初始状态,执行不同动作,直到任务结束),从终止步反推计算每个状态s对应动作a的Q。

对于终止步t,此状态s下动作a的Q值是当前动作的反馈Rt(因为没有后续动作了,任务到此结束);对于前一步t-1的Q值Qt-1,计算为当前步骤奖励Rt-1加上后续t步奖励:Qt-1=Rt-1+gamma*Gt。

gamma是衰减因子,表示中长期收益相对于近期收益的衰减,根据不同任务设置不同衰减因子,例如股票交易公司的投资中不能过分关注长期收益,而一些复杂的对抗游戏例如围棋就需要关注长期收益。

根据交互获得的每条轨迹T都对Q表格中Q值进行更新,但由于从任务开始到终止存在很多条轨迹,将每条轨迹计算出来的Q作为目标值targetQ,对Q的更新根据差值逐步微调,通过学习率学习当前Q与目标Q值的差值更新Q:

targetQ = Rt+1 + gamma * Q(St+1, At+1)

Q(St, At) <--- Q(St, At) + alpha * [Rt+1 + gamma * Q(St+1, At+1) - Q(St, At)]

通过不断与环境交互获得交互轨迹更新Q表格,各个Q值会逐渐逼近对应的理论Q值(ground truth)。

在探索过程中逐步更新Q表格,探索过程中根据Q表格选取动作(以一定概率选择最大收益动作或随机生成动作,ε-greedy更新),每次更新Q表格时需要输入St, At, Rt+1, St+1, At+1,因此这种Q表格学习方法称为:Sarsa.

注意:这里的Rt+1是状态St下执行动作At获得的收益,Sarsa更新时只需要获得后续状态St+1和动作动作At+1即可,无需实际执行At+1并获取奖励。

与之对应的Q-learning算法,探索过程中默认每次从Q表格中选择对应状态下收益最大的动作s(完全依据Q表格选择动作,不用额外的动作选择策略),因此学习Q之前无需获取下一步动作。

Sarsa是一种On policy策略,优化实际执行的动作策略;Q-learning是一种Off-policy方式,优化探索行为策略。

三、基于神经网络求解RL

DQN:Deep Q-learning,用神经网络代替Q表格

针对连续环境或者不可数状态的情况,Q表格变得无限大,实际中无法穷举所有环境状态;

此时可以DQN用神经网络逼近这张无限大的Q表格,优点在于:

Q表格占用内存极大,存储有限个参数;查表效率低;

神经网络可以实现状态泛化,相似状态输出一致。

PaddlePaddle飞桨入门之旅(③)

用神经网络代替Q表格,神经网络的输入是当前状态,神经网络输出对应此状态不同动作action的预期Q值;

输出数据的标签即为Q-learning算法中的目标Q值,即第二节中的targetQ。

DQN两个创新点:

(1) 经验回放 Experience replay

设计样本经验池(Trajectory的队列),存放历史交互轨迹,去除序列决策的样本关联性,提高样本利用率;

充分利用off-policy优势。

(2) 固定Q目标 Fixed Qtarget

监督学习中网络输出的label是固定的/稳定的,学习中用输出和目标差值进行梯度下降学习;

DQN中,网络输出的label的Qtarget,也根据神经网络获得;label如果实时变化,不利于学习过程的收敛;

通过固定Q目标,即拷贝一份神经网络(target model),在一段时间内固定网络参数用于生成Qtarget,对原网络参数进行学习更新;学习若干步后,再将新的网络参数更新到target model。

DQN流程图:

PaddlePaddle飞桨入门之旅(③)

PARL中DQN的实现:

PaddlePaddle飞桨入门之旅(③)

四、基于策略梯度求解RL

基于策略Policy-based的RL方法:策略梯度Policy Gradient

DQN用神经网络代替Q表格,网络输出此时不同action对应的Q预测值,测试过程中根据Q预测值选择的action一般是确定性的策略,比如选择最大Q预测值对应的action。

实际上有些任务,由于环境存在随机性等原因,输出动作更倾向于随机策略,例如和陌生对手猜拳,输出石头、剪子、布的概率都为1/3时是比较合理的;

策略梯度Policy Gradient方法用Policy网络代替Q网络,Policy网络输入某种状态,输出是此状态下应执行不同action的概率,例如{石头:0.33,剪子:0.33, 布:0.33}。

利用softmax函数实现随机动作策略,softmax函数将多个神经元输出映射到(0,1)取件,通过归一化即可实现随机动作策略的输出方式。测试时,根据不同action的概率进行sample(),依概率输出一个action。

PaddlePaddle飞桨入门之旅(③)

Episode:一幕游戏,或者一次完整交互,从任务开始到任务终止的状态转移过程成为对应的轨迹Trajectory。

PaddlePaddle飞桨入门之旅(③)

根据条件概率公式可以计算此Trajectory对应的总回报,某个状态s下执行动作a的期望回报即可通过全概率公式计算得到。

PaddlePaddle飞桨入门之旅(③)

实际中无法通过穷举所有trajectory来计算理论的期望回报,只能通过多次采样,用采样数据逼近理论值。

优化策略网络:

用策略网络逼近最优策略函数。

PaddlePaddle飞桨入门之旅(③)

Policy网络的目标:期望回报越大越好,即优化目标为期望回报,通过梯度上升优化策略网络。通过期望回报对网络参数求导,利用梯度上升方法优化目标。

PaddlePaddle飞桨入门之旅(③)

策略网络优化的Loss函数:

PaddlePaddle飞桨入门之旅(③)

网络输出action概率向量与实际动作action的交叉熵,因为实际action不一定是最优action,因此用Gt即动作收益做加权,Gt越大则说明此Loss越应该重视;Loss加负号,就可以用深度学习框架中的优化器minimizer通过梯度下降实现梯度上升的效果。

五、连续动作空间求解RL-DDPG

DDPG-Deep Deterministic Policy Gradient

目的:将DQN扩展到连续动作空间。(动作取值是连续的、不可数的)

借鉴DQN的经验回放和固定Q网络。

采用策略网络直接输出确定性动作。

Actor-Critic结构。

DQN输出不同动作(有限多个)的取值概率,而对于一些连续动作问题(例如输出模拟控制电压值,是一个连续的数值),动作本身是一个连续的值。

DDPG同样使用策略网络,但输出的不是action的取值概率,而是action的值,(用tanh函数替换softmax,action有几维就输出几维的数值向量)。

Actor-Critic结构:

PaddlePaddle飞桨入门之旅(③)

策略网络输出action值,Q网络类似DQN输出对应的期望Q值。

Q网络类似DQN,通过与Qtarget的差值更新网络;

策略网络优化目标是提高Q网络的预期Q值。

PaddlePaddle飞桨入门之旅(③)

固定目标网络 + 经验回放:

PaddlePaddle飞桨入门之旅(③)

 

 


推荐阅读
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 在Python编程中,掌握高级技巧对于提升代码效率和可读性至关重要。本文重点探讨了生成器和迭代器的应用,这两种工具不仅能够优化内存使用,还能简化复杂数据处理流程。生成器通过按需生成数据,避免了大量数据加载对内存的占用,而迭代器则提供了一种优雅的方式来遍历集合对象。此外,文章还深入解析了这些高级特性的实际应用场景,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 在单个图表中实现饼图与条形图的精准对齐 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 在Matlab中,我尝试构建了一个神经网络模型,用于预测函数 y = x^2。为此,我设计并实现了一个拟合神经网络,并对其进行了详细的仿真和验证。通过调整网络结构和参数,成功实现了对目标函数的准确估计。此外,还对模型的性能进行了全面评估,确保其在不同输入条件下的稳定性和可靠性。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 在编写数据库应用程序时,常常需要用户自己在控制面板中配置ODBC数据源。然而对一般用户而言,配置ODBC数据源的工作是有一定困难的。因此, ... [详细]
  • 本文探讨了在Lumen框架中实现自定义表单验证功能的方法与挑战。Lumen的表单验证机制默认返回无状态的JSON格式API响应,这给初学者带来了一定的难度。通过深入研究Validate类,作者分享了如何有效配置和使用自定义验证规则,以提升表单数据的准确性和安全性。 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • 在 CentOS 7 系统中,为了扩展根目录(/)的存储空间,本文详细介绍了从虚拟机硬盘扩容到文件系统调整的全过程。通过具体的操作步骤,成功解决了因空间不足导致的 GNOME 桌面无法正常登录的问题,为用户提供了一套完整的解决方案。 ... [详细]
author-avatar
Opera2502896761
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有