3

我對Pong遊戲實現深度神經網絡有一些麻煩,因爲我的網絡始終發散,無論我改變哪些參數。 我參加了一個Pong遊戲,並實施了一個基於theano/lasagne的深度q學習算法,該算法基於Googles Deepmind着名的自然論文。爲pong遊戲尋找神經網絡的正確參數

我想什麼:
相反飼餵像素數據的網絡的欲輸入的x和球的y位置和槳葉的連續4幀的y位置。所以我總共有12個輸入。
我只想獎勵一輪的命中,損失和勝利。
有了這個配置,網絡沒有收斂,我的經紀人也無法玩遊戲。相反,槳直接驅動到頂部或底部或重複相同的模式。所以我想我會盡量讓代理更簡單一些,並添加一些信息。

我所做的:
國:

  • 球(-1到1)x位置
  • 球(的y位置-1到1 )
  • 球的歸一化x-速度
  • 球的歸一化y-速度
  • 槳(-1至1)

隨着連續4幀的y位置我得到的20

獎勵總輸入:

  • 10如果扳鈕命中球
  • +100如果代理贏得回合
  • -100如果代理丟失回合
  • -5到0表示球的預測結束位置(y位置)與當前槳的y位置之間的距離如果球的預測結束位置位於球的當前範圍內,則該球的預測結束位置爲
  • +20。槳(命中預見)
  • -5如果球位於槳(未命中可能的了)後面

利用這種配置,網絡仍然發散。我嘗試瞭解學習速率(0.1到0.00001),隱藏層的節點(5到500),隱藏層的數量(1到4),批量累加器(總和或平均值),更新規則(rmsprop或Deepminds rmsprop)。
所有這些都沒有導致令人滿意的解決方案。損失平均值的圖形大部分看起來像this。 您也可以下載實現我的當前版本here
我將是任何提示:)
Koanashi

+0

由於我沒有足夠的信譽點發布更多信息我想在這裏提供兩條鏈接: [Pong-Game](http://pygame.org/project-py-pong-2040-.html); [Theano/Lasagne實施](https://github.com/spragunr/deep_q_rl); [Nature paper](https://storage.googleapis.com/deepmind-data/assets/papers/DeepMindNature14236Paper.pdf); [另一個損失情節](http://i.imgur.com/U5ZBLcQ.png); – Koanashi

+0

您是否嘗試過使用較低的獎勵值?如果可能的話,我建議使用您當前使用的獎勵,根據最小和最大可能值,將所有獎勵標準化爲[0.0,1.0]或[-1.0,1.0]。如果難以確定這些最小值和最大值,它可能仍然至少有助於使一切接近0(也許將您現在使用的所有獎勵除以100?)。這可能有助於網絡更快地融合。 –

+1

謝謝,我還沒有,但我會知道,然後報告。 – Koanashi

回答

2

重複自評作爲一個答案我的建議非常感激,以使其更容易看到其他任何人結束了(後來因爲我不是100%確定它會是解決方案而被張貼爲評論):

減少回報的幅度,使其位於(或至少接近)[0.0,1.0 ]或[-1.0,1.0]間隔有助於網絡更快地收斂。

以這種方式改變獎勵值(簡單地用數字來區分它們以使它們位於更小的區間內)不會改變網絡在理論上能夠學習的東西。網絡還可以通過在整個網絡中找到更大的權重,簡單地學習相同的概念,獲得更大的回報。

但是,學習如此大的權重通常需要更多的時間。主要原因是權重通常初始化爲接近0的隨機值,因此通過訓練需要花費大量時間將這些值更改爲較大的值。由於權重初始化爲較小的值(通常情況下),並且它們距最優權重值很遠,這也意味着存在一個局部(整體而言)局部最小化的風險可以卡住的最佳重量值。

對於較低的獎勵值,最佳重量值的幅度也可能較低。這意味着初始化爲小隨機值的權重已經更可能接近其最優值。這會縮短訓練時間(減少非正式旅行的「距離」),並降低沿途卡路里出現局部最低點的風險。

+0

在第一個版本正常工作後,我刪除了計算預測的最終位置和槳板之間距離的獎勵。現在我的[損失](http://i.imgur.com/6U3zKlT.png)首先下降,但再次增加。 連續4幀,我仍然有20個輸入。我選擇了一個有80個節點的隱藏層,我有3個輸出(上,下,下)。 我是否過度運行,還是需要多個隱藏層?或者爲什麼損失再次增加? – Koanashi

+0

在有監督學習的標準設置下(基於示例情況對神經網絡進行訓練,知道最佳輸出是什麼),我建議不僅繪製驗證/測試數據的損失,還繪製損失的訓練數據。然後,如果培訓數據的損失持續下降,但驗證數據的損失增加,則表明您過度適應。我相信你的設置不同,但你沒有訓練數據?也許這些信息會給你一些有用的想法。 –

+0

@Koanashi爲了得到更有用的回覆,我首先必須詳細閱讀論文,以更好地瞭解它在這種環境下的工作原理。現在我不介意這樣做,因爲它很有趣,我真的可能應該在某個時候閱讀它,但這需要一點時間 –