第一部分 强化学习基础
第1章 强化学习概述
1.1 强化学习概念
- 定义:强化学习是机器通过与环境交互来实现目标的一种计算方法。
机器与环境的一轮交互:机器在环境的一个状态下做一个动作决策,动作执行后,环境发生改变并把相应的奖励反馈和下一轮状态传回机器。 - 交互:
- 感知:智能体在某种程度上感知环境的状态
- 决策:智能体根据当前状态计算出到达目标需要采取的动作的过程;
策略是智能体最终体现的智能形式,是不同智能体之间的核心区别。 - 奖励:环境根据状态和智能体采取的动作,产生一个标量信号作为奖励反馈;
最大化累计奖励期望是智能体提升策略的目标,也是衡量智能体策略好坏的关键指标。
1.2 强化学习的环境
环境的下一刻状态的概率分布由当前状态和智能体的动作共同决定,公式如下:
环境的下一刻状态 ∼ P ( ⋅ ∣ 当前状态,智能体的动作 ) 环境的下一刻状态 \sim P(\cdot | 当前状态,智能体的动作) 环境的下一刻状态∼P(⋅∣当前状态,智能体的动作)
1.3 强化学习的目标
- 整体回报:整个交互过程的每一轮获得的奖励信号的累加,类似一盘游戏最后的得分。
- 价值:回报的期望,也是智能体学习的优化目标。
计算方式:需要对交互过程中每一轮智能体采取动作的概率分布和环境相应的状态转移的概率分布做积分运算。
1.4 强化学习的数据
在强化学习中,数据是智能体与环境交互的过程中得到的。如果智能体不采取某个决策动作,那么该动作对于的数据就无法被观测到,所以当前智能体的训练数据来自之前智能体的决策结果。因此,策略不同,得到的数据分布就不同。
强化学习中有一个关于数据分布的概念,叫作占用度量。归一化的占用度量用于衡量在交互过程中,采样到一个具体的状态动作对的概率分布。
占用度量的一个重要性质:占用度量相同当且仅当策略相同。因此,寻找最优策略对应寻找最优占用度量。
第2章 多臂老虎机问题(MAB)
访问文章:多臂老虎机问题
第3章 马尔可夫决策过程(MDP)
访问文章:马尔可夫决策过程
第4章 动态规划算法
4.1 简介
- 动态规划介绍:
动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题的答案时就可以直接利用,避免重复计算。 - 动态规划分类:基于动态规划的强化学习算法主要有两种:
- 策略迭代:由策略评估和策略提升两部分组成,其中策略评估使用贝尔曼期望方程来得到一个策略的状态价值函数。
- 价值迭代:直接使用贝尔曼最优方程来进行动态规划
- 动态规划评价:
- 优点 :高效、避免重复计算
- 缺点:只适用于白盒环境【事先知道环境的状态转移函数和奖励函数,即知道整个马尔可夫决策过程】、只适用于有限马尔可夫决策过程【即状态空间和动作空间是离散且有限的】
4.2 悬崖漫步环境
4.2.1 介绍
悬崖漫步环境要求一个智能体从起点出发,避开悬崖行走,最终到达目标位置。如下图所示,有一个 4 × 12 4\times 12 4×12 的网格世界,每一个网格表示一个状态。智能体的起点是左下角的状态,目标是右下角的状态,智能体在每一个状态都可以采取 4 种动作:上、下、左和右。如果碰到边界则不改变状态,否则进入下一个状态。掉入悬崖和到达目标状态是终止状态。智能体每走一步的奖励是 -1,掉入悬崖的奖励是 -100。
编码实现:
新建项目 DP,项目结构如下:
新建文件 CliffWalkingEnv.py 文件,文件代码如下:
class CliffWalkingEnv:
def __init__(self, row=4, col=12):
self.row = row
self.col = col
# 转移矩阵 P[state][a] = [(p —— 转移概率 , next_state , reward , done —— 是否终止 )]
self.P = self.create_P()
def create_P(self):
P = [[[] for j in range(4)] for i in range(self.row * self.col)]
# 上下左右,上 —— x+0,y-1;下 —— x+0,y+1;左 —— x-1,y+0;右 —— x+1,y+0
change = [[0, -1], [0, 1], [-1, 0], [1, 0]]
for i in range(self.row):
for j in range(self.col):
for a in range(4):
# 位置在悬崖和目标状态表示终止,奖励为 0
if i == self.row - 1 and j > 0:
P[i * self.col + j][a] = [1, i * self.col + j, 0, True]
continue
# 其他位置
next_x = min(self.col - 1, max(0, j + change[a][0]))
next_y = min(self.row - 1, max(0, i + change[a][1]))
next_state = next_y * self.col + next_x
reward = -1
done = False
# 下一个位置在终点或者悬崖
if next_y == self.row - 1 and next_x > 0:
done = True
if next_x != self.col - 1:
reward = -100
P[i * self.col + j][a] = [(1, next_state, reward, done)]
return P
4.2.2 策略迭代算法
策略迭代时策略评估和策略提升不断循环交替,直到最后得到最优策略的过程。