强化学习(3):Deep Q Network(DQN)算法

news/2024/5/18 21:47:47 标签: 强化学习, DQN, deep q network

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。

本文主要讲解有关 Deep Q Network(DQN)算法的相关内容。

DQN__6">1. DQN 的基本思想

传统的 Q-Learning 算法当 Q 表过大时不仅难以存储而且难以搜索,并且当状态是连续的话,用 Q 表存储是不现实的,这时可以用一个函数来拟合 Q 表,所以提出了神经网络和 Q-Learning 相融合的 Deep Q-Learning(DQN)算法,其中神经网络用来代替 Q 表,以获得状态和动作对应的 Q 值。

DQN 中将状态和动作作为神经网络的输入值,并得到相应的输出——对应的 Q 值 。也可以只输入状态,输出所有的动作值,然后挑选值最大的动作作为下一步要采取的动作。

在对 NN 进行训练时,需要设置损失函数,但是在该问题中又是没有标签数据的。可以将损失函数设为:
L ( θ ) = E [ ( Q _ t a r g e t − Q _ e v a l u e ) 2 ] L(\theta)=E[(Q\_{target}-Q\_{evalue})^2] L(θ)=E[(Q_targetQ_evalue)2]
Q-target 和 Q-eval 就是 Q-Learning 算法中的对应值。该损失函数和 Q-Learning 算法中 Q 表更新公式的含义相同,都是用 Q-eval 逼近 Q-target。

DQN__18">2. DQN 的两大神器

(1)Experience replay(经验回放):NN 的训练样本独立,而 RL 中的前后状态相关,所以需要做一点改动。因为 Q-Learning 是一个离线学习算法,所以在每次 DQN 更新时,可以随机选取一些过去的状态来进行学习。这种方式打乱了状态之间的相关性,可以使神经网络更有效率。

(2)Fixed Q-target(固定 Q-目标):因为网络会不断的更新,所以相同 s 和 a 下的 Q-target 和 Q-eval 的值是不固定的,这样训练起来比较困难。所以可以将 Q-target 固定住,这样目标问题就变成了一个回归问题:用 Q-eval 去逼近 Q-target。

具体实现时,在 DQN 中使用两个结构相同但是参数不同的 NN,预测 Q-eval 的估值网络具有最新的参数,而预测 Q-target 的目标网络的参数则是之前的,隔一段时间才会更新参数(将估值网络的参数赋给目标网络)。 这种方式降低了 Q-target 和 Q-eval 之间的相关性。

DQN__26">3. DQN 算法流程

<a class=DQN" />


http://www.niftyadmin.cn/n/968520.html

相关文章

perl编写ping脚本

我的第一个用于生产环境的perl脚本,虽然不是很优秀,但也迈出了扎实的一步 :) 领导有任务,给一批IP列表,ping每一台机器,如果没有响应就发邮件通知,通知的邮件需要分开,不能通知一个列表,得一封一封的通知. 用到email::send模块,因为需要用到Gmail #!/usr/bin/perl use warning…

Android应用程序架构

2019独角兽企业重金招聘Python工程师标准>>> 1、src/ &#xff1a; java源代码目录 2、gen/ : 自动生成目录 gen目录中存放所有由Android开发工具自动生成的文件。目录最重要的就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据…

农民过河问题

#include <stdio.h> #include <stdlib.h> #include <string.h> //this program is edited by 200624101101杨振平//this papers edited time is DEC 5th,2008 #define MAX_STEP 20 //index: 0 - 狼&#xff0c;1&#xff0d;羊&#xff0c;2&#xff0d;菜…

强化学习(4):Double DQN、Prioritized Experience Replay DQN和Dueling DQN

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解有关Double DQN算法、Prioritized Experience Replay DQN 算法和 Dueling DQN 算法的相关内容。 对于 DQN 算法的改进主要有三种—…

二分覆盖

#include <iostream>#include <iomanip> #include <math.h> #include <time.h> #include <string.h> using namespace std; //this programs file name is coin.cpp//this program is designed by 200624101101杨振平 on NOV 22th,2008 //the…

Unity3D_Util_加密

Unity开发中常用的加密算法 MD5&#xff0c;Sha1、CRC32&#xff0c;Des&#xff0c;Res等的实现 public class EncryptUtil{#region MD5public static string MD5Encrypt(string str, int length 32){if (string.IsNullOrEmpty(str))return string.Empty;byte[] result Enco…

JAVA调用系统命令或可执行程序

为什么80%的码农都做不了架构师&#xff1f;>>> 通过 java.lang.Runtime 类可以方便的调用操作系统命令&#xff0c;或者一个可执行程序&#xff0c;下面的小例子我在windows和linux分别测试过&#xff0c;都通过。基本原理是&#xff0c;首先通过 Runtime.getRunt…

Asp.net请求处理之 管道处理

在了解Asp.net请求处理流程的过程中&#xff0c;个人认为有必要从源代码的角度来了解asp.net管道是怎么实现的。 在此之前大家有必要了解一些asp.net请求流程的基本东东&#xff0c;如ASP.NET 请求处理流程、Asp.net管道、ASP.NET管线与应用程序生命周期 我们大家都知道HttpRu…