4

我有一個人工神經網絡播放井字遊戲 - 但它還沒有完成。德爾福/帕斯卡(時間差分學習)TD(λ)


我有什麼尚未:

  • 獎勵陣列 「R [T]」 具有每個時間步長或移動 「t」 的整數值(1 =玩家A贏了,0 =拉伸,-1 =玩家B獲勝)
  • 輸入值通過網絡正確傳播。
  • 公式調整權重:

enter image description here


缺少什麼:

  • 的TD學習:我還需要一個過程,它 「backpropagates」 的網絡的誤差使用TD(λ)算法。

但我不太瞭解這個算法。


我的做法至今...

跟蹤衰減參數λ應爲「0.1」作爲遠端狀態不應該得到那麼多的獎勵。

兩層(輸入和隱藏)的學習率均爲「0.5」。

這是延遲獎勵的情況:獎勵在遊戲結束前保持「0」。然後,獎勵對於第一位玩家的勝利變爲「1」,對於第二位玩家的勝利則變爲「-1」或者在抽籤的情況下變爲「0」。


我的問題:

  • 如何,什麼時候計算淨的錯誤(TD錯誤)?
  • 如何實現錯誤的「反向傳播」?
  • 如何使用TD(λ)調整權重?

非常感謝你提前:)

回答

2

如果你真的想讓這個工作,那麼瞭解TD-拉姆達將是非常有益的。 Sutton和Barto的着作「增強學習」是available for free in HTML format,並詳細介紹了該算法。基本上,TD-lambda所做的是在遊戲結束時創建一個遊戲狀態與期望獎勵之間的映射。隨着遊戲的發揮,更有可能導致獲勝狀態的狀態傾向於獲得更高的期望獎勵值。

對於像井字遊戲這樣的簡單遊戲,你最好從表格映射開始(只追蹤每個可能遊戲狀態的期望獎勵值)。然後,一旦你有了這個工作,你可以嘗試使用NN來進行映射。不過,我會建議您嘗試使用單獨的,更簡單的NN項目第一...

+0

是的,當然,理解TD-lambda會很重要。我真的不明白這一點。當然,我讀過薩頓的那本書。這個算法對我來說大致是清楚的。我已經嘗試過這種表格映射,但現在我很想用TD-lambda工作來實現一個ANN。 – caw 2011-02-01 21:13:31

0

我一直搞不清這個太,但我相信這是它的工作方式:從終端節點開始

,你檢查[R ,(收到的產出)和E,(預期產出)。如果E = R,那很好,你也沒有改變。

如果E!= R,基於閾值和其他因素,您會看到它有多遠,然後將權重或閾值上移或下移一點。然後,根據新的權重,您重新進入,並猜測它是否太高或太低,並且以較弱的效果重複。

我從來沒有真正嘗試過這種算法,但基本上這是我理解的想法的版本。

+0

是的,我也這麼認爲,這可能是它的工作方式。但重要的是:如何調整權重? ;) – caw 2011-02-01 21:09:34

+0

解除了這一點。 – 2013-02-13 18:31:50

0

據我記得,你用已知的結果集進行訓練 - 所以你計算一個已知輸入的輸出並從中減去你已知的輸出值 - 這就是錯誤。

然後你使用錯誤來糾正網絡 - 對於用delta規則調整的單層NN我知道0.5的ε太高 - 類似0.1更好 - 更慢但更好。反向傳播有點更先進 - 但據我所知,神經網絡的數學方程描述很複雜,很難理解 - 它並不複雜。

看看 http://www.codeproject.com/KB/recipes/BP.aspx

或谷歌爲「反傳C」 - 它可能是更容易的代碼來理解。