写点什么

李宏毅深度强化学习课程:Deep Q-learning Advanced Tips

  • 2019-12-02
  • 本文字数:1081 字

    阅读完需:约 4 分钟

李宏毅深度强化学习课程:Deep Q-learning Advanced Tips

DDQN


红色线表示 DQN 估计的 Q 值,发现都会比真实的 Q 值要高很多,那么是为什么会 Q 值会被高估?



假设现在有 4 个状态动作对,他们真实的 Q 值其实是相差不大的,但是因为在学习过程中,Q 值是一个估计值,总会有状态动作对的 Q 值会被高估,此时被高估的 Q 值就会被选择出来当做 target。



解决方法就是用两个 Q 值函数(一个是当前的值网络,一个是 target 网络),一个用作动作的选择,一个用作 target Q 值的估计。这样当 Q 值被高估后,选出相应的动作,但只要[公式] 不高估就行。另外一种情况是如果 [公式] 被高估,但是此时被高估的动作也不会被选择到(选择动作是根据另一个 Q 值选的)。


Dueling DQN



其实就是将输出 Q 值改为输出 V 值和 A 值。


那么这样有什么好处呢?



假设有两个 Q 值都希望+1,现在只能动 V 值和 A 值。现在可以让 V 值+1,那么所有的状态动作 Q 值都会改变,这样就不需要采样到所有状态动作对来更新所有的 Q 值,提高了样本的利用率。另外,必须对 A 值加 constraint,使得网络更新 A 值会比较复杂,而去倾向于更新 V 值。常做的方式是将一个动作的所有 A 值加起来为 0。



计算 Q 值的时候(V+A),先将 A 值做归一化。


Prioritized Reply



之前是从样本池中随机抽取一个 batch 训练数据,现在可优先选取 TD 误差较大的样本。TD 误差较大的样本训练价值更高,梯度会更大。


Multi-step



可结合使用 MC 和 TD 更新方法,之前 DQN 方法是存储一个时间步的转移样本 :[公式] ,现在存储 N 个时间步的转移样本。好处:sample 多个 step 的转移样本,Q 的估计值的准确性会提高,但是多个时间步的采样会导致方差变大。


Noisy Net



之前为了探索在动作上加 noise,现在可以在网络参数上加 noise。须注意的是 noise 必须在每个新的 episode 开始时加入,并且在每个 episode 期间没有动作的探索。



epsilon greedy 方法会有一个问题:在同个 state 下,可能会执行不同的动作。但是现实场景中合理的做法应该是同个 state 采取同一个 action。Noisy net 就会在同个 episode 中的同个 state 下,执行相同的动作。


Distributional Q-function



其实 Q(s,a)的值是有一个分布的,不同的分布可能会有同样的 mean 均值(当做 Q 值)。所以用 Q 来表示未来期望总奖赏会丢失一些信息。



直接输出每个状态动作对的 Q 值的分布,这样可以根据 Q 值分布获得很多额外信息,比如可根据动作 Q 值的分布的熵来决定要不要采取该动作??


Rainbow


结合上述的几个 tips




可发现,multi-step 和 priority 比较有用。


参考文献:


https://www.bilibili.com/video/av24


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/72994607


2019-12-02 16:231006

评论

发布
暂无评论
发现更多内容

前端开发之JavaScript优化

@零度

JavaScript 大前端

一文讲透一致性哈希的原理和实现

万俊峰Kevin

微服务 高并发 哈希算法 go-zero Go 语言

处理可能超时的异步操作

编程江湖

大前端

大数据开发之Hive

@零度

大数据 hive

NDPQ(NDP+PQ),定义分布式数据库新方向

华为云开发者联盟

数据库 查询 GaussDB(for MySQL) 近数据处理 NDP

安全经典JWT算法漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

Java开发中常用的消息队列工具 ActiveMQ

编程江湖

Activemq Java 开发

云原生数据库TDSQL-C关键技术内核解密

腾讯云数据库

tdsql 国产数据库

很好用的压测工具 - Apache Bench工具

恒生LIGHT云社区

测试 AB AB testing实战

使用 Litho 改进 News Feed 上的 Android 视频表现

CatTalk

android facebook 性能优化 Feed流 Litho

喜报!Nocalhost 成功加入 CNCF 沙箱

CODING DevOps

Kubernetes DevOps cncf Nocalhost 本地化开发

开源应用中心|程序员的崩溃瞬间,太形象了!

Java php 开源 插件

Rainbond通过插件整合SkyWalking,实现APM即插即用

北京好雨科技有限公司

Kubernetes 云原生 全链路追踪

Google I/O 2021 What's new in Android Machine Learning

CatTalk

机器学习 tensorflow android Google

从社区贡献者到加入核心团队,开源给他带来了这些变化

TDengine

tdengine 时序数据库

百度:YOLOX和NanoDet都没我优秀!轻量型实时目标检测模型PP-PicoDet开源

百度开发者中心

目标检测 开源技术

博文推荐|深入解析 Apache Pulsar 中的事务

Apache Pulsar

大数据 架构 分布式 云原生 Apache Pulsar

TDSQL | 国产化浪潮下,数据库+云如何跑上核心业务?

腾讯云数据库

tdsql 国产数据库

Python代码阅读(第65篇):根据条件应用指定函数

Felix

Python 编程 Code 阅读代码 Python初学者

一些常用的hive sql函数

编程江湖

大数据 hive Hive SQL

Google I/O 2021 移动和 Web应用上的设备端机器学习

CatTalk

机器学习 tensorflow android Google

数据分析从零开始实战,Pandas读取HTML页面+数据处理解析

老表

Python 数据分析 数据处理 11月日更

Linux一学就会之文件的基本管理和XFS文件系统备份恢复

学神来啦

Linux 运维 文件系统 linux云计算 linux基础

混合云管理策略是什么?如何又快又好的管理混合云?

行云管家

云计算 混合云 云管理

行云管家Proxy特点及其部署要求详细解析

行云管家

数据库 IT运维 行云管家 跳板机

万字讲解WiFi为何物

华为云开发者联盟

wifi 物联网 无线通信 传输 无线

为云而生,云原生数据库TDSQL-C技术突破与演进

腾讯云数据库

tdsql 国产数据库

聊聊 ab 和 jmeter 的并发模型

恒生LIGHT云社区

测试 AB

技术探究:Apache Pulsar 的事务型事件流

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

Java SPI 机制从原理到实战

江璇Up

Java spi JavaSPI

TDSQL演进与突破:把企业级分布式数据库做到极致

腾讯云数据库

tdsql 国产数据库

李宏毅深度强化学习课程:Deep Q-learning Advanced Tips_语言 & 开发_Alex-zhai_InfoQ精选文章