在強(qiáng)化學(xué)習(xí)中,epsilon-greedy可以說是非?;A(chǔ)的一個(gè)探索利用算法。應(yīng)用十分廣泛。嘗試進(jìn)行平衡的探索-利用方法。
在Epsilon-Greedy策略中,一個(gè)agent會(huì)以概率epsilon隨機(jī)選擇行動(dòng),也就是進(jìn)行探索。此外以1-epsilon的概率選擇當(dāng)前估計(jì)的最佳行動(dòng),也就是利用 。
具體來說,如果epsilon=0,則代理總是選擇當(dāng)前估計(jì)的最佳行動(dòng);如果epsilon=1,則代理總是隨機(jī)選擇行動(dòng);在介于0和1之間的情況下,代理在每個(gè)時(shí)間步以概率epsilon隨機(jī)選擇行動(dòng),以概率1-epsilon選擇當(dāng)前估計(jì)的最佳行動(dòng)。
Epsilon-Greedy的目的是在探索(嘗試新的行動(dòng))和利用(選擇當(dāng)前估計(jì)的最佳行動(dòng))之間達(dá)到平衡。當(dāng)代理剛開始學(xué)習(xí)時(shí),它需要探索環(huán)境以找到最佳策略,這時(shí)epsilon應(yīng)該設(shè)置為較高的值,以使代理更多地嘗試不同的行動(dòng)。隨著代理的學(xué)習(xí),它需要利用已知的知識(shí)來最大化獎(jiǎng)勵(lì),此時(shí)epsilon應(yīng)該設(shè)置為較低的值,以使代理更多地選擇當(dāng)前估計(jì)的最佳行動(dòng)。
總的來說,Epsilon-Greedy是一種簡單而有效的行動(dòng)選擇策略,可以平衡探索和利用之間的權(quán)衡,并在強(qiáng)化學(xué)習(xí)任務(wù)中表現(xiàn)良好。
在此,我們以強(qiáng)化學(xué)習(xí)中最基礎(chǔ)最開端的多臂老虎機(jī)來做一個(gè)例子,代碼如下:
import numpy as np
import matplotlib.pyplot as plt
class MultiArmedBandit:
def __init__(self, num_arms, mu=0, sigma=1):
self.num_arms = num_arms
self.mu = mu
self.sigma = sigma
self.action_values = np.random.normal(self.mu, self.sigma, self.num_arms)
def get_reward(self, action):
reward = np.random.normal(self.action_values[action], self.sigma)
return reward
class EpsilonGreedy:
def __init__(self, num_actions, epsilon=0.1):
self.num_actions = num_actions
self.epsilon = epsilon
self.action_values = np.zeros(num_actions)
self.action_counts = np.zeros(num_actions)
def select_action(self):
if np.random.uniform() < self.epsilon:
# 隨機(jī)選擇行動(dòng)
action = np.random.randint(self.num_actions)
else:
# 選擇具有最高價(jià)值的行動(dòng)
action = np.argmax(self.action_values)
self.action_counts[action] += 1
return action
def update_action_value(self, action, reward):
self.action_values[action] += (reward - self.action_values[action]) / self.action_counts[action]
# 模擬多臂老虎機(jī)
num_arms = 10
num_steps = 1000
num_trials = 1000
eps = 0.1
avg_rewards = np.zeros(num_steps)
for i in range(num_trials):
bandit = MultiArmedBandit(num_arms)
agent = EpsilonGreedy(num_arms, epsilon=eps)
rewards = np.zeros(num_steps)
for t in range(num_steps):
action = agent.select_action()
reward = bandit.get_reward(action)
agent.update_action_value(action, reward)
rewards[t] = reward
avg_rewards += (rewards - avg_rewards) / (i+1)
# 繪制結(jié)果
plt.plot(avg_rewards)
plt.xlabel('Steps')
plt.ylabel('Average Reward')
plt.title('Epsilon-Greedy Bandit')
plt.show()
在這個(gè)模擬中,我們首先定義了一個(gè)MultiArmedBandit類來表示多臂老虎機(jī)。在初始化函數(shù)中,我們設(shè)置了臂數(shù)和每個(gè)臂的均值和標(biāo)準(zhǔn)差,通過隨機(jī)生成的方式給每個(gè)臂賦予不同的獎(jiǎng)勵(lì)期望。
然后我們定義了一個(gè)EpsilonGreedy類,其中包含了選擇行動(dòng)和更新行動(dòng)價(jià)值的方法。在初始化函數(shù)中,我們設(shè)置了行動(dòng)數(shù)和epsilon值,并將所有行動(dòng)的估計(jì)價(jià)值和選擇次數(shù)初始化為0。
在模擬中,我們通過循環(huán)多次試驗(yàn),每次試驗(yàn)隨機(jī)生成一個(gè)新的多臂老虎機(jī),并使用Epsilon-Greedy策略選擇行動(dòng),計(jì)算每個(gè)步驟的平均獎(jiǎng)勵(lì)。最后,我們計(jì)算所有試驗(yàn)的平均獎(jiǎng)勵(lì),并繪制出結(jié)果圖。
在實(shí)際使用中,需要根據(jù)任務(wù)和代理的特定要求,對epsilon的值進(jìn)行調(diào)整,以達(dá)到最佳的性能和
最佳策略。較小的epsilon值會(huì)導(dǎo)致代理更多地選擇已知的最佳行動(dòng),但可能會(huì)錯(cuò)過發(fā)現(xiàn)更優(yōu)行動(dòng)的機(jī)會(huì);較大的epsilon值會(huì)導(dǎo)致代理更多地嘗試未知的行動(dòng),但可能會(huì)導(dǎo)致代理的行動(dòng)選擇不夠理智。
在上面的代碼示例中,我們使用了一個(gè)較小的epsilon值(0.1),這意味著代理有10%的概率隨機(jī)選擇行動(dòng),而有90%的概率選擇當(dāng)前估計(jì)價(jià)值最高的行動(dòng)。在多次試驗(yàn)中,我們觀察到代理逐漸學(xué)習(xí)到哪些行動(dòng)是最有利的,并開始偏向于選擇這些行動(dòng)。結(jié)果顯示出代理在學(xué)習(xí)期間的初始探索階段和穩(wěn)定的利用階段。
運(yùn)行后我們得到如下結(jié)果:
對此我們可以看到,伴隨著試驗(yàn)次數(shù)的增多,我們獲得的最大回報(bào)也會(huì)增多。其實(shí)意味著我們對多臂老虎機(jī)中的概率分布獲得了一個(gè)比較好的期望,于是我們每次拉下那個(gè)期望比較高的老虎機(jī)手臂,于是我們就可以獲得更高的一個(gè)回報(bào)。文章來源:http://www.zghlxwxcb.cn/news/detail-627474.html
在開始階段,我們不知道每個(gè)老虎機(jī)的回報(bào)期望,因此,我們更多的去進(jìn)行探索,通過探索的次數(shù)越來越多,我們對老虎機(jī)的回報(bào)預(yù)估的越來越準(zhǔn),于是我們更多的選擇期望高的老虎機(jī)進(jìn)行操作,由此獲得的回報(bào)越來越高。?文章來源地址http://www.zghlxwxcb.cn/news/detail-627474.html
到了這里,關(guān)于強(qiáng)化學(xué)習(xí)基礎(chǔ):Epsilon-greedy 算法,多臂老虎機(jī)問題的理解,說點(diǎn)人話的強(qiáng)化學(xué)習(xí),一定能看懂的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!