强化学习入门:从马尔可夫决策过程到 Q-learning
强化学习的目标是让智能体通过与环境的交互,学习到一种最优的行为策略,从而最大化累积奖励。Python复制# 定义迷宫环境])self.actions = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 右、左、下、上else:else:通过本文的介绍,你已经从零开始了解了强化学习的基本概念,掌握了马尔可夫决策过程(MDP)和 Q-learning 算法的原理,并通过实战案
强化学习是机器学习领域中一个极具挑战性和趣味性的分支,它通过智能体(Agent)与环境(Environment)的交互来学习最优的行为策略。近年来,强化学习在许多领域取得了显著的成果,例如 AlphaGo 战胜人类围棋冠军、机器人控制、自动驾驶等。对于初学者来说,理解强化学习的基本概念和核心算法是迈入这一领域的关键。本文将带你从零开始,深入浅出地介绍强化学习的基础——马尔可夫决策过程(MDP)和 Q-learning 算法。
一、强化学习概述
强化学习的目标是让智能体通过与环境的交互,学习到一种最优的行为策略,从而最大化累积奖励。强化学习的核心要素包括:
(一)智能体(Agent)
智能体是学习的主体,它根据当前的状态选择动作,并根据环境的反馈进行学习。
(二)环境(Environment)
环境是智能体所处的外部世界,它根据智能体的动作给出反馈,包括新的状态和奖励。
(三)状态(State)
状态是环境的描述,它反映了环境在某一时刻的特征。
(四)动作(Action)
动作是智能体在某一状态下可以采取的行为。
(五)奖励(Reward)
奖励是环境对智能体行为的反馈,它是一个标量值,用于衡量智能体行为的好坏。
(六)策略(Policy)
策略是智能体的行为准则,它决定了在某一状态下应该采取的动作。
(七)价值函数(Value Function)
价值函数用于衡量状态或动作的价值,它反映了从某一状态或动作开始,未来累积奖励的期望值。
二、马尔可夫决策过程(MDP)
马尔可夫决策过程是强化学习的数学模型,它为强化学习提供了一个形式化的框架。MDP 包括以下几个要素:
(一)状态集合 S
状态集合是所有可能状态的集合。
(二)动作集合 A
动作集合是所有可能动作的集合。
(三)转移概率 P(s′∣s,a)
转移概率表示在状态 s 下,采取动作 a 后转移到状态 s′ 的概率。
(四)奖励函数 R(s,a,s′)
奖励函数表示在状态 s 下,采取动作 a 并转移到状态 s′ 时获得的奖励。
(五)折扣因子 γ
折扣因子用于衡量未来奖励的当前价值,其取值范围为 0≤γ≤1。折扣因子越小,智能体越关注即时奖励;折扣因子越大,智能体越关注长期奖励。
三、Q-learning 算法
Q-learning 是一种经典的强化学习算法,它是一种无模型的值函数方法。Q-learning 的目标是学习一个最优的 Q 函数 Q∗(s,a),表示在状态 s 下采取动作 a 的最优价值。
(一)Q 函数
Q 函数 Q(s,a) 表示在状态 s 下采取动作 a 的价值,它反映了从状态 s 开始,采取动作 a 后的未来累积奖励的期望值。
(二)Q-learning 算法
Q-learning 算法通过迭代更新 Q 函数来学习最优策略。其更新公式如下:
Q(st,at)←Q(st,at)+α[rt+1+γmaxaQ(st+1,a)−Q(st,at)]
其中:
-
α 是学习率,控制更新的步长。
-
γ 是折扣因子,衡量未来奖励的当前价值。
-
rt+1 是在状态 st 下采取动作 at 后获得的奖励。
-
maxaQ(st+1,a) 是在状态 st+1 下所有可能动作的最大 Q 值。
(三)探索与利用
在 Q-learning 中,智能体需要在探索(Exploration)和利用(Exploitation)之间进行平衡。探索是指尝试新的动作以获取更多的信息,而利用是指选择当前最优的动作以获得最大的奖励。常用的探索策略包括 ϵ-贪婪策略(Epsilon-Greedy Strategy):
-
以概率 ϵ 随机选择一个动作(探索)。
-
以概率 1−ϵ 选择当前最优的动作(利用)。
四、Q-learning 的 Python 实现
以下是一个使用 Q-learning 算法解决简单迷宫问题的示例。迷宫问题是一个经典的强化学习任务,智能体需要从起点出发,通过选择上下左右四个方向的动作,到达终点并获取奖励。
(一)环境定义
Python
复制
import numpy as np
# 定义迷宫环境
class Maze:
def __init__(self):
self.maze = np.array([
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 1, 0]
])
self.start = (0, 0)
self.goal = (4, 4)
self.actions = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 右、左、下、上
def reset(self):
self.state = self.start
return self.state
def step(self, action):
new_state = (self.state[0] + action[0], self.state[1] + action[1])
if 0 <= new_state[0] < self.maze.shape[0] and 0 <= new_state[1] < self.maze.shape[1]:
if self.maze[new_state] == 1:
reward = -1
done = True
elif new_state == self.goal:
reward = 10
done = True
else:
reward = -0.1
done = False
self.state = new_state
else:
reward = -1
done = False
return self.state, reward, done
(二)Q-learning 算法
Python
复制
import random
# 初始化 Q 表
def initialize_q_table(maze):
q_table = np.zeros((maze.maze.shape[0], maze.maze.shape[1], len(maze.actions)))
return q_table
# Q-learning 算法
def q_learning(maze, q_table, episodes=1000, alpha=0.1, gamma=0.9, epsilon=0.1):
for episode in range(episodes):
state = maze.reset()
done = False
while not done:
if random.uniform(0, 1) < epsilon:
action_idx = random.randint(0, len(maze.actions) - 1)
else:
action_idx = np.argmax(q_table[state])
action = maze.actions[action_idx]
next_state, reward, done = maze.step(action)
next_max_q = np.max(q_table[next_state])
q_table[state][action_idx] += alpha * (reward + gamma * next_max_q - q_table[state][action_idx])
state = next_state
return q_table
# 创建迷宫环境
maze = Maze()
# 初始化 Q 表
q_table = initialize_q_table(maze)
# 训练 Q-learning 模型
q_table = q_learning(maze, q_table)
# 测试最优策略
state = maze.reset()
done = False
while not done:
action_idx = np.argmax(q_table[state])
action = maze.actions[action_idx]
state, reward, done = maze.step(action)
print(f"State: {state}, Action: {action}, Reward: {reward}")
五、总结与展望
通过本文的介绍,你已经从零开始了解了强化学习的基本概念,掌握了马尔可夫决策过程(MDP)和 Q-learning 算法的原理,并通过实战案例体验了 Q-learning 在迷宫问题中的应用。Q-learning 是强化学习中一种非常重要的算法,它为解决复杂的决策问题提供了强大的工具。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)