在 reinforce 演算法中每次需要用乙個策略採集完一條完整的軌跡,並計算這條軌跡上的回報。這個方法有兩個缺點:
方差比較大
學習效率低
學習效率低很好理解,為什麼說方差大呢?下面是李巨集毅的課件中的圖,因為我們在去評估在狀態 \(s_t\) 時採取動作 \(a_t\) 的好壞時,需要用到這個總回報 \(g\),最準確的做法當時是對這個 \(g\) 求期望了,然後在實際操作的時候其實是只用了一次取樣來代替這個期望了。從下圖中也可以看出來,這個回報 \(g\) 的隨機性還是挺大的。
return
解決這個問題的做法是可以借助時序差分學習的思想,即從狀態 \(s\) 開始的總回報可以通過當前動作的即時獎勵 \(r(s,a,s^)\) 和下乙個狀態 \(s^\) 的值函式近似估計:
\[\hat g\left( }} \right) = } + \gamma \left( }} \right)
\tag
\]來看一下李巨集毅課程的解釋,在上一節策略梯度中得到 $\mathbb\left[g\left(\tau_\right)\right]=}}\left( ,} \right) $,所以說我們需要的 \(g\) 的期望其實就是狀態-動作值函式,而狀態-動作值函式和狀態值函式的關係為:
\[q^}(s_t, a_t)=\mathbb_ \sim p_\left(s_ | s_t, a_t\right)}\left[r\left(s_t, a_t, s_\right)+\gamma \left( }} \right) \right]
\tag
\]現在我們把 (2) 中的期望拿掉了,就得到了 (1) 式.
為什麼拿掉呢?李巨集毅課上說原作者實驗了很多次,發現拿掉後結果比較好,很玄學。\[\begin
& \min _\left(\hat\left(\tau_\right)-v_\left(s_\right)\right)^ \\
=& \min _\left(r_+\gamma v_\left(s_\right)-v_\left(s_\right)\right)^
\end
\tag
\]\tag
\]所以每步引數 \(\theta\) 的更新公式為(計算每個時刻的梯度就開始更新引數了):
\[\theta \leftarrow \theta+\alpha \gamma^\left[r_+\gamma v_\left(s_\right)-v_\left(s_\right)\right] \nabla \log \pi_\left(a_ | s_\right)
\tag
\]具體的演算法流程如下:
actor-critic演算法
神經網路與深度學習-邱錫鵬
李巨集毅主頁
評論 程式設計師,不止乾到35歲
在中國,程式設計師不能超過35歲,似乎已經是不爭的事實,軟體開發工作就是青春飯,頂多靠畢業這十年的時間,超過這個年齡,要不成功躍身成為管理者,要不轉行進入其他領域,好像再沒有更好的選擇,即使偶有繼續堅持作開發的,也被看成另類一族。老外卻不是這樣,40,50歲仍然作開發工作的大有人在,甚至很多牛人,包...
評論 程式設計師,不止乾到35歲
在中國,程式設計師不能超過35歲,似乎已經是不爭的事實,軟體開發工作就是青春飯,頂多靠畢業這十年的時間,超過這個年齡,要不成功躍身成為管理者,要不轉行進入其他領域,好像再沒有更好的選擇,即使偶有繼續堅持作開發的,也被看成另類一族。老外卻不是這樣,40,50歲仍然作開發工作的大有人在,甚至很多牛人,包...
評論 程式設計師,不止乾到35歲
在中國,程式設計師不能超過35歲,似乎已經是不爭的事實,軟體開發工作就是青春飯,頂多靠畢業這十年的時間,超過這個年齡,要不成功躍身成為管理者,要不轉行進入其他領域,好像再沒有更好的選擇,即使偶有繼續堅持作開發的,也被看成另類一族。老外卻不是這樣,40,50歲仍然作開發工作的大有人在,甚至很多牛人,包...