Reinforcement Learning強化學習系列之一:model-based learning
前言
在機器學習和深度學習坑裡呆了有一些時日了,在阿里實習過程中,也感覺到了工業界和學術界的一些迥異,比如強化學習在工業界用的非常廣泛,而自己之前沒有怎麼接觸過強化學習的一些知識,所以感覺還是要好好的補一補更新一下自己的知識庫,以免被AI時代拋棄。
強化學習初識
強化學習要素
強化學習可以用下面這張圖表示:
從上圖可以看出,強化學習的要素是:
1. Agent(圖中指大腦)
2. Environment(圖中指地球)
在每個時間
Agent做的事是:
1. 做出行動
2. 觀察環境
3. 計算收益
Environment做的事是:
1. 感知Agent的
2. 做出環境反應
3. 反饋收益
因此強化學習其實是一個不斷Agent與外界環境進行互動併產生新的行為的過程,而如何讓行為得到最大的收益,這就是其學習過程。這裡我使用【參考1】的強化學習任務要素:
具體概念性請參考【參考1】
強化學習與監督學習
強化學習和有監督學習以及無監督學習的區別和聯絡可以用下圖表示:
與有監督的學習差異
有監督的學習可以描述為你在學習過程中,有個老師在旁邊教你怎麼做,有著嚴格的標準,而強化學習則沒有這個老師教,而且也沒有固定的標準方法,其標準方法都是探索出來的。
與無監督的學習差異
強化學習看似是無監督學習,其實和無監督的學習差別較大,主要體現在幾點:
1. 無監督的學習更多的是探索資料內部的存在規律或者聯絡,而強化學習主要探索的是策略方式
2. 強化學習和時間有很大的關係,而且反饋都是具有時間效應的,這點和無監督學習非常不一樣
MDP過程
所謂MDP,即Markov Decison Process,具備馬爾科夫鏈性質:系統下一時間的狀態僅由當前時刻的狀態決定;回到強化學習本省,其實就是下一個狀態只由前一時刻的狀態和Action決定,和歷史的狀態和Action無關。
這個性質非常重要,因為後面的很多推斷都是依據這個性質推匯出來的,瞭解HMM模型的人應該知道,馬爾科夫鏈的這條性質是解碼演算法的根本。
有模型的學習:model-based learning
強化學習主要有 1)有模型的學習 2)無模型學習 3)值函式近似 4)模仿學習 等;本系列主要對前3種學習方法進行敘述
有模型和無模型的學習差異在於有模型的
對於有模型的學習基本的基礎知識可以參看【參考1】的第16章的第3小節;這裡我主要針對一個實際的問題,對其原理進行一個闡述;
問題描述
現有
任務:確定最佳的策略/Value function,使其期望reward最大
我們首先對任務進行建模:
#coding=utf-8
import numpy as np
"""
author:luchi
date:2017/9/2
description:gridworld environment
"""
class GridWorldEnv(object):
def __init__(self,shape=[4,4]):
if not isinstance(shape, (list, tuple)) or not len(shape) == 2:
raise ValueError('shape argument must be a list/tuple of length 2')
self.nS = np.prod(shape)
self.nA = 4 # four directions
MAX_X = shape[0]
MAX_Y = shape[1]
P={}
grid = np.arange(self.nS).reshape(shape)
it = np.nditer(grid,flags=['multi_index'])
#move directions
UP = 0
RIGHT = 1
DOWN = 2
LEFT = 3
while not it.finished:
state = it.iterindex
x,y = it.multi_index
# print state
# print(x,y)
P[state] = {a:[] for a in range(self.nA)}
is_terminal_state = lambda state: state==0 or state==self.nS-1
reward = lambda state : 0.0 if is_terminal_state(state) else -1.0
if is_terminal_state(state):
P[state][UP] = [(1.0,state,reward(state),True)]
P[state][RIGHT] = [(1.0,state,reward(state),True)]
P[state][DOWN] = [(1.0,state,reward(state),True)]
P[state][LEFT] = [(1.0,state,reward(state),True)]
else:
Up_Grid = state if x==0 else state-MAX_Y
Right_Grid = state if y==MAX_Y-1 else state+1
Down_Grid = state if x==MAX_X-1 else state+MAX_Y
Left_Grid = state if y==0 else state-1
P[state][UP] = [(1.0,Up_Grid,reward(Up_Grid),is_terminal_state(Up_Grid))]
P[state][RIGHT] = [(1.0,Right_Grid,reward(Right_Grid),is_terminal_state(Right_Grid))]
P[state][DOWN] = [(1.0,Down_Grid,reward(Down_Grid),is_terminal_state(Down_Grid))]
P[state][LEFT] = [(1.0,Left_Grid,reward(Left_Grid),is_terminal_state(Left_Grid))]
# print P[state]
it.iternext()
self.P = P
grid = GridWorldEnv()
策略評估
策略評估是已知模型的引數的,對於一個策略,估計其期望累計獎賞,使用
在本文的問題中,我們使用隨機策略
def policy_evaluation(self,policy,env,discount_factor=1.0, theta=0.00001,max_iter_num=1000):
delta =0.0
V = np.zeros(env.nS)
iter_count=0
while True:
new_V = np.zeros(env.nS)
for s in range(env.nS):
V_x = 0.0
for idx,prob in enumerate(policy[s]):
for trans_prob,next_state,reward,isFinite in env.P[s][idx]:
V_x += prob*trans_prob*(reward+discount_factor*V[next_state])
new_V[s]=V_x
delta = max(delta, np.abs(V_x - V[s]))
iter_count+=1
if delta<theta or iter_count>max_iter_num:
break
else:
V = new_V
return np.array(V)
計算的
[[ 0. -13. -19. -21.]
[-13. -17. -19. -19.]
[-19. -19. -17. -13.]
[-21. -19. -13. 0.]]
我們可以看到對於model-based 學習方法,其value值最終計算的能夠逐步收斂,且反映了資料本身的特徵。
策略改進演算法
我們想得到一個相關推薦
no