揭秘强化学习: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.mzph.cn/news/195608.shtml

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

相关文章

YOLOv8独家原创改进:创新自研CPMS注意力,多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM

💡💡💡本文自研创新改进:自研CPMS, 多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM 1)作为注意力CPMS使用; 推荐指数:五星 CPMS | 亲测在多个数据集能够实现涨点,对标CBAM。 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/ca…

单个 Zip 文件体积超过 40GB

单个 Zip 文件体积超过 40GB WinRAR 平时用的多,不过有时候为了更好的通用性,也常常用到 zip 格式.查了一下资料,说是 zip 单个文件的体积不能超过 4GB. 自己动手试了下,用 WinRAR 创建出来的 zip 文件,大小可以超过 40GB, 如下图 为了压缩速度快,压缩方式用的是 “存储” Wi…

动能资讯 | 智能音箱—万物物联新纽带

音箱市场在过去几年经历了显着的增长&#xff0c;这主要得益于数字音乐的普及和技术创新的推动。随着语音助手技术的发展&#xff0c;智能音箱如Amazon Echo、Google Home、Apple HomePod等逐渐成为市场中的热点。这些音箱不仅提供音频播放功能&#xff0c;还整合了语音识别和智…

ACM32F070 RTC 引脚做普通 GPIO 用法配置

有场景需要把带RTC引脚功能的IO当做普通的GPIO使用&#xff0c;但是按照正常的GPIO初始化却无法使用&#xff0c;该芯片手册中有给出介绍 现给出配置方法&#xff0c;参考官方SDK里面PC13的配置&#xff1a; // PC13 GPIOC_Handle.Pin GPIO_PIN_13; GPIOC_Handle.Mod…

pngPackerGUI_V2.0是什么软件?png图片打包plist工具

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…

Python基础学习

基础语法 字面量 什么是字面量&#xff1a; 在代码中&#xff0c;被写下来的固定的值&#xff0c;称为字面量 | 类型 | 描述 | 说明 | | — | — | — | | 数组&#xff08;Number&#xff09; | 整数 int | 整数 | | | 浮点型 float | 浮点数 | | | 复数 complex | 复数 如 …

拼多多赚钱更难,利润率持续下滑

国内的电商圈又一次见证历史。 11月29日&#xff0c;拼多多盘中涨超4%&#xff0c;市值到达1924亿美元&#xff0c;首次超过阿里巴巴&#xff0c;成为美股市值最大中概股。 前一日&#xff0c;拼多多(NASDAQ:PDD)公布了2023年三季报&#xff0c;尽管营收和净利润双增&#xf…

前缀和例题:子矩阵的和AcWing796

//前缀和模板提,在读入数据的时候就可以先算好前缀和的大小 //计算前缀的时候用:g[i][j] g[i][j-1] g[i-1][j] - g[i-1][j-1] Integer.parseInt(init[j-1]); //计算结果的时候用:g[x2][y2] - g[x1 - 1][y2]- g[x2][y1-1] g[x1 -1][y1 - 1] "\n" //一些重复加的地…

固态硬盘与机械硬盘的区别

盘、磁道、扇区、柱面&#xff0c;这些都是机械硬盘的概念&#xff0c;固态硬盘没有这些东西&#xff0c;固态硬盘和机械硬盘虽然都叫硬盘&#xff0c;但是在原理层面有着本质上的区别。 速印机&#xff08;理想、荣大等&#xff09;、复印机&#xff08;夏普、东芝、理光、佳能…

Go 语言中的函数调用。

更好的观看体验&#xff0c;请点击——函数调用 | YinKais Blog 本文将从函数的调用惯例和参数传递方法两个方面分别介绍函数执行的过程。 1、调用惯例 对于不同的编程语言&#xff0c; 它们在调用函数的时候往往都使用相同的语法&#xff1a; somefunction(arg0, arg1) 虽…

Intellij idea 快速定位到文件的开头或者结尾的几种方式

方式一&#xff1a;Scroll To Top / Scroll To Bottom 首先打开Keymap设置&#xff0c;并搜索Scroll To 依次点击File->Settings->Keymap可打开该界面 对于Scroll To Top 快速滑动定位到文件顶部&#xff0c; Scroll To Bottom快速定位到文件底部 默认是没有设置快捷键的…

C++ Easyx 让圆球跟随鼠标移动

目录 下载Easyx 检验 绘制窗口 画圆 响应事件的处理 清除原先绘图 渲染缓冲区 逻辑 代码托管 下载Easyx 在Easyx官网下载大暑版: 检验 写如下代码: 编译运行&#xff0c;如果控制台出现2023字样&#xff0c;代表配置成功: 绘制窗口 进入Eaxy官方网站&#xff0c;点…

科研试剂实验室Tubulysin M微管蛋白抑制剂936691-46-2

Tubulysin M 微管蛋白抑制剂 M 936691-46-2 英文名称&#xff1a;Tubulysin M 中文名称&#xff1a;微管蛋白抑制剂 M 化学名称&#xff1a;(2S,4R)-4-[[2-[(1R,3R)-1-乙酰氧基-4-甲基-3-[甲基-[(2S,3S)-3-甲基-2-[[(2R) -1-甲基哌啶-2-羰基]氨基]戊酰基]氨基]戊基]-1,3-噻唑…

数据结构树,二叉树,堆

目录 ​编辑 1.树概念及结构 2. 树的表示 3.二叉树概念及结构 特殊的二叉树 二叉树的性质 ​编辑 二叉树选择题 二叉树的存储结构 4.堆的概念及结构 父亲孩子下标关系​编辑 堆的实现接口 堆结构体设计堆的初始化堆的销毁 堆的插入(附&#xff1a;向上调整算法) 堆…

spring日志输出到elasticsearch

1.maven <!--日志elasticsearch--><dependency><groupId>com.agido</groupId><artifactId>logback-elasticsearch-appender</artifactId><version>3.0.8</version></dependency><dependency><groupId>net.l…

22、为什么是卷积?

(本文已加入“计算机视觉入门与调优”专栏,点击专栏查看更多文章信息) 我们先看一看神经网络(或者叫一个AI模型),是如何完成一张图片的推理的。 你肯定听说过阿尔法狗大战柯洁的故事,当时新闻一出,不知大家什么反应,反正我是被震撼到了。机器竟然学到了那么多的棋谱,…

维度建模与数据仓库设计:理论与实践案例

文章目录 定义案例&#xff1a;零售销售数据仓库实践创建维度表创建事实表插入维度表数据插入事实表数据增改查 定义 维度建模是一种用于数据仓库设计的技术&#xff0c;它的目标是使数据库结构更加直观&#xff0c;易于理解和使用&#xff0c;特别是对于那些进行数据查询和报…

【OpenCV】计算机视觉图像处理基础知识

目录 前言 推荐 1、OpenCV礼帽操作和黑帽操作 2、Sobel算子理论基础及实际操作 3、Scharr算子简介及相关操作 4、Sobel算子和Scharr算子的比较 5、laplacian算子简介及相关操作 6、Canny边缘检测的原理 6.1 去噪 6.2 梯度运算 6.3 非极大值抑制 6.4 滞后阈值 7、Ca…

vue 用Nginx实现负载均衡

Nginx负载均衡的作用(相当于客户端的请求是发到Nginx上的&#xff0c;然后由Nginx决定到底调用哪台服务器): 在 .net core 中的具体实现步骤 1.在nginx官网上下载安装包&#xff0c;推荐稳定版&#xff1b; 建议1.18版本 2.下载完成后&#xff0c;到所在目录执行 nginx绿色图…