P-DQN:离散-连续混合动作空间的独特算法

news2025/1/12 23:31:03

一、说明

        本文首先说明DQN是个什么概念, DQN(Deep Q-Network)是一种基于深度学习的强化学习算法,在游戏AI中表现优异,如AlphaGo。然后说明人物动作预测的算法实现方法。

二、关于DQN的概念和实验

        DQN(Deep Q-Network)是一种基于深度学习的强化学习算法,在游戏AI中表现优异,如AlphaGo。以下是DQN代码的详细解释:

2.1 导入库和实例化环境

import gym
import random
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import Adam

env = gym.make('CartPole-v0')
env.seed(0)
np.random.seed(0)
random.seed(0)

        首先导入需要的库,包括gym(强化学习环境)、numpy、keras等。然后实例化CartPole-v0环境,并设置随机种子以保证结果的可重复性。

2.2 定义DQN模型

model = Sequential() model.add(Dense(24, input_dim=4, activation='relu')) model.add(Dense(24, activation='relu')) model.add(Dense(2, activation='linear')) model.compile(loss='mse', optimizer=Adam(lr=0.001))

        这里使用了Dense层来构建神经网络,包括两个隐藏层和一个输出层。输入层的维度为4,即环境状态的维度。输出层有两个节点,分别对应左右两种动作。激活函数使用了ReLU。目标函数为MSE(均方误差),优化器使用了Adam。

2.3 定义经验回放和动作选择函数

from collections import deque

memory = deque(maxlen=2000)

def choose_action(state, epsilon):
    if np.random.rand() <= epsilon:
        return env.action_space.sample()
    return np.argmax(model.predict(state))

def remember(state, action, reward, next_state, done):
    memory.append((state, action, reward, next_state, done))

        经验回放是DQN中一个重要的概念,可以缓解样本之间的相关性,增加网络的稳定性和收敛速度。这里使用deque作为经验池,最多存储2000个元素。

        动作选择函数中,epsilon代表了贪心率,即选择最优动作的概率。当随机数小于epsilon时随机选择动作,否则选择Q值最大的动作。

        经验记忆函数用于将每次交互得到的状态、动作、奖励、下一个状态和终止标志存储到经验池中。

2.4 定义训练函数

def replay(batch_size, epsilon):
    mini_batch = random.sample(memory, batch_size)
    for state, action, reward, next_state, done in mini_batch:
        if done:
            target = reward
        else:
            target = reward + np.amax(model.predict(next_state)[0]) * gamma
        target_f = model.predict(state)
        target_f[0][action] = target
        model.fit(state, target_f, epochs=1, verbose=0)
    if epsilon > epsilon_min:
        epsilon *= epsilon_decay

        训练函数分为两部分,经验池中随机取出一批样本(batch_size),计算目标Q值,然后使用模型更新Q值。其中,如果样本是最后一个状态,则目标Q值为奖励;否则目标Q值为奖励加上下一状态的最大Q值。gamma为折扣因子,控制奖励的衰减速度。

2.5 训练DQN

 
         
batch_size = 32
gamma = 0.95
epsilon = 1.0
epsilon_min = 0.01
epsilon_decay = 0.995
episodes = 1000

for episode in range(episodes):
    state = env.reset()
    state = np.reshape(state, [1, 4])
    for time in range(500):
        action = choose_action(state, epsilon)
        next_state, reward, done, _ = env.step(action)
        next_state = np.reshape(next_state, [1, 4])
        remember(state, action, reward, next_state, done)
        state = next_state
        if done:
            print("episode: {}/{}, score: {}".format(episode, episodes, time))
            break
    if len(memory) > batch_size:
        replay(batch_size, epsilon)

        最后,使用一个循环来训练模型。对于每个episode,从初始状态开始,不断交互环境,执行动作、获得奖励、观察下一个状态,并将这些信息存储到经验池中。同时根据贪心策略选择动作。当episode结束时打印结果,并使用经验回放更新模型。这个循环会执行1000次。

左:图像翻转 右:作者生成

三、强化学习简介

        强化学习是机器学习的一个子领域,它教代理如何从其动作空间中选择动作。它与环境交互,以便随着时间的推移最大化奖励。够复杂吗?让我们打破这个定义以便更好地理解。

代理:您培训的计划,目的是完成您指定的工作。
环境:代理在其中执行操作的世界。
操作: 代理所做的移动,这会导致环境更改
奖励:对一个动作的评价,就像反馈一样。

        在任何强化学习建模任务中,都必须定义这 4 个基本要素。 在我们为 Covid-19 问题定义这些元素之前,让我们首先尝试通过一个例子来理解:代理如何在环境中学习操作?

剧情 1 *[2]

代理: 控制肢体运动的程序 环境:模拟重力和运动
定律的现实世界 动作:移动肢体 L 度 Θ
奖励:接近目的地时为正;当它掉下来时为负。

剧情 2

        代理在交互式环境中使用来自其自身行为和经验的反馈(奖励)进行反复试验来学习。代理本质上是在环境中尝试不同的操作,并从反馈中学习它得到的回报。目标是找到一个合适的行动策略,使代理的总累积奖励最大化。

四、动作空间的问题!

        但是,大多数现有的 DRL 方法要求动作空间是有限和离散的或连续的动作。

剧情 1

        例如,图中呈现的算法 [1] 要么满足离散动作空间,要么满足连续动作空间。我们仍然没有一个标准的强化学习算法来处理离散-连续混合动作空间。在这篇博客中,我们将重点介绍“离散-连续混合行动空间”

五、离散-连续混合动作空间

        我们已经熟悉使用连续和离散动作空间的不同环境。在我们进入可以解决混合动作空间的算法之前,快速了解离散-连续混合动作空间的外观。

        我们首先从由 [k] 表示的可用离散动作 {1,2,3....K} 中选择一个高电平离散动作 “a”,然后进一步选择一个低级连续动作 xk”。

等式 1

六、参数化深度 Q 网络学习 (P-DQN)

        所以现在当务之急是我们需要一个DRL算法,它直接在离散-连续混合动作空间上工作,没有近似或松弛。P-DQN可以看作是著名的DQN算法对混合动作空间的扩展。虽然它的名字只是在DQN之后,但这个算法采用了DQN和DDPG的优点。DDPG 算法是一种非常著名的算法,可以处理连续动作空间。

        DQN 中心概念中的 Q(s ,a) 值,它基本上说明了给定状态“s”中动作“a”的好坏。我们需要为混合动作空间 定义一个类似的 Q 值,如 Eq-1 中定义的那样。类似于 Q(s ,a);让我们定义 Q(s, k, xk) 让 k 是时间 t 选择的离散动作,让 xk 是关联的连续动作。与深度 Q 网络类似,我们使用深度神经网络 Q(s, k, xk ;ω) 近似 Q(s, k, xk),其中 ω 表示网络权重。

        现在一切看起来都很好,但是当我们在贝尔曼更新中直接使用 Q(s, k, xk ; ω) 时,问题就出现了。

        贝尔曼更新方程

        如果你仔细观察贝尔曼更新中方程的右侧,就会发现离散动作“k”和连续动作xk上有一个最大步长。由于在有限的离散动作 [k] 上采用最大值,因此在计算上没有挑战性。但是在连续空间xk上取最大值在计算上是棘手的,因为网络需要迭代连续空间中的所有可能值以找出最大Q(s,k,xk)。

        这就是我们从深度确定性策略梯度(DDPG)算法中获得一些灵感的地方。我们用确定性策略网络xk(S; θ)近似xk,其中θ表示策略网络的网络权重。

所以当 ω 固定时,我们希望找到 θ 使得:

七、算法:

就像在DDPG算法中一样,我们也可以将噪声添加到动作xk(S; θ)的连续部分以进行探索。就像在DQN中一样,它使用经验回放来减少样本之间的依赖性,以及类似的贪婪ε探索技术。权重 ω 和 θ 分别以不同的学习率更新,并使用随机梯度方法更新权重。

八、结论

        在此博客中,我们定义了离散-连续混合操作空间。我们提出了参数化的深度Q网络(P-DQN),它扩展了经典的DQN,为动作的连续部分提供了确定性策略。

参考资料:

1 论文:https://arxiv.org/pdf/1810.06394.pdf

Kowshik chilamkurthy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

混合精度训练中的内存占用

结论&#xff1a; 在模型训练中&#xff0c;fp16会比fp32快很多&#xff0c;因此&#xff0c;一般会使用fp16的参数进行模型的前向和后向计算。然而&#xff0c;在进行梯度累加的时候&#xff0c;fp16往往会精度不够&#xff0c;无法满足计算需求。因此&#xff0c;会在反向计…

SOLIDWORKS等轴测剖切视图的创建技巧

在SOLIDWORKS工程图中&#xff0c;经常会用到等轴测剖切视图来显示零件或装配体的内部结构&#xff0c;下面介绍一下两种创建方式&#xff0c;供大家参考&#xff0c;以下图为例。 方法一 第一步&#xff0c;打开零件&#xff0c;创建一个切除拉伸的配置&#xff0c;该配置为 …

全网超细,Jenkins持续集成-自动化测试(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 执行集成构建 持…

计算机top命令

top 快捷键 1 核心参数 1 1 参考资料 [1]. https://blog.csdn.net/weixin_45465395/article/details/115728520 [2].https://www.cnblogs.com/liushui-sky/p/13224762.html

为了规避风险,如何给大模型打水印?

大型语言模型&#xff0c;如最近开发的ChatGPT&#xff0c;可以撰写文件、创建可执行代码和回答问题&#xff0c;通常具有人类般的能力。 随着这些大模型的应用越来越普遍&#xff0c;越来越大的风险也显现了出来&#xff0c;它们可能被用于恶意目的。这些恶意目的包括&#xf…

uni-app选择器( uni-data-picker)选择任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。引入插件后&#xff0c;发现做不到只选择年级&#xff0c;不选择班级&#xff08;似乎&#xff0c;只能到最后子节点了&#xff09;。 需求中&#xff0c;有可能选择的不是叶子。比如&a…

渣罐炉倾翻液压系统比例阀控制器

渣罐炉倾翻液压系统是一种用于渣罐炉倾翻的液压系统&#xff0c;由液压泵、油缸、阀组、油箱、管路等组成。 2. 启动液压泵&#xff0c;将液压油输送到油缸。 总之&#xff0c;渣罐炉倾翻液压系统具有操作简便、高效稳定等特点&#xff0c;适用于各种类型的渣罐炉倾翻。

SpringBoot+Vue开发笔记

参考&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?p1 ----------------------------------------------------------概要总结---------------------------------------------------------- 1、MVC架构&#xff1a; View&#xff1a;与用户交互 Controller&…

浅谈下API初步认知

当我们谈论API&#xff0c;我们指的是应用程序接口&#xff08;Application Programming Interface&#xff09;。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议&#xff0c;用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…

运动蓝牙耳机什么款式好、适合运动的蓝牙耳机推荐

夏天到了&#xff0c;越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上&#xff0c;除了常规的衣服、鞋之外&#xff0c;耳机也成为了当下年轻群体的必备项&#xff0c;尤其是在运动的过程中听听喜欢的音乐或者电台能够更好地放松身心。那…

Go init 顺序 使用建议

init函数的主要作用&#xff1a; 初始化不能采用初始化表达式初始化的变量。程序运行前的注册&#xff0c;例如初始化数据库链接。实现sync.Once功能。其他 init函数的主要特点&#xff1a; init函数先于main函数自动执行&#xff0c;不能被其他函数调用&#xff1b;init函数…

LeetCode每日一题Day3——1. 两数之和

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较

一、String与Int互转 在 Java 中要将 String 类型转化为 int 类型时&#xff0c;需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换。 String str "555555555"; int a Integer.parseInt(str); // 方式1 int b Integer.valueOf(str).intValu…

从虚拟到现实:数字孪生助力建筑创新

随着科技的不断进步&#xff0c;数字孪生技术正逐渐成为建筑行业的新宠。数字孪生是一种将实体世界与数字世界相结合的技术&#xff0c;通过将现实世界中的物体、系统或过程以数字化的方式进行建模和仿真&#xff0c;实现了真实世界与虚拟世界的互通。 在建筑行业中&#xff0c…

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代&#xff0c;我们每个人时刻都在生成、传递和应用数据&#xff0c;数据已经成为了现代社会中宝贵的资源之一&#xff0c;而在人工智能领域&#xff0c;数据更是被称为人工智能的“燃料”。 而在AI的发展中&#xff0c;只有拥有高质量、多样性且充分代表性的数据集…

Sqli-labs1~65关 通关详解 解题思路+解题步骤+解析

Sqli-labs 01关 (web517) 输入?id1 正常 输入?id1 报错 .0 输入?id1-- 正常判断是字符型注入&#xff0c;闭合方式是这里插一句。limit 100,1是从第100条数据开始&#xff0c;读取1条数据。limit 6是读取前6条数据。 ?id1 order by 3-- 正常判断回显位有三个。?id…

途乐证券|医药板块走高,神奇制药、双成药业涨停,科源制药等拉升

医药板块3日盘中震动走高&#xff0c;截至发稿&#xff0c;睿智医药涨超15%&#xff0c;景峰医药、神奇制药、双成药业等涨停&#xff0c;誉衡药业、科源制药涨约7%&#xff0c;精华制药、赛托生物涨约6%。 途乐证券指出&#xff0c;医药商场当前仍处于磨底行情&#xff0c;但行…

手机商城免费搭之java商城 电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

Kali搭建Suricata环境及使用方式

这个和上一个snort如出一辙&#xff0c;并且兼容snort的规则&#xff0c;有一个有的没的我就不赘述了&#xff0c;直接开整&#xff01; 开整&#xff01; 0x01 环境0x02 配置0x03 使用 0x01 环境 kali2021 && suricata apt install suricata #安装 suricata-updat…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 5

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…