眾所周知,當(dāng)AlphaGO戰(zhàn)勝了世界圍棋冠軍李世石之后,,整個(gè)工業(yè)界都為之振奮,,越來(lái)越多的學(xué)者意識(shí)到強(qiáng)化學(xué)習(xí)在人工智能領(lǐng)域是一個(gè)非常令人exciting的。在此我就分享一下本人的強(qiáng)化學(xué)習(xí)學(xué)習(xí)筆記,。
強(qiáng)化學(xué)習(xí)基本概念
機(jī)器學(xué)習(xí)可以分為三類,,分別是 supervised learning,unsupervised learning 和reinforcement learning,。而強(qiáng)化學(xué)習(xí)與其他機(jī)器學(xué)習(xí)不同之處為:
- 沒(méi)有教師信號(hào),,也沒(méi)有l(wèi)abel。只有reward,,其實(shí)reward就相當(dāng)于label,。
- 反饋有延時(shí),,不是能立即返回。
- 相當(dāng)于輸入數(shù)據(jù)是序列數(shù)據(jù),。
agent執(zhí)行的動(dòng)作會(huì)影響之后的數(shù)據(jù),。
強(qiáng)化學(xué)習(xí)的關(guān)鍵要素有:environment,reward,,action 和 state。有了這些要素我們就能建立一個(gè)強(qiáng)化學(xué)習(xí)模型,。強(qiáng)化學(xué)習(xí)解決的問(wèn)題是,,針對(duì)一個(gè)具體問(wèn)題得到一個(gè)最優(yōu)的policy,使得在該策略下獲得的reward最大,。所謂的policy其實(shí)就是一系列action,。也就是sequential data。
強(qiáng)化學(xué)習(xí)可用下圖來(lái)刻畫(huà),,都是要先從要完成的任務(wù)提取一個(gè)環(huán)境,,從中抽象出狀態(tài)(state) 、動(dòng)作(action),、以及執(zhí)行該動(dòng)作所接受的瞬時(shí)獎(jiǎng)賞(reward),。
reward
reward通常都被記作Rt,表示第t個(gè)time step的返回獎(jiǎng)賞值,。所有強(qiáng)化學(xué)習(xí)都是基于reward假設(shè)的,。reward是一個(gè)scalar。
action
action是來(lái)自于動(dòng)作空間,,agent對(duì)每次所處的state用以及上一狀態(tài)的reward確定當(dāng)前要執(zhí)行什么action,。執(zhí)行action要達(dá)到最大化期望reward,直到最終算法收斂,,所得的policy就是一系列action的sequential data,。
state
就是指當(dāng)前agent所處的狀態(tài),。具體來(lái)講,例如玩pong游戲,,該游戲的狀態(tài)就是當(dāng)前time step下小球的位置。而Flappy bird狀態(tài)就是當(dāng)前小鳥(niǎo)在平面上的位置,。
policy
policy就是只agent的行為,,是從state到action的映射,分為確定策略和與隨機(jī)策略,,確定策略就是某一狀態(tài)下的確定動(dòng)作a=π(s), 隨機(jī)策略以概率來(lái)描述,,即某一狀態(tài)下執(zhí)行這一動(dòng)作的概率:π(a|s)=P[At=a|St=s]。
value function
因?yàn)閺?qiáng)化學(xué)習(xí)今本上可以總結(jié)為通過(guò)最大化reward來(lái)得到一個(gè)最優(yōu)策略,。但是如果只是瞬時(shí)reward最大會(huì)導(dǎo)致每次都只會(huì)從動(dòng)作空間選擇reward最大的那個(gè)動(dòng)作,,這顯然不是我們想要的,,所以為了很好地刻畫(huà)是包括未來(lái)的當(dāng)前reward值最大(即使從當(dāng)前時(shí)刻開(kāi)始一直到狀態(tài)達(dá)到目標(biāo)的總reward最大)。因此就夠早了值函數(shù)(value function)來(lái)描述這一變量,。表達(dá)式如下:
γ是一個(gè)取值在[0,1]的數(shù),,就是為了減少未來(lái)的reward對(duì)當(dāng)前動(dòng)作的影響。然后就通過(guò)選取合適的policy使value function最大,,稍后會(huì)為大家推導(dǎo)著名的bellman方程,,bellman方程才是強(qiáng)化學(xué)習(xí)各大算法(e.g. 值迭代,策略迭代,,Q-learning)的源頭,。
model
model就是用來(lái)預(yù)測(cè)環(huán)境接下來(lái)會(huì)干什么,即在這一狀態(tài)的情況下執(zhí)行某一動(dòng)作會(huì)達(dá)到什么樣的狀態(tài),,這一個(gè)動(dòng)作會(huì)得到什么reward,。所以描述一個(gè)模型就是用動(dòng)作轉(zhuǎn)移概率與動(dòng)作狀態(tài)reward。具體公式如下:
馬爾可夫決策過(guò)程(MDP)
大家應(yīng)該都很熟悉馬爾科夫過(guò)程,,其實(shí)就是狀態(tài)以及某狀態(tài)的轉(zhuǎn)移,,最重要的就是一步轉(zhuǎn)移概率矩陣,只要有了這個(gè)一步轉(zhuǎn)移概率矩陣就能刻畫(huà)整個(gè)馬爾科夫過(guò)程,。
下面就來(lái)介紹一下馬爾可夫決策過(guò)程(MDP)它主要由以下幾個(gè)變量來(lái)刻畫(huà),,狀態(tài)幾何S(是一個(gè)有限集合),動(dòng)作空間A(一個(gè)有限動(dòng)作集合),,狀態(tài)轉(zhuǎn)移概率矩陣P,,獎(jiǎng)賞函數(shù)R 以及折扣因子γ(γ∈[0,1])。
下面介紹一個(gè)MDP常用的用來(lái)刻畫(huà)獎(jiǎng)賞的函數(shù),。
1.return Gt
t時(shí)刻之后未來(lái)執(zhí)行一組action后能夠獲得的reward,,即t+1,t+2…所有時(shí)刻的reward之和,。(未來(lái)時(shí)刻的reward在當(dāng)前時(shí)刻體現(xiàn)),,后面的reward要乘以discountγ 系數(shù)。表達(dá)式如下:
2.狀態(tài)值函數(shù)v(s)
定義為t時(shí)刻狀態(tài)S能獲得的return的期望,,表達(dá)式如下:
3.動(dòng)作值函數(shù)qπ(s,a)
t時(shí)刻狀態(tài)S下選擇特定action后能獲得的return的期望,,表達(dá)式如下:
下面來(lái)講解一下最著名的bellman方程的推導(dǎo),首先推導(dǎo)如何迭代值函數(shù),,即更新值函數(shù):
1.value function
v(s)=E[Gt|St=s]=E[Rt+1+γ(Rt+2+γRt+3+...)|St=s]=E[Rt+1|St=s]+γE[Gt+1|St=s]=ERs+γ∑Gt+1P[Gt+1|St=s]=ERs+γ∑Gt+1∑s′P[Gt+1|St+1=s′,St=s]?P[St+1=s′|St=s]=ERs+γ∑s′∈Sv(s′)Pss′
2.Q-value function
∵v(s)=E[Gt|St=s]=∑a∈AP[At=a|St=s]?E[Gt|St=s,At=a]=π(a|s)qπ(s,a)qπ(s,a)=Ras+γE[Gt+1|St=s,At=a]=Ras+γ∑s′∈SE[Gt+1|St+1=s′,St=s,At=a]P[St+1=s′|St=s,At=a]=Ras+γ∑s′∈SPass′E[Gt+1|St+1=s′]=Ras+γ∑s′∈SPass′vπ(s′)
有1與2的推導(dǎo)就可以得到著名的bellman方程,,強(qiáng)化學(xué)習(xí)的算法迭代都是基于此方程的。如下:
這就是bellman方程,,通??梢杂靡幌路椒ㄇ蠼鈈ellman方程,如:值迭代,、策略迭代,、Q-learning,、Sarsa等。
下面舉一個(gè)例子:(狀態(tài)圖如下)
可通過(guò)bellman具體求得一個(gè)最佳策略,。本人用matlab實(shí)現(xiàn)了以下,,代碼如下:
主函數(shù):
clear
close all
clc
P = [0.9 0.1 0 0 0 0 0;
0.5 0 0.5 0 0 0 0;
0 0 0 0.8 0 0.2 0;
0 0 0 0 0.6 0 0.4;
0 0 0 0 0 1 0;
0 0 0 0 0 1 0;
0 0.2 0.4 0.4 0 0 0];
gamma = 1;
R = [-1 -2 -2 -2 10 0 1];
%% update iteration
maxiteration = 200;
V = zeros(size(P,2), maxiteration);
i = 1;
while i <= maxiteration
v = zeros(size(P,1),1);
for j = 1:7
v(j) = bellman_equ(gamma,P(j,:),R(j),V(:,i));
end
V(:,i+1) = v;
i = i+1;
end
plot(V'), title('MRP');
legend('Facebook','class1','class2','class3','pass','sleep','pub');
axis([0,210,-25,12])
grid on;
V(:,size(V,2))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
bellman equation:
function v = bellman_equ(gamma,P,R,v_old)
v = R + gamma*P*v_old;
end
本次課程就更新到這里,希望能幫助到大家,。
|