最近在学习关于强化学习的相关知识,因此在此总结自己的心得体会。但由于小弟学识浅薄,内容难免存在错误,还望各路大神批评指正。
1、马尔可夫决策过程
马尔可夫决策过程(Markov Decision Processes, MDP)是强化学习(Reinforcement Learning, RL)的基础,因而首先简单介绍。
马尔可夫决策过程是基于马尔可夫过程理论的随机动态系统的决策过程,其包含5个部分:
1、
S
表示状态集(states);
2、
3、
Ps′s,a
表示状态
s
下采取动作
4、
Rs,a
表示状态
s
下采取动作
5、
γ
表示衰减因子
与马尔可夫过程的区别在于,马尔可夫决策过程不仅考虑状态,还需考虑动作,即系统下一个时刻的状态不仅与当前的状态有关,也与当前采取的动作有关;例如AlphaGo与李世石下棋,AlphaGo在某个局面下(状态
s
)走了一步(动作
下面仿照AlgorithmDog[1]的例子构造一个马尔可夫决策过程的问题,如下图所示:
假设机器人从任意一个状态出发寻找三角形,找到三角形则奖励1,找到圆形则损失1。找到三角形或者圆形则机器人均停止。
在该问题中,图中的不同位置为不同的状态,因此状态集合为
S={1,2,...,8}
,机器人在每个状态可采取的动作是向东南西北四个方向走,因此动作集合
A={′n′,′e′,′s′,′w′}
。状态转移的规则为:机器人碰到墙壁会停在原来的位置;奖励的设置,由于找到三角形则奖励1,找到圆形则损失1,其他均不奖励不惩罚。因此有
R2,s=−1
,
R3,s=−1
,
R4,s=1
,其余情况有
R∗,∗=0
。
Mdp.py的代码如下:
# -*- coding: utf-8 -*-
import numpy as np
import random
class Mdp:
def __init__(self):
# 状态 state
self.state = [1, 2, 3, 4, 5, 6, 7, 8]
# 终止状态 terminalstate
self.terminalstate = dict()
self.terminalstate[6] = True
self.terminalstate[7] = True
self.terminalstate[8] = True
# 动作 action
self.action = ["n", "e", "s", "w"] # 北东南西
# 奖励 reward
self.reward = dict()
self.reward["2_s"] = -1.0
self.reward["3_s"] = -1.0
self.reward["4_s"] = 1.0
# 状态转义 t
self.t = dict()
self.t["1_e"] = 2
self.t["2_w"] = 1
self.t["2_e"] = 3
self.t["2_s"] = 6
self.t["3_w"] = 2
self.t["3_e"] = 4
self.t["3_s"] = 7
self.t["4_w"] = 3
self.t["4_e"] = 5
self.t["4_s"] = 8
self.t["5_w"] = 4
# 衰减系数 gamma
self.gamma = 0.8
def transform(self, state, action):
if state in self.terminalstate:
return True, state, 0
key = "%d_%s"%(state, action)
if key in self.t:
next_state = self.t[key]
else:
next_state = state
is_terminalstate = False
if next_state in self.terminalstate:
is_terminalstate = True
reward = 0
if key in self.reward:
reward = self.reward[key]
return is_terminalstate, next_state, reward
强化学习根据是否知道并存储全部马尔可夫决策过程的全部信息可以分为基于模型的强化学习(Model-based)和基于非模型(Model-free)的强化学习两种类型。基于模型的强化学习算法是知道并可以存储所有马尔科夫决策过程信息,非基于模型的强化学习算法则需要自己探索未知的马尔科夫过程。
2、策略和价值
强化学习的目标是学习一个称为Policy(策略)的机器学习方法。这个策略其实是一个函数,输入当前的状态
s
,输出采取动作
式中 γ 是马尔可夫决策过程的衰减因子, γ 可用于平衡当前奖励和远期奖励的重要性,也是用来避免计算结果无穷。 Rk 是指第k步后获得奖励。该目标既考虑了当前的奖励,也考虑了未来的奖励,可以有效避免奖励局部最优的情况。
根据该目标,人们就提出了价值的概念。首先是在特定的Policy(策略) π 下状态 s 的价值定义:状态
对于上图机器人寻找三角形的例子,采用随机方向作为策略时,各个状态的价值为:
代码:
# -*- coding:utf-8 -*-
import random
random.seed(0)
from Mdp import *
def random_pi():
action_set = ["n", "e", "s", "w"]
index = int(random.random() * 4)
return action_set[index]
def compute_random_pi_state_value():
value = [0.0 for i in xrange(9)]
max_iterator_num = 1000000
for k in xrange(1, max_iterator_num):
for state in xrange(1, 6):
mdp = Mdp()
s = state
gamma = 1.0
v = 0.0
is_terminal = False
while is_terminal is False:
action = random_pi()
is_terminal, s, reward = mdp.transform(s, action)
v += gamma * reward
gamma *= mdp.gamma
value[state] = (value[state] * (k - 1) + v) / k
if k % 100000 == 0:
print "state value: ", value[1:6]
print "state value: ", value[1:6]
if "__main__" == __name__:
compute_random_pi_state_value()
后来人们进一步扩展了价值的概念,将价值扩展到状态-动作对上。一个状态-动作对
q(s,a)
的价值的定义如下式所示:
3、最优策略
根据上面的介绍,我们发现强化学习的目标是找到一个策略
π
, 使得这个策略下每个状态的价值最大。但是我们存在一个彝文,是否存在一个策略
π
使得所有状态价值大等于其他策略的状态价值。如果不存在这么一个策略,强化学习的学习目标是徒劳的。
庆幸的是,有定理保证了这么一个策略存在。这么一个所有状态价值大等于其他所有的状态价值,我们可以称之为最优策略。
4、贝尔曼等式
贝尔曼等式用于表明当前状态的价值函数与下个状态的价值函数的关系,具有很简明的形式。贝尔曼等式在强化学习中具有十分重要的作用。
状态价值函数:
状态-价值函数: