强化学习笔记------第一章----强化学习概述(超详细)

news/2024/5/18 22:16:59 标签: 强化学习, 神经网络, 人工智能

强化学习讨论的问题是一个智能体(agent)怎么在一个复杂不确定的环境(environment)里面去极大化他能获得的奖励。

首先,我们可以把强化学习和监督学习做一个对比。
例如图片分类,监督学习(supervised learning),指的是我们有一大堆标注的数据,如飞机、汽车等等,这些图片都要满足独立同分布(i.i.d),意思就是他们之间是没有关联的。

然后我们训练一个分类器,为了分辨出这个图片是车辆或是飞机,我们需要将真实的标签给神经网络,去训练这个网络,当网络做出了一个错误的预测,就会直接告诉网络预测结果错误,将这个错误写成一个损失函数(loss),通过反向传播(bp)来训练网络

所以在监督学习过程中,有两个假设:
输入的数据(标注的数据)都是没有关系的,尽可能无关联。
我们告诉学习器(learner)正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。

但是在强化学习中,这两点都不满足。例如Atari Breakout这个游戏

在这里插入图片描述
在游戏过程中,可以发现agent得到的观测不是独立同分布,上一帧和下一帧有非常强的连续性
另外,在玩游戏的时候,并没有立刻获得反馈,没有告诉你哪个动作是正确的,比如你现在把这个木板往右移,那么只会使得这个球往上或者往左上去一点,你并不会得到立刻的反馈。所以强化学习这么困难的原因是没有得到很好的反馈,然后你依然希望 agent 在这个环境里面学习。

强化学习和监督学习对比
强化学习输入的是序列数据,监督学习里面的样本都是独立的
学习器并没有被告知每一步正确的行为应该是什么,学习器需要自己去发现哪些行为可以得到更多的奖励,只能不停的尝试去发现最有利的动作。
Agent获得自己能力的过程中,其实是通过不断地试错探索。

探索(exploration)和利用(exploitation)是强化学习里面非常核心的问题。
探索:是指尝试一些新的行为,这些新的行为可能会得到更高的奖励,也能一无所获
利用:采用已知的可以获得最大奖励的行为,就重复执行这个动作就可以了,因为已经知道可以获得一定的奖励
所以,需要在探索和利用之间取得一个平衡。

强化学习特征:
强化学习试错探索(trail-and-error exploration),需要通过探索环境来获取对环境的理解。
强化学习agent会从环境里面获得延迟的奖励
强化学习的训练过程中,时间非常重要
Agent的行为会影响它随后得到的数据。
在这里插入图片描述
上图就是一些强化学习里面比较有意思的例子。
第一个例子是 DeepMind 研发的一个走路的 agent。这个 agent 往前走一步,你就会得到一个 reward。这个 agent 有不同的这个形态,可以学到很多有意思的功能。比如怎么跨越这个障碍物,就像那个蜘蛛那样的 agent 。怎么跨越障碍物,像这个人有双腿一样, 这个 agent 往前走。以及像这个人形的 agent,怎么在一个曲折的道路上面往前走。这个结果也是非常有意思,这个人形 agent 会把手举得非常高,因为它这个手的功能就是为了使它身体保持平衡,这样它就可以更快地在这个环境里面往前跑,而且这里你也可以增加这个环境的难度,加入一些扰动,这个 agent 就会变得更鲁棒。

第二个例子是机械臂抓取。因为机械臂的应用自动去强化学习需要大量的 rollout,所以它这里就有好多机械臂,分布式系统可以让这个机械臂尝试抓取不同的物体。你发现这个盘子里面物体的形状、形态其实都是不同的,这样就可以让这个机械臂学到一个统一的行为。然后在不同的抓取物下面都可以采取最优的一个抓取特征。你的这个抓取的物件形态存在很多不同,一些传统的这个抓取算法就没法把所有物体都抓起来,因为你对每一个物体都需要做一个建模,这样的话就是非常花时间。但是通过强化学习,你就可以学到一个统一的抓取算法,在不同物体上它都可以适用。

第三个例子是 OpenAI 做的一个机械臂翻魔方。这里它们 18 年的时候先设计了这个手指的一个机械臂,让它可以通过翻动手指,使得手中的这个木块达到一个预定的设定。人的手指其实非常精细,怎么使得这个机械手臂也具有这样灵活的能力就一直是个问题。它们通过这个强化学习在一个虚拟环境里面先训练,让 agent 能翻到特定的这个方向,再把它应用到真实的手臂之中。这在强化学习里面是一个比较常用的做法,就是你先在虚拟环境里面得到一个很好的 agent,然后再把它使用到真实的这个机器人中。因为真实的机械手臂通常都是非常容易坏,而且非常贵,你没法大批量地购买。2019 年对手臂进一步改进了,这个手臂可以玩魔方了。这个结果也非常有意思,到后面,这个魔方就被恢复成了个六面都是一样的结构了。

第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。因为很多时候你要在电影或者一些动画实现人穿衣服的场景,通过手写执行命令让机器人穿衣服其实非常困难。很多时候穿衣服也是一个非常精细的操作,那么它们这个工作就是训练这个强化学习 agent,然后就可以实现这个穿衣功能。你还可以在这里面加入一些扰动,然后 agent 可以抗扰动。可能会有失败的情况(failure case), agent 就穿不进去,就卡在这个地方。

对于一个强化学习的agent,它可能有一个或多个如下的组成成分
首先agent有一个策略激活函数(policy function),agent会用这个函数来选取下一步的动作。
然后它也可能生成一个代价函数(value function)。利用价值函数对当前状态进行估价,就是指进入目前这个状态,可以对后面的收益带来多大的影响,当这个函数值越大时,说明进入的这个状态越有效。
还有一个组成成分是模型(module)。模型表示了agent对这个环境进行了理解,决定了这个世界是如何进行的。

Policy
Policy是agent的行为模型,他决定了这个agent的行为,本质是一个函数,把输入的状态变成行为,有两种policy:
一种是stochas policy,他就是π 函数
π(a∣s)=P[At=a∣St=s] 。当你输入一个状态s的时候,输出是一个概率。这个概率就是所有行为的一个概率,然后就可以进一步对这个概率分布进行采样,得到真实的采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过采样就可以得到一个 action。
一种是deterministic policy(确定性策略)就是说你这里有可能只是采取它的极大化,采取最有可能的动作,即
在这里插入图片描述
通常情况下,强化学习一般使用随机性策略。随机性策略有很多优点:

在学习时可以通过引入一定随机性来更好地探索0环境;

随机性策略的动作具有多样性,这一点在多个智能体博弈时也非常重要。采用确定性策略的智能体总是对同样的环境做出相同的动作,会导致它的策略很容易被对手预测。

Value Function
价值函数是未来奖励的一个预测,用来评估状态的好坏。
价值函数里面有一个discount factor(折扣因子),我们希望尽可能在短的时间里面得到尽可能多的奖励,所以我们就通过把这个折扣因子放到价值函数的定义里面,价值函数的定义其实是一个期望,如下式所示:
在这里插入图片描述
这里有一个期望Eπ,这里有个小角标是 \piπ 函数,这个π函数就是说在我们已知某一个策略函数的时候,到底可以得到多少的奖励。
我们还有一种价值函数:Q 函数。Q 函数里面包含两个变量:状态和动作,其定义如下式所示:
在这里插入图片描述
所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法里面要学习的一个函数。因为当我们得到这个 Q 函数后,进入某一种状态,它最优的行为就可以通过这个 Q 函数来得到。

Module
在这里插入图片描述
模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。
模型由两个部分组成:
概率:这个转移状态之间是怎么转移的
奖励函数:当你在挡墙状态采取某一行为,可以得到多大的奖励。
在这里插入图片描述
当有了这三个组成部分(Policy,Value Function,Module)后,就形成了一个马尔可夫决策过程(Markov DecisionProcess)。这个决策过程可视化了状态之间的转移以及采取的行为。

**根据agent学习的东西不同,可以把agent进行归类。
基于价值的 agent(value-based agent):这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。
基于价值的 agent(policy-based agent):这一类 agent 直接去学习 policy,就是说你直接给它一个状态,它就会输出这个动作的概率。在基于策略的 agent 里面并没有去学习它的价值函数。
把 value-based 和 policy-based 结合起来就有了 Actor-Critic agent。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。

另外通过agent到底有没有学习这个环境模型进行分类

第一种是 model-based(有模型) RL agent,它通过学习这个状态的转移来采取动作。
另外一种是 model-free(免模型) RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。

当智能体知道状态转移函数 P(st+1|st , at)和奖励函数 R(st,at)后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。这种学习方法称为有模型学习

上图就是有模型强化学习的流程图。
**通常情况下,状态转移函数和奖励函数很难估计甚至连环境中的状态都可能是未知的,这时就需要采用免模型学习。免模型学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。

Q: 有模型强化学习和免模型强化学习有什么区别?

A: 针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。

有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;

免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。
在这里插入图片描述
把几类模型放到同一个饼图里面。饼图有三个组成部分:价值函数、策略和模型。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。

Exploration and Exploitation
强化学习里面,探索利用 是两个很核心的问题。

探索是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。

利用是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。

因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以探索就是在试错来理解采取的这个行为到底可不可以得到好的奖励。利用是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个权衡,怎么通过牺牲一些短期的奖励来获得行为的理解,从而学习到更好的策略。

K-armed Bandit
在这里插入图片描述
与监督学习不同,强化学习任务的最终奖赏是在多步动作之后才能观察到,这里我们不妨先考虑比较简单的情形:最大化单步奖赏,即仅考虑一步操作。需注意的是,即便在这样的简化情形下,强化学习仍与监督学习有显著不同,因为机器需通过尝试来发现各个动作产生的结果,而没有训练数据告诉机器应当做哪个动作。

想要最大化单步奖赏需考虑两个方面:一是需知道每个动作带来的奖赏,二是要执行奖赏最大的动作。若每个动作对应的奖赏是一个确定值,那么尝试遍所有的动作便能找出奖赏最大的动作。然而,更一般的情形是,一个动作的奖赏值是来自于一个概率分布,仅通过一次尝试并不能确切地获得平均奖赏值。

实际上,单步强化学习任务对应了一个理论模型,即 K-臂赌博机(K-armed bandit)。K-臂赌博机也被称为 多臂赌博机(Multi-armed bandit) 。如上图所示,K-摇臂赌博机有 K 个摇臂,赌徒在投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币,但这个概率赌徒并不知道。赌徒的目标是通过一定的策略最大化自己的奖赏,即获得最多的硬币。

若仅为获知每个摇臂的期望奖赏,则可采用仅探索(exploration-only)法:将所有的尝试机会平均分配给每个摇臂(即轮流按下每个摇臂),最后以每个摇臂各自的平均吐币概率作为其奖赏期望的近似估计。

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

显然,仅探索法能很好地估计每个摇臂的奖赏,却会失去很多选择最优摇臂的机会;仅利用法则相反,它没有很好地估计摇臂期望奖赏,很可能经常选不到最优摇臂。因此,这两种方法都难以使最终的累积奖赏最大化。

事实上,探索(即估计摇臂的优劣)和利用(即选择当前最优摇臂)这两者是矛盾的,因为尝试次数(即总投币数)有限,加强了一方则会自然削弱另一方,这就是强化学习所面临的探索-利用窘境(Exploration-Exploitation dilemma)。显然,想要累积奖赏最大,则必须在探索与利用之间达成较好的折中。


http://www.niftyadmin.cn/n/1182634.html

相关文章

记录点滴8

第8~9周 4月7日~4月22日 第八周的时候实在太多东西要做了,我把写周记这件事给忘了,其实也没太大关系,写跟不写之间也没有太大的鸿沟,只是写了之后,会让我的记忆更加清晰,让自己明白,最近自己做了…

Web Storage API

web storage内容 web storage提供在浏览器端通过key/value的方式存储数据。包括以下两部分: session storage(会话级别的存储,会话结束后失效) local storage(持久性存储,用户主动删除或js操作清空&…

【软件测试】高级测试进阶 Centos7安装 Docker容器(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 OS 安装环境要求 …

强化学习笔记------第二章----马尔可夫决策过程(MDP)(超详细)

在介绍马尔可夫决策过程之前,先介绍它的简化版本:马尔可夫链以及马尔可夫奖励过程,通过跟这两种过程的比较,我们可以更容易理解马尔可夫决策过程。 Markov Process(MP) Markov Property 如果一个状态转移是符合马尔可夫的&#x…

CentOS忘记密码处理

(1)开机启动跳转到引动选项键入e出现下图: (2)选择kernel键入e输入linux single回车,退回到上图输入b进入单用户模式(3)setenforce 0关闭grub&am…

asp.net 操作共享目錄

1.建立訪問類 View Code /// <summary>/// 用戶訪問共享類/// </summary>public class WNetHelper{#region enums public enum RESOURCE_SCOPE{RESOURCE_CONNECTED 0x00000001,RESOURCE_GLOBALNET 0x00000002,RESOURCE_REMEMBERED 0x00000003,RESOURCE_RECE…

强化学习笔记------第三章----tabular methods(超详细)

Tabular Methods 本章通过最简单的表格型的方法&#xff08;tabular methods&#xff09;来讲解如何使用value_based方法求解强化学习。 Model-based 如上图所示。去跟环境交互时&#xff0c;只能走完完整的一条路。这里面产生了一系列的一个决策过程&#xff0c;这就是跟环境…

防止鼠标唤醒机器

常常因为碰鼠标而唤醒机器。 这是网上的解决方案 http://www.vista123.com/html/12285.html 也就是在设备管理器里找到鼠标设备&#xff0c; 点右键看属性-> 电源管理-> 唤醒去掉转载于:https://www.cnblogs.com/johnsonshu/archive/2012/06/22/2558499.html