揭秘强化学习:Python 实践指南

一、说明

        强化学习 (RL) 是机器学习和人工智能 (AI) 的一个子领域,专注于开发能够通过与环境交互进行学习的智能代理。与传统的监督和无监督学习不同,强化学习主要关注动态、顺序环境中的决策。它在人工智能中具有重要意义,特别是在自主代理必须做出一系列决策以实现长期目标的应用中。

照片由Element5 Digital在Unsplash上拍摄

强化学习在人工智能中的意义:

  1. 自主代理:强化学习对于构建自主代理至关重要,这些代理无需显式编程即可在现实环境中做出决策并采取行动。
  2. 复杂决策:强化学习用于决策过程复杂且不受预定义规则或标记数据指导的问题。
  3. 顺序任务:它适用于涉及一系列动作以及动作的后果影响未来状态和奖励的任务。
  4. 游戏和机器人:强化学习在游戏(例如 AlphaGo)和机器人(例如自动驾驶汽车和机器人控制)等应用中取得了显着的成功。

监督学习和无监督学习的区别:

强化学习与监督学习和无监督学习范式有很大不同:

  1. 监督学习:在监督学习中,算法从标记的示例中学习,其中每个输入都与已知的输出或目标相关联。目标是学习从输入到输出的映射,通常用于分类或回归任务。相比之下,强化学习从环境中的交互和反馈中学习,无需明确的监督或标记数据。
  2. 无监督学习:无监督学习侧重于发现未标记数据中的模式或结构。常见任务包括聚类和降维。另一方面,强化学习涉及决策和学习,以随着时间的推移最大化累积奖励信号,这需要与环境交互。
  3. 目标:在监督学习中,目标是最小化预定义的损失或误差函数。在强化学习中,目标是最大化智能体在一系列动作中获得的累积奖励。
  4. 反馈:监督学习以标记数据的形式接收显式反馈,而强化学习则依赖于来自环境的稀疏且延迟的奖励,这使其成为更具挑战性的学习问题。
  5. 训练数据:监督学习需要具有输入输出对的数据集,而强化学习直接从与环境的试错交互中学习。
  6. 探索与利用:强化学习涉及探索(尝试新的学习动作)和利用(选择已知的良好动作)之间的权衡。这种探索-利用困境在传统的监督或无监督学习中并不存在。

总之,强化学习与监督学习和无监督学习的不同之处在于它注重顺序决策、与环境的交互以及对长期目标的追求。它是开发能够在复杂和动态环境中自主学习做出决策的人工智能代理的强大范例。

关键概念:

代理和环境:

在强化学习 (RL) 中,代理是一种智能实体或程序,它与其周围环境(称为环境)进行交互,以实现特定的目标或任务。代理通过传感器感知环境并执行操作来影响环境。反过来,环境向代理提供反馈和这些行为的后果。

代理-环境交互:

强化学习中代理和环境之间的交互通常遵循以下顺序:

  1. 观察(Perception):智能体通过传感器或观测值来观察环境的当前状态。
  2. 操作:根据观察到的状态,代理从其可能的操作集中选择一个操作。
  3. 转换:环境转换到新状态,代理以奖励信号的形式接收反馈,表明所选操作的即时需求。
  4. 目标:智能体的目标是通过学习指导其行为的策略来最大化其随着时间的推移获得的累积奖励。

奖励和目标:

奖励是表示与在给定状态下采取特定行动相关的直接收益或成本的数值。它们充当代理了解其行为后果的反馈机制。强化学习代理的最终目标是找到一种策略(从状态到行动的策略或映射),以最大化其长期收到的累积奖励。

在强化学习中,目标的概念至关重要。代理旨在优化特定目标。这些目标通常使用奖励函数来定义,该函数为不同的状态和动作分配值。代理的任务是发现一种策略,选择行动来最大化与期望目标一致的预期奖励总和。

探索与利用:

在强化学习中,智能体面临着探索与利用的挑战。这是尝试新行动(探索)和选择具有已知奖励的行动(利用)之间的权衡。平衡这两个方面对于有效学习至关重要。如果代理只利用已知的操作,它可能会错过发现更好的操作。相反,过度探索可能​​会导致性能不佳。实现正确的平衡是强化学习的一个基本挑战。

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

马尔可夫决策过程 (MDP) 为 RL 问题建模提供了一个正式的框架。MDP 包括:

  1. 状态 (S):环境可能处于的一组可能情况或配置。代理通过在状态之间转换来与环境交互。
  2. 操作 (A):代理可以采取的一组可能的操作。动作影响状态转换。
  3. 奖励 (R):奖励函数,指定代理在特定状态下采取特定操作时收到的即时奖励。
  4. 转换概率 (P):定义在采取特定操作时从一种状态转换到另一种状态的可能性的概率分布。

MDP 提供了一种对 RL 问题的动态建模的形式。智能体使用这个框架来做出决策,学习最优策略,并在顺序决策任务中实现其目标。

总之,强化学习围绕主体与环境之间的交互、通过奖励最大化来追求目标、探索与利用之间的权衡,以及使用马尔可夫决策过程对问题进行正式建模。理解这些关键概念对于掌握强化学习的基础知识至关重要。

二、用例:教人工智能玩网格世界游戏

在此用例中,我们将探索如何应用强化学习 (RL) 概念和技术来教 AI 代理玩简单的网格世界游戏。人工智能代理的目标是在网格世界中导航、避开障碍并达到特定目标,同时最大化其累积奖励。

游戏说明:

想象一个网格世界,表示为带有单元的二维网格。网格包含以下元素:

  1. 代理:AI代理被放置在网格单元之一中,并且能够在四个方向上移动:上、下、左、右。
  2. 障碍:网格中的某些单元格被障碍物阻挡。药剂无法进入这些细胞。
  3. 目标:有一个指定为目标位置的特定单元格。代理的目标是到达该目标单元格。
  4. 奖励:网格中的每个单元格都有一个关联的奖励值。代理根据其占据的单元格获得奖励。目标细胞有很高的正奖励,而障碍可能有负奖励。

强化学习设置:

  1. 状态(S):网格中的每个单元格都是一个状态。状态空间由所有可能的网格配置组成。
  2. 动作 (A):代理的动作是它可以进行的运动:上、下、左、右。
  3. 奖励(R):奖励分配给每个单元格。目标单元具有较高的正奖励(例如,+10),而障碍物具有负奖励(例如,-5)。其他细胞可能具有中性奖励(例如,0)。
  4. 转换概率 (P):当智能体采取行动时,它会从一种状态(单元)转换到另一种状态。转移概率取决于所选操作和当前状态。

训练人工智能代理:

强化学习代理一开始对网格世界及其奖励知之甚少甚至一无所知。它通过与环境的交互来学习:

  1. 探索:最初,智能体通过采取随机行动来探索网格世界。这有助于它发现网格的布局、障碍物的位置和目标。
  2. 剥削:随着智能体积累经验,它开始倾向于那些能带来更高奖励的行动。它使用 RL 算法,例如 Q 学习或深度 Q 网络 (DQN),来估计不同状态下不同操作的预期奖励。
  3. 策略学习:代理学习将状态映射到操作的策略,以最大化累积奖励。该策略指导智能体的行动以达到目标,同时避免障碍。
  4. 价值迭代:智能体还学习价值函数,例如状态价值函数(V)或行动价值函数(Q),以评估状态和行动的合意性。

挑战:

  • 代理必须有效地平衡探索和利用,以避免陷入局部最优。
  • 它需要学习一种既考虑长期回报(实现目标)又考虑短期风险(障碍)的策略。

好处:

  • 这个用例说明了强化学习处理顺序决策任务的能力,其中代理从反复试验中学习。
  • 它演示了代理如何调整其行为以最大化累积奖励。
  • 它展示了如何应用强化学习在网格世界之外的各种环境(例如视频游戏或机器人)中教授人工智能代理。

通过应用强化学习技术,人工智能代理逐渐学会在网格世界中导航、避开障碍并达到目标,展示了强化学习在教导代理在动态环境中做出智能决策方面的力量。

三、Python 实现 

        为了实现网格世界用例的 RL 代理,我们将使用 Python 和流行的 RL 库 OpenAI Gym。在此示例中,我们将使用 Q-learning 作为核心 RL 算法。以下是实施的分步演练:

3.1 第 1 步:设置环境

首先,安装 OpenAI Gym,这是一个提供各种 RL 环境的库,包括自定义环境:

pip install gym

创建自定义网格世界环境。在此示例中,我们将使用简化版本:

import gym
from gym import spaces
import numpy as npclass GridWorldEnv(gym.Env):def __init__(self):self.grid = np.array([[0, 0, 0, -5, 0],[0, -5, 0, -5, 0],[0, 0, -5, -5, 0],[0, 0, 0, -5, 0],[0, 0, 0, 0, 10]])self.agent_position = [0, 0]self.action_space = spaces.Discrete(4)  # Up, Down, Left, Rightself.observation_space = spaces.Discrete(25)  # Grid sizeself.max_steps = 100self.current_step = 0self.goal = [4, 4]self.reward_range = (-10, 10)def reset(self):self.agent_position = [0, 0]self.current_step = 0return self.agent_positiondef step(self, action):self.current_step += 1if action == 0:  # Upself.agent_position[0] = max(0, self.agent_position[0] - 1)elif action == 1:  # Downself.agent_position[0] = min(4, self.agent_position[0] + 1)elif action == 2:  # Leftself.agent_position[1] = max(0, self.agent_position[1] - 1)elif action == 3:  # Rightself.agent_position[1] = min(4, self.agent_position[1] + 1)state = self.agent_positionreward = self.grid[state[0], state[1]]done = (state == self.goal) or (self.current_step >= self.max_steps)return state, reward, done, {}

3.2 步骤 2:定义代理的策略和 Q 函数

定义 Q 学习代理:

import numpy as npclass QLearningAgent:def __init__(self, env, learning_rate=0.1, discount_factor=0.9, exploration_prob=1.0, exploration_decay=0.995):self.env = envself.learning_rate = learning_rateself.discount_factor = discount_factorself.exploration_prob = exploration_probself.exploration_decay = exploration_decayself.q_table = np.zeros((env.observation_space.n, env.action_space.n))def choose_action(self, state):if np.random.uniform(0, 1) < self.exploration_prob:return self.env.action_space.sample()  # Explore (random action)else:return np.argmax(self.q_table[state, :])  # Exploit (choose action with max Q-value)def update_q_table(self, state, action, reward, next_state):self.q_table[state, action] = (1 - self.learning_rate) * self.q_table[state, action] + \self.learning_rate * (reward + self.discount_factor * np.max(self.q_table[next_state, :]))def decay_exploration_prob(self):self.exploration_prob = max(0.1, self.exploration_prob * self.exploration_decay)

3.3 第 3 步:实施 Q-learning

实现 Q 学习算法:

def train_q_learning_agent(agent, num_episodes):for episode in range(num_episodes):state = agent.env.reset()done = Falsewhile not done:action = agent.choose_action(state)next_state, reward, done, _ = agent.env.step(action)agent.update_q_table(state, action, reward, next_state)state = next_stateagent.decay_exploration_prob()

3.4 第 4 步:培训代理

训练 Q-learning 代理:

if __name__ == "__main__":env = GridWorldEnv()agent = QLearningAgent(env)num_episodes = 1000train_q_learning_agent(agent, num_episodes)

3.5 第 5 步:评估代理的绩效

训练完成后,您可以通过在环境中运行来评估代理的性能:

def test_q_learning_agent(agent):state = agent.env.reset()done = Falsewhile not done:action = agent.choose_action(state)next_state, _, done, _ = agent.env.step(action)agent.env.render()  # Display the grid worldstate = next_state

您可以致电test_q_learning_agent(agent)观察经过训练的代理如何在网格世界中导航。

此代码使用 OpenAI Gym 为网格世界环境提供了 Q 学习代理的基本实现。要构建更复杂的环境并应用深度强化学习算法,您可以探索其他 RL 库(例如 TensorFlow 或 PyTorch)并相应地调整代码。

四、结论 

        在这篇综合文章中,我们踏上了强化学习 (RL) 令人兴奋的世界的旅程,探索其基本概念和实际实施。让我们回顾一下关键要点:

强化学习基础知识:

  • 强化学习是机器学习的一个子领域,智能体通过与环境交互来学习做出顺序决策。
  • 代理感知状态、采取行动、接收奖励,并旨在随着时间的推移最大化累积奖励以实现特定目标。
  • 强化学习不同于监督学习和无监督学习等其他机器学习范式,因为它涉及从交互而不是标记数据中学习。

关键概念:

  • 代理和环境:代理与环境交互,做出决策以实现目标。
  • 奖励和目标:奖励提供反馈,目标定义代理的目标是最大化。
  • 探索与利用:尝试新动作和选择已知动作之间的权衡是强化学习的核心。
  • 马尔可夫决策过程 (MDP):MDP 提供了一个正式框架,用于对具有状态、动作、奖励和转移概率的 RL 问题进行建模。

实际实施:

  • 设置环境:我们使用 OpenAI Gym 创建了一个网格世界环境,定义状态、操作、奖励和转换。
  • 定义代理的策略和 Q 函数:我们实现了 Q 学习代理来根据 Q 值做出决策。
  • 实施 Q-learning:我们使用 Q-learning 训练智能体通过与环境交互来学习最优策略。
  • 训练代理:我们建立了一个训练循环来迭代改进代理的策略。
  • 评估智能体的性能:我们观察了经过训练的智能体如何驾驭环境以实现其目标。

鼓励探索强化学习:

        强化学习提供了一个强大的框架来解决复杂的顺序决策任务,从游戏代理到自主机器人等等。我们鼓励读者更深入地研究 RL,探索高级算法,并将这些知识应用到自己的项目中。强化学习解决现实世界挑战的潜力是无限的,这使其成为人工智能领域一个迷人的研究和应用领域。当您踏上强化学习之旅时,请记住实践、实验和持续学习是掌握这门令人着迷的学科的关键。

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

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

相关文章

数字与数学基础问题

关卡名 数字与数学基础问题 我会了✔️ 内容 1.数字里统计的处理技巧 ✔️ 2.必须熟练掌握溢的处理方法 ✔️ 3.掌握进制的处理方法 ✔️ 1. 数字统计专题 统计一下特定场景下的符号&#xff0c;或者数字个数等是一类非常常见的问题 。如果按照正常方式强行统计&#xf…

MX6ULL学习笔记 (八) platform 设备驱动实验

前言&#xff1a; 什么是 Linux 下的 platform 设备驱动 Linux下的字符设备驱动一般都比较简单&#xff0c;只是对IO进行简单的读写操作。但是I2C、SPI、LCD、USB等外设的驱动就比较复杂了&#xff0c;需要考虑到驱动的可重用性&#xff0c;以避免内核中存在大量重复代码&…

uc_13_共享内存_消息队列_IPC对象

1 IPC对象 多个IPC -> 一个IPC对象 -> 一个IPC对象标识符 -> 一个键(整数)(即IPC对象的外部名称) 共享内存、消息队列和信号量&#xff0c;这三种IPC一般被合称为XSI IPC&#xff0c;它们有很多相似之处。 为了实现进程间的数据交换&#xff0c;系统内核会为参…

dockerfile简单实践部署(jenkins,wordpress)

实现部署jenkins的流程 配置java环境&#xff0c;导入jenkins包&#xff0c;运行命令 java -jar jenkins包&#xff0c;这里为了减少进入jenkins的web端安装插件&#xff0c;将插件提前部署到容器内。 制作dockerfile 创建镜像所在的文件夹和Dockerfile文件 mkdir /test cd …

【项目日记(一)】高并发内存池项目介绍

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 项目日记 1. 前言2. 什么是高并发内存池…

Textual Inversion

参考博客1:https://www.bilibili.com/read/cv25430752/

移动云荣获OpenInfra社区“算力基础设施技术突破奖”

近日&#xff0c;一年一度的 OpenInfra Days China在北京召开&#xff0c;大会汇聚了全球各大云厂商的技术专家&#xff0c;共同分享全球前沿基础设施技术的展望和实践经验。在本次大会上&#xff0c;移动云荣获OpenInfra社区颁发的“算力基础设施技术突破奖”&#xff0c;表明…

基于ssm实验室课程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 摘 要 随着科学实验规模的不断扩大&#xff0c;实验室课程数量的急剧增加&#xff0c;有关实验室课程的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有…

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)

前言 开发 ChatGPT 应用&#xff0c;我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问&#xff0c;这没问题&#xff0c;会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢&#xff0c;我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…

基于SSM实现的公文管理系统

一、技术架构 前端&#xff1a;jsp | jquery | bootstrap 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 系统管理-角色管理 04. 系统管理-功能管理 05. 系统管理-用…

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多&#xff0c;但是还是很瘦&#xff0c;这让很多猫主人感到困惑&#xff0c;猫咪瘦弱的原因是什么呢&#xff1f;铲屎那么多年&#xff0c;还是有点子养猫知识在身上的。那么&#xff0c;小猫咪瘦弱的原因是什么呢&#xff1f;让我们看看是不是这些原因导致的…

详细解读电力DLT698.45-2017通信规约--正向有功总电能

建立连接请看这篇&#xff1a;详细解读DLT698.45-2017通信规约--预连接响应http://mp.weixin.qq.com/s?__bizMzA3NjAwMjQzMQ&mid2652026396&idx1&sna0a17f005d23136c922a7c381ddb7e75&chksm8481f30cb3f67a1a94e66db77e61fe73c22b1904fcdbb0144108e132b265e7b4…