【详解+推导!!】DQN

DQN,Deep Q-Network 是Q-Learning和深度网络结合的一种算法,在很多强化学习问题中表现优异。在看DQN之前建议先了解一下Q-Learning的基本原理:https://blog.csdn.net/qq_33302004/article/details/114871232也可以看一下value-based 和 policy-based 方法的基本介绍:https://blog.csdn.net/qq_33302004/article/details/115189857文章目录1.
摘要由CSDN通过智能技术生成

DQN,Deep Q-Network 是Q-Learning和深度网络结合的一种算法,在很多强化学习问题中表现优异。在看DQN之前建议先了解一下Q-Learning的基本原理:https://blog.csdn.net/qq_33302004/article/details/114871232
也可以看一下value-based 和 policy-based 方法的基本介绍:https://blog.csdn.net/qq_33302004/article/details/115189857

1. 简单介绍

DQN 是一种 value-based 方法,与 policy Gradient 不同,网络学习的不是策略,而是要学习成为一个Critic,其策略就是选择当前状态 s s s下,评分最高的 a a a

这里面有两个关键的符号表示:

  • V π ( s ) V^\pi(s) Vπ(s) Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)
  • 其中 π \pi π是指某一种策略,我们的Critic是针对特定的策略而言的,同样的 s s s a a a,如果是不同的 π \pi π,Critic也会给出不同的值。例如棋魂中:
    V 以 前 的 阿 光 ( 大 马 步 飞 ) = b a d V 现 在 的 阿 光 ( 大 马 步 飞 ) = g o o d \begin{aligned} &V^{以前的阿光}(大马步飞) = bad \\ &V^{现在的阿光}(大马步飞) = good \end{aligned} V()=badV()=good
  • 其中 V π ( s ) V^\pi(s) Vπ(s) 表示的是actor在状态 s s s下的累计回报期望(cumulated reward expects );
  • Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)表示的是actor在状态 s s s下选择状态 a a a的累计回报期望。

传统Q-Learning中会建立一个表格,存储下所有 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)的值,在决策的时候通过查表的方式决定选择那种action,但是在实际中, s s s a a a的取值空间可能很大,无法将所有state都打成表格,所以就有了结合深度网络的方法,也就是我们本文所讲的DQN。其 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)不使用表格存储,而是训练一个神经网络,输入 s s s a a a,输出 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)的值。

2. MC 和 TD 方法

那么如何计算 V π ( s ) V^\pi(s) Vπ(s) 的值呢?

通常有两种方法:MC-based方法(蒙特卡罗)和TD-based方法(时间差分)。

Monte-Carlo(MC)-based的方法,就是让actor与环境一直互动,我们就可以统计出接下来的累计回报会有多大,通过多个episode的采样,就可以计算出累计回报期望 G G G

所以如果想要使用神经网络+MC方法实现的话会很直观,这就是一个回归问题(regression),只要有监督学习就可以啦。
在这里插入图片描述
网络的输出就是一个值,你希望在输入 s a s_a sa的时候,输出的值跟 G a G_a <

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中使用DQNDeep Q-Network)算法可以解决一些控制问题,比如平衡小车问题。下面是一个简单的示例: 首先,你需要创建一个MATLAB函数来定义你的DQN模型。这个函数将包含神经网络的定义和训练过程。以下是一个示例函数: ```matlab function dqnModel = createDQNModel() % 定义神经网络结构 layers = [ imageInputLayer([4 1 1]) fullyConnectedLayer(24) reluLayer fullyConnectedLayer(24) reluLayer fullyConnectedLayer(2) regressionLayer ]; % 设置训练选项 options = rlRepresentationOptions('Optimizer',adam(0.001),'LearnRateSchedule','piecewise','GradientThreshold',1); % 创建DQN模型 dqnModel = rlDQNAgent(layers,options); end ``` 接下来,你需要创建一个MATLAB函数来定义你的环境。这个函数将包含你的问题的状态和动作定义。以下是一个示例函数: ```matlab function env = createEnvironment() % 定义环境状态和动作 observationInfo = rlNumericSpec([4 1 1]); actionInfo = rlFiniteSetSpec([-1 1]); % 创建环境 env = rlFunctionEnv(observationInfo,actionInfo,'reset',@reset,'step',@step); end function initialState = reset() % 初始化环境状态 initialState = randn([4 1 1]); end function [nextObservation,reward,isDone,loggedSignals] = step(action,loggedSignals) % 执行动作并更新环境状态 nextObservation = randn([4 1 1]); reward = 1; isDone = false; end ``` 最后,你可以使用以下代码来训练和测试你的DQN模型: ```matlab % 创建DQN模型 dqnModel = createDQNModel(); % 创建环境 env = createEnvironment(); % 设置训练选项 trainOpts = rlTrainingOptions('MaxEpisodes',100,'MaxStepsPerEpisode',100,'Verbose',false); % 训练DQN模型 trainingStats = train(dqnModel,env,trainOpts); % 测试DQN模型 testOpts = rlSimulationOptions('MaxSteps',100); simStats = sim(dqnModel,env,testOpts); ``` 这是一个简单的示例,你可以根据你的具体问题进行修改和扩展。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值