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

news2025/1/11 4:07:35

一、说明

        强化学习 (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 np

class 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, Right
        self.observation_space = spaces.Discrete(25)  # Grid size
        self.max_steps = 100
        self.current_step = 0
        self.goal = [4, 4]
        self.reward_range = (-10, 10)

    def reset(self):
        self.agent_position = [0, 0]
        self.current_step = 0
        return self.agent_position
    
    def step(self, action):
        self.current_step += 1
        if action == 0:  # Up
            self.agent_position[0] = max(0, self.agent_position[0] - 1)
        elif action == 1:  # Down
            self.agent_position[0] = min(4, self.agent_position[0] + 1)
        elif action == 2:  # Left
            self.agent_position[1] = max(0, self.agent_position[1] - 1)
        elif action == 3:  # Right
            self.agent_position[1] = min(4, self.agent_position[1] + 1)

        state = self.agent_position
        reward = 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 np

class QLearningAgent:
    def __init__(self, env, learning_rate=0.1, discount_factor=0.9, exploration_prob=1.0, exploration_decay=0.995):
        self.env = env
        self.learning_rate = learning_rate
        self.discount_factor = discount_factor
        self.exploration_prob = exploration_prob
        self.exploration_decay = exploration_decay
        self.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 = False
        while 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_state
        agent.decay_exploration_prob()

3.4 第 4 步:培训代理

训练 Q-learning 代理:

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

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

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

def test_q_learning_agent(agent):
    state = agent.env.reset()
    done = False
    while not done:
        action = agent.choose_action(state)
        next_state, _, done, _ = agent.env.step(action)
        agent.env.render()  # Display the grid world
        state = 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.coloradmin.cn/o/1282250.html

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

相关文章

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下&#xff0c;可以通过 --skip-grant-tables 关闭服务器的认证&#xff0c;然后重置 root 的密码&#xff0c;具体操作步骤如下。 步骤 1)&#xff1a;关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2)&#xff1a;输入mysqld -…

【面试经典150 | 二分查找】搜索二维矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等…

他山之石,可以攻玉|银行业数据中心数字化转型之模型篇 04(完结)

导语&#xff1a;他山之石&#xff0c;可以攻玉&#xff5c;银行业数据中心数字化转型之模型篇 04&#xff08;完结&#xff09; 银行业数据中心数字化转型是一项系统性工程既涉及管理层面转型——包括数字化转型战略、基础架构和技术架构转型、技术创新和知识体系转型&#xf…

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

From&#xff1a;https://www.sqlsec.com/2018/05/termux.html Termux 高级终端安装使用配置教程 &#xff1a;https://www.cnblogs.com/cutesnow/p/11430833.html 神器Termux 的使用记录&#xff1a;https://cloud.tencent.com/developer/article/1609398 ​adb shell 下使用 …

【IEEE独立出版|Ei会议征稿中】第五届信息科学与并行、分布式处理国际学术会议(ISPDS 2024)

第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2023&#xff09; 2023 5th International Conference on Information Science, Parallel and Distributed Systems 第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2023&#xff09;定于20…

使用Redis构建简易社交网站(2)-处理用户关系

目的 本文目的&#xff1a;实现用户关注和取消关注功能。&#xff08;完整代码附在文章末尾&#xff09; 相关知识 在我之前的文章 《使用Redis构建简易社交网站(1)-创建用户与动态界面》中提到了如何实现简易社交网站中创建新用户和创建新动态功能。 那这篇文章将教会你掌…

Java 使用Graphics生成海报图片(附效果图)

生成流程 1、创建画布 2、开启画图 3、画布上加载背景图片 4、画布上指定坐标绘制二维码&#xff08;关于二维码实现的参考文后的链接&#xff09; 5、将最终的图存放在本地 6、将图片url返回给前端 主要代码&#xff1a; PostMapping(value "/getPoster")public R…

I/O口接口扩展----82C55

目录 一.扩展的I/O接口功能 二.端口的编址 1.独立编址 2.统一编制 三.I/O数据的传送方式 四.I/O接口电路----82C55 1.82C55的引脚及其内部结构 2.工作方式选择控制字及端口PC置位/复位控制字 3.82C55的三种工作方式 (1)方式0 (2)方式1 (3)方式2 4.AT89S52单片机与…

麒麟V10安装kerberos客户端

麒麟V10系统安装kerberos客户端 当系统具备yum镜像源的时候需要执行安装命令 yum install krb5-devel krb5-client krb5-libs -y 会提示报错 “未找到匹配的参数:krb5-client” 此时我们需要手动安装krb5-client 安装包链接放到了这里 链接: https://pan.baidu.com/s/1x1YVr6…

k8s中批量处理Pod应用的Job和CronJob控制器、处理守护型pod的DaemonSet控制器介绍

目录 一.Job控制器 1.简介 2.Jobs较完整解释 3.示例演示 4.注意&#xff1a;如上例的话&#xff0c;执行“kubectl delete -f myJob.yaml”就可以将job删掉 二.CronJob&#xff08;简写为cj&#xff09; 1.简介 2.CronJob较完整解释 3.案例演示 4.如上例的话&#xf…

数据“表”的增删改查

创建数据表 删除数据表 修改数据表 查看数据表 喜欢点赞收藏&#xff0c;如有疑问&#xff0c;点击链接加入群聊【信创技术交流群】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kEjDhISXNgJlMMemn85viUFgIqzkDY3OC&authKey2SKLwlmvTpbqlaQtJ%2FtFXJgHVgl…

适用于 Windows 的 10 个顶级分区管理器软件

您想要对硬盘驱动器或 USB 驱动器进行分区的原因可能有多种。许多用户希望对其外部和内部硬盘驱动器进行分区以有效地管理数据。为了处理分区&#xff0c;Windows为用户提供了一个内置的分区管理工具。 Windows 用户可以通过磁盘管理面板对任何驱动器进行分区。然而&#xff0…

『VUE3后台—大事件管理系统(已完结)』

项目地址&#xff1a;https://gitee.com/csheng-gitee/vue3-big-event-admin 技术栈&#xff1a;VUE3 Pinia Pnpm&#xff08;本项目暂不用 typescript&#xff09; 一、前期准备工作 1、创建项目 npm install -g pnpm pnpm create vue2、ESLint 配置 (1) 禁用 prettier 插…

做销售的时候为什么你的内心会恐惧?

做销售的时候为什么你的内心会恐惧&#xff1f; 做销售的时候&#xff0c;很多人的内心会感到恐惧。这种恐惧可能来自于对自己业绩的担忧&#xff0c;或者是对被拒绝的恐惧。但是&#xff0c;恐惧并不是我们该有的心态。在销售中&#xff0c;我们需要保持自信和冷静&#xff0…

线上超市小程序可以做什么活动_提升用户参与度与购物体验

标题&#xff1a;线上超市小程序&#xff1a;精心策划活动&#xff0c;提升用户参与度与购物体验 一、引言 随着移动互联网的普及&#xff0c;线上购物已经成为人们日常生活的一部分。线上超市作为线上购物的重要组成部分&#xff0c;以其便捷、快速、丰富的商品种类和个性化…

直击2023云栖大会-大模型时代到来:“计算,为了无法计算的价值”

2023年的云栖大会以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;强调了计算技术在现代社会中的重要性&#xff0c;特别是在大模型时代到来的背景下。 大模型时代指的是以深度学习为代表的人工智能技术的快速发展&#xff0c;这些技术需要大量的计算资源来训练和优…

机器学习决策树ID3算法

1、先去计算总的信息量 2、根据不同指标分别计算对应的信息增益 3、根据算出的信息增益来选择信息增益最大的作为根结点 4、天气中选择一个继续上述过程 5、决策树划分结束

基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的秒杀系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xf…

服务器数据恢复—ocfs2文件系统被格式化为其他文件系统如何恢复数据?

服务器故障&#xff1a; 由于工作人员的误操作&#xff0c;将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上&#xff0c;导致原Ocfs2文件系统被格式化为Ext4文件系统。 由于Ext4文件系统每隔几百兆就会写入文件系统的原始信息&#xff0c;原Ocfs2文件系统数据会遭受一定程度…

电脑监控软件是隐藏安装吗?

电脑监控软件通常可以隐藏安装。 这种类型的软件可能是通过企业管理者下载或拷贝到员工的电脑上的。因为程序包比较小&#xff0c;安装过程也比较简单&#xff0c;所以操作起来也很方便。 企业管理者的这种操作基本上是为了更好管控公司的电脑运行、防止员工恶意泄露公司的机密…