揭秘强化学习: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 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,探索高级算法,并将这些知识应用到自己的项目中。强化学习解决现实世界挑战的潜力是无限的,这使其成为人工智能领域一个迷人的研究和应用领域。当您踏上强化学习之旅时,请记住实践、实验和持续学习是掌握这门令人着迷的学科的关键。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyRecovery14破解版官方软件安装包下载

Ontrack EasyRecovery 是一款功能强大的数据恢复软件&#xff0c;它可以帮助用户从各种存储设备中恢复丢失或删除的数据。它支持多种文件系统和文件类型&#xff0c;可以恢复包括照片、视频、音频、文档、电子邮件和归档文件等不同类型的数据。 Ontrack EasyRecovery 是一款非常…

基于Arduino的音乐喷泉设计(论文+源码)

1.系统设计 整个Audio Visualizer系统通过锂电池电源进行供电&#xff0c;当Arduino控制板通过蓝牙音频接收器模块与手机蓝牙完成匹配后&#xff0c;然后通过蓝牙音频接收器模块接收来自手机的音乐&#xff0c;接着通过对音乐进行FFT变换来得到音乐的频率数据&#xff0c;接着…

Java——》JSONObjet 数据顺序

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

Python小项目:葛兰中欧医疗基金数据分析

1 前言 2022年1月末&#xff0c;正值年前&#xff0c;股票市场持续大幅下跌&#xff0c;与之相应的基金市场也出现了近一周的持续跌势。作为一个资深的投资者&#xff0c;我承认自己曾是一名“韭菜”&#xff0c;在2021年12月初购买了中欧医疗健康混合C基金。这只基金由医疗板…

Anaconda详细安装步骤图文教程

文章目录 前言一、什么是Anaconda?二、为什么安装Anaconda三、如何安装AnacondaAnaconda关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试…

quickapp_快应用_父子组件传值

目录 页面级组件自定义组件(子组件)引入自定义组件(子组件)父组件给子组件传值子组件给父组件进行传值父组件调用子组件的方法 页面级组件 在pages中定义的组件被称为页面级组件。 页面级组件(等同于Vue页面)&#xff0c;通过路由配置可以进行页面跳转。 自定义组件(子组件)…

InnoDB的B+树索引(一)

文章目录 概要一、InnoDB行格式二、InnoDB数据页结构2.1 User Records2.2 两个虚拟行记录2.3 PageDirectory&#xff08;页目录&#xff09;2.4 File Header&#xff08;文件头部&#xff09; 三、B树索引3.1 B树索引结构3.2 先有根节点再有叶子节点3.3 一条记录在索引中的查找…

(c语言进阶)结构体内存对齐和修改默认对齐数

一.结构体内存对齐 结构体内存大小计算方法&#xff1a; 偏移量&#xff1a;是指某个成员在结构体中相对于结构体首地址的偏移字节数。在计算机中&#xff0c;结构体是一种自定义数据类型&#xff0c;它由多个不同类型的成员组成。每个成员在内存中的存储位置是连续的&#xf…

短波红外相机的原理及应用场景

短波红外 (简称SWIR&#xff0c;通常指0.9~1.7μm波长的光线) 是一种比可见光波长更长的光。这些光不能通过“肉眼”看到&#xff0c;也不能用“普通相机”检测到。由于被检测物体的材料特性&#xff0c;一些在可见光下无法看到的特性&#xff0c;却能在近红外光下呈现出来&…

231203 刷题日报

周天&#xff0c;阳光明媚&#xff0c;期待一切顺利。 上午回顾了昨天刷的题&#xff1a; 快排、十字链表、两数组公共元素 下午看子序列&#xff1a; 300. 最长递增子序列 53. 最大子数组和 这两个题对比&#xff0c;子序列因为有“递增”限制&#xff0c;且不连续&#…

Vue项目解决van-calendar 打开下拉框显示空白(白色),需滑动一下屏幕,才可正常显示

问题描述&#xff0c;如图 ipad(平板&#xff09;或者 H5移动端引入Vant组件的日历组件&#xff08;van-calendar&#xff09;&#xff0c;初始化显示空白&#xff0c;需滚动一下屏幕&#xff0c;才可正常显示 解决方法 需在van-calendar上绑定open"openCalendar"事件…

SAP GRID-ALV复选框+GRID事件

实现功能: 复选框\设置复选框是否可编辑\实现changed_finished事件. 一、ALV增加复选框&#xff1a; 1.1、在输出内表里增加一个SEL的字段&#xff1a; sel TYPE c, 1.2、在build_fieldcat FORM里设置checkbox属性和edit属性&#xff0c;并输出SEL字段&#xff1a;…

机器人制作开源方案 | 校园餐具回收分类机器人

作者&#xff1a;梁桥、吴振宇、凌福海、李清轩、姜晓敏 单位&#xff1a;华北科技学院 指导老师&#xff1a;韩红利、张伟杰 1. 场景调研 1.1 项目实施目的 受新冠病毒引起的影响&#xff0c;人们生产生活发生了巨大的改变。现处于疫情防控常态化阶段&#xff0c;为应对点状…

ElementUI+vue+nodejs培训学校课程预约网站的设计与开发

该系统将采用B/S结构模式&#xff0c;前端部分主要使用html、css、JavaScript等技术&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端部分将使用Nodejs来搭建服务器&#xff0c;并使用MySQL建立后台数据系统&#xff0c;通过axios完成前后端的交互&#xff0c;…

题目:神奇的进制

解题思路&#xff1a; 用电脑自带的计算器&#xff0c;切换到程序员模式。里面有进制转换功能。 由题目&#xff0c;要求严格递增且都为字母&#xff0c;还要大于2023&#xff0c;则数字16进制为ABC。

❀My学习Linux命令小记录(10)❀

目录 ❀My学习Linux命令小记录&#xff08;10&#xff09;❀ 36.fold指令 37.expr指令 38.iperf指令 39.telnet指令 40.ssh指令 ❀My学习Linux命令小记录&#xff08;10&#xff09;❀ 36.fold指令 功能说明&#xff1a;控制文件内容输出时所占用的屏幕宽度&#xff0c…

智能优化算法应用:基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.供需算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

基于PHP的在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

善网商城上线洁柔产品 公益人专享爱心价官方正品

近日&#xff0c;中国善网慈善商城&#xff08;以下简称善网商城&#xff09;系统经升级后重新上线。目前善网商城线上销售的中顺洁柔旗下慈善产品已顺利获得中顺洁柔纸业股份有限公司授权&#xff0c;双方就合作事宜达成共识&#xff0c;并于近日签订线上经营授权书。 &#x…

Optional源码分析(涉及Objects源码和Stream源码)

研究Optional源码之前先谈一谈Objects源码。 主要代码&#xff1a; ForceInlinepublic static <T> T requireNonNull(T obj) {if (obj null) {throw new NullPointerException();} else {return obj;}}ForceInlinepublic static <T> T requireNonNull(T obj, Str…