Reinforcement Learning学习笔记(1)

  最近在学习关于强化学习的相关知识,因此在此总结自己的心得体会。但由于小弟学识浅薄,内容难免存在错误,还望各路大神批评指正。

1、马尔可夫决策过程

  马尔可夫决策过程(Markov Decision Processes, MDP)是强化学习(Reinforcement Learning, RL)的基础,因而首先简单介绍。
  马尔可夫决策过程是基于马尔可夫过程理论的随机动态系统的决策过程,其包含5个部分:
  1、 S 表示状态集(states);
  2、A 表示动作集(Actions);
  3、 Pss,a 表示状态 s 下采取动作a 之后转移到状态 s 状态的概率;
  4、 Rs,a 表示状态 s 下采取动作a 获得的奖励;
  5、 γ 表示衰减因子
与马尔可夫过程的区别在于,马尔可夫决策过程不仅考虑状态,还需考虑动作,即系统下一个时刻的状态不仅与当前的状态有关,也与当前采取的动作有关;例如AlphaGo与李世石下棋,AlphaGo在某个局面下(状态 s )走了一步(动作a),系统的状态转移到达的下一个局面(状态 s )是AlphaGo不能确定的(因为是由李世石走的),但李世石走的一步只需根据状态 s 和动作a 即可,无需考虑更多的状态和动作。

  下面仿照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 ,输出采取动作a的概率 π(s,a) ,系统期望学习某种Policy,使得在该Policy下获得的总的奖励是最高的,人们选择最大化递减奖励的期望:
  

Eπ[k=0γkRk]=Eπ[R0+γR1+γ2R2+...]

式中 γ 是马尔可夫决策过程的衰减因子, γ 可用于平衡当前奖励和远期奖励的重要性,也是用来避免计算结果无穷。 Rk 是指第k步后获得奖励。该目标既考虑了当前的奖励,也考虑了未来的奖励,可以有效避免奖励局部最优的情况。
  根据该目标,人们就提出了价值的概念。首先是在特定的Policy(策略) π 下状态 s 的价值定义:状态s下,按照策略 π ,系统能够获得的递减奖励期望。
  
v(s)=Eπ[k=0γkRk]

对于上图机器人寻找三角形的例子,采用随机方向作为策略时,各个状态的价值为:
随机策略下的各状态的价值
代码:

# -*- 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) 的价值的定义如下式所示:
  

q(s,a)=Rs,a+Eπ[k=1γkRk]

3、最优策略

  根据上面的介绍,我们发现强化学习的目标是找到一个策略 π , 使得这个策略下每个状态的价值最大。但是我们存在一个彝文,是否存在一个策略 π 使得所有状态价值大等于其他策略的状态价值。如果不存在这么一个策略,强化学习的学习目标是徒劳的。
  庆幸的是,有定理保证了这么一个策略存在。这么一个所有状态价值大等于其他所有的状态价值,我们可以称之为最优策略。
这里写图片描述

4、贝尔曼等式

  贝尔曼等式用于表明当前状态的价值函数与下个状态的价值函数的关系,具有很简明的形式。贝尔曼等式在强化学习中具有十分重要的作用。
  状态价值函数:
  

v(s)=aAπ(s,a)q(s,a)=aAπ(s,a)Rs,a+γsSTss,av(s)

  状态-价值函数:
  
q(s,a)=Rs,a+γsSTss,av(s)=Rs,a+γsSTss,aaAπ(s,a)q(s,a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值