本教程探讨 Dyna-Q,这是一种先进的强化学习算法,它通过将真实经验与模拟规划相结合来扩展 Q-Learning。它通过将直接交互与基于战略模型的模拟相结合,有效地加速学习,特别是在数据稀缺的环境中。
Q-Learning 简介
Q-Learning 是强化学习中一种重要的无模型算法,专注于学习特定状态下动作的值或“Q 值”。这种方法在不可预测的环境中表现出色,因为它不需要周围环境的预定义模型。它有效地适应随机转变和不同的奖励,使其在结果不确定的情况下具有通用性。这种灵活性使得 Q-Learning 在需要自适应决策而无需事先了解环境动态的情况下成为强大的工具。
学习过程:
Q 学习的工作原理是更新每个状态下每个动作的 Q 值表。它使用贝尔曼方程根据观察到的奖励及其对未来奖励的估计迭代更新这些值。政策(选择行动的策略)源自这些 Q 值。
Q-Value: 表示在给定状态下采取某种行动可以获得的预期未来奖励。
更新规则:Q值更新如下
Q (状态,动作) ← Q (状态,动作) + α (奖励+ γ max Q (下一个状态, a ) − Q (状态,动作))
学习率α表示新信息的重要性,折扣因子γ表示未来奖励的重要性。
提供的代码用作 Q-Learner 的训练函数。它利用贝尔曼方程来确定状态之间最有效的转换。
def train_Q(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 self.s = s_prime self.action = action return action
探索与利用
Q 学习 的一个关键方面是平衡探索(尝试新的行动来发现奖励)和利用(使用已知信息来最大化奖励)。算法经常使用 ε-贪婪等策略来维持这种平衡。
首先设置随机操作的速率以平衡探索和利用。随着 Q 表积累更多数据,实施衰减率以逐渐降低随机性。这种方法保证,随着时间的推移,随着更多证据的积累,算法越来越多地转向利用。
if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit:选择导致最佳奖励状态的操作 else: action = rand.randint(0,self.num_actions - 1) #Explore:随机选择一个操作。 # 随着 Q 表获得更多证据,使用衰减率来降低随机性(探索) self.random_action_rate = self.random_action_rate * self.random_action_decay_rate
Dyna-Q 简介
Dyna-Q 是传统 Q-Learning 算法的创新扩展,处于将真实经验与模拟规划相融合的前沿。这种方法通过整合实际交互和模拟体验来显着增强学习过程,使代理能够在复杂环境中快速适应并做出明智的决策。通过利用环境反馈的直接学习和通过模拟获得的见解,Dyna-Q 提供了全面而有效的策略,用于应对现实世界数据稀缺或获取成本昂贵的挑战。
Dyna-Q 的组件
Q-Learning:从真实经验中学习。
模型学习:学习环境模型。
规划:使用模型生成模拟体验。
模型学习
该模型会跟踪转换和奖励。对于每个状态-动作对 ( s , a ),模型存储下一个状态s ' 和奖励r。
当代理观察到转换(s、a、r、s ′)时,它会更新模型。
模拟体验规划
在每个步骤中,代理根据真实经验更新其 Q 值后,还会根据模拟经验更新 Q 值。
这些经验是使用学习模型生成的:对于选定的状态动作对(s,a),它预测下一个状态和奖励,并且更新 Q 值,就好像已经经历过这种转换一样。
Dyna-Q 算法
初始化所有状态-动作对的Q 值 Q ( s , a ) 和模型 (s, a)。
循环 (每集):
使用从 Q 导出的状态s选择动作a (例如,ϵ -greedy )
采取行动a,观察奖励r和下一个状态s ′
直接学习:使用观察到的转变 ( s , a , r , s ′)更新 Q 值
模型学习:通过转换更新模型 ( s , a , r , s ′)
规划:重复n次:
随机选择之前经历过的状态-动作对 ( s , a )。
使用模型生成预测的下一个状态s ′ 和奖励r
使用模拟转换( s , a , r , s ′)更新 Q 值
s ← s ′。
初始化状态s。
循环 (对于剧集的每个步骤):
结束循环 此功能将 Dyna-Q 规划阶段合并到前面提到的 Q-Learner 中,从而能够指定在每个情节中运行的所需模拟数量,其中操作是随机选择的。此功能增强了 Q-Learner 的整体功能和多功能性。文章来源:https://www.toymoban.com/diary/system/606.html
def train_DynaQ(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 #Dyna-Q 规划 - 开始 if self.dyna_planning_steps > 0: # 要执行的模拟数量 idx_array = np.random.randint(0, self.num_experiences, self.dyna) for exp in range(0, self.dyna): # 选择随机经验并更新 QTable idx = idx_array[exp] self.QTable[self.experiences[idx][0],self.experiences[idx][1]] = (1-self.alpha)*self.QTable[self.experiences[idx][0], self.experiences[idx][1]] + \ self.alpha * (self.experiences[idx][3] + self.gamma * (self.QTable[self.experiences[idx][2], np.argmax(self.QTable[self.experiences[idx][2],:])])) #Dyna-Q 规划 - 结束 if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit:选择导致最佳奖励状态的操作 else: action = rand.randint(0,self.num_actions - 1) #Explore:随机选择一个操作。 # 随着 Q 表获得更多证据,使用衰减率来降低随机性(探索) self.random_action_rate = self.random_action_rate * self.random_action_decay_rate self.s = s_prime self.action = action return action
结论
Dyna Q 代表了我们追求设计能够在复杂和不确定的环境中学习和适应的代理的进步。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以针对各种实际问题设计出弹性解决方案。本教程的目的不是介绍概念和算法,而是在这个迷人的研究领域激发创造性应用和未来进展的创造力。文章来源地址https://www.toymoban.com/diary/system/606.html
到此这篇关于使用 Dyna-Q 扩展 Q-Learning 以增强决策能力的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!