强化学习是机器学习领域中一个极具挑战性和趣味性的分支,它通过智能体(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​+γmaxa​Q(st+1​,a)−Q(st​,at​)]

其中:

  • α 是学习率,控制更新的步长。

  • γ 是折扣因子,衡量未来奖励的当前价值。

  • rt+1​ 是在状态 st​ 下采取动作 at​ 后获得的奖励。

  • maxa​Q(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 是强化学习中一种非常重要的算法,它为解决复杂的决策问题提供了强大的工具。

 

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐