如何开发wap网站,网站建设鸿儒,360度街景实景地图下载,做家居商城网站深度 Q 网络#xff1a;用深度神经网络#xff0c;来近似Q函数 DQN#xff08;深度 Q 网络#xff09; 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN#xff1a;双 DQN#xff0c;实现无偏估计Dueling DQN#xff1a;提高… 深度 Q 网络用深度神经网络来近似Q函数 DQN深度 Q 网络 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN双 DQN实现无偏估计Dueling DQN提高决策的准确性和效率Noisy DQN增强模型的探索能力优先级经验回放 OpenAI Q* 超越人类的自主系统 DQN深度 Q 网络 深度神经网络 Q-Learning
DQN 算法全称 深度Q网络以 Q-Learning 算法为基础融合了神经网络。
因为传统Q学习不适合处理大规模数据连续状态空间的问题就可用深度神经网络来近似Q函数。
Q-Learning
Q 值表示做出一个行为后能够获得的累计奖励越大越应该选择。
Q 值的组成是当前状态s下所有行为 a 的 Q 值。
那优化目标就是每个状态(s)下都能做出 Q 值最大的行为(a)从而实现机器与环境的最优交互。
我们会使用表格用于存储和更新Q值是因为这种方法提供了一种直观、清晰的方式来表示和跟踪每个状态和行为组合的预期回报。 当状态和行为的数量非常庞大时用表格储存所有数据会占用非常多的资源。
一般就会想到状态压缩只保存与决策相关的几个最优可能来源。
但是在强化学习中每个状态-动作对的历史信息都可能对学习最优策略至关重要所以不能用状态压缩。
问题就是输入状态s、行为a怎么计算出 Q 值
使用神经网络可以直接学习状态、行为、Q值的关系输入状态就能得到每个行为的Q值。
神经网络在这的功能从存储 3 个值的排列组合到只存储状态。
模型结构 现在的状态St: 想象你在一个房间里这就是现在的状态St你有几个门可以选择出去这些门是你可以采取的动作A。 Q网络: Q网络就像一个超级计算机它能告诉你选择每扇门的好处是什么这就是Q(St, A)每个动作的预期奖励。 选择动作和获得奖励R: 根据Q网络的建议你选择了一扇门并通过它这就是你的动作A然后你可能会找到一些糖果这是你的奖励R。 下一个状态St1: 通过门之后你来到了另一个房间这就是下一个状态St1。 target Q网络: 这里有另一个类似的超级计算机它叫做 target Q 网络。它会计算在新房间里选择下一扇门的好处帮助你决定下一次应该选择哪扇门。 更新Q网络loss: 你告诉第一个超级计算机你找到的糖果和第二个超级计算机的建议。第一个超级计算机会用这些信息来更新自己变得更聪明以便下次能给出更好的建议。
在这个过程中Q网络不断学习和更新目的是帮助你在这个房间的世界里找到更多的糖果。
每次你选择了一个动作并看到结果Q网络都会变得更好帮助你做出更好的选择。
损失函数
损失函数采用时序差分来比较两个连续时间步的 Q 值来计算误差并将这个误差用于更新神经网络的权重。
DQN的损失函数用来衡量我们的预测比如猜测和实际发生的事情之间的差距。
在DQN中损失函数特别关注的是预测的奖励我们认为采取某个动作能得到多少好处和实际得到的奖励实际采取动作后得到的好处之间的差别。 上图有 2 个 Q 网络目标 Q 网络 是 S t 1 S_{t1} St1。
损失函数更新Q值规则 Q ( s t , a t ) Q ( s t , a t ) α [ r t 1 γ max Q ( s t 1 , a t 1 ) ⏟ Target Value − Q ( s t , a t ) ] Q(s_t,a_t)Q(s_t,a_t)\alpha[\underbrace{r_{t1}\gamma\max Q(s_{t1},a_{t1})}_{\text{Target Value}}-Q(s_t,a_t)] Q(st,at)Q(st,at)α[Target Value rt1γmaxQ(st1,at1)−Q(st,at)]
使用均方差误差做损失函数 ω ∗ arg min ω 1 2 N ∑ i 1 N [ Q ω ( s t i , a t i ) − ( r t 1 i γ max a t 1 Q ω ( s t 1 i , a t 1 ) ) ] 2 \omega^*\arg\min_\omega\frac{1}{2N}\sum_{i1}^N\left[Q_\omega\left(s_t^i,a_t^i\right)-\left(r_{t1}^i\gamma\max_{a_{t1}}Q_\omega\left(s_{t1}^i,a_{t1}\right)\right)\right]^2 ω∗argminω2N1∑i1N[Qω(sti,ati)−(rt1iγmaxat1Qω(st1i,at1))]2 Q w Q_{w} Qw 网络每步都更新后面的 目标 Q 网络 隔几步才更新。
隔几步才更新目标Q网络是为了让训练更加稳定和有效就像你在学习时每隔一段时间才询问朋友一样。
如果每步都听从朋友的建议就会过于保守完全用他的经验使用已知的最佳动作了错过更好的动作选择。
经验回放
经验回放就像是给机器一个记事本它可以在每次玩游戏后记下自己的经验特别是已知的最佳动作。
这个记事本包含了机器在不同游戏情况下的经验比如在某个特定情况下采取了哪个动作以及随后获得了多少奖励。
在执行任务的同时将一部分数据通常是状态、动作、奖励和下一个状态等信息存储到经验池中以供后续的训练使用。
在训练过程中不仅仅使用当前的经验来更新模型还要积累更多的经验以便在训练中使用更多的数据。这可以有几个好处 稳定性通过将多个时间步的经验存储到经验池中可以减少训练数据的相关性使训练更加稳定。这有助于防止模型陷入局部最优解或出现训练不稳定的情况。 重复利用经验存储的经验可以多次用于训练这有助于更有效地学习和提高样本的利用率。有时候某些经验可能在一开始并不显著但随着训练的积累它们可能变得更有价值。
探索策略
但有一个问题是选择已知的好方法已知的最佳动作还是尝试新方法尝试新动作可能有更好的方法
探索策略就是决定如何平衡这两种选择的方法。
如果一直按同一个按钮它可能会错过更好的方法但如果总是尝试新方法它可能会很难取得进展。
在 ε-greedy 探索策略下智能体以ε的概率选择随机动作探索以1-ε的概率选择当前认为最优的动作利用。
在一部分时间步中会尝试新的动作以发现更多信息而在另一部分时间步中会选择已知的最佳动作以最大化奖励。
初始的时候多探索ε要大经验多了后多利用ε减少
流程关联 Q-Learning时间步0 开始时我们有一个深度神经网络DNN该网络的目标是学习在不同状态下采取不同动作的Q值以获得最大的累积奖励。我们初始化Q值网络并且可以随机选择一个探索策略来探索环境。 探索策略 在每个时间步骤智能体使用探索策略来选择一个动作如ε-greedy策略这使得智能体有机会尝试新的动作。初始的时候多探索ε要大经验多了后多利用ε减少 环境交互 智能体采取选定的动作并与环境互动从环境中获得奖励r_t1和新的状态s_t1。 经验回放 智能体将这次互动的信息状态s_t、动作a_t、奖励r_t1和下一个状态s_t1存储到经验池中。 损失函数计算 定期或随机地我们从经验池中抽取一些数据这些数据用于计算损失函数。损失函数的目标是调整深度神经网络DNN的参数 ω \omega ω以使 Q 值网络的预测更接近真实的 Q 值。损失函数通常是均方差误差MSE用来比较 Q 值网络的预测 Q 值和目标 Q 值根据Q-Learning更新公式计算得出的值之间的差异。 DNN参数更新 使用损失函数的梯度我们更新深度神经网络DNN的参数 ω \omega ω以减小预测误差。 Q值网络更新 周期性地或者在一定步骤之后我们将Q值网络的权重更新为DNN的权重以确保Q值网络也受到最新的训练影响。 探索策略更新 随着训练的进行我们可能会逐渐降低探索策略中的探索比例ε以便智能体更多地依赖学到的Q值来做出决策而不是随机探索。 重复 重复执行上述步骤不断与环境互动、收集经验、更新网络参数直到智能体能够获得满意的策略并在任务中表现出色。
DQN 优化
DDQN双 DQN实现无偏估计 因为 DQN 的 Q 值更新是以下一个状态为参考我们是神经网络近似估算给的都是最大值层层传递会导致偏大。 真实值和估计值True value and an estimate: 紫色虚线表示真实值也就是在游戏中某个动作实际的分数。绿色实线表示我们的网络估计的值。在 DDQN 中我们尝试让这条绿线尽可能接近紫线。 所有估计值和最大值All estimates and max: 这里有三条绿色实线每一条代表一个独立的网络在不同时间的估计。黑色虚线代表这些估计中的最大值DDQN 通过分开选择动作和评估动作的价值来避免过高估计这个最大值。 偏差作为状态函数Bias as function of state: 橙色线代表使用传统方法一个网络同时选择动作和评估价值时的偏差。蓝色线代表DDQN分开网络的偏差。我们可以看到蓝色线通常更接近零线这意味着 DDQN 的估计更准确。 平均错误Average error: 这个图展示了平均而言传统方法和DDQN方法的误差大小。DDQN蓝色线的误差通常比传统方法橙色线的小这表明 DDQN 提供了更准确的Q值估计。
在 DDQN 中我们用两个网络分别来选择动作和评估动作的价值这样做可以减少估计中的偏差和误差而不是过分依赖单一的估计。 DDQN 只改变了目标值的计算方法其他地方与DQN算法完全一致。
让Q网络、Q 目标网络俩个网络相互监督。
就像是有两个智能助手
一个助手目标网络负责告诉你下一步最好的行动方向另一个助手估算网络则用来判断这个行动有多好。
这两个助手轮流工作确保你既知道往哪走又不会对前方的好处期望过高。
损失函数的变化 Q ( s t , a t ) ⟷ r t 1 γ Q ′ ( s t 1 , a r g m a x a Q ( s t 1 , a ) ) Q(s_t,a_t)\longleftrightarrow r_{t1}\gamma Q\left(s_{t1},\mathop{\mathrm{argmax}}_aQ\left(s_{t1},a\right)\right) Q(st,at)⟷rt1γQ′(st1,argmaxaQ(st1,a))
具体来说 估算网络Evaluation Network 这个网络在每一步学习中都会更新。它基于最新的游戏数据如玩家的动作和得到的奖励来预测Q值即每一个可能动作的期望奖励。 目标网络Target Network 这个网络与估算网络结构相同但它不会在每一步都更新。目标网络的参数会定期地、较慢地更新例如每N步学习之后目标网络会复制估算网络的参数。这样可以提供一个相对稳定的目标值以供估算网络学习。 相互监督的实现 当智能体从环境中收集数据并需要更新估算网络的参数时它会计算两部分信息 使用估算网络选出最好的动作即在当前状态下预测未来奖励最大的动作。使用目标网络评估这个最好动作的Q值即这个最好动作的未来奖励。 结合使用两个网络的优势 由于估算网络趋向于过估计Q值通过使用目标网络的稳定性来评估这个最好动作的Q值算法可以减少估算网络可能带来的过度乐观的预测。在实际更新估算网络的参数时会用目标网络的这个评估值作为学习目标而不是直接用估算网络的输出。
通过这种方式两个网络相互监督一个提供动作选择的建议另一个提供稳定的目标值共同工作以实现更准确的学习和决策过程。
Dueling DQN提高决策的准确性和效率 Dueling DQN 的核心思想是将 Q 值的估计分解为两个独立的部分状态值Value和优势值Advantage。 状态值V(s)这是在给定状态下不考虑任何具体动作的情况下智能体预计能获得的总回报。简单来说它反映了仅凭当前状态就能判断的智能体处境的好坏。 优势值A(s, a)这个值衡量了相对于其他可能动作选择某个特定动作可能带来的额外回报。如果一个动作比其他动作好得多它的优势值就会更高。
然后这两个值合并起来形成了对每个动作的 Q 值的估计 Q ( s , a ) V ( s ) A ( s , a ) Q(s,a)V(s)A(s,a) Q(s,a)V(s)A(s,a)
但这里有一个问题如果我们简单地加起来可能会有多个状态和动作对的组合导致相同的 Q 值这样就不能正确地学习它们的区别了。
为了解决这个问题Dueling DQN 使用了一个技巧来稳定学习过程它会从每个动作的优势值中减去所有动作优势值的平均值 Q ( s , a ) V ( s ) ( A ( s , a ) − mean a A ( s , a ) ) Q(s,a)V(s)(A(s,a)-\text{mean}_aA(s,a)) Q(s,a)V(s)(A(s,a)−meanaA(s,a))
强制让没有优势的动作也就是平均动作的优势值为零。
这样的结构使得网络能够更加明确地区分出在决策中状态价值和动作选择的影响。
一部分帮你看到当前位置的总体价值比如这是不是一个好地方另一部分让你看到每个动作比如跳跃、下蹲或向右移动的特别价值。
这样你就能更清楚地知道是继续在当前位置探索好还是采取某个特别动作好。
DDQN改善了训练过程的稳定性并减少了估值偏差而Dueling-DQN通过独立评估状态的总体价值和每个动作的相对优势提高决策的准确性和效率。
Noisy DQN增强模型的探索能力
在传统的DQN中探索通常是通过 ε-greedy 策略实现的即智能体有一定概率ε随机选择动作探索而不是总是选择它认为最好的动作利用。
随着训练的进行这个概率逐渐降低智能体越来越多地选择它认为的最佳动作。
Noisy DQN 采用了不同的方法来实现探索。它在网络的参数上添加可学习的噪声使得即使在选择最佳动作时智能体的行为也会有一定的随机性。
Noisy DQN 的创新之处在于它引入了噪声直接添加到网络的参数中而不是依靠外部的随机探索策略如ε-greedy。
这样做的好处是 自动调整探索率在Noisy DQN中探索是通过网络内部的噪声决定的。随着训练的进行和智能体学习的改进这个内部噪声可以自动调整从而调整探索的程度。 更有效的探索由于噪声是直接加在网络参数上的这种方法可能比传统的随机探索更有效因为它允许网络学习何时探索以及如何探索而不是简单地随机选择动作避免过早陷入固定行为模式过度依赖经验。
优先级经验回放
对传统的经验回放机制进行了改进。
在标准的经验回放中智能体在训练过程中收集的经验即从环境中得到的状态、动作、奖励和新状态的数据被存储在一个记忆缓冲区中然后这些经验被随机抽取来训练智能体。
这个方法的一个局限性是它假设所有经验都同等重要但实际上并非如此。
优先级经验回放的核心思想是某些经验比其他经验更有价值应该更频繁地用于训练。
这种方法通过赋予每个经验一个优先级来实现让学习率高的状态权重更大。 Q ( s t , a t ) Q ( s t , a t ) α [ r t 1 γ max Q ( s t 1 , a t 1 ) − Q ( s t , a t ) ⏟ T D e r r o r ] Q(s_{t},a_{t})Q(s_{t},a_{t})\alpha[\underbrace{r_{t1}\gamma\operatorname*{max}Q(s_{t1},a_{t1})-Q(s_{t},a_{t})}_{\mathrm{TD~error}}] Q(st,at)Q(st,at)α[TD error rt1γmaxQ(st1,at1)−Q(st,at)] 当前状态和动作( s_t, a_t ) 在时间 ( t )智能体在状态 ( s_t ) 中并选择了动作 ( a_t )。 Q值更新( Q(s_t, a_t) ) 更新 ( Q(s_t, a_t) ) 是当前状态和动作对应的预期奖励值。我们想要更新这个值使其更接近实际的预期奖励。 学习率 ( α \alpha α α \alpha α 是学习率它决定了新信息覆盖旧信息的程度。如果 α \alpha α 很大新信息就会更快地覆盖旧信息。 即时奖励 ( r t 1 ) ( r_{t1} ) (rt1) r t 1 r_{t1} rt1 是智能体在时间 ( t1 ) 获得的即时奖励即在状态 ( s_t ) 采取动作 ( a_t ) 后得到的奖励。 折扣因子 γ \gamma γ γ ) \gamma ) γ) 是折扣因子用于调整未来奖励的重要性。一个较低的 γ \gamma γ 使智能体更专注于即时奖励而较高的 γ \gamma γ使智能体更考虑长远奖励。 最大未来奖励 max Q ( s t 1 , a t 1 ) \max Q(s_{t1}, a_{t1}) maxQ(st1,at1) max Q ( s t 1 , a t 1 ) \max Q(s_{t1}, a_{t1}) maxQ(st1,at1) 是在下一个状态 s t 1 s_{t1} st1 中所有可能动作的最大Q值代表了智能体对未来最优动作的最佳预期奖励。 时序差分Temporal Difference Error r t 1 γ max Q ( s t 1 , a t 1 ) − Q ( s t , a t ) r_{t1} \gamma \max Q(s_{t1}, a_{t1}) - Q(s_t, a_t) rt1γmaxQ(st1,at1)−Q(st,at)是TD误差它代表了当前Q值和包括即时奖励及未来最大奖励的新估计之间的差异。 更新规则 最后整个公式 Q ( s t , a t ) Q ( s t , a t ) α [ T D e r r o r ] Q(s_t, a_t) Q(s_t, a_t) \alpha [TD~error] Q(st,at)Q(st,at)α[TD error] 表示用TD误差更新当前的Q值以更好地估计在状态 ( s_t ) 下采取动作 ( a_t ) 的长期奖励。
OpenAI Q* 超越人类的自主系统
OpenAI在11月22号给公司人员发了一封内部信承认了 Q*并将这个项目描述为 “超越人类的自主系统”。
Q* 是在搞 过程监督通过奖励推理的每个正确步骤。
而不仅仅是结果监督奖励正确的最终答案。
Q* 是 Q-learning 和 A* 可能的组合能大幅度提升推理能力用于解决数学中高难度问题。
openai研究 Q-learning 的成果https://noambrown.github.io。 Q-learning 需要大量的探索左图二基本遍历完了A* 左图三只遍历了一部分。
Q* 结合了双方的优点左图四
更高效选择策略高效地学习最优策略并且可以用于部分可观察的环境自我修剪评估并去除其模型中不必要的部分以提高效率和决策的过程类似于一个人反思自己的思想和行为实现自我提升。迁移学习使 Q-learning 模型在一个领域受过训练后能够将其知识应用于不同但相关的领域的技术比如会开摩托学习自行车就很容易创造和不可知能力在Q-learning框架中实现元学习可以使人工智能学会如何学习这是一种自省创造性解决问题提出以前没有考虑过的新颖的解决方案如破解密码系统或发明新的数学方法。
最强的是不可知能力成功破解了现代加密算法 AES但是不可知。