# Reinforcement Learning: An Introduction_Chapter 10 On-policy Control with Approximation ###### tags: `Reinforcement Learning` `Second Edition` 課本範圍:243~256 [相關連結_Sutton_2nd](http://incompleteideas.net/book/the-book-2nd.html) [David Silver_bilibili_簡中字幕](https://www.bilibili.com/video/BV1kb411i7KG/) [程式碼參考_ShangtongZhang](https://github.com/ShangtongZhang/reinforcement-learning-an-introduction) [程式碼參考_dennybritz](https://github.com/dennybritz/reinforcement-learning) [程式碼參考_弱弱的我](https://github.com/shaoeChen/Reinforcement-Learning-An-Introduction-Record) [LyWangPX/Reinforcement-Learning-2nd-Edition-by-Sutton-Exercise-Solutions](https://github.com/LyWangPX/Reinforcement-Learning-2nd-Edition-by-Sutton-Exercise-Solutions) 這一章我們要回到控制問題,現在我們要用action-value function的參數化近似(parametric approximation),也就是$\hat{q}(s, a, \mathbf{w}) \sim q_*(s, a)$,其中$\mathbf{w} \in \mathbb{R}^d$是一個有限的維度權重向量。我們繼續把注意力放在on-policy的情況,把off-policy留到Chapter 11再來談。這邊先聊的是semi-gradient Sarsa algorithm,也就是上一章談到的semi-gradient TD(0)對action values與on-policy control的擴展。在episodic的情形中,這樣的擴展是很簡單的,不過如果是continuing的情形就可能要倒退個幾步想,重新看看我們應該如何用discounting來定義optimal policy。令人驚訝的是,一旦我們有真正的函數近似(function approximation),我們就必需放棄掉discounting,改用新的"average-reward"的公式,這是一個新的"differential" value function(微分價值函數)。 先從episodic case開始,我們要把function approximation的概念從state values擴展至action values。我們要把觀念擴展至依循著on-policy GPI的一般模式,使用$\epsilon$-greedy來選擇action。我們會用$n$-step linear Sarsa解Mountain Car problem來說明結果。然後轉說明continuing case,然後這些概念用到具微分值(differential values)的average-reward的案例上。 ## 10.1 Episodic Semi-gradient Control Chapter 9的semi-gradient prediction methods擴展至action values是簡單的。這種情況下,它的approximate action-value function,$\hat{q} \sim q_\pi$,以此表示為具有權重向量$\mathbf{w}$的參數化函數形式(parameterized functional)。我們曾經考慮過$S_t \mapsto U_t$這種形式的隨機訓練樣本,現在我們考慮的形式是$S_t, A_t \mapsto U_t$。更新的目標$U_t$(update target)可以是$q_\pi(S_t, A_t)$的任意近似值,包含常用的backed-up values,像是full Monte Carlo return($G_t$)或是公式7.4的$n$-step Sarsa returns。一般求action-value prediction的gradient-descent update為: $$ \mathbf{w}_{t+1} \dot{=} \mathbf{w}_t + \alpha[U_t - \hat{q}(S_t, A_t, \mathbf{w}_t)] \nabla \hat{q}(S_t, A_t, \mathbf{w}_t) \tag{10.1} $$ 舉例來說,one-step Sarsa的update就會是: $$ \mathbf{w}_{t+1} \dot{=} \mathbf{w}_t + \alpha[R_{t+1} + \gamma\hat{q}(S_{t+1}, A_{t+1}, \mathbf{w}_t) - \hat{q}(S_t, A_t, \mathbf{w}_t)] \nabla \hat{q}(S_t, A_t, \mathbf{w}_t) \tag{10.2} $$ 我們把這方法稱為episodic semi-gradient one-step Sarsa。對於固定的策略來說(constant policy),這方法的收斂會跟TD(0)一樣,而且會收斂到相同的[誤差界(error bound)](http://terms.naer.edu.tw/detail/2115619/)(公式9.14)。為了形成控制方法,我們要把action-value prediction methods跟policy improvement與action selection的技術結合起來。適用於continuous actions(連續型動作)或是來自大型離散集合的動作(actions)的合適技術目前還在研究中,尚未有一個明確的解決方案。另一方面,如果action set是離散型的,但又不是很大的話,就可以用我們先前討論的技術來處理就行了。也就是說,對於在下一個state $S_{t+1}$中,所有能用的每個可能的action,我們都可以計算$\hat{q}(S_{t+1}, a, \mathbf{w}_t)$,然後找出greedy action $A^*_{t+1}=\arg\max_q\hat{q}(S_{t+1}, a, \mathbf{w}_t)$。然後再透過把estimation policy改為greedy policy(舉例,$\epsilon$-greedy policy)的soft approximation來完成policy improvement~(策略改進)~。actions也是根據相同的policy來選擇。下面給出完整演算法的pseudocode: ![](https://hackmd.io/_uploads/Syno79DIY.png) :::info **Example 10.1: Mountain Car Task** 我們設想一輛動力不足的車子要上山的故事,如Figure 10.1的左上所示。困難的點在於地心引力比車子的引擎還要來的強,就算你馬力全開,車子仍然無法加速衝上斜坡。唯一的方法就是先到目標的左邊那個斜坡上。然後,衝阿,車子應該可以有足夠的慣性來衝上斜坡,即使它整路上都在減速。 ![](https://hackmd.io/_uploads/BJdTr9PUt.png) Figure 10.1: The Mountain Car task (upper left panel) and the cost-to-go function $-\max_a \hat{q}(s, a, \mathbf{w})$ learned during one run. 這是一個再簡單不過的continuous control task(連續型的控制任務),某種意義上它可能要先變的糟(離目標遠一點),然後再才能再變好。除非高人相助,寫出一個好設計,不然很多的控制方法在這類型的任務上都會遇到問題。 這問題中,每個time step的reward都會是-1,一直到車車成功穿越目標,然後這個episode就結束掉。這會有三個可能的actions:全力向前衝(+1),全力倒退嚕(-1),不踩油門(0)。汽車會根據簡化過的物理學來作動。其位置$x_t$與速度$\dot{x}_t$的更新為: $$ \begin{align} & x_{t+1} \dot{=} bound[x_t + \dot{x}_{t+1}] \\ & \dot{x}_{t+1} \dot{=} bound[\dot{x}_t + 0.001A_t - 0.0025\cos(3x_t)] \end{align} $$ 其中$bound$會約束$-1.2 \leq x_{t+1} \leq 0.5$與$-0.07 \leq \dot{x}_{t+1} \leq 0.07$。此外,當$x_{t+1}$來到左邊的約束值($-1.2$)的話,$\dot{x}_{t+1}=0$。當$x_{t+1}$來到右邊的約束值(0.5),那就代表成功到達目標(goal),同時這個episode結束。每個episode的起始位置是隨機的,$x_t\in[-0.6, -0.4]$,且速度為0。我們會把這兩個連續的狀態變數(continuous state variables)轉為binary features,採用的是Figure 9.9提過的grid-tilings。我們會使用8個tilings,每個tile會在每個維度上覆蓋邊界距離的1/8,並如Section 9.5.4所述一般,漸近的偏移。特徵向量$\mathbf{x}(s, a)$是由tile coding所建立,線性地(linearly)結合參數向量(parameter vector)來近似action-value function: $$ \hat{q}(s, a, \mathbf{w}) \dot{=} \mathbf{w}^T\mathbf{x}(s,a )=\sum_{i=1}^dw_i\cdot x_i(s, a) \tag{10.3} $$ 用於所有的state $s$ action $a$ pair。 Figure 10.1說明了,當你這種型式的函數近似(function approximation)學習解這問題的時候會有的普遍現象。呈現出來的是單次執行(single run)所學習到負值的value function(cost-to-go function)。初始的action values全都是0,這是樂觀的(這任務中所有的true values都是負值),所以即使你的探索參數(exploration parameter)$\epsilon=0$,還是會引起廣泛的探索行為。這可以行上圖中間那張標有"Step 428"的圖看的出來。這時候連一個episode都還沒有完成,但是車子已經沿著狀態空間(state space)中的圓形軌跡(cricular trajectories)在山谷中來回擺動了。所有常見的狀態(states)的值(value)都比沒有被探索過的狀態還要來的糟~(因為初始是0,現在都負值)~,這是因為實際的reward比預期的還要糟。也因此,不斷的驅使agent遠離它曾經去過的地方,然後探索新的狀態(state),一直到找到解決方案。 Figure 10.2給出semi-gradient Sarsa在這問題上的多個學習曲線,主要是使用不同的step-size。 ![](https://hackmd.io/_uploads/SJ-Ic1OIF.png) ::: ## 10.2 Semi-gradient $n$-step Sarsa 我們可以用$n$-step return做為semi-gradient Sarsa update equation(10.1)的更新目標(update target),以此獲得episodic semi-gradient Sarsa的$n$-step版本。這樣子,這個$n$-step return就直接的從tabular的形式(7.4)立即的泛化為函數近似的形式: $$ G_{t:t+n} \dot{=} R_{t+1} + \gamma R_{t+2} + \cdots + \gamma^{n-1}R_{t+n} + \gamma^n\hat{q}(S_{t+n}, A_{t+n}, \mathbf{w}_{t+n-1}), t+n<T\tag{10.4} $$ 通常,如果$t+n\geq T$,那$G_{t:t+n}\dot{=}G_t$。上面是它的目標式,那它的更新的話,也就是$n$-step update equation就是: $$ \mathbf{w}_{t+n} \dot{=} \mathbf{w}_{t+n-1} + \alpha[G_{t:t+n} - \hat{q}(S_{t}, A_{t}, \mathbf{w}_{t+n-1})] \nabla \hat{q}(S_{t}, A_{t}, \mathbf{w}_{t+n-1}), 0\leq t < T\tag{10.5} $$ 下面給出完整的pseudocode: ![](https://hackmd.io/_uploads/BkAUCmYLF.png) 正如我們之前看到的那樣,最好的通常在兩極端的中間,通常你的$n$會大於1。Figure 10.3給出以上面的Mountain Car task為例,$n=8$比起$n=1$學習的更快,也得到更好的漸近效能(asymptotic performance)的結果。 ![](https://hackmd.io/_uploads/r1W5kNYIK.png) Figure 10.3: Performance of one-step vs 8-step semi-gradient Sarsa on the Mountain Car task. Good step sizes were used: $\alpha=0.5/8$ for $n=1$ and $alpha=0.3/8$ for $n = 8$. Figure 10.4則是更多關於step-size parameter $\alpha$與$n$對該任務的影響的研究結果。 ![](https://hackmd.io/_uploads/rkzNeEKUK.png) Figure 10.4: Effect of the $\alpha$ and $n$ on early performance of $n$-step semi-gradient Sarsa and tile-coding function approximation on the Mountain Car task. As usual, an intermediate level of bootstrapping ($n = 4$) performed best. These results are for selected $\alpha$ values, on a log scale, and then connected by straight lines. The standard errors ranged from $0.5$ (less than the line width) for $n = 1$ to about $4$ for $n = 16$, so the main effects are all statistically significant. ## 10.3 Average Reward: A New Problem Setting for Continuing Tasks 我們現在來介紹第三種經典的設置,除了episodic與discounted的設置之外,用於表述Markov decision problems(MDPs)的目標(goal)。就像是discounted的設置一樣,average reward的設置適用於continuing problems(連續型任務),也就是agent跟environment之間的交互作用沒完沒了,這問題沒有終止或是開始狀態。不同的是說,這類問題不會有discounting,意思就是,agent關心的delayed rewards(延遲報酬)與immediate reward(立即性的報酬)是一樣多的。average-reward在強化學習中不常見,常見用於經典的動態規劃理論中。如下一節我們要討論的,discounting的設置在function approximation中存在著一些問題,因此需要用average-reward來代替。 在average-reward的設置中,policy $\pi$好不好是看當我們依著這個policy的時候,它的average reward是多少,我們把它定義為$r(\pi)$,也就是: $$ \begin{align} r(\pi) & \dot{=} \lim_{h\to\infty}\dfrac{1}{h}\sum^h_{t=1}\mathbb{E}[R_t\vert S_0, A_{0:t-1} \sim \pi] \tag{10.6} \\ &= \lim_{t \to \infty}\mathbb{E}[R_t\vert S_0, A_{0:t-1} \sim \pi] \tag{10.7}\\ &= \sum_s \mu_\pi(s) \sum_a\pi(a\vert s)\sum_{s',r}p(s', r\vert s, a)r \end{align} $$ 其中期望值取決於初始狀態(initial state)$S_0$以及根據$\pi$所選擇的subsequent actions(後續的動作),$A_0, A_1, ..., A_{t-1}$。如果[定常狀態(steady-state)](http://terms.naer.edu.tw/detail/2125348/)的分佈,$\mu_\pi(s)\dot{=}\lim_{t\to\infty}\mathbf{Pr}\left\{S_t=s\vert A_{0:t-1}\sim\pi \right\}$,存在,且跟$S_0$是不相關的,換言之,如果MPD是[遍歷的(ergodic)](http://terms.naer.edu.tw/detail/63068/),那我們就可以說第二、第三個方程式成立。在ergodic MDP中,starting state跟那些agent早期製定的決策都只會有暫時性的影響;長期來看,狀態(state)的期望值只會取決於策略(policy)與MPD轉移機率(MPD transition probabilities)。[遍歷性(ergodicity)](http://terms.naer.edu.tw/detail/15308591/)是足以保證10.6極限存在,但並非是必要條件。 在undiscounted continuing case中,我們可以在不同類型的最佳化之間做細微的區分。只是,對大多數的實際目的來說,其實你只在每個time step根據它們的average reward簡單的排序polciies就夠了,換句話說,就是根據它們的$r(\pi)$。這個[量(quantity)](http://terms.naer.edu.tw/detail/975049/)本質上就是$\pi$的average reward(如公式10.7所述,或稱reward rate)。特別是,我們認為所有能夠達到$r(\pi)$最大值的通通都是最佳的(optimal)。 注意到,[定常狀態(steady-state)](http://terms.naer.edu.tw/detail/2125348/)分佈$\mu_\pi$它是$\pi$的一個特別的分佈,如果你根據$\pi$選擇actions,那你就會保持在相同的分佈之中。也就是說,其: $$ \sum_s\mu_\pi(s)\sum_a\pi(a\vert s)p(s'\vert s, a)=\mu_\pi(s')\tag{10.8} $$ 在average-reward的設置中,returns會根據reward與average reward之間的差異來定義: $$ G_t \dot{=} R_{t+1} - r(\pi) + R_{t+2} - r(\pi) + R_{t+3} - r(\pi) + \cdots \tag{10.9} $$ 這就是differential return(微分回報?差分回報?),相對應的value functions就是differential value functions。differential value functions是根據new return所定義,就像傳統的value functions是根據discounted return所定義那樣;因此differential value functions會用相同的符號,$v_\pi(s) \dot{=} \mathbb{E}_\pi[G_t\vert S_t=s]$,且$q_\pi(s, a) \dot{=} \mathbb{E}_\pi[G_t\vert S_t=s, A_t=a]$,$v_*, q_*$也是一樣。differential value functions也有Bellman equations,只是跟之前看的有一點點的不同。很簡單,把所有的$\gamma s$拿掉,然後用reward與true average reward之間的差異來替代拿掉的部份就可以了: $$ \begin{align} & v_\pi(s) = \sum_a \pi(a\vert s) \sum_{r, s'}p(s', r\vert s, a) [r-r(\pi)+v_\pi(s')], \\ & q_\pi(s, a) = \sum_{r, s'}p(s', r \vert s, a)[r - r(\pi) + \sum_{a'}\pi(a' \vert s')q_\pi(s', a')], \\ & v_*(s) = \max_a \sum_{r, s'}p(s', r\vert s, a)[r - \max_\pi r(\pi) + v_*(s')], \text{ and } \\ & q_*(s, a) = \sum_{r, s'}p(s', r\vert s, a)[r - \max_\pi r(\pi) + \max_{a'}q_*(s', a')] \end{align} $$ 相關可參考公式3.14,以及Exercies 3.17、3.19、3.20。 另外還有兩個TD errors的差分形式(differential form): $$ \delta_t \dot{=} R_{t+1} - \bar{R}_t + \hat{v}(S_{t+1}, \mathbf{w}_t) - \hat{v}(S_t, \mathbf{w}_t) \tag{10.10} $$ 與 $$ \delta_t \dot{=} R_{t+1} - \bar{R}_t + \hat{q}(S_{t+1}, A_{t+1} \mathbf{w}_t) - \hat{q}(S_t, A_t, \mathbf{w}_t) \tag{10.11} $$ ,其中$\bar{R}_t$就是average reward $r(\pi)$在時間$t$時候的估測值。有這些替代方案,我們多數的演算法跟理論都不需要改變就可以實現到average-reward的設置上。 舉例來說,semi-gradient Sarsa的average reward的版本就可以套公式10.2,只要改一下TD error,讓它變成是差分的版本就可以。也就是說: $$ \mathbf{w}_{t+1} \dot{=} \mathbf{w}_t + \alpha \delta_t \nabla \hat{q}(S_t, A_t, \mathbf{w}_t) \tag{10.12} $$ ,$\delta_t$是由公式10.11所給出。下面給出完整的pseudocode: ![](https://hackmd.io/_uploads/rylVwJmTUF.png) 這演算法的一個限制就是,它並不是收斂到差分值(differential values),而是差分值加上任意的偏移量(offset)。可以注意的是,如果所有的值(values)都以相同的量來移動(shifted),那上面所給出的Bellman equation與TD error都不會受到影響。因此,這個偏移量在實務上可能是無關緊要的。如何調整演算法來消除偏移量(offset)是未來研究方法的一個有趣的問題。 :::info Example 10.2: An Access-Control Queuing Task 這是一個涉及10台主機存取控制的決策任務。有四個不同優先順序的客戶在單一個隊列(single queue)。如果我們授權給客戶來存取主機,那就會根據客戶的優先順序支付1、2、4或8的reward給主機,優先度愈高的客戶就付愈多錢。每個time step中,在隊列前頭的那個客戶要嘛被接受(分配給一台主機),要嘛被拒絕(從隊列移除,reward=0)。任何一種情況中,都會在下一個time step考慮隊列中的下一個客戶。那隊列絕對不會是空的(empty),而隊列中客戶的優先順序是均勻隨機分佈(uniformly randomly distributed)。當然,如果主機都沒有空,那就沒有辦法為客戶提供服務;這種情況下客戶會一直的被拒絕掉。每一台忙碌的主機在每個time step都會有$p=0.06$的機率變成有空閒。雖然才剛說完,不過還是要假設客戶到達與離開的統計資料是未知的。這個任務就是要在要每個time step上決定要接受或拒絕下一個客戶,至於要接受還是拒絕則是基於客戶的優先序以及閒置的主機數量,所以我們要來最大化long-term reward,而且不考慮discounting。 這個範例我們會考慮採用tabular solution。儘管狀態之間不存在泛化性問題,不過我們還是考慮採用function approximation來泛化這個tabular的設置。因此,我們會對每個state(閒置的主機與隊列最上面那個客戶的優先度)action(接受或是拒絕)pair估值其differential action value(這邊上下文來看應該是指差分,而不是微分)。Figure 10.5給出利用 differential semi-gradient Sarsa($\alpha=0.01, \beta=0.01, \epsilon=0.1$)找到的解。初始的action values與$\bar{R}$為0。 ![](https://hackmd.io/_uploads/BJRTDmp8t.png) Figure 10.5:利用differential semi-gradient one-step Sarsa在存取控制隊列任務上,經過2百萬個steps之後得到的policy與value function。圖右那個跳水的地方可能是因為資料不足所引起的;很多states可能這輩子從來沒有碰到過。學到的$\bar{R}$大約為2.31。注意到,這邊的優先度1是指最低的。 ::: ## 10.4 Deprecating the Discounted Setting 連續型(continuing),有折扣(discounted)的問題的公式化(formulation)在tabular情形中是非常有幫助的,其來自每個state的returns都可以被單獨的識別與平均。但是如果是approximate的話,是否還應該使用這問題的公式化,這是值得我們懷疑的。 為了瞭解原因,我們可以考慮一個無限序列的returns,沒有開始,也沒有結束,也沒有明確的狀態(state)標識。states可能單純的就由特徵向量來表示,這對你去區分狀態並沒有什麼幫助。而且還有一種特殊的情況,所有的特徵向量也許都會是一樣的。因此,我們手上有的就只有reward sequence(與actions),而且效能就只能從這邊來著手。能怎麼做呢?一個作法就是在一個比較長的時間區間計算平均的rewards,這也是average-reward設置的一個想法。那能夠怎麼計算折扣(discounting)?嗯嗯,我們可以在每個time step都量測discounted return。有些returns可能會很小,有些可能會很大,所以厚,我們就要再一次的在一個很長很長的時間區間內再計算其平均。在continuing的設置中並沒有開始也沒有結束,也沒有特殊的time step,所以我們沒有什麼能做的了,別無選擇。不過,如果你這麼做,那得到的discounted returns的平均就會跟average reward成正比。事實上,對於policy $\pi$,其discounted returns的平均始終為$r(\pi)/(1-\gamma)$,意思就是說,它本質上就是average reward,也就是$r(\pi)$。特別是,在average discounted return設置中,所有policies的排序將完全地與在average-reward設置中一樣,是的,兩種設置上的排序是一致的。因此,discount rate $\gamma$對問題公式化是沒有影響的。事實上,它可能是0,而排序依然不變。 關於這個令人驚嚇的事實,其證明如下,而其基本概念可以由對稱論點來觀察到: ![](https://hackmd.io/_uploads/rJzuy4TLt.png) 每個time step都是完全的相同。通過discounting,每個reward都會在某些return中的每一個位置就出現一次。第$t$個reward會在第$t-1$個return中以undiscounted之姿出現,然後在$t-2$個return中discounted一次。然後在第$t-1000$個return中discounted 999次。因此,這第$t$個return的權重為$1 + \gamma + \gamma^2 + \gamma^3 + \cdots = 1/(1-\gamma)$。因此所有的states都是相同的,所以全部都用這個值來加權,也因此,其returns的平均就會乘上這個average reward,或是$r(\pi) / (1 - \gamma)$。 這個範例跟上面證明更通俗的論點說明著,如果我們在on-policy distribution上最佳化discounted value,其影響會跟最佳化undiscounted average reward是一樣的;$\gamma$的[實際值(actual value)](http://terms.naer.edu.tw/detail/3645582/)是沒有影響的。不過你當然還是可以繼續在解決方法中使用discounting。不同的是,discount就會從problem parameter(問題參數)變成solution method parameter(解決方法參數)!不幸的是,使用discounting algorithms的funciton approximation並不會最佳化on-policy distribution上的discounted value,也就是說,它就不能保證能夠最佳化average reward。 這種discounted control的設置困難,其根本原因在於,當我們使用function approximation的時候,我們就已經沒辦法再使用policy improvement theorem(Section 4.2)。『如果我們改變policy來改進一個state的discounted value,那我們就可以保證在任何有用的意義上改善總體策略(overal policy)』<-這已經不再是事實了。這種保證是我們的強化學習控制方法的關鍵。在使用function approximation之後,我們就失去它了。 事實上,缺乏策略改進理論(policy improvement theorem)的同時也是total-episodic與average-reward設置上的一個理論缺陷。一旦我們引入function approximation,那我們就無法再保證任何設置上的一個改進。在Chapter 13中,我們會介紹一個基於參數化策略(parameterized policies)的強化學習演算法,那邊會介紹一個理論保證,也就是策略梯度(policy-gradient)理論,其與策略改進理論有著類似的作用。但是對於學習action values的方法,我們似乎沒有一個區域性改善的保證(possibly the approach taken by Perkins and Precup (2003) may provide a part of the answer)。我們確實知道,$\epsilon$-greedification有時候可能會得到一些比較不是那麼好的策略(inferior policy),因為它可能會在好的策略旁來回振動,而不是收斂(Gordon, 1996a)。這是一個存在多個開放性理論問題的領域。 ## 10.5 Differential Semi-gradient $n$-step Sarsa 為了能夠泛化到$n-$step bootstrapping,我們需要一個$n$-step版本的TD error。我們就來把公式7.4的$n$-step returns給泛化為差分的形式(differential form),使用function approximation: $$ G_{t:t+n} \dot{=} R_{t+1} - \bar{R}_{t+n-1} + \cdots + R_{t+n} - \bar{R}_{t+n-1} + \hat{q}(S_{t+n}, A_{t+n}, \mathbf{w}_{t+n-1}) \tag{10.14} $$ 其中$\bar{R}$是$r(\pi)$的估測值,$n \geq 1$,且$t+n <T$。如果$t+n>T$,那我們就一如往常的定義$G_{t:t+n}\dot{=}G_t$。然後,TD error就會是: $$ \delta_t \dot{=} G_{t:t+n} - \hat{q}(S_t, A_t, \mathbf{w}) \tag{10.15} $$ 然後我們就可以用上公式10.12的semi-gradient Sarsa update。下面給出完整演算法的pseudocode: ![](https://hackmd.io/_uploads/rkRGi-R8Y.png) ## 10.6 Summary 這一章我們把前一章談到的parameterized function approximation(參數化函數逼近)與semi-gradient descent延伸到控制(control)問題。對於epidosic case來說,這種延伸是可以立即性的完成的,但是對於continuing case的話,我們就必需要再引入新的問題公式,也就是基於最大化每個time step的平均報酬(average reward)。讓人驚嚇的是,在approximations的情況下discounted formulation是沒有辦法用於控制問題的。在approximate case下,多數的policies無法以value function來表示。不過當你需要去對餘下的策略(policy)做排序的時候,scalar average reward $r(\pi)$倒是提供一個有效的方法來處理。 average reward formulation涉及了差分版本(differential version)的value functions、Bellman equations與TD errors,不過跟舊方法相比是差不了多少,觀念上只是一個小變化。也不要忘了還要用於average-reward情況的差分演算法(differential algorithms)。啾咪^_<