【基础知识十六】强化学习

一、任务与奖赏

我们执行某个操作a时,仅能得到一个当前的反馈r(可以假设服从某种分布),这个过程抽象出来就是“强化学习”。

强化学习任务通常用马尔可夫决策过程MDP来描述:

强化学习任务的四要素

E = <X, A, P, R>

E:机器处于的环境

X:状态空间

A:动作空间

P:状态转移概率

R:奖赏函数

学习目的:

“策略”:机器要做的是不断尝试学得一个“策略” π,根据状态x就能得到要执行的动作 a = π(x)

策略的评价:

长期累积奖赏,常用的有“T步累积奖赏”

强化学习与监督学习的差别

“策略”实际相当于监督学习中的“分类器”(或“回归器”)

“动作”对应于“标记”

不同的是,强化学习没有监督学习中的“示例-标记”对

二、K-摇臂赌博机

一般地,一个动作的奖赏值是来自于一个概率分布。

1. 探索与利用

探索:将所有尝试机会平均分配给每个摇臂——用于估计每个动作带来的奖赏

利用:按下目前最优的(即到目前为止平均奖赏最大的)摇臂,若有多个摇臂同为最优,则从中随机选取一个——用于执行奖赏最大的动作

面临“探索-利用窘境”

2. ε-贪心

以ε的概率进行探索,以 1-ε的概率进行利用

若摇臂奖赏的不确定性较大,例如概率分布较宽时,需要较大的ε值;

3.softmax

基于当前已知的摇臂平均奖赏来对探索和利用进行折中:若某些摇臂的平均奖赏明显高于其他摇臂,则它们被选取的概率也明显更高

三、多步强化学习任务

有模型学习:

解决方法:策略迭代与值迭代

1. “状态评估算法”(基于T步累积奖赏的策略评估算法),用于求状态值函数V(.),进而可以求出状态-动作函数Q(.)

2. “策略迭代”——初始策略,策略评估,然后策略改进……不断迭代

“值迭代”——策略改进与值函数的改进是一致的,因此可以将策略改进视为值函数的改善(于是可以得到“值迭代”算法)

免模型学习:

蒙特卡罗强化学习

时序差分学习

四、值函数近似

前面一直假定强化学习任务是在有限状态空间上进行的,每个状态可用一个编号来指代;值函数是关于有限状态的“表格值函数”,即值函数能表示为一个数组

如果强化学习的状态空间是连续的,有无穷多个状态,如何处理?——“值函数近似”

即直接对连续状态空间的值函数进行学习

五、模仿学习

现实任务中,往往能得到“人类专家的决策过程范例”,从这样的范例中学习,称为“模仿学习”。

1. 直接模仿学习

可将所有轨迹上的所有“状态-动作对”抽取出来,构造出一个新的数据集合D,

即把状态作为特征,动作作为标记,对新构造出来的数据集合D使用分类(对于离散动作)学得策略模型

学得的这个策略模型可作为机器进行强化学习的初始策略,再通过强化学习方法基于环境反馈进行改进,获得更好的策略。

2. 逆强化学习

设计奖赏函数往往相当困难(正向),反过来从人类专家提供的范例数据中反推出奖赏函数(逆向),有助于问题解决

#补充:

1. 时序差分TD学习,著名应用是跳棋,达到人类世界冠军水平

2. 模仿学习被认为是强化学习提速的重要手段

3. 运筹学与控制论领域,强化学习被称为“近似动态规划”

时间: 2024-10-13 22:50:35

【基础知识十六】强化学习的相关文章

ASP.NET Core 2.2 基础知识(十六) SignalR 概述

原文:ASP.NET Core 2.2 基础知识(十六) SignalR 概述 我一直觉得学习的最好方法就是先让程序能够正常运行,才去学习他的原理,剖析他的细节. 就好像这个图: 所以,我们先跟着官方文档,创建一个 SignalR 应用: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-2.2&tabs=visual-studio 这个例子一共涉及到下面几个步骤: 自定义中心 ChatH

Android学习之基础知识十六 — Android开发高级技巧的掌握

一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到Context而发愁,因为我们很多地方都是在活动中进行的,而活动本身就是一个Context对象,但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离Activity类,但此时又恰恰需要使用Context,特许这个时候就会感到有些伤脑筋了. 举个例子,在前面网络编程的最佳实践中,我们编写

ASP.NET Core 2.2 基础知识(十六) SignalR (未完待续)

我一直觉得学习的最好方法就是先让程序能够正常运行,才去学习他的原理,剖析他的细节. 就好像这个图: 所以,我们先跟着官方文档,创建一个 SignalR 应用: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-2.2&tabs=visual-studio 这个例子一共涉及到下面几个步骤: 自定义中心 ChatHub ; 在启动类 Startup 中启用 SignalR 服务,并添加路由;

集合框架、泛型、迭代(java基础知识十六)

1.ArrayList存储自定义对象并遍历 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException.* ArrayList存储自定义对象并遍历 ArrayList<Person> list = new ArrayList<>(); list.

一月十六号学习日报

日期:2020-01-16 作者:老夫秀吉 @雨人网安 一月十六号学习日报 今天又是平淡而又充(ku)实(zao)的一天,讲了一天的OverTheWire题目.学到了很多Linux的基础命令.而且经过了这么多的练习,已经跨过了纸上谈兵的步骤._(:3」∠)_我听得无(hun)法(hun)自(yu)拔(shui),喝了几杯咖啡才让自己冷静下来.其实学习就是这么一个过程吧,加油! 午讲是脱口秀...啊啊啊啊啊啊!羡慕!虽然话题扯得不知道到哪里去了,但是不妨碍他牛*.下午继续,重复重复重复,学习学习学

张季跃 201771010139《面向对象程序设计(java)》第十六周学习总结

张季跃 201771010139<面向对象程序设计(java)>第十六周学习总结 1.实验目的与要求 (1) 掌握线程概念: (2) 掌握线程创建的两种技术: (3) 理解和掌握线程的优先级属性及调度方法: (4) 掌握线程同步的概念及实现技术: 2.实验内容和步骤 实验1:测试程序并进行代码注释. 测试程序1: l 在elipse IDE中调试运行ThreadTest,结合程序运行结果理解程序: l 掌握线程概念: l 掌握用Thread的扩展类实现线程的方法: l 利用Runnable接口

Bootstrap &lt;基础二十六&gt;进度条

Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性,Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .prog

HTTP基础知识(六)

HTTP基础知识(六) 六.HTTP首部 1.HTTP请求报文:由方法.URI.HTTP版本.HTTP首部字段等部分构成. HTTP响应报文由HTTP版本.状态码.HTTP首部字段构成. HTTP首部字段主要用于传递额外信息(如:报文主体大小.所使用语言.认证信息等). 2.HTTP首部字段类型 通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部. 请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部

李晓菁201771010114《面向对象程序设计Java》第十六周学习总结

一:理论知识 1.线程的概念: 程序是一段静态的代码,它是应用程序执行的蓝本.‐进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. 多线程是进程执行过程中产生的多条执行线索.‐线程是比进程执行更小的单位.‐线程不能独立存在,必须存在于进程中,同一进程的各线程间共享进程空间的数据.‐每个线程有它自身的产生.存在和消亡的过程,是一个动态的概念.‐多线程意味着一个程序的多行语句可以看上去几乎在同一时间内同时运行. (2)Java中实现多线程的途径有两种: ‐创建Thread类