5

我想了解本文解釋如何訓練神經網絡玩乒乓遊戲。 https://cloud.github.com/downloads/inf0-warri0r/neural_pong/README.pdf如何訓練神經網絡玩乒乓球遊戲?

我最近開始研究神經網絡,並且我知道後向傳播的概念。本文采用Back Propagation來訓練神經網絡。

這個神經網絡中有五個輸入神經元。

  1. x座標球(BX)
  2. y中的球(由)的x方向上的球(BVX)在y方向上的球的
  3. 速度的
  4. 速度的座標(bvy )
  5. 槳的位置(py)。

隱藏層中有十個神經元,輸出層中有一個神經元會輸出槳的位置(py)。

enter image description here

從此時開始我有些疑惑就一目瞭然了。

由於後傳播是一種監督式學習方法,它應該有一些期望的輸出,我們從中迭代減去當前輸出以找到輸出中的錯誤並計算梯度下降。

  1. 現在我不明白的是,在這種情況下,期望的輸出是什麼。它可以是球擊中牆壁的位置和槳的位置之間的距離,我們應該保持零?

  2. 我知道控制槳將被硬編碼以便與球同步移動,但我們在訓練時如何隨機移動另一槳?我們應該在輸入「py」中給出什麼值?

  3. 在遊戲中的什麼點應提供所有五個輸入bx,by,bvx,bvy和py?我們是否應該只在球擊中牆時纔給出這些輸入並執行一個神經網絡迭代的時代?

回答

5

首先,我想阻止你使用這篇論文作爲教育工具。代碼記錄不完善,而且文件本身並沒有很多信息。

  1. 在代碼庫中,他似乎使用輸出作爲從槳的距離到它應該在的位置。然後,他會根據從槳到球的實際距離來訓練網絡,無論槳沒有擊中。

  2. 原始紙張通過簡單地訓練兩個網絡相互移動相對的槳。這有一些缺點,但在這種情況下不應該是一個問題。 py的值似乎是當前paddle y座標

  3. 在代碼中,他爲網絡提供每幀的遊戲當前狀態,然後允許他們選擇要移動到的目標距離。然後,當他們錯過球時,他會訓練神經網絡。

這種設計有一些缺點。例如,您只能獲得一個數據點來針對每個球進行訓練,並且由於當我們收集該數據點時,球始終位於遊戲板的邊緣,因此我們並不瞭解球何時移動實際上是在地圖周圍彈跳。

我建議保持跟蹤網絡播放時的所有值。稍後,您可以使用原始遊戲狀態和球進入的實際位置來訓練網絡。這樣,即使網絡成功阻擋球,網絡也可以進行有效訓練,並從遊戲中的所有點獲取數據。