| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 强化学习笔记:Actor-critic -> 正文阅读 |
|
[人工智能]强化学习笔记:Actor-critic |
0 复习由于actor-critic 是 policy gradient 和DQN的一个结合,所以我们先对这两个进行一个简单的复习: 0.1 policy gradient强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客
0.2 DQN? ? ? ? 那么针对之前所说的policy gradient的不足之处,有没有什么办法可以让整个训练过程变得稳定一些呢?? ???????? ?????????我们在状态 s 采取动作 a 的时候,直接用一个网络去估测在状态 s 采取动作 a 的时候,G 的期望值。如果这件事情是可行的,那之后训练的时候,就用期望值来代替采样的值,这样会让训练变得比较稳定。 ????????这边就需要引入基于价值的(value-based)的方法。基于价值的方法就是 Q-learning。Q-learning 有两种函数,有两种 critics:
????????可以用 TD 或 MC 来估计。用 TD 比较稳定,用 MC 比较精确。 DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客 1 actor-critic
2 advantage?actor-critic (A2C)2.1 大致思想? ????????如果你这么实现的话,有一个缺点是:你要估计 2 个 网络:Q-network 和 V-network。不仅耗时,而且不确定性大。
?2.2 大体流程?????????我们有一个 初始的 actor? π,用他去跟环境做互动,先采样收集资料。 ????????在 policy gradient 方法里面收集资料以后,你就要拿去通过梯度上升的方法更新 policy。 ????????但是在 actor-critic 方法里面,你先拿这些采样得到的资料去估计价值函数V(用 TD 或 MC 来估计价值函数) 。接下来,你再基于价值函数,套用下面这个式子去更新?π,得到新的actor π'。 ? ?? ????????然后你有了新的?π?以后,再去跟环境互动,再收集新的资料,去估计价值函数。然后再用新的价值函数 去更新 policy,去更新 actor。 2.3 tips2.3.1 前几层共享参数????????我们需要估计两个网络:V function 、?policy 的网络(也就是 actor)。?
????????假设你今天是玩 Atari 游戏,输入都是图像。输入的图像都非常复杂,图像很大,通常你前面都会用一些 CNN 来处理,把那些图像抽象成高级的信息。把像素级别的信息抽象成高级信息这件事情,其实对 actor 跟 critic 来说是可以共用的。所以通常你会让 actor 跟 critic 的前面几个层共用同一组参数,那这一组参数可能是 CNN 的参数。 ? ? ? ? 换句话说,先把输入的像素变成比较高级的信息,然后再给 actor 去决定说它要采取什么样的行为;给?critic去计算V function。 2.3.2 探索机制exploration????????在做 Actor-Critic 的时候,有一个常见的探索的方法是去约束 π?的输出的分布。 ????????这个约束是希望这个分布的熵(entropy)不要太小,希望这个分布的熵可以大一点,也就是希望不同的动作它的被采用的概率平均一点。 ????????这样在测试的时候,它才会多尝试各种不同的动作,才会把这个环境探索的比较好,才会得到比较好的结果。 3 A3C3.1 大体思想(来自李宏毅教授)????????强化学习有一个问题就是它很慢,那怎么增加训练的速度呢?李宏毅教授举了一个很直观的例子:
?3.2 主体框架????????A3C 这个方法就是同时开很多个 worker,那每一个 worker 其实就是一个影分身。那最后这些影分身会把所有的经验,通通集合在一起。你如果没有很多个 CPU,可能也是不好实现的,你可以实现 A2C 就好。
????????注意,所有的 actor 都是平行跑的,每一个 actor 就是各做各的,不管彼此。 ????????所以每个人都是去要了一个参数以后,做完就把参数传回去。 ? ? ? ? 因此当第一个 worker 做完想要把参数传回去的时候,本来它要的参数是θ1?,等它要把梯度传回去的时候。可能别人已经把原来的参数覆盖掉,变成θ2?了。但是没有关系,global network 对θ2进行更新(使用worker传回的梯度)。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 2:25:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |