机器学习 | 强化学习(二)

机器学习 | 强化学习(二)

上周我们了解了一些强化学习的基础知识,这周我们来学习一种基于值的强化学习算法:Q-Learning。

什么是基于值的强化学习算法?即通过判断每一步action的value来进行下一步的动作。以人物的左右移动为例,Q-Learning的核心Q-Table可以按照如下表示:

环境 向左 向右
1 0 0.1
2 0.2 0.15
3 0.32 0.5

每格的意思表示在某种状态下向左向右的得分。

在进行初始化时,给予一个概率值 e_greedy, 当处于环境1时,按照算法中的策略进行动作选择的概率为 e_greedy,而为了避免局部最优以及进行更多的探索,仍按照 1- e_greedy 的概率进行随机选择。

Q-Learning算法:

动作值函数:

动作值函数(或称【Q函数】)有两个输入:【状态】和怕【动作】。它将返回在该状态下执行该动作的未来奖励期望:
$$
Q_\pi(s_t,a_t)=E(R_{t+1}+rR_{t+2}+r^2R_{t+3}+…|s_t,a_t)
$$
其中,累计折扣奖励t时刻之后执行一组action,能够获得的reward(未来时刻的reward在当前时刻体现),后面的reward要乘以折扣系数,即:
$$
G_t = R_{t+1}+rR_{t+2}+r^2R_{t+3}+…
$$

算法流程:

捕获

Q_learning算法理解
建立Q表,行是每种状态,列是每种状态的行为,值是某状态下某行为估计获得的奖励
每次进行状态转移时有e_greedy概率选当前状态最优方法,有 1- e_greedy选随机方法
选完之后就更新当前状态下对应所选行为的Q值(估计值)
更新方法:其自身= 其自身+学习率×(估计-现实) —> (实际更新 = 实际未更新+学习率×(预测-实际发生))

2

现实值也是其自身, 估计值是选择当前行为后的奖励及下一状态中选择与当前状态具有相同行为的Q值。

例子

以一个例子来说明更加清晰,举一个小人到达某处取得玩具的例子来说明。

在一开始的时候假设小人不知道玩具在哪里,他的Q_Table一片空白,此时他开始观测自己所处的环境,这个环境是环境1,并将这个环境加入到Q_Table中。此时,他不知道左右两个环境的情况,所以向左走向右走的得分都是0, 这两个得分都是小人心中预测出来的,并不是真实的左右两个环境的得分,我们给这个得分一个名字叫做q_predict。

环境 向左 向右
1 0 0

往左走往右走都是有可能的,如果他往左走,他会到达环境0,环境0是一个深渊,然后小人就挂了。此时环境会给他一个反馈得分,由于他掉入了深渊,所以他的得分是-1, 这个得分是环境0的实际得分,与上面小人处于环境1对环境0的预测得分不同,我们给这个得分一个名字叫做q_target, 由于这个得分与上一步预测的环境0的得分不同,所以我们需要对上一个表格进行更新,此时他的Q_Table表为:

环境 向左 向右
1 -0.01 0

此时小人重生了,在这一轮假设他会选择往右走,此时他到达了环境2,并将这个环境加入到Q_Table中。此时,他不知道这个新环境的情况,向左走和向右走对他来说是一样的,所以这个新环境的左右两个Actions得分都是0。

环境 向左 向右
1 -0.01 0
2 0 0

此时他会随机选择一个方向走,之后不断重复探测新环境和走回旧环境的过程,如果他在不断测试中找到了最后的toys,他会得到正数得分,这个得分会一步一步驱使他走向toys。在经过许多次的尝试之后,小男孩会找到一条最快通向玩具的道路。假设环境4就是玩具,小人在经过多次尝试后,最后的Q_Table可能是这样。

环境 向左 向右
1 -0.02 0.033
2 0.001 0.154
3 0 0.547

对于Q-Learning算法的主体而言,Q-Learning算法主要由两个对象组成,分别是Q-Learning的大脑和大环境。
Q-Learning的大脑包括以下部分,其对应的功能为:

模块名称 功能
初始化 初始化学习率、可执行动作、Q_table等参数
动作选择 根据小男孩当前所处的环境和Q_table进行动作选择
学习 根据小男孩当前所处的环境对其它环境的预测情况q_predict和下一步环境的实际情况q_target更新Q_table表
确认是否存在该环境 由于在学习之前环境是未知的,当进入一个新环境时,需要生成一个得分都为0的动作表格

环境包括以下部分,其对应的功能为:

模块名称 功能
初始化 初始化环境参数、用于构建环境
图画更新 用于更新当前的图画,便于用户观察
环境观察 用于返回当前环境情况
终点观察 用于返回是否到达终点
更新坐标 用于更新当前所处位置
下一环境获取 用于获取下一步的环境的实际情况
参数归零 用于每一个步坐标和当前行走步数的归零

之后还需要一个执行函数将两者连接起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
初始化测试环境对象
初始化Q-Learning的大脑对象
for episode in range(TIMES):
环境观察
图画更新
while(1):
终点观察
if(到达终点):
打印当前进行世代数,共使用多少步数
参数归零
break;
动作选择
获取下一步的环境的实际情况
学习
更新坐标
图画更新

在观察完Q_Learning算法的伪代码后我们可以发现, 大脑在获取下一步环境的实际情况之后再进行学习,学习函数对Q-Table表更新的重要参数之一就是获取下一步的环境的实际情况。 具体来说,在进行学习过程时,Q-Learning的大脑对象会根据所处的当前环境对各个动作的预测得分和下一步的环境的实际情况(最大得分)对当前环境的Q-Table表进行更新。

以上就是今天的内容,谢谢大家的观看~