使用Actor-Critic的DDPG強化學習演算法控制雙關節機械手臂
在本文中,我們將介紹在 Reacher 環境中訓練智慧代理控制雙關節機械手臂,這是使用 Unity ML-Agents 工具包開發的基於 Unity 的模擬程式。我們的目標是高精準度的到達目標位置,所以這裡我們可以使用專為連續狀態和動作空間設計的最先進的Deep Deterministic Policy Gradient (DDPG) 演算法。
現實世界的應用程式
機械手臂在製造業、生產設施、空間探索和搜救行動中發揮關鍵作用。控制機械手臂的高精度和靈活性是非常重要的。透過採用強化學習技術,可以使這些機器人系統即時學習和調整其行為,從而提高性能和靈活性。強化學習的進步不僅有助於我們對人工智慧的理解,而且有可能徹底改變產業並對社會產生有意義的影響。
而Reacher是一種機械手臂模擬器,常用於控制演算法的開發和測試。它提供了一個虛擬環境,模擬了機械手臂的物理特性和運動規律,使得開發者可以在不需要實際硬體的情況下進行控制演算法的研究和實驗。
Reacher的環境主要由以下幾個部分組成:
- 機械手臂:Reacher模擬了一個雙關節機械手臂,包括一個固定基座和兩個可動關節。開發者可以透過控制機械手臂的兩個關節來改變機械手臂的姿態和位置。
- 目標點:在機械手臂的運動範圍內,Reacher提供了一個目標點,目標點的位置是隨機產生的。開發者的任務是控制機械手臂,使得機械手臂的末端能夠接觸到目標點。
- 物理引擎:Reacher使用物理引擎來模擬機械手臂的物理特性和運動規律。開發者可以透過調整實體引擎的參數來模擬不同的物理環境。
- 視覺介面:Reacher提供了一個視覺化的介面,可以顯示機械手臂和目標點的位置,以及機械手臂的姿態和運動軌跡。開發者可以透過視覺介面來調試和優化控制演算法。
Reacher模擬器是一個非常實用的工具,可以幫助開發者在不需要實際硬體的情況下,快速測試並最佳化控制演算法。
模擬環境
Reacher 使用 Unity ML-Agents 工具包構建,我們的代理可以控制雙關節機械手臂。目標是引導手臂朝向目標位置並盡可能長時間地保持在目標區域內的位置。該環境具有 20 個同步代理,每個代理獨立運行,這有助於在訓練期間有效地收集經驗。
狀態和動作空間
了解狀態和動作空間對於設計有效的強化學習演算法至關重要。在 Reacher 環境中,狀態空間由 33 個連續變數組成,這些變數提供有關機械手臂的信息,例如其位置、旋轉、速度和角速度。動作空間也是連續的,四個變數對應於施加在機械手臂兩個關節上的扭矩。每個動作變數都是介於 -1 和 1 之間的實數。
任務類型和成功標準
Reacher 任務被認為是片段式的,每個片段都包含固定數量的時間步長。代理的目標是在這些步驟中最大化其總獎勵。手臂末端執行器保持在目標位置的每一步都會獲得 0.1 的獎勵。當代理人在連續 100 次操作中的平均得分達到 30 分或以上時,就認為成功。
了解了環境,以下我們將探討 DDPG 演算法、它的實現,以及它如何有效地解決這種環境中的連續控制問題。
連續控制的演算法選擇:DDPG
當涉及像Reacher問題這樣的連續控制任務時,演算法的選擇對於實現最佳效能至關重要。在這個專案中,我們選擇了DDPG演算法,因為這是一種專門設計用於處理連續狀態和動作空間的actor-critic方法。
DDPG演算法透過結合兩個神經網絡,結合了基於策略和基於值的方法的優勢:行動者網絡(Actor network)決定給定當前狀態下的最佳行為,批評家網絡(Critic network)估計狀態-行為值函數(Q-function)。這兩個網絡都有目標網絡,透過在更新過程中提供一個固定的目標來穩定學習過程。
透過使用Critic網路估計q函數,使用Actor網路確定最優行為,DDPG演算法有效地融合了策略梯度方法和DQN的優點。這種混合方法允許代理在連續控制環境中有效地學習。
<code>import random from collections import deque import torch import torch.nn as nn import numpy as np from actor_critic import Actor, Critic class ReplayBuffer: def __init__(self, buffer_size, batch_size): self.memory = deque(maxlen=buffer_size) self.batch_size = batch_size def add(self, state, action, reward, next_state, done): self.memory.append((state, action, reward, next_state, done)) def sample(self): batch = random.sample(self.memory, self.batch_size) states, actions, rewards, next_states, dones = zip(*batch) return states, actions, rewards, next_states, dones def __len__(self): return len(self.memory) class DDPG: def __init__(self, state_dim, action_dim, hidden_dim, buffer_size, batch_size, actor_lr, critic_lr, tau, gamma): self.actor = Actor(state_dim, hidden_dim, action_dim, actor_lr) self.actor_target = Actor(state_dim, hidden_dim, action_dim, actor_lr) self.critic = Critic(state_dim, action_dim, hidden_dim, critic_lr) self.critic_target = Critic(state_dim, action_dim, hidden_dim, critic_lr) self.memory = ReplayBuffer(buffer_size, batch_size) self.batch_size = batch_size self.tau = tau self.gamma = gamma self._update_target_networks(tau=1)# initialize target networks def act(self, state, noise=0.0): state = torch.tensor(state, dtype=torch.float32).unsqueeze(0) action = self.actor(state).detach().numpy()[0] return np.clip(action + noise, -1, 1) def store_transition(self, state, action, reward, next_state, done): self.memory.add(state, action, reward, next_state, done) def learn(self): if len(self.memory) </code>
上面的程式碼也使用了Replay Buffer,這可以提高學習效率和穩定性。 Replay Buffer本質上是一種儲存固定數量的過去經驗或過渡的記憶體資料結構,由狀態、動作、獎勵、下一狀態和完成資訊組成。使用它的主要優點是使代理人能夠打破連續經驗之間的相關性,從而減少有害的時間相關性的影響。
透過從緩衝區中抽取隨機的小批量經驗,代理可以從一組不同的轉換中學習,這有助於穩定和概括學習過程。 Replay Buffer還可以讓代理程式多次重複使用過去的經驗,從而提高資料效率並促進從與環境的有限互動中更有效地學習。
DDPG演算法是一個很好的選擇,因為它能夠有效地處理連續的動作空間,這是這個環境的關鍵方面。此演算法的設計允許有效地利用多個代理程式收集的並行經驗,從而實現更快的學習和更好的收斂。就像上面介紹的Reacher 可以同時運行20個代理,所以我們可以使用這20個代理進行分享經驗,集體學習,提高學習速度。
完成了演算法,以下我們將介紹、超參數選擇和訓練過程。
DDPG演算法在Reacher 環境中工作
為了更好地理解演算法在環境中的有效性,我們需要仔細研究學習過程中涉及的關鍵組件和步驟。
網路架構
DDPG演算法採用兩個神經網絡,Actor 和Critic。兩個網路都包含兩個隱藏層,每個隱藏層包含400個節點。隱藏層使用ReLU (Rectified Linear Unit)來啟動函數,而Actor網路的輸出層則使用tanh激活函數產生範圍為-1到1的動作。 Critic網路的輸出層沒有活化函數,因為它直接估計q函數。
以下是網路的程式碼:
<code>import numpy as np import torch import torch.nn as nn import torch.optim as optim class Actor(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, learning_rate=1e-4): super(Actor, self).__init__() self.fc1 = nn.Linear(input_dim, hidden_dim) self.fc2 = nn.Linear(hidden_dim, hidden_dim) self.fc3 = nn.Linear(hidden_dim, output_dim) self.tanh = nn.Tanh() self.optimizer = optim.Adam(self.parameters(), lr=learning_rate) def forward(self, state): x = torch.relu(self.fc1(state)) x = torch.relu(self.fc2(x)) x = self.tanh(self.fc3(x)) return x class Critic(nn.Module): def __init__(self, state_dim, action_dim, hidden_dim, learning_rate=1e-4): super(Critic, self).__init__() self.fc1 = nn.Linear(state_dim, hidden_dim) self.fc2 = nn.Linear(hidden_dim + action_dim, hidden_dim) self.fc3 = nn.Linear(hidden_dim, 1) self.optimizer = optim.Adam(self.parameters(), lr=learning_rate) def forward(self, state, action): x = torch.relu(self.fc1(state)) x = torch.relu(self.fc2(torch.cat([x, action], dim=1))) x = self.fc3(x) return x</code>
超參數選擇
選擇的超參數對於高效學習至關重要。在這個專案中,我們的Replay Buffer大小為200,000,批次大小為256。演員Actor的學習率為5e-4,Critic的學習率為1e-3,soft update參數(tau)為5e-3,gamma為0.995。最後也加入了動作噪音,初始噪音標度為0.5,噪音衰減率為0.998。
訓練過程
訓練過程涉及兩個網絡之間的持續交互,並且20個平行代理共享相同的網絡,模型會從所有代理收集的經驗中集體學習。這種設定加快了學習過程,提高了效率。
<code>from collections import deque import numpy as np import torch from ddpg import DDPG def train_ddpg(env, agent, episodes, max_steps, num_agents, noise_scale=0.1, noise_decay=0.99): scores_window = deque(maxlen=100) scores = [] for episode in range(1, episodes + 1): env_info = env.reset(train_mode=True)[brain_name] states = env_info.vector_observations agent_scores = np.zeros(num_agents) for step in range(max_steps): actions = agent.act(states, noise_scale) env_info = env.step(actions)[brain_name] next_states = env_info.vector_observations rewards = env_info.rewards dones = env_info.local_done for i in range(num_agents): agent.store_transition(states[i], actions[i], rewards[i], next_states[i], dones[i]) agent.learn() states = next_states agent_scores += rewards noise_scale *= noise_decay if np.any(dones): break avg_score = np.mean(agent_scores) scores_window.append(avg_score) scores.append(avg_score) if episode % 10 == 0: print(f"Episode: {episode}, Score: {avg_score:.2f}, Avg Score: {np.mean(scores_window):.2f}") # Saving trained Networks torch.save(agent.actor.state_dict(), "actor_final.pth") torch.save(agent.critic.state_dict(), "critic_final.pth") return scores if __name__ == "__main__": env = UnityEnvironment(file_name='Reacher_20.app') brain_name = env.brain_names[0] brain = env.brains[brain_name] state_dim = 33 action_dim = brain.vector_action_space_size num_agents = 20 # Hyperparameter suggestions hidden_dim = 400 batch_size = 256 actor_lr = 5e-4 critic_lr = 1e-3 tau = 5e-3 gamma = 0.995 noise_scale = 0.5 noise_decay = 0.998 agent = DDPG(state_dim, action_dim, hidden_dim=hidden_dim, buffer_size=200000, batch_size=batch_size,actor_lr=actor_lr, critic_lr=critic_lr, tau=tau, gamma=gamma) episodes = 200 max_steps = 1000 scores = train_ddpg(env, agent, episodes, max_steps, num_agents, noise_scale=0.2, noise_decay=0.995)</code>
訓練過程中的關鍵步驟如下所示:
初始化網路:代理人使用隨機權重初始化共享的 Actor 和 Critic 網路及其各自的目標網路。目標網路在更新期間提供穩定的學習目標。
- 與環境互動:每個代理程式使用共享的 Actor 網絡,透過根據其當前狀態選擇動作來與環境互動。為了鼓勵探索,在訓練的初始階段也將噪音項添加到動作中。採取行動後,每個代理人都會觀察由此產生的獎勵和下一個狀態。
- 儲存經驗:每個代理程式將觀察到的經驗(狀態、動作、獎勵、next_state)儲存在共用重播緩衝區中。此緩衝區包含固定數量的近期經驗,這樣每個代理程式能夠從所有代理收集的各種轉換中學習。
- 從經驗中學習:定期從共享重播緩衝區中抽取一批經驗。透過最小化預測 Q 值和目標 Q 值之間的均方誤差,使用取樣經驗來更新共享 Critic 網路。
- 更新 Actor 網路:共享 Actor 網路使用策略梯度進行更新,策略梯度是透過採用共享 Critic 網路關於所選動作的輸出梯度來計算的。共享 Actor 網路學習選擇最大化預期 Q 值的動作。
- 更新目標網路:共享的 Actor 和 Critic 目標網路使用當前和目標網路權重的混合進行軟更新。這確保了穩定的學習過程。
結果展示
我們的agent使用DDPG演算法成功地學會了在Racher環境下控制雙關節機械手臂。在整個訓練過程中,我們根據所有20個代理的平均得分來監控代理的表現。隨著智能體探索環境和收集經驗,其預測獎勵最大化最佳行為的能力顯著提高。
可以看到代理在任務中表現出了顯著的熟練程度,平均得分超過了解決環境所需的閾值(30 ),雖然代理的表現在整個訓練過程中有所不同,但整體趨勢呈上升趨勢,顯示學習過程是成功的。
下圖顯示了20個代理程式的平均分數:
可以看到我們實作的DDPG演算法,有效地解決了Racher環境的問題。代理能夠調整自己的行為,並在任務中達到預期的表現。
下一步工作
本項目中的超參數是根據文獻和實證測試的建議組合選擇的。還可以透過系統超參數調優的進一步最佳化可能會帶來更好的效能。
多agent並行訓練:在這個專案中,我們使用20個agent同時收集經驗。使用更多代理程式對整個學習過程的影響可能會導致更快的收斂或提高表現。
批歸一化:為了進一步增強學習過程,在神經網路架構中實現批歸一化是值得探索的。透過在訓練過程中對每一層的輸入特徵進行歸一化,批歸一化可以幫助減少內部協變量移位,加速學習,並潛在地提高泛化。將批次歸一化加入Actor和Critic網路可能會導致更穩定和有效的訓練,但這個需要進一步測試。
以上是使用Actor-Critic的DDPG強化學習演算法控制雙關節機械手臂的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本站6月27日訊息,剪映是由位元組跳動旗下臉萌科技開發的一款影片剪輯軟體,依託於抖音平台且基本面向該平台用戶製作短影片內容,並相容於iOS、安卓、Windows 、MacOS等作業系統。剪映官方宣布會員體系升級,推出全新SVIP,包含多種AI黑科技,例如智慧翻譯、智慧劃重點、智慧包裝、數位人合成等。價格方面,剪映SVIP月費79元,年費599元(本站註:折合每月49.9元),連續包月則為59元每月,連續包年為499元每年(折合每月41.6元) 。此外,剪映官方也表示,為提升用戶體驗,向已訂閱了原版VIP

透過將檢索增強生成和語意記憶納入AI編碼助手,提升開發人員的生產力、效率和準確性。譯自EnhancingAICodingAssistantswithContextUsingRAGandSEM-RAG,作者JanakiramMSV。雖然基本AI程式設計助理自然有幫助,但由於依賴對軟體語言和編寫軟體最常見模式的整體理解,因此常常無法提供最相關和正確的程式碼建議。這些編碼助手產生的代碼適合解決他們負責解決的問題,但通常不符合各個團隊的編碼標準、慣例和風格。這通常會導致需要修改或完善其建議,以便將程式碼接受到應

大型語言模型(LLM)是在龐大的文字資料庫上訓練的,在那裡它們獲得了大量的實際知識。這些知識嵌入到它們的參數中,然後可以在需要時使用。這些模型的知識在訓練結束時被「具體化」。在預訓練結束時,模型實際上停止學習。對模型進行對齊或進行指令調優,讓模型學習如何充分利用這些知識,以及如何更自然地回應使用者的問題。但是有時模型知識是不夠的,儘管模型可以透過RAG存取外部內容,但透過微調使用模型適應新的領域被認為是有益的。這種微調是使用人工標註者或其他llm創建的輸入進行的,模型會遇到額外的實際知識並將其整合

想了解更多AIGC的內容,請造訪:51CTOAI.x社群https://www.51cto.com/aigc/譯者|晶顏審校|重樓不同於網路上隨處可見的傳統問題庫,這些問題需要跳脫常規思維。大語言模型(LLM)在數據科學、生成式人工智慧(GenAI)和人工智慧領域越來越重要。這些複雜的演算法提升了人類的技能,並在許多產業中推動了效率和創新性的提升,成為企業保持競爭力的關鍵。 LLM的應用範圍非常廣泛,它可以用於自然語言處理、文字生成、語音辨識和推薦系統等領域。透過學習大量的數據,LLM能夠產生文本

機器學習是人工智慧的重要分支,它賦予電腦從數據中學習的能力,並能夠在無需明確編程的情況下改進自身能力。機器學習在各個領域都有廣泛的應用,從影像辨識和自然語言處理到推薦系統和詐欺偵測,它正在改變我們的生活方式。機器學習領域存在著多種不同的方法和理論,其中最具影響力的五種方法被稱為「機器學習五大派」。這五大派分別為符號派、聯結派、進化派、貝葉斯派和類推學派。 1.符號學派符號學(Symbolism),又稱符號主義,強調利用符號進行邏輯推理和表達知識。該學派認為學習是一種逆向演繹的過程,透過現有的

編輯|ScienceAI問答(QA)資料集在推動自然語言處理(NLP)研究中發揮著至關重要的作用。高品質QA資料集不僅可以用於微調模型,也可以有效評估大語言模型(LLM)的能力,尤其是針對科學知識的理解和推理能力。儘管目前已有許多科學QA數據集,涵蓋了醫學、化學、生物等領域,但這些數據集仍有一些不足之處。其一,資料形式較為單一,大多數為多項選擇題(multiple-choicequestions),它們易於進行評估,但限制了模型的答案選擇範圍,無法充分測試模型的科學問題解答能力。相比之下,開放式問答

編輯|KX在藥物研發領域,準確有效地預測蛋白質與配體的結合親和力對於藥物篩選和優化至關重要。然而,目前的研究並沒有考慮到分子表面訊息在蛋白質-配體相互作用中的重要作用。基於此,來自廈門大學的研究人員提出了一種新穎的多模態特徵提取(MFE)框架,該框架首次結合了蛋白質表面、3D結構和序列的信息,並使用交叉注意機制進行不同模態之間的特徵對齊。實驗結果表明,該方法在預測蛋白質-配體結合親和力方面取得了最先進的性能。此外,消融研究證明了該框架內蛋白質表面資訊和多模態特徵對齊的有效性和必要性。相關研究以「S

本站8月1日消息,SK海力士今天(8月1日)發布博文,宣布將出席8月6日至8日,在美國加州聖克拉拉舉行的全球半導體記憶體峰會FMS2024,展示諸多新一代產品。未來記憶體和儲存高峰會(FutureMemoryandStorage)簡介前身是主要面向NAND供應商的快閃記憶體高峰會(FlashMemorySummit),在人工智慧技術日益受到關注的背景下,今年重新命名為未來記憶體和儲存高峰會(FutureMemoryandStorage),以邀請DRAM和儲存供應商等更多參與者。新產品SK海力士去年在
