其實我一直在想一個問題
就算大概了解了這些東西的涵義
那為什麼實作的時候就是卡的不得了
到底是哪裡出了問題
是因為程式新接觸的不會用嗎
還是因為沒有上過實驗課之類的
沒人示範,所以不太清楚從何開始
還是import的包不會用
還是根本就沒有了解這些東西
還是單純腦袋有問題就是不會
這讓我異常的煩惱
每每重新看了幾次影片教程
覺得又好像了解一點的時候
開始想要自己打碼就卡在那邊不知道要幹麻
今天又重新看了一遍
然後搭配一些網路文章觀賞
policy gradient跟後續的方法之後再來看唉
主要就是整理一些Value based的部分
我也不知道是不是對的
算法再去下面網站看
Policy based: 學習動作函數(決定action)
Value based: 預估在某個state,做某動作會得到的reward
Model based: 學習transfer function、Reward function
Dynamic programming methods
Model free:
Monte Carlo methods
Temporal difference
多使用TD
動態規劃需要環境模型之轉移機率,當前狀態值函數更新需要根據已知之其他狀態函數決定
蒙地卡羅不需要環境模型,狀態值函數的估計相互獨立,但只能用於episode tasks
Monte Carlo Methods
統計估算的概念
經歷完整的episode來學習狀態價值,通常情況下某狀態的價值等於多個episode中以該狀態算得到的所有收穫的平均
蒙地卡羅策略估計
1.first visit :只根據每episode第一次遇到狀態s返回的值,狀態價值為狀態s後面所有reward的總和
2.every visit:每次episode遇到的所有狀態
不需要對所有狀態值進行估計時可用,RL中使用的情況較少
Temporal difference approach
On-policy: Sarsa,state-action-reward-state-action,考慮了下一個state的action
Off-policy: Q-learning,直接選擇下一個Q值最大的情況,並無決定下一狀態action,與當前執行的策略選取之action無關
Q-learning為比較貪婪(greedy)的做法,並無考慮其他非maxQ的結果,而Sarsa相對較於保守,在乎每一步決策且對錯誤較敏感,若比較在乎損害可使用Sarsa
優勢:變異較小,不需要完整跑完episode即可更新,可用於連續的事件
Deep Q Network
在state數量很大的時候不能使用table存取Q值,隨著深度學習興起且成熟,將Q learning中的價值函數使用深度神經網路近似
做法:
Experience Replay: 監督學習中樣本間有關聯不容易收斂,最好是獨立。記錄曾經走過的(s,a,r,s’),透過隨機抽樣去除相關性。
Target Network: 樣本與目標是利用同一個神經網路,target會一直變動,模型發散與震盪可能性變大,因此建構一個比主要估計的神經網路慢的神經網路來估計目標值(target),增加穩定性。
Advance methods
Double DQN: 減少q value被高估的情況,若高估情況不平均會使非最優action的Q值高於最優action的Q值。與target network架構相同,一個負責選擇action,一個評估動作,會更新的主要神經網路選擇action,target網路來決定value,loss的算法不同。
Dueling DQN: 更改神經網路架構,原先輸出的Q值拆解成A(s,a)與V(s),A代表在狀態中選擇action的優勢函數(state-dependent action advantage function) ,V代表靜態的狀態本身具有的價值(state value function),用此方法可以學到哪個狀態為有價值的,而不必學習每個action對於state的影響。
Prioritized Reply: 原先DQN會uniform的從buffer取樣資料,有一些資料的TD-error特別大,故加大那些訓練不佳的資料被取樣的機率,可加速最優策略的學習。
Multi-step: 在MC跟TD做平衡,buffer中記錄了後N步,以N步後的狀態輸入target network之中來當target,由於中間的state皆是經歷過的非預測的,估測的影響較小,在變異與步數中做平衡。
Noisy Net: 在Q上面加上noise,每個episode使用的神經網路之參數也一樣的,在同樣或相似的state會採取相同的動作,不會像使用−greedy的策略而有機會採取隨機的動作,比較符合現實並且是比較一致的。
Distributional Q-function: 原本的概念算法為找出期望的Q值,有可能reward分布不同但期望值是相同進而漏掉了一些訊息,於是想直接輸出reward的分布,先設定一範圍,找出某一state採取某action於不同地方的機率,可觀測分布了解選擇的動作風險(variance)進而規避風險,此方法不會過度估計reward。
有一些東西需搭配圖來看
都參考於一些簡體網站
還有對於深度學習的不熟悉
感覺神經網路的部分不是很懂為啥那樣設定要幾層還有CNN怎用
機器學習感覺之後要再額外學了
好麻煩阿
參考文章
夢的自言自語幻想世界。
2018.6.24