假设在一个建筑物中我们有五个房间,这五个房间通过门相连接,如下图所示:将房间从0-4编号,外面可以认为是一个大房间,编号为5.注意到1、4房肆激郑间和5是相通的。
每个节点代表一个房间,每个连接代表一个门。
对这个例子来说,我们可以把Agent放到任何一个房间中,然后从这个房间走出这个建筑物(这就是我们的目标房间,即房间5)。为了把5号房间设成目铅悄标房间,我们为每一扇门(节点之间的连接线)分配一个回报值。直接通向目标的门的回报值为100,没有与目标房间直接相连的其他门的回报值为0。因为门都是双向的(0可以到4,4也可以到0),因此每个门由两个箭头来表示。每个箭头都有有一个立即回报值,如下所示:
当然,从房间5到房间5自身的回报值应该是100。而所有直接通向这个目标房间的连接线的回报值为100。在Q-Learning中,目标就是要到达有最高回报值的状态。所以如果Agent到达了目标,它就会一直在那。这种类型的目标被称为吸收目标(absorbing goal)。
想象一下,我们的Agent是一个不会说话的虚拟机器人,但是它可以从经验中学习。Agent可以从一个房间走到另一个房间但是对于周围的环境没有任何了解,不知道哪一种门的顺序可以把它带到外面。
假设我们要为一个Agent从这个建筑物中任何一个房间撤离出去来简单建模,假设我们有一个Agent在房间2中,我们想让这个Agent学着到达这个建筑物的外面。
Q-Learning中的术语包括状态(state)和动作(action)。
我们称包括建筑物外面的所有房间为状态,Agent从一个房间到另一个房间的移动为动作,在图中,一个状态被画成一个节点,而一个动作被箭头表示出来。
假设Agent是在2号房间(状态2)中,那么它可以从2号房间走到3号房间,因为他们是相通的。而从2号房间Agent不能直接走到1号房间,因为没有一个门(所以没有箭头)直接把1号和2号房间连接起来。从状态3.它可以走到状态1,4,或者回到2(注意看与状态3相关的所有箭头)。如果Agent是在状态4,那么它所有可能的动裂颂作是走向状态0,5或者3。如果它在状态1,那么它可以到达状态3或者状态5,从状态0,它只可以回到状态4。
我们可以把状态图和即时回报值填入下面的回报表中,即R矩阵
上图中-1代表空值,比如两个状态之间没有箭头。
现在我们添加一个相似的矩阵,“Q”,到我们Agent的大脑中,这个矩阵代表了Agent通过经验所学到的,Q矩阵的行代表Agent的当前状态,Q矩阵的列代表了可能到达下一状态的动作(即状态之间的箭头)。
Q-Learning的转换规则方程:
γ值在0到1之间变化(0<=γ<1),如果γ值接近0,Agent倾向于只考虑立即回报值;如果γ值接近1,Agent将以更大的权重去考虑未来回报值,愿意将回报延后。
Agent仅仅是跟踪从起始状态到目标状态的状态序列来使用矩阵Q。这个算法在矩阵Q中为当前状态找到有最高回报值的下一步动作。
实例:
初始化Q矩阵为一个零矩阵,参数伽马r=0.8,随机初始状态为房间1
从R矩阵可以看出有两个非负值,即从房间(状态)1到房间(状态)3或者从房间(状态)1到房间(状态)5,随机选取从1到5.
根据公式1.1
此时状态5变为当前状态,因为状态5就是目标状态,故以此episode结束,刷新Q表
Q-learning 是一个经典的强化学习算法。
为了便于描述,这里依然定义一个“世界”:
Q-table 是 Q-learning 的核心。它是一个表格,记录了每个状态下采取不同动作,所获取的最大长期奖励期望。通过此,就可以知道每一步的最佳动作是什么。
Q-table 的每一列代表一个动作,每一行表示一个状态。则每个格子的值就是此状态下采取此动作获得的最大长期奖励期望。例如:
上表表示,对于状态 STRAT 向下或左的奖励期望是0(因为无法移动),其余两个方向由于未探索,所以奖励未知。状态(2,1)和状态(1,2)同理。
如果能求出整个表的所高败有值,那么这个问题就解决了。为了做到这一点,需要使用 Q-learning 算法。
算法流程可以表述为:
在这个流程中有两个地方需要注意。
在一开始,表格中值都为0,自然地我们会想到随机选取一个动作。但随着迭代的进行,若一直随机选择,就相当于 没有利用已经学习到的东西 。为了解决这个问题模念猜,可能会想到除第一次外,均采取当前Q值最大的动作。但这样又可能 陷入局部最优解 ,因为可能还有更好的动作没有被发现。
这其实是如何平衡「探索」与「利用」的问题。
于是可以采用一种叫做 ε-greedy 的策略。
ε-greedy 策略旦型的本质就是: 每次有ε概率进行探索,有(1-ε)的概率利用已学习的数据。 探索意味着随机选取一个动作,利用意味着采取当前Q值最高的动作。
一开始往往设定一个较高的 ε(比如1),因为我们对环境一无所知,只能随机选择。随着迭代,可以逐步降低 ε,因为我们已经越来越准确地了解了环境。如下图所示:
这就是更新 Q 的函数,其中 α 为学习速率。显然,α 越大,保留之前学习的结果越少。
姓名:周弘毅
学号:17020120012
对Q-learing算法的见解
一、 核心算法概述
a) Q 表的构建
此程序所用到的强化学习算法为经典的q-learning算法,我认为,q-learning算法的核心步骤为构建出一张q表,因为这张q表是智能体处于不同状态所采取相应策略的依据,只有q表构建的合理有效,才能保证智能体在各个状态中选择最优策略,从而完成给定目标。我将在第二部分—— 核心算法构建 中详细讲述我的构建思路
b) Q 表的更新
构建出q表后,下一个需要解决的问题是如何对Q表不断更新,依据我们自身的学习经验,我们多数的学习过程就是一个“试错”的过程,即通过不断的尝试,在重复的试验中归纳经验,不断学习,不断增强对事物的认知,将这个思想运用在程序的设计中,可以将其抽象为我们对q表的更新,我将q表当作是智能体的大脑(因为智能体依据q表采取策略,这与人类采取行动之前大脑先进行思考类似),而q表的更新就相当于是人类不断学习的过程,按照之前对人类学习行为的表述,q表的更新依据就是智能体重复执行给定任务过程中所获得的“奖励”或“惩罚”。由此我们对q表的更新方式有了一个具体的要求:q表的更新方式应为可以通过不断重复某个任务且根据任务执行结果自动进行更新的一种方式。
在解决q表的构建和q表的更新问题之后,我们就成功的为智能体获取“智能“找到了方法。接下来,我将介绍我对q表进行构建的所采用的数学模型以及对其进行更新的具体方案。
二、 核心算法构建
a) Q 表的构建过程
i. Q表的数学模型
对于我对Q表的认识——智能体处于不同状态所采取相应策略的依据,我采用了动态二维矩阵对Q表进行建模,这个二维矩阵有m行,n列。
ii. Q表的构建方法
Q表是一个m×n的二维矩阵,其中m的实际意义为智能体所有可能状态的数量,n的实际意义为在某个状态下所有可能执行动作的数量,之所以才用动态矩阵,是因为智能体出生时对环境时陌生的,通过不断的试验,智能体会遇到越来越多的状态,此时增加一个判断,若是之前未遇见的状态,则需要对Q表进行扩充。矩阵中的任意一个元素[if !msEquation] [endif]表示智能体处于状态i执行动作j的 “价值“
b ) Q 表的更新过程
Q表的更新依据是重复执行给定任务的结果,拿我的程序作为例子,我需要它执行的任务在迷宫中寻找金币,但由于迷宫中还有陷阱存在,所以对于智能体每次执行任务,只会产生两种结果,找到金币或掉入陷阱大大没。此时就可以引入奖励机制——如果他在一次任务中成功的获得金币,那么就给他一个奖励分,否则就给他一个负的奖励分。我们将这个奖励分与智能体在某个状态采取某个动作的 “价值“ 联系起来,这个价值就是Q表中某个元素的值。
算法的灵魂(对q-learning的认识):
假设我已按上述过程构建了q表,我们要解决这样一个问题——依旧用我的迷宫为例子,智能体在某个状态(假设为S)执行某个动作A之后,会进行一次状态的转移,到下一个状态NS,此时若NS并不是吃到金滚纳币或掉入陷阱,那就不会产生奖励分,那么这次行为是不是就没有意义了呢?
当然不是!为了解决这个问题,我们要认清出“奖励”与“价值”的区别,我的理解是,奖励是实实在在的,是真实存在的,拿到了金币,是确实得到了这个金币,然而”价值“是一个抽象的概念,它的内涵是你执行这个动作之后,虽然仿扮没有实实在在的获得金币,但是依旧是有意义的,就好像修《人工智能》这门课,你平时去主动学习人工智能的知识,虽然不能保证你一定能通过这门课的考试,获得实实在在的分数,但是确可以增加你通过考试的期望。再具体一点就是,只有考试才能获得分数(也就是真实的奖励),但你平时的学习并不能让你获得分数,只能让你有更多的知识储备,使得考试获得高分的概率大大增加(也就是价值),所以说,虽然平时学习是没有”奖励“,但是有”价值“。
明白了这两者的区别,这个问题就很好解决了,当智能体到达状态NS后,虽然没有获得奖励,但是我们可以给出这次行为(即在S状态选择动作A)的价值,如此一来,我们就可以对Q表中的这个值Q(S,A)进行迭代了,我用Qreal表示这次行为所真实获得的价值,它的计算过程是此次行为所获得的奖励加上下个状态最可能做出的行为的价值乘以一个衰减因子η:
Qreal=reward+Q(NS,AMAX)*η
再用Qpre表示这次行为所预计获得的价值
Qpre=Q(S,A)
现在我们有了真实值和估计值,就可以用两者的差来更新Q表了。
Q(S,A)=Q(S,A)+α*(Qreal-Qpre)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)