机器学习——强化学习与深度强化学习

强化学习与深度强化学习:从基础到深入

引言

近年来,强化学习(Reinforcement Learning, RL)在多个领域取得了巨大的进展。从早期简单的迷宫导航问题到今天 AlphaGo 击败围棋世界冠军,强化学习的潜力得到了充分展现。而随着深度学习的引入,深度强化学习(Deep Reinforcement Learning, DRL)更是将这一技术推向了前所未有的高度。本篇文章将深入探讨强化学习与深度强化学习的基本原理、常见算法以及应用场景,旨在为读者提供一个详尽的学习路线图。

1. 强化学习基础

1.1 什么是强化学习

强化学习是一种让智能体(Agent)通过与环境(Environment)交互,获得奖励(Reward)来学习如何采取行动的学习方法。在强化学习中,智能体通过试错不断学习,以期最大化其累积的奖励。

强化学习的基本框架包括以下几个核心元素:

  • 状态 (State):智能体所处的环境状态。
  • 动作 (Action):智能体在当前状态下可以采取的行动。
  • 奖励 (Reward):智能体采取某个动作后得到的反馈。
  • 策略 (Policy):智能体选择某个动作的策略,可以是确定性的也可以是随机的。
  • 价值函数 (Value Function):衡量一个状态或者状态-动作对的好坏。

强化学习的目标是找到最优策略,使得智能体能够在与环境交互的过程中,累积到最多的奖励。

1.2 马尔可夫决策过程(MDP)

强化学习问题通常被建模为一个马尔可夫决策过程(Markov Decision Process, MDP),MDP 是一个五元组 ( S , A , P , R , γ ) (S, A, P, R, \gamma) (S,A,P,R,γ),其中:

  • S S S:状态空间。
  • A A A:动作空间。
  • P ( s ′ ∣ s , a ) P(s'|s, a) P(ss,a):状态转移概率,表示在状态 s s s 下采取动作 a a a 转移到状态 s ′ s' s 的概率。
  • R ( s , a ) R(s, a) R(s,a):奖励函数,表示在状态 s s s 下采取动作 a a a 所获得的奖励。
  • γ \gamma γ:折扣因子,表示未来奖励的衰减程度。

在 MDP 中,未来的状态只取决于当前的状态和动作,而与之前的状态无关,这就是所谓的马尔可夫性。

1.3 强化学习的主要方法

强化学习的算法主要可以分为三大类:

  1. 值迭代方法:如 Q-Learning。
  2. 策略迭代方法:如策略梯度(Policy Gradient)。
  3. 基于模型的方法:如 Dyna-Q。
1.3.1 Q-Learning

Q-Learning 是一种基于值的强化学习算法,通过学习状态-动作值函数(Q 函数)来找到最优策略。

Q 函数的更新公式如下:

Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s, a)] Q(s,a)Q(s,a)+α[r+γamaxQ(s,a)Q(s,a)]

其中, α \alpha α 是学习率, γ \gamma γ 是折扣因子, r r r 是即时奖励, s ′ s' s 是下一状态。

下面是一个简单的 Q-Learning 代码实现:

import numpy as np# 定义环境
n_states = 6
actions = [0, 1]  # 0: 左, 1: 右
q_table = np.zeros((n_states, len(actions)))gamma = 0.9  # 折扣因子
alpha = 0.1  # 学习率
epsilon = 0.1  # 探索概率# Q-Learning 算法
def q_learning(episodes=100):for episode in range(episodes):state = np.random.randint(0, n_states)done = Falsewhile not done:if np.random.uniform(0, 1) < epsilon:action = np.random.choice(actions)  # 探索else:action = np.argmax(q_table[state, :])  # 利用next_state = state + 1 if action == 1 else max(0, state - 1)reward = 1 if next_state == n_states - 1 else 0q_predict = q_table[state, action]q_target = reward + gamma * np.max(q_table[next_state, :])q_table[state, action] += alpha * (q_target - q_predict)state = next_stateif state == n_states - 1:done = Trueq_learning()
print("Q-table after training:")
print(q_table)

1.4 策略梯度方法

策略梯度方法直接对策略进行优化,其目标是最大化累计奖励的期望值。常见的策略梯度方法有 REINFORCE 算法。

策略梯度的核心思想是通过参数化策略函数,使用梯度上升的方法不断调整策略的参数,以使得策略获得的期望累积奖励最大化。

1.5 Actor-Critic 方法

Actor-Critic 方法结合了值迭代和策略梯度的优点,Actor 负责选择动作,Critic 负责评估当前策略的好坏。这样可以有效减少策略梯度方法中的高方差问题。

2. 深度强化学习

2.1 深度 Q 网络(DQN)

Q-Learning 虽然简单,但在状态空间很大时,传统的 Q 表无法存储所有可能的状态-动作对。深度 Q 网络(Deep Q Network, DQN)通过引入神经网络来逼近 Q 函数,从而解决了这一问题。

DQN 的核心是使用一个神经网络来估计状态-动作值函数,即 Q ( s , a ; θ ) Q(s, a; \theta) Q(s,a;θ),其中 θ \theta θ 是神经网络的参数。

DQN 的关键技术包括:

  1. 经验回放(Experience Replay):通过存储智能体与环境交互的经验,随机抽取小批量样本进行训练,减少数据之间的相关性。
  2. 目标网络(Target Network):通过引入一个目标网络来稳定训练,目标网络的参数每隔一段时间才更新一次。

以下是一个简单的 DQN 实现代码:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import randomclass DQN(nn.Module):def __init__(self, state_size, action_size):super(DQN, self).__init__()self.fc1 = nn.Linear(state_size, 24)self.fc2 = nn.Linear(24, 24)self.fc3 = nn.Linear(24, action_size)def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))return self.fc3(x)state_size = 4
action_size = 2
model = DQN(state_size, action_size)
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.MSELoss()# 经验回放缓冲区
memory = []
max_memory = 1000def replay(batch_size):if len(memory) < batch_size:returnbatch = random.sample(memory, batch_size)states, actions, rewards, next_states, dones = zip(*batch)states = torch.tensor(states, dtype=torch.float32)actions = torch.tensor(actions, dtype=torch.int64)rewards = torch.tensor(rewards, dtype=torch.float32)next_states = torch.tensor(next_states, dtype=torch.float32)dones = torch.tensor(dones, dtype=torch.bool)q_values = model(states).gather(1, actions.view(-1, 1)).squeeze()next_q_values = model(next_states).max(1)[0]target_q_values = rewards + (1 - dones.float()) * gamma * next_q_valuesloss = loss_fn(q_values, target_q_values.detach())optimizer.zero_grad()loss.backward()optimizer.step()

2.2 深度确定性策略梯度(DDPG)

深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)是一种适用于连续动作空间的深度强化学习算法,结合了 DQN 和策略梯度方法的优点。

DDPG 使用两个网络:

  1. Actor 网络:用于选择动作。
  2. Critic 网络:用于评估 Actor 的策略。

DDPG 还使用了目标网络和经验回放机制,以稳定训练过程。

2.3 近端策略优化(PPO)

近端策略优化(Proximal Policy Optimization, PPO)是一种广泛使用的策略梯度算法,具有较好的收敛性和鲁棒性。PPO 的核心思想是在更新策略时对策略的变化施加限制,以确保新旧策略之间的差异不会太大,从而稳定学习过程。

PPO 通过优化以下目标函数来更新策略:

L ( θ ) = E [ min ⁡ ( r ( θ ) A , clip ( r ( θ ) , 1 − ϵ , 1 + ϵ ) A ) ] L(\theta) = \mathbb{E}\left[\min(r(\theta)A, \text{clip}(r(\theta), 1-\epsilon, 1+\epsilon)A)\right] L(θ)=E[min(r(θ)A,clip(r(θ),1ϵ,1+ϵ)A)]

其中, r ( θ ) r(\theta) r(θ) 是新旧策略的比值, A A A 是优势函数。

2.4 深度强化学习的挑战与解决方案

深度强化学习在应用中面临许多挑战,如高方差、不稳定性和样本效率低等。针对这些挑战,研究者提出了多种改进方法,如:

  • 双重 DQN(Double DQN):通过分别使用两个网络来减少 Q 值的高估问题。
  • 优势 Actor-Critic(A3C):通过并行训练多个智能体以加速训练过程。

3. 深度强化学习的应用

3.1 游戏 AI

深度强化学习被广泛应用于游戏 AI 中,最著名的例子莫过于 DeepMind 开发的 AlphaGo,它通过深度强化学习击败了人类围棋冠军。

3.2 自动驾驶

在自动驾驶领域,深度强化学习用于解决路径规划、决策和控制等问题。智能体通过不断与模拟环境交互,学习如何在复杂的道路环境中安全驾驶。

3.3 机器人控制

深度强化学习也被应用于机器人控制中,机器人通过学习如何与环境交互,完成如抓取、导航等任务。

4. 结论与展望

强化学习与深度强化学习为人工智能的发展提供了强有力的工具,尤其是在处理连续、复杂环境的决策问题上展现了其强大潜力。然而,深度强化学习的稳定性和样本效率等问题依然存在,需要进一步研究和改进。未来,随着算法的改进和计算能力的提升,深度强化学习将在更多领域取得突破。

本篇文章介绍了强化学习和深度强化学习的基础理论、常见算法及其应用,希望能够帮助读者更好地理解这一领域。强化学习与深度强化学习是一个充满挑战但又充满潜力的研究方向,鼓励大家在这一领域不断探索。

参考文献

  1. Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction. MIT Press.
  2. Mnih, V., et al. (2015). Human-level control through deep reinforcement learning. Nature.
  3. Lillicrap, T. P., et al. (2016). Continuous control with deep reinforcement learning.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Element UI教程:如何将Radio单选框的圆框改为方框

大家好&#xff0c;今天给大家带来一篇关于Element UI的使用技巧。在项目中&#xff0c;我们经常会用到Radio单选框组件&#xff0c;默认情况下&#xff0c;Radio单选框的样式是圆框。但有时候&#xff0c;为了满足设计需求&#xff0c;我们需要将圆框改为方框&#xff0c;如下…

SkyWalking 自定义链路追踪

对项目中的业务方法&#xff0c;实现链路追踪&#xff0c;方便我们排查问题 引入依赖 <!‐‐ SkyWalking 工具类 ‐‐> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm‐toolkit‐trace</artifactId> <vers…

【算法】博弈论(C/C++)

个人主页&#xff1a;摆烂小白敲代码 创作领域&#xff1a;算法、C/C 持续更新算法领域的文章&#xff0c;让博主在您的算法之路上祝您一臂之力 欢迎各位大佬莅临我的博客&#xff0c;您的关注、点赞、收藏、评论是我持续创作最大的动力 目录 博弈论&#xff1a; 1. Grundy数…

蓝牙模块(BT04/HC05)

目录 一、介绍 二、模块原理 1.原理图与外形尺寸 2.引脚描述 3.蓝牙模块基础AT指令介绍 三、程序设计 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BT04A是一款蓝牙低功耗&#xff08;Bluetooth Low Energy, BLE&#xff09;模块&…

继电保护之电压重动、电压并列和电压切换

实践&#xff1a;以某开关室10kV母联隔离柜为例&#xff1a; ZYQ-824为PT并列装置&#xff0c;装置内包含一系列继电器&#xff0c;用于PT重动及并列。按照装置编号原则&#xff0c;交流电压切换箱一般命名为7n。 ​下图为装置内继电器线圈部分接线&#xff1a; 下图为装置内…

Windows下的python安装教程_2024年10月最新最详细的安装指南

文章目录 前言一、下载python二、安装python三、验证环境四、配置环境变量&#xff08;可选&#xff09;总结 前言 Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的语法和强大的库支持而著称。无论你是初学者还是经验丰富的开发者&#xff0c;安装 Python 都是…

游戏盾是如何解决游戏行业攻击问题

随着游戏行业的迅猛发展&#xff0c;其高额的利润和激烈的市场竞争吸引了众多企业和创业者的目光。然而&#xff0c;这一行业也面临着前所未有的业务和安全挑战&#xff0c;尤其是DDoS&#xff08;分布式拒绝服务&#xff09;攻击&#xff0c;已经成为游戏行业的一大威胁。今天…

详解 SPI 机制

SPI(Service Provider Interface) 是 JDK 内置的一种服务提供发现机制&#xff1a;可以用来启用框架扩展和替换组件&#xff0c;主要用于框架中开发。例如&#xff1a;Dubbo、Spring、Common-Logging&#xff0c;JDBC 等都是采用 SPI 机制&#xff0c;针对同一接口采用不同的实…

基于SpringBoot博物馆游客预约系统【附源码】

基于SpringBoot博物馆游客预约系统 效果如下&#xff1a; 主页面 注册界面 展品信息界面 论坛交流界面 后台登陆界面 后台主界面 参观预约界面 留言板界面 研究背景 随着现代社会的快速发展和人们生活水平的提高&#xff0c;文化生活需求也在日益增加。博物馆作为传承文化、…

k8s 中的 PV 的动态供给

目录 1 存储类 Storageclass 介绍 1.1 StorageClass 说明 1.2 StorageClass 的属性 2 存储分配器 NFS Client Provisioner 2.1 官网存储分配器的部署介绍 2.2 实现动态创建 PV 模版清单文件的介绍 2.2.1 Storageclass 存储类的模版 2.2.2 创建 Provisioner 制备器的模版 2.2.3…

【Linux】文件IO系统[ 库函数 ]封装了[ 系统调用 ] +【区分文件结构体FILE和file与files_srtuct表】(读写接口盘点与介绍)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

世邦通信股份有限公司IP网络对讲广播系统RCE

漏洞描述 SPON世邦IP网络广播系统采用的IPAudio™技术, 将音频信号以数据包形式在局域网和广域网上进行传送&#xff0c;是一套纯数字传输的双向音频扩声系统。传统广播系统存在的音质不佳&#xff0c;传输距离有限&#xff0c;缺乏互动等问题。该系统设备使用简便&#xff0c…

AAA Mysql与redis的主从复制原理

一 &#xff1a;Mysql主从复制 重要的两个日志文件&#xff1a;bin log 和 relay log bin log&#xff1a;二进制日志&#xff08;binnary log&#xff09;以事件形式记录了对MySQL数据库执行更改的所有操作。 relay log&#xff1a;用来保存从节点I/O线程接受的bin log日志…

界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器(一)

本文重点介绍了DevExpress在近年来最热门领域——人工智能(AI)和自然语言处理(NLP)的改进&#xff01; NLP是人工智能的一个分支&#xff0c;它允许计算机与人类语言进行交互&#xff0c;这包括以有意义/有用的方式理解、解释、生成和回应文本(和语音)的能力。基于NLP的功能允…

仿RabbitMQ实现消息队列客户端

文章目录 客⼾端模块实现订阅者模块信道管理模块异步⼯作线程实现连接管理模块生产者客户端消费者客户端 客⼾端模块实现 在RabbitMQ中&#xff0c;提供服务的是信道&#xff0c;因此在客⼾端的实现中&#xff0c;弱化了Client客⼾端的概念&#xff0c;也就是说在RabbitMQ中并…

认知战认知作战:激发认知战战术分享热情的秘诀

认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 关键词&#xff1a;认知战, 认知作战, 创造独特体验, 融入社交元素, 情感共鸣策略, 分享激励机制, 战略形象塑造, 个性化内容推荐,认知作战,新质生产力,人类…

E. Tree Pruning Codeforces Round 975 (Div. 2)

原题 E. Tree Pruning 解析 本题题意很简单, 思路也很好想到, 假设我们保留第 x 层的树叶, 那么对于深度大于 x 的所有节点都要被剪掉, 而深度小于 x 的节点, 如果没有子节点深度大于等于 x, 那么也要被删掉 在做这道题的时候, 有关于如何找到一个节点它的子节点能通到哪里,…

用Arduino单片机制作一个简单的音乐播放器

Arduino单片机上有多个数字IO针脚&#xff0c;可以输出数字信号&#xff0c;用于驱动发声器件&#xff0c;从而让它发出想要的声音。蜂鸣器是一种常见的发声器件&#xff0c;通电后可以发出声音。因此&#xff0c;单片机可以通过数字输出控制蜂鸣器发出指定的声音。另外&#x…

马丁代尔药物大典数据库

马丁代尔药物大典是一本由Pharmaceutical Press出版的参考书&#xff0c;拥有全球使用的近 6000 种药物和药品&#xff0c;包括超过 125,000 种专有制剂的详细信息。其中还包括近 700 篇疾病治疗评论。 它于 1883 年首次出版&#xff0c;马丁代尔包含全球临床用药信息&#xff…