<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本節中,我們使用策略梯度演演算法解決 CartPole
問題。雖然在這個簡單問題中,使用隨機搜尋策略和爬山演演算法就足夠了。但是,我們可以使用這個簡單問題來更專注的學習策略梯度演演算法,並在之後的學習中使用此演演算法解決更加複雜的問題。
策略梯度演演算法通過記錄回合中的所有時間步並基於回合結束時與這些時間步相關聯的獎勵來更新權重訓練智慧體。使智慧體遍歷整個回合然後基於獲得的獎勵更新策略的技術稱為蒙特卡洛策略梯度。
在策略梯度演演算法中,模型權重在每個回合結束時沿梯度方向移動。關於梯度的計算,我們將在下一節中詳細解釋。此外,在每一時間步中,基於當前狀態和權重計算的概率得到策略,並從中取樣一個動作。與隨機搜尋和爬山演演算法(通過採取確定性動作以獲得更高的得分)相反,它不再確定地採取動作。因此,策略從確定性轉變為隨機性。例如,如果向左的動作和向右的動作的概率為 [0.8,0.2]
,則表示有 80%
的概率選擇向左的動作,但這並不意味著一定會選擇向左的動作。
在本節中,我們將學習使用 PyTorch
實現策略梯度演演算法了。 匯入所需的庫,建立 CartPole
環境範例,並計算狀態空間和動作空間的尺寸:
import gym import torch import matplotlib.pyplot as plt env = gym.make('CartPole-v0') n_state = env.observation_space.shape[0] print(n_state) n_action = env.action_space.n print(n_action)
定義 run_episode
函數,在此函數中,根據給定輸入權重的情況下模擬一回合 CartPole
遊戲,並返回獎勵和計算出的梯度。在每個時間步中執行以下操作:
probs
action
softmax
函數的導數 d_softmax
,由於只需要計算與選定動作相關的導數,因此:frac {partial p_i} {partial z_j} = p_i(1-p_j), i=j∂zj∂pi=pi(1−pj),i=j
d_softmax
除以概率 probs
,以得與策略相關的對數導數 d_log
grad
:frac {dy}{dx}=frac{dy}{du}cdotfrac{du}{dx}dxdy=dudy⋅dxdu
grad
def run_episode(env, weight): state = env.reset() grads = [] total_reward = 0 is_done = False while not is_done: state = torch.from_numpy(state).float() # 根據當前狀態和輸入權重計算兩個動作的概率 probs z = torch.matmul(state, weight) probs = torch.nn.Softmax(dim=0)(z) # 根據結果概率取樣一個動作 action action = int(torch.bernoulli(probs[1]).item()) # 以概率作為輸入計算 softmax 函數的導數 d_softmax d_softmax = torch.diag(probs) - probs.view(-1, 1) * probs # 計算與策略相關的對數導數d_log d_log = d_softmax[action] / probs[action] # 計算權重的梯度grad grad = state.view(-1, 1) * d_log grads.append(grad) state, reward, is_done, _ = env.step(action) total_reward += reward if is_done: break return total_reward, grads
回合完成後,返回在此回合中獲得的總獎勵以及在各個時間步中計算的梯度資訊,用於之後更新權重。
接下來,定義要執行的回合數,在每個回合中呼叫 run_episode
函數,並初始化權重以及用於記錄每個回合總獎勵的變數:
n_episode = 1000 weight = torch.rand(n_state, n_action) total_rewards = []
在每個回合結束後,使用計算出的梯度來更新權重。對於回合中的每個時間步,權重都根據學習率、計算出的梯度和智慧體在剩餘時間步中的獲得的總獎勵進行更新。
我們知道在回合終止之前,每一時間步的獎勵都是 1
。因此,我們用於計算每個時間步策略梯度的未來獎勵是剩餘的時間步數。在每個回合之後,我們使用隨機梯度上升方法將梯度乘以未來獎勵來更新權重。這樣,一個回合中經歷的時間步越長,權重的更新幅度就越大,這將增加獲得更大總獎勵的機會。我們設定學習率為 0.001
:
learning_rate = 0.001 for e in range(n_episode): total_reward, gradients = run_episode(env, weight) print('Episode {}: {}'.format(e + 1, total_reward)) for i, gradient in enumerate(gradients): weight += learning_rate * gradient * (total_reward - i) total_rewards.append(total_reward)
然後,我們計算通過策略梯度演演算法獲得的平均總獎勵:
print('Average total reward over {} episode: {}'.format(n_episode, sum(total_rewards)/n_episode))
我們可以繪製每個回合的總獎勵變化情況,如下所示:
plt.plot(total_rewards) plt.xlabel('Episode') plt.ylabel('Reward') plt.show()
在上圖中,我們可以看到獎勵會隨著訓練回合的增加呈現出上升趨勢,然後能夠在最大值處穩定。我們還可以看到,即使在收斂之後,獎勵也會振盪,這是由於策略梯度演演算法是一種隨機策略演演算法。
最後,我們檢視學習到策略在 1000
個新回合中的效能表現,並計算平均獎勵:
n_episode_eval = 1000 total_rewards_eval = [] for e in range(n_episode_eval): total_reward, _ = run_episode(env, weight) print('Episode {}: {}'.format(e+1, total_reward)) total_rewards_eval.append(total_reward) print('Average total reward over {} episode: {}'.format(n_episode_eval, sum(total_rewards_eval)/n_episode_eval)) # Average total reward over 1000 episode: 200
進行測試後,可以看到回合的平均獎勵接近最大值 200
。可以多次測試訓練後的模型,得到的平均獎勵較為穩定。正如我們一開始所說的那樣,對於諸如 CartPole
之類的簡單環境,策略梯度演演算法可能大材小用,但它為我們解決更加複雜的問題奠定了基礎。
到此這篇關於PyTorch策略梯度演演算法詳情的文章就介紹到這了,更多相關PyTorch梯度演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45