news 2026/5/30 20:46:29

探索强化学习:DQN算法与Q - learning算法的奇妙对决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索强化学习:DQN算法与Q - learning算法的奇妙对决

DQN算法 Q-learning算法 让红色方格自己寻找最便捷的路径避开障碍物到达黄色圆圈,非常的智能 视频里是DQN的训练过程,全程只需要3分钟 Q-learning需要训练半小时

在强化学习的世界里,Q - learning和DQN算法就像两颗璀璨的明星,各自闪耀着独特的光芒。今天咱们就通过一个有趣的例子,看看它们如何各显神通。

想象有一个场景,红色方格要在布满障碍物的环境中,找到一条最便捷的路径,最终抵达黄色圆圈。这就像是一场充满挑战的冒险游戏。

Q - learning算法

Q - learning是强化学习中的经典算法。它的核心思想是通过不断试错,学习在不同状态下采取何种行动能够获得最大的累计奖励。在这个例子里,红色方格所处的每个位置就是一个状态,而它能采取的上、下、左、右移动就是行动。

下面简单用Python代码展示一下Q - learning的基础框架(这里只是简单示意,实际完整代码会更复杂):

import numpy as np # 初始化Q表,假设环境大小为10x10 Q = np.zeros((10, 10, 4)) # 定义学习率 alpha = 0.1 # 定义折扣因子 gamma = 0.9 # 假设这里有个函数能获取当前状态下所有可能行动的奖励 def get_rewards(state): # 简单返回全0奖励,实际需根据环境计算 return np.zeros(4) # Q - learning更新过程 current_state = (0, 0) for _ in range(1000): current_state_index = np.unravel_index(current_state, (10, 10)) action = np.argmax(Q[current_state_index]) rewards = get_rewards(current_state) new_state = # 根据行动更新状态,这里省略具体实现 new_state_index = np.unravel_index(new_state, (10, 10)) Q[current_state_index][action] = (1 - alpha) * Q[current_state_index][action] + \ alpha * (rewards[action] + gamma * np.max(Q[new_state_index])) current_state = new_state

在这个代码片段中,我们首先初始化了一个Q表,用来存储每个状态 - 行动对的价值。然后通过循环不断更新Q表,根据当前状态选择价值最大的行动,再根据获得的奖励和新状态更新Q表中的值。但这个过程需要相对较长的训练时间,在咱们这个例子里,需要训练半小时之久。这是因为Q - learning在处理复杂环境时,Q表的维度会随着状态和行动数量的增加而急剧膨胀,计算量变得非常大。

DQN算法

DQN(深度Q网络)则是Q - learning与深度学习的结合体,它使用神经网络来近似Q函数,从而解决了Q - learning在处理高维状态空间时的困境。

同样用简单代码展示一下DQN的基础构建(同样为示意,非完整代码):

import torch import torch.nn as nn import torch.optim as optim # 定义简单的神经网络模型 class QNetwork(nn.Module): def __init__(self, state_size, action_size): super(QNetwork, self).__init__() self.fc1 = nn.Linear(state_size, 128) self.fc2 = nn.Linear(128, action_size) def forward(self, x): x = torch.relu(self.fc1(x)) return self.fc2(x) # 初始化网络、优化器等 state_size = 2 # 假设状态空间维度为2 action_size = 4 # 假设行动数量为4 q_network = QNetwork(state_size, action_size) optimizer = optim.Adam(q_network.parameters(), lr=0.001) criterion = nn.MSELoss() # DQN训练过程 for _ in range(100): state = torch.FloatTensor([0, 0]) # 初始状态 action = torch.argmax(q_network(state)).item() # 假设这里获取奖励和新状态 reward = 0 new_state = torch.FloatTensor([0, 1]) q_value = q_network(state)[action] target = reward + gamma * torch.max(q_network(new_state)) loss = criterion(q_value, target) optimizer.zero_grad() loss.backward() optimizer.step()

在这里,我们定义了一个简单的神经网络QNetwork来近似Q函数。通过不断训练这个网络,让它学会在不同状态下选择最优行动。DQN的优势就在于,它利用神经网络强大的函数逼近能力,能够处理复杂的状态空间,而且训练速度相对更快。在视频里,用DQN完成红色方格找路径的训练过程,全程只需要3分钟。这得益于神经网络可以更高效地处理信息,通过梯度下降等优化算法快速更新网络参数。

通过这个红色方格找路径的例子,我们能清楚看到DQN算法在训练效率上相较于Q - learning算法的巨大优势。但每种算法都有其适用场景,Q - learning简单直观,在一些状态空间较小的场景中依然发挥着重要作用,而DQN则在面对复杂的高维状态空间时更胜一筹。这就像是不同的工具,在强化学习的大工具箱里,各自有着独特的用途。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 14:05:32

RV1126 NO.55:ROCKX+RV1126人脸识别推流项目讲解

一.本项目的介绍本项目基于视频采集与人脸识别技术,主要实现以下核心功能:通过摄像头采集视频数据,利用人脸识别技术将识别结果实时叠加到视频画面上,并推送至流媒体服务器。系统整合了多项关键技术模块,包括&#xff…

作者头像 李华
网站建设 2026/5/28 16:21:27

零基础入门:什么是.NET Framework 3.5及如何安装

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式.NET Framework 3.5学习应用,包含:1) 基础知识讲解模块 2) 分步骤安装向导 3) 常见问题解答库 4) 实时错误诊断 5) 学习进度跟踪。要求界面友…

作者头像 李华
网站建设 2026/5/28 5:15:06

长沙网安培训“潜规则”:只分两种,湖南网安基地和其他

摘要:​ 在长沙想成为网络安全工程师?你会发现市场看似选择众多,但懂行的人只会告诉你一个真相:要么选湖南网安基地,要么就是在“试错”。这篇文章为你深度剖析长沙网安培训的行业现状,告诉你为什么湖南网安…

作者头像 李华
网站建设 2026/5/27 17:11:28

Notepad++在数据处理中的高效应用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Notepad宏脚本,用于自动化处理日志文件。功能包括:按时间戳过滤日志条目,高亮显示错误和警告信息,统计各类消息出现频率&…

作者头像 李华
网站建设 2026/5/30 3:00:48

Vulkan教程(七):物理设备与队列族,选择合适的显卡并理解队列机制

目录 一、物理设备选择流程 1.1 扩展代码框架 1.1.1 添加初始化函数调用 1.1.2 添加物理设备成员变量 1.2 枚举系统中的物理设备 二、设备适配性检查 2.1 基础设备信息查询 2.2 简单适配性判断 2.3 加权评分选择(进阶方案) 2.4 本教程的适配性筛选逻辑 三、队列族…

作者头像 李华
网站建设 2026/5/29 23:22:55

“降重不是‘文字马赛克’,是学术表达的‘二次创作’——宏智树AI降重降AIGC,让AI生成内容重获‘人味儿’”

在AI写作席卷学术圈的今天,一个新困境悄然浮现: 你用AI高效写出了初稿,却被导师或查重系统无情标记:“疑似AIGC生成”“语言模板化”“缺乏个人风格”。 于是,你开始疯狂改写——同义词替换、语序倒装、删减句子……结…

作者头像 李华