天天看點

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

在獎勵折扣率為1的情況下,既沒有折扣的情況下,reinforce算法理論上可以寫為:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

但是在有折扣的情況下,reinforce算法理論上可以寫為:

以上均為理論模型。

====================================================

根據上面的理論上的算法模型,或者說是僞代碼,你是難以使用這個算法的。這個reinforce算法也是十分古怪和氣人的,之是以這樣說是因為完全根據reinforce的算法描述(僞代碼)實際上基本無法寫出可以正常運作的代碼(能有效的代碼,算法結果是不收斂的或者在使用神經網絡做拟合函數會出現衰退的問題)。而且另一個古怪和氣人的地方是reinforce的算法描述(僞代碼)和reinforce算法的理論分析模型也是不同的,reinforce的理論分析一般都是假定有同一個執行政策(動作政策)下生成的大量episodes的資料來對評估網絡(評估政策)進行更新的,而在算法描述中往往是一個episode下的每一個step的資料就對政策網絡進行一次更新,或者說算法描述中我們是一個政策網絡生成一個episode的資料,然後我們把這個episode下每一step的資料都用來更新一次政策網絡。

總的說來,就是reinforce的标準算法描述是不可用的,往往在實際中我們使用的reinforce算法的模型,或者說實際上的算法描述(僞代碼)是不同的。

===============================================

實際上的  reinforce算法,真正使用的reinforce算法是這樣的:僞代碼(算法描述):

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

 但是,如果我們嚴格按照reinforce算法的理論推導,寫出的算法模型,僞代碼該是如下形式:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

根據上面的兩個不同具體形式的僞代碼,我們可以看出嚴格按照理論推導得到的reinforce算法模型是需要使用折扣機率下的折扣獎勵來做計算的,而實際應用中我們往往直接使用折扣獎勵進行規整後的數值來進行計算。也就是說實際應用reinforce算法時我們不僅沒有對獎勵值取折扣機率下的值,并且還對折扣獎勵進行了規整(高斯化)。

那麼我們可以不可以對折扣獎勵取折扣機率後再進行規整化呢,于是有了下面的算法模型,僞代碼:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

===========================

根據上面的分析,實際使用reinforce算法時根據對獎勵值的處理可以分為以下4種:

1.  更新網絡參數時使用的獎勵值為  折扣獎勵,也就是最原始的獎勵值,不加其他處理的形式。

2.  更新網絡參數時使用的獎勵值為  折扣機率下的折扣獎勵。

3. 更新網絡參數時使用的獎勵值為  将折扣獎勵進行規整化後的獎勵值 。

4. 更新網絡參數時使用的獎勵值為  将折扣機率下的折扣獎勵進行規整化後的獎勵值。

--------------------------

通過gym環境下的實驗發現,第一種和第二種形式的reinforce算法直接導緻神經網絡衰退,也就是說完全随機政策進行互動我們可以得到的episode的長度在29左右,而第一種和第二種形式的reinforce算法所訓練得到的政策直接會衰退到對一個episode内的所有step下的狀态給出相同的action。

第二種形式下的部分運作結果:(第二種形式下,此時更新一次網絡的episodes數為10)

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)
強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

可以看到使用第二種形式的reinforce算法,在運作一段時間後運作效果直接從完全随機的政策衰退為對一個episode下的所有狀态給出相同action的表現。

讨論過即使使用實際應用中最常見的第3種形式的reinforce也會有一定的機率出現衰退問題,不過那時的衰退往往是運作效果優化到了一定程度後才進行衰退的,而第二種形式的reinforce算法是直接在開始的階段就直接從随機政策衰退到完全無效的政策(對一個episode内的所有state給出完全相同的action)。 

第一種形式的reinforce和第二種形式的reinforce相似,都是從随機政策開始後快速的衰退到對一個episode内的所有state給出完全相同的action,進而變成了無效的政策。

第一種,第二種形式的reinforce直接進入衰退,而第三種,第四中形式的reinforce就可以正常運作到要求的效果,這中間的差別就是最後訓練時所采用的獎勵值的具體形式。

=======================================

 個人的小嘗試:

第三種形式的reinforce中最後更新網絡的獎勵值的例子:

(action全部都是1的情況)

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)
強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

第二種形式的reinforce算法獎勵值的例子:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

可以看到第一種形式的reinforce和第二種的reinforce最後進行網絡更新時的獎勵值都是大小在T到0之間,其中T為該episode的長度。而第三種形式的reinforce算法均值為0,方差為1。

觀察第二種形式的reinforce和第三種reinforce的差別,更新網絡時獎勵值的差別,我們将第二種形式的reinforce獎勵值的形式進行修改:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

 此時運作reinforce算法:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

 修改後的reinforce算法成功達到要求。

而第三種形式的reinforce運作結果:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

可以看到采用新的獎勵值後的reinforce算法可以和第三種形式的reinforce算法性能相當,或者說并沒有明顯差于第三種形式的reinforce。

再一次修改第二種形式的reinforce的獎勵值形式:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

 發現也是可以達到要求:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

然而當獎勵值形式為:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

或:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

 reinforce算法都是無法達到要求的,直接衰退:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

于是有了一個大膽的猜測,隻要更新網絡時的一個episode内的各個step的獎勵值均值為0,那麼必然可以運作到要求的水準,于是獎勵值設定下面的形式:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

發現依然成功到達要求:

強化學習中經典算法 —— reinforce算法 —— (進一步了解, 理論推導出的計算模型和實際應用中的計算模型的差別)

根據上面的實際應用中的reinforce的實際形式(形式3)和理論推導中的(形式2)之間運作效果的不同,我們大膽設想每一次更新網絡時reinforce算法要求各獎勵值的均值為0才可以成功運作。

==========================================

個人的一點小總結:

有時候理論上各種推導,各種公式,各種理論,然後各種名詞堆到一起搞出一個算法,貌似應該可行,而在實際上就并不是很可行,個人感覺這說明理論是有指導作用但是沒有絕定性的作用,而且至于靠譜不靠譜,完善不完善最終還是需要實際應用中去看,可能這也是那種  實踐是檢驗真理的唯一途徑。可能有時候由于理論的限制等等原因,有些改進的東西無法用完善的理論來解釋但是确實可行,而有的時候有些理論感覺很完善其實卻還差一些,這時候就需要一些在實踐中的改進了。

單純的從算法角度來看,那就是  reward shap 不僅會提高算法的運算效率,甚至對算法的最終性能(優化結果)也是具有很大的影響的,就像本文中的不同形式的reinforce,如果reward設定的不好往往算法不work。就像實際中的reinforce算法雖然和理論推導的形式有一些不同,但是卻能work,而我們最終采用的形式就是那種可以work就用哪種。

重要說明:

本文代碼中出現錯誤,後已經修複,是以上面的實驗結果均為錯誤。

經過修改後發現mode=0 ,  mode=1,   mode=2,   mode=3   均可以收斂取得最終結果。   是以原文中所得到的結論mode=0, mode=1 不能收斂是錯誤的。

特此更正。

繼續閱讀