2017-08-03 53 views
0

我是鋼筋學習的完全新手。我對keras-rl代理的輸出層激活函數的選擇有一個疑問。在由keras-rl(https://github.com/matthiasplappert/keras-rl/tree/master/examples)提供的所有示例中,在輸出層中選擇線性激活函數。爲什麼是這樣?如果我使用不同的激活功能,我們會期望什麼效果?例如,如果我使用離散操作空間爲5的OpenAI環境,我還應該考慮在代理的輸出層中使用softmax嗎? 非常感謝。爲什麼keras-rl的例子總是選擇輸出層中的線性激活?

回答

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

+0

謝謝了這個偉大的解釋。它非常有幫助! –