我是鋼筋學習的完全新手。我對keras-rl代理的輸出層激活函數的選擇有一個疑問。在由keras-rl(https://github.com/matthiasplappert/keras-rl/tree/master/examples)提供的所有示例中,在輸出層中選擇線性激活函數。爲什麼是這樣?如果我使用不同的激活功能,我們會期望什麼效果?例如,如果我使用離散操作空間爲5的OpenAI環境,我還應該考慮在代理的輸出層中使用softmax嗎? 非常感謝。爲什麼keras-rl的例子總是選擇輸出層中的線性激活?
0
A
回答
0
對於keras-rl linear
中的某些代理,即使代理正在使用離散操作空間(例如dqn,ddqn),也會使用激活函數。但是,例如,CEM對離散動作空間使用softmax
激活函數(這是人們所期望的)。
dqn和ddqn的激活函數linear
背後的原因是它的探索策略,它是代理的一部分。如果我們考慮使用他們兩個作爲例子和方法select_action
類的勘探方針,我們將看到以下內容:
class BoltzmannQPolicy(Policy):
def __init__(self, tau=1., clip=(-500., 500.)):
super(BoltzmannQPolicy, self).__init__()
self.tau = tau
self.clip = clip
def select_action(self, q_values):
assert q_values.ndim == 1
q_values = q_values.astype('float64')
nb_actions = q_values.shape[0]
exp_values = np.exp(np.clip(q_values/self.tau, self.clip[0], self.clip[1]))
probs = exp_values/np.sum(exp_values)
action = np.random.choice(range(nb_actions), p=probs)
return action
在決策過程中的每一個動作,的linear
激活功能的輸出最後dense
層根據玻爾茲曼勘探策略轉換爲範圍[0,1],並根據玻爾茲曼勘探確定具體行爲。這就是爲什麼softmax
未在輸出層中使用的原因。
你可以閱讀更多關於不同的勘探戰略及其比較這裏: https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-7-action-selection-strategies-for-exploration-d3a97b7cceaf
相關問題
- 1. 爲什麼我的輸出總是0.00?
- 2. 爲什麼Cmake總是選擇GCC?
- 3. 爲什麼RNN總是輸出1
- 4. 爲什麼輸出總是0.0?
- 5. 爲什麼它總是給零輸出?
- 6. 爲什麼輸出總是-1?
- 7. 爲什麼總是輸出警告?
- 8. 多線程:爲什麼輸出?它是確定性的嗎?
- 9. 爲什麼這不激活?
- 10. 爲什麼這10個線程總是輸出相同的線程名稱?
- 11. IBM的UML順序例:爲什麼沒有激活的生命線
- 12. 刺激性選擇()行爲
- 13. 選擇性地激活按鈕
- 14. 我的CNN輸出層應該是什麼樣子?
- 15. 使用PHP,爲什麼選擇的選項不總是工作?
- 16. 爲什麼輸入和輸出波特率總是一樣的?
- 17. 在matlab中識別總線選擇器的輸出
- 18. 爲什麼選擇帶值的輸入會激發鉻中的兩個事件?
- 19. HTML定義什麼選擇選項被激活
- 20. 對象實例爲Prototype的屬性輸出`undefined`。爲什麼?
- 21. 什麼是屬性指令的例子
- 22. 神經網絡迴歸模型輸出層的激活函數
- 23. 爲什麼我總是在mySQL中輸出爲空?
- 24. 爲什麼specflow的例子總是使用UI
- 25. 爲什麼使用線程時我的程序輸出總是不一樣?
- 26. WinForms MdiChildren選擇和激活
- 27. performClick()不激活選擇
- 28. 在Unity3D中激活/取消激活UI組件的最佳做法是什麼?
- 29. 爲什麼在我的例子中線程的行爲如此?
- 30. 爲什麼Tabbar選擇的項目總是0?
謝謝了這個偉大的解釋。它非常有幫助! –