强化学习
使用 Python 实现 AI – 强化学习
Section titled “使用 Python 实现 AI – 强化学习”强化学习(Reinforcement Learning,简称 RL)是一种机器学习范式,其中智能体(Agent)通过与环境(Environment)互动来学习如何做出决策。智能体根据其行为接收奖励(Reward)或惩罚(Penalty),目标是随时间最大化其累积奖励。
强化学习的核心概念
Section titled “强化学习的核心概念”RL 涉及智能体通过试错(trial and error)学习最优行为。与监督学习不同,对于每个动作没有明确的“正确答案”。相反,智能体从环境接收反馈(奖励或惩罚),这些反馈“强化”好的动作并抑制坏的动作。这个过程使智能体能够制定一个策略(Policy),以最大化其长期奖励。
[图片描述:一个图表,说明了强化学习循环。一个“智能体”在“环境”中执行一个“动作”。环境转换为新的“状态”,并向智能体提供“奖励”(和观察)。这个循环重复进行。]
关键组成部分:智能体和环境
Section titled “关键组成部分:智能体和环境”RL 中有两个主要组成部分:智能体和环境。
智能体 (Agent)
Section titled “智能体 (Agent)”智能体是学习者或决策者。它感知环境的状态(State),选择动作(Action),并接收奖励。
- 人类智能体使用感官(眼睛、耳朵)作为传感器(Sensor),使用物理动作(手、腿)作为执行器(Actuator)。
- 机器人智能体可能使用摄像头和激光雷达作为传感器,使用电机作为执行器。
- 软件智能体(例如,玩游戏)处理游戏数据作为输入,并输出游戏指令。
- 状态 (S):环境在特定时间的表示。
- 动作 (A):智能体从一组可能的动作中做出的选择。
- 奖励 (R):环境提供的反馈,指示在某个状态下执行某个动作的即时期望值。
- 策略 (π):智能体的策略,将状态映射到动作。它定义了智能体的行为方式。
- 值函数 (V 或 Q):估计在给定策略下,从一个状态或状态-动作对获得的预期长期回报(累积奖励)。
- 观察 (Observation):智能体从环境中实际感知到的信息。这可能是完整状态或部分视图。
- 回合 (Episode):从起始状态到终止状态的一系列状态、动作和奖励。
环境 (Environment)
Section titled “环境 (Environment)”环境是智能体以外的一切。它定义了智能体运行的世界,包括状态转移和奖励生成的规则。
环境范围广泛,可以是从简单的模拟世界(如游戏)到复杂的现实世界系统(如在房间中导航的机器人或管理金融投资组合)。
环境可以通过以下几个属性来描述:
- 离散/连续:状态空间和动作空间可以是离散的(有限的可能性集合)或连续的(在一定范围内的值)。
- 可观察/部分可观察:如果智能体可以感知完整状态,则是可观察的(MDP - 马尔可夫决策过程)。如果只有部分信息可用,则是部分可观察的(POMDP - 部分可观察马尔可夫决策过程)。
- 确定性/随机性:如果下一个状态和奖励完全由当前状态和动作决定,则是确定性的。否则,则是随机的。
- 回合式/持续式:回合式任务有明确的开始和结束(例如,一局游戏)。持续式任务无限期地进行(例如,保持平衡的机器人)。
- 单智能体/多智能体:涉及一个智能体或多个相互交互的智能体。
[图片描述:一个概念表格或列表,概述了环境的属性,如离散/连续、可观察/部分可观察、静态/动态等,并提供了简短的解释或示例。]
使用 Gymnasium (前称 OpenAI Gym) 构建环境
Section titled “使用 Gymnasium (前称 OpenAI Gym) 构建环境”Gymnasium 是一个广泛使用的工具包,用于开发和比较 RL 算法。它提供了一系列标准化的环境。可以使用 pip 安装:
pip install gymnasiumGymnasium 提供了各种环境,例如 CartPole-v1(平衡推车上的杆子)、MountainCar-v0 和 Atari 游戏环境(需要 pip install gymnasium[atari])。文档:https://gymnasium.farama.org/
示例:通过采取随机动作与 CartPole-v1 环境交互。
import gymnasium as gym
# Create the CartPole environment# Use render_mode='human' to see the visualizationenv = gym.make('CartPole-v1', render_mode='rgb_array') # or 'human' for a pop-up window
# Reset the environment to get an initial observationobservation, info = env.reset(seed=42) # seed for reproducibility
for _ in range(100): # Run for 100 timesteps # Render the environment (optional, creates an array for later display) # For 'human' mode, env.render() is called implicitly by step usually or not needed # frame = env.render()
# Take a random action from the action space action = env.action_space.sample()
# Perform the action and get the next state, reward, and other info # The step function returns: observation, reward, terminated, truncated, info observation, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
if done: print(f"Episode finished after {_ + 1} timesteps") observation, info = env.reset(seed=42) # Reset for next episode if needed # break # If you only want to run one episode
env.close() # Close the environment window and resourcesprint("Simulation finished.")[图片描述:一个概念动画或系列帧,展示了 CartPole 环境。一辆推车在轨道上左右移动,顶部铰接着一根杆子。目标是通过对推车施加力来保持杆子直立平衡。]
这段代码演示了基本的交互循环:重置(reset)、采样动作(sample action)、步进(step)。一个真正的 RL 智能体将使用策略(policy)来选择动作,而不是 env.action_space.sample()。
学习型智能体的组成要素
Section titled “学习型智能体的组成要素”一个学习型智能体通常包含以下一个或多个组成部分:
- 策略(Policy):决定在给定状态下采取哪个动作。
- 值函数(Value function):预测处于某个状态或在某个状态下采取某个动作的未来奖励。
- 模型(可选):环境动态(状态如何转移和奖励如何生成)的表示。
下面的示例展示了智能体与环境的交互结构。一个完整的学习型智能体将涉及一个算法(如 Q 学习或策略梯度)来根据经验更新其策略或值函数。
import gymnasium as gym
# env = gym.make('CartPole-v1', render_mode='human')env = gym.make('CartPole-v1') # No rendering for faster loops if not needed for demo
num_episodes = 5max_steps_per_episode = 100
for episode in range(num_episodes): observation, info = env.reset() print(f"Episode {episode + 1} started.")
for step in range(max_steps_per_episode): # In a real agent, action would be chosen by a policy action = env.action_space.sample()
new_observation, reward, terminated, truncated, info = env.step(action)
# Here, a learning algorithm would update the policy/value function # e.g., store (observation, action, reward, new_observation)
observation = new_observation done = terminated or truncated
if done: print(f" Episode finished after {step + 1} timesteps.") break
env.close()[图片描述:类似于 CartPole 的可视化,可能展示了几次成功保持杆子平衡的步骤,强调智能体的目标是延长这种状态。]
这个结构构成了实现各种 RL 算法的基础。智能体的目标是学习一个能够最大化一个回合中(或对于持续任务而言无限期地)奖励总和(回报 - return)的策略。