論文鏈接:http://proceedings.mlr.press/v37/schulman15
引用:Schulman J, Levine S, Abbeel P, et al. Trust region policy optimization[C]//International conference on machine learning. PMLR, 2015: 1889-1897.
概述
Trust Region Policy Optimization (TRPO) 算法是一個(gè) model-free、policy-based、on-policy、Mento Carlo 的算法,且支持連續(xù)的狀態(tài)空間和連續(xù)的動(dòng)作空間,也支持高維輸入、神經(jīng)網(wǎng)絡(luò)作為函數(shù)approximator。
主要的特點(diǎn)
- 最小化某個(gè)替代的損失函數(shù)以保證策略能夠被單調(diào)地改進(jìn)
- 在理論上合理地對(duì)算法進(jìn)行一系列近似
主要的近似過(guò)程
首先,對(duì)于policy gradient或者policy-based的更新算法,最重要的系數(shù)之一是步長(zhǎng)
,如果它非常小,則我們無(wú)法有效地更新策略;或者如果它非常大,那么學(xué)習(xí)可能會(huì)變得非常不穩(wěn)定,甚至越來(lái)越差。
-
然后文章介紹了 Kakade & Langford (2002) 的一個(gè)公式:
這個(gè)式子著我們可以給原始的成本函數(shù)(cost function)后添加一個(gè)附加項(xiàng), 如果這個(gè)項(xiàng)
是一個(gè)負(fù)值,則這一步可以保證降低成本函數(shù)
。
然后將等式的右側(cè)定義為
, 這就是優(yōu)化的主要目標(biāo)。
-
然后第一個(gè)近似值來(lái)了:由于新策略下
的狀態(tài)分布很難得到,因此將新策略近似地替換為舊策略,即忽略策略變化導(dǎo)致的每個(gè)狀態(tài)訪問(wèn)次數(shù)的密度的變化:
請(qǐng)注意,現(xiàn)在,我們對(duì)狀態(tài)訪問(wèn)分布使用了舊的策略
。
另有一個(gè)已經(jīng)證明的理論說(shuō)明了:只要如下的這個(gè)更新
的步驟足夠?。?img class="math-inline" src="https://math.jianshu.com/math?formula=%7B%5Cpi%7D_%7B%7B%5Ctheta%7D_0%7D%20%5Crightarrow%20%7B%5Cpi%7D" alt="{\pi}_{{\theta}_0} \rightarrow {\pi}" mathimg="1">,那他就也能夠提升
本身(具體過(guò)程可看原文)
-
然后基于保守策略迭代(conservative policy iteration)理論:
以及 Kakade 和 Langford 已經(jīng)證明了的如下結(jié)果:
引出了第二個(gè)近似值:假設(shè)這里的步長(zhǎng)滿足
,那么就可以將上述不等式近似為:
-
目前為止,步長(zhǎng)
是最重要的一個(gè)系數(shù),本文也主要是針對(duì)此進(jìn)行的研究,那么第三個(gè)近似值來(lái)了:用
和
之間的距離度量來(lái)代替
,這里的距離衡量的量被定為總方差散度(total variance divergence:
-
然后第四個(gè)近似值來(lái)了:根據(jù)KL散度和總方差散度之間存在的不等關(guān)系,用KL散度替換總方差散度:
-
現(xiàn)在問(wèn)題的主要目標(biāo)就變?yōu)榱耍?/p>
-
接下來(lái),第五個(gè)近似值來(lái)了:把上面公式的右邊部分改成一個(gè)硬值約束:
-
最后,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=max" alt="max" mathimg="1">算子使優(yōu)化變得很困難,所以第六個(gè)近似值來(lái)了:使用平均的KL散度而不是最大值進(jìn)行計(jì)算:
-
現(xiàn)在已經(jīng)有了理論公式,但在實(shí)踐中,需要對(duì)其進(jìn)行進(jìn)一步的近似,因此他們使用了重要性采樣。 最后(第七個(gè))的近似值變?yōu)椋?/p>
兩種算法實(shí)現(xiàn)方式
-
Single Path:從
的分布中采樣若干個(gè)
,然后對(duì)每一個(gè)
起始進(jìn)行simulate,往下進(jìn)行
步,從而可以計(jì)算
值
-
Vine:從
開(kāi)始往后進(jìn)行多個(gè)state,然后從這些state開(kāi)始,每個(gè)state根據(jù)動(dòng)作的分布rollout若干個(gè)的動(dòng)作(分支)
具體的例子如下圖所示:
