基于强化学习的 Agent 训练:从理论到代码实现
强化学习(Reinforcement Learning, RL)是机器学习的一个分支,它关注的是智能体(Agent)如何在动态环境中通过与环境的交互来学习策略,以最大化累积奖励。智能体在环境中采取动作,环境根据动作反馈给智能体奖励和新的状态,智能体的目标是通过不断试错,找到能够获得最大长期奖励的策略。本文介绍了强化学习的基础概念、常见算法以及 Agent 训练的步骤,并通过代码示例展示了 Q -
一、强化学习基础
(一)强化学习定义
强化学习(Reinforcement Learning, RL)是机器学习的一个分支,它关注的是智能体(Agent)如何在动态环境中通过与环境的交互来学习策略,以最大化累积奖励。智能体在环境中采取动作,环境根据动作反馈给智能体奖励和新的状态,智能体的目标是通过不断试错,找到能够获得最大长期奖励的策略。
(二)核心概念
- 智能体(Agent):在环境中执行动作的实体,它通过感知环境状态并采取行动来与环境交互。
- 环境(Environment):智能体之外的所有事物,它接收智能体的动作,并向智能体反馈新的状态和奖励。
- 状态(State):表示环境在某一时刻的特征,是智能体决策的依据。
- 动作(Action):智能体在当前状态下可以采取的行为。
- 奖励(Reward):环境对智能体动作的反馈信号,用于评估动作的好坏,智能体的目标是最大化累积奖励。
- 策略(Policy):智能体从状态到动作的映射关系,它决定了智能体在给定状态下选择什么动作,分为确定性策略和随机性策略。
- 价值函数(Value Function):用于评估在某个状态下采取某种策略的长期奖励预期,常见的有状态价值函数和动作价值函数。
- 模型(Model):对环境的描述,包括环境的状态转移概率和奖励函数。
(三)强化学习类型
- 基于价值的方法(Value - Based Methods):通过学习价值函数来间接获取最优策略,如 Q - Learning、深度 Q 网络(DQN)等。
- 基于策略的方法(Policy - Based Methods):直接学习策略函数,如策略梯度(Policy Gradient)算法。
- Actor - Critic 方法:结合了基于价值和基于策略的方法,既有价值函数评估状态的好坏,又有策略函数生成动作。
二、强化学习算法
(一)Q - Learning 算法
Q - Learning 是一种基于价值的离线学习算法,它的核心思想是学习一个动作价值函数 Q (s, a),表示在状态 s 下采取动作 a 后,遵循最优策略所能获得的期望累积奖励。
算法流程
- 初始化 Q 表,Q 表的大小为状态空间大小乘以动作空间大小,初始值可以设为 0 或随机值。
- 对于每个 episode:
- 初始化状态 s。
- 对于每个时间步 t:
- 根据 ε - greedy 策略选择动作 a,其中 ε 是探索率,以 ε 的概率随机选择动作,以 1 - ε 的概率选择当前 Q 表中 Q 值最大的动作。
- 执行动作 a,得到新的状态 s' 和奖励 r。
- 更新 Q 值:Q (s, a) = Q (s, a) + α[r + γ max_a' Q (s', a') - Q (s, a)],其中 α 是学习率,γ 是折扣因子。
- 将 s 更新为 s',直到达到终止状态。
(二)深度 Q 网络(DQN)
DQN 是将深度神经网络与 Q - Learning 相结合的算法,用于处理状态空间较大的问题。它使用深度神经网络来近似动作价值函数 Q (s, a; θ),其中 θ 是网络的参数。
关键技术
- 经验回放(Experience Replay):将智能体与环境交互得到的样本存储在经验池中,随机抽取样本进行训练,以打破样本之间的相关性,提高训练的稳定性。
- 目标网络(Target Network):引入一个目标网络来计算目标 Q 值,定期更新目标网络的参数,减少训练过程中的目标波动。
(三)策略梯度算法
策略梯度算法直接对策略函数进行参数化,通过梯度上升的方法最大化期望累积奖励。常见的策略梯度算法有 REINFORCE 算法。
算法流程
- 定义策略函数 πθ(a|s),表示在参数 θ 下,状态 s 时采取动作 a 的概率。
- 对于每个 episode:
- 从初始状态开始,按照策略 πθ 采样轨迹 s1, a1, r1, s2, a2, r2, ..., sT, aT, rT。
- 计算每个时间步 t 的累积奖励 Rt = Στ=t^T γ^(τ - t) rτ。
- 计算梯度估计:∇θ J (θ) ≈ Σt=1^T ∇θ log πθ(at|st) Rt。
- 使用梯度上升更新策略参数 θ:θ = θ + α ∇θ J (θ),其中 α 是学习率。
三、Agent 训练步骤
(一)问题建模
明确智能体的任务目标,确定状态空间、动作空间和奖励函数。例如,在机器人控制问题中,状态可以是机器人的位置、速度、关节角度等,动作可以是电机的控制信号,奖励可以设定为完成任务的程度或能量消耗等。
(二)环境搭建
可以使用现有的强化学习环境库,如 OpenAI Gym,它提供了丰富的模拟环境,如 Atari 游戏、机器人控制任务等。也可以根据实际问题自定义环境,环境需要实现 reset () 方法(重置环境到初始状态)、step (action) 方法(执行动作并返回新的状态、奖励、是否终止等信息)。
(三)算法选择与实现
根据问题的特点选择合适的强化学习算法。如果状态空间和动作空间较小,可以选择 Q - Learning 等简单算法;如果状态空间是高维的图像等数据,适合使用 DQN 等基于深度神经网络的算法;如果需要直接优化策略,策略梯度算法是不错的选择。然后根据算法原理编写代码,实现智能体与环境的交互、数据的存储和训练等功能。
(四)训练与调优
将智能体放入环境中进行训练,记录训练过程中的奖励、状态等数据。通过分析训练数据,调整算法的超参数,如学习率、折扣因子、探索率等,以提高智能体的性能。同时,可以采用一些技巧,如早停法(当奖励不再提升时停止训练)、模型保存(保存训练好的模型以便后续使用)等。
四、代码实现示例(以 Q - Learning 求解 CartPole 问题为例)
(一)安装所需库
|
!pip install gym |
(二)导入库
|
import gym import numpy as np import random |
(三)初始化环境和参数
|
env = gym.make('CartPole - v1') state_space = env.observation_space.shape[0] action_space = env.action_space.n # 超参数 alpha = 0.1 # 学习率 gamma = 0.95 # 折扣因子 epsilon = 0.1 # 探索率 num_episodes = 1000 max_steps_per_episode = 500 # 初始化Q表 Q = np.zeros((state_space, action_space)) |
(四)Q - Learning 算法实现
|
for episode in range(num_episodes): state = env.reset() done = False for step in range(max_steps_per_episode): # 根据ε - greedy策略选择动作 if random.uniform(0, 1) < epsilon: action = env.action_space.sample() # 随机选择动作 else: action = np.argmax(Q[state, :]) # 选择Q值最大的动作 # 执行动作,获取下一个状态和奖励 next_state, reward, done, info = env.step(action) # 更新Q值 old_value = Q[state, action] next_max = np.max(Q[next_state, :]) new_value = old_value + alpha * (reward + gamma * next_max - old_value) Q[state, action] = new_value state = next_state if done: break if episode % 100 == 0: print(f"Episode {episode}, Reward: {step + 1}") |
(五)测试训练好的智能体
|
state = env.reset() done = False total_reward = 0 while not done: action = np.argmax(Q[state, :]) next_state, reward, done, info = env.step(action) total_reward += reward state = next_state env.render() print(f"Total Reward: {total_reward}") env.close() |
五、总结
(一)总结
本文介绍了强化学习的基础概念、常见算法以及 Agent 训练的步骤,并通过代码示例展示了 Q - Learning 算法在 CartPole 问题中的应用。强化学习在解决序列决策问题方面具有强大的能力,但其训练过程通常需要大量的样本和计算资源,并且在复杂环境中容易出现收敛困难等问题。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)