强化学习基本方法(一)
来源:互联网 发布:单片机智能车 编辑:程序博客网 时间:2024/05/16 20:30
1.基本概念
1.1.强化学习是什么
在机器学习领域一般将机器学习划分为三大类型:有监督学习,无监督学习和强化学习。有监督学习和无监督学习都主要是为了解决分类问题,而强化学习比较特殊,强化学习的目的是为了研究策略,比如让机器人自主的学会如何把花养好,如何在一个未知环境进行探索等。
强化学习的核心问题在于通过研究各种不同策略的价值并给予评价,来自主选择最优策略。策略,即是决策层对于不同的状态所作出的不同反应。以种花而言,看到花处于枯萎的状态,就要施加浇水的动作,看到花叶子变黄的状态,就应当加以施肥的动作。状态在施加不同动作之后,就可能向各个其他状态转移,所以强化学习是在一个高动态的,高复杂性的环境中寻找最佳选择的一种算法。
在程序流程进行时,主要有以下几个方面需要解决:
- 需要了解各个状态和动作之间的转移关系
- 实际应用中,我们很难知道在某一个状态施加某动作之后,转移到下一个状态的概率。比如在花枯萎的时候,浇水也不一定会让花恢复健康,可能花还会继续枯萎,甚至死亡。但是我们并不是很容易知道这样的转移概率是多少,是
P(健康|枯萎,浇水) 的概率大呢,还是P(死亡|枯萎,浇水) 的概率更大。这些都需要实际应用中的样本来说明。
- 实际应用中,我们很难知道在某一个状态施加某动作之后,转移到下一个状态的概率。比如在花枯萎的时候,浇水也不一定会让花恢复健康,可能花还会继续枯萎,甚至死亡。但是我们并不是很容易知道这样的转移概率是多少,是
- 需要正确评价各个执行动作的优劣
- 即使知晓了状态-动作之间的转移关系,为了达到目标,应该以什么准则去评价在不同状态下选择的动作呢(我们将其称之为策略的评估)。一般我们采用状态收益函数和状态-动作收益函数作为评价的标准。在后文中我们会详细说明。
在了解了强化学习的基本思想之后,我们需要探寻的就是具体如何去进行学习了。
1.2.基本记号
在强化学习中,每一个状态一般用s表示,转移概率用p表示,每个状态的收益用r表示,这样,一个普通的状态转换对就可以表示为:
2.已知状态-动作转移概率
首先,我们来研究一个简单的环境,我们知道状态,假设整个环境中的
2.1.状态收益评价函数
该如何评价各个状态的价值呢。比如,我们的目标是如何让花健康的活下去,那花枯萎的状态和花死亡的状态价值显然是不同的,一般来说,我们的学习过程通常都会有一个到若干和目标状态(比如植物开花)以及若干个避免状态(比如植物死亡),显然,越接近目标状态的状态越有价值,越接近避免状态的状态越应该避免。这个又是如何衡量的呢,我们先不加证明的写出状态价值函数的Bellman方程:
哇,这么长一个方程,到底该如何理解呢。其实很简单,就会求期望!我们把最后一部分拆开,它就是这样的样子:
这表示在
例子的话可以去参考下:http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MDP.pdf P21 给出的例子,并没有必要把它再呈现一遍。
在这里我需要提醒两点:
2.1.1.状态收益的后向传递
实际的计算中我们并没有将
让我们来看这个例子,假如有状态链:
其中C→D状态收益是100,D为目标状态,其他状态的收益都是0,那么应用上面的公式有:
继续进行迭代:
可以发现,C→D的收益,经过迭代渐渐变成了B的状态价值,而且这个状态价值在这个网络还会无损耗的往回传递!可是问题来了,这样算的话,ABC三个状态价值都是100,也就是说这三个状态是没有区别的?
2.1.2.状态衰减系数
为了解决这个问题,公式里面那个很碍眼的
继续进行迭代:
这样,最终A状态的价值就是64,B为80,C是100。几个状态之间的区别立马就显现出来了。
- 强化学习基本方法(一)
- 强化学习基本方法(二)
- 强化学习基本方法(三)
- 强化学习(一)
- 浅谈强化学习(一)
- 一文了解强化学习
- 一文了解强化学习
- 一文了解强化学习
- 一文了解强化学习
- 强化学习(一) ----- 基本概念
- 一文了解强化学习
- 深度强化学习系列(一):强化学习概述
- 强化学习原理及实现(一)
- 强化学习的基础总结(一)
- 强化学习(一)~(五)
- 【强化学习实践一】格子世界(DP)
- Janki学习和强化记忆的方法
- 强化学习基础 第三讲 蒙特卡罗方法
- static linked list(静态链表,结合数组实现)
- 项目-数组类模板在数组类的基础上,将之改造为类模板,以使数组中可以存储各种类型的数据
- 项目-两个成员的类模板为该类增默认构造函数、带两个参数分别对应两个数据成员初值的构造函数,以及复制构造函数
- Node.js与io.js那些事儿
- Android Framework解析
- 强化学习基本方法(一)
- oc 中代码块中局部变量与全局变量、全局静态变量
- HTTP Status 500 - Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.J
- hdu 2354 Integer Intervals【Bfs+暴力】
- scrapy提取wikipedia实践1
- 在Mac的terminal下连接 SMB 共享的三种方法
- 强化学习基本方法(二)
- 如何在代码中减少if else语句的使用
- ubuntu 默认防火墙安装、启用、查看状态