pytorch神經網絡的典型骨架有一個forward()方法,然後我們根據正向傳遞的輸出計算損失,並在該損失上調用backward()來更新梯度。如果我的損失是外部確定的(例如通過在RL環境中運行模擬)會怎樣?我仍然可以這樣利用這種典型結構嗎?有沒有辦法在pytorch中使用外部丟失函數?
- 這可能有點愚蠢,因爲我們不再確切知道每個輸出元素有多少影響損失,但也許有一些我不知道的詭計。否則,我不確定神經網絡如何與其他RL算法結合使用。
謝謝!
pytorch神經網絡的典型骨架有一個forward()方法,然後我們根據正向傳遞的輸出計算損失,並在該損失上調用backward()來更新梯度。如果我的損失是外部確定的(例如通過在RL環境中運行模擬)會怎樣?我仍然可以這樣利用這種典型結構嗎?有沒有辦法在pytorch中使用外部丟失函數?
謝謝!
在這種情況下,我最容易從損失計算中抽象出正向通行證(您的策略?)。這是因爲(如您所知),在大多數情況下,您需要從您的環境中獲取狀態,然後計算一個動作(本質上是正向傳球),然後將該動作反饋迴環境以獲得獎勵/損失來自你的環境。
當然,一旦計算出一個行動來計算結果損失,你可以在正向通行證內調用你的環境。但爲什麼要麻煩?一旦你在你的環境中採取了幾個步驟,直到你獲得獎勵/損失,它將變得更加複雜(儘管可能)。
我建議你看看下面的RL例子政策梯度openAI健身房內的應用程序:https://github.com/pytorch/examples/blob/master/reinforcement_learning/reinforce.py#L43
的基本思路是:
nn.module
)該狀態處於一個狀態並返回 隨機策略雖然這個例子是特定於REINFORCE的,但是構造代碼的一般思想適用於其他RL算法。另外,你會在同一個回購中找到另外兩個例子。
希望這會有所幫助。