Jupyter AI

22 策略梯度的基本概念

📅 发表日期: 2024年8月15日

分类: 🤖强化学习入门

👁️阅读: --

在前一篇文章中,我们探讨了经验回放在深度强化学习中的重要性,它让智能体可以重用过去的经验,从而提高学习的效率和稳定性。本篇文章将引入策略梯度方法的基本概念,为后续的REINFORCE算法打下基础。

强化学习中的策略

在强化学习中,策略是智能体在给定状态下选择动作的规则。策略分为确定性策略随机策略两种:

  • 确定性策略:在每个状态下,策略总是选择同一动作,通常用 π(s)\pi(s) 表示。
  • 随机策略:在每个状态下,策略给出各动作的概率分布,记为 π(as)\pi(a|s),表示在状态 ss 下采取动作 aa 的概率。

策略的参数化

在许多情况下,尤其是复杂的环境中,直接指定策略是困难的。因此,我们通常会使用参数化策略。也就是说,我们使用一个参数集 θ\theta 来表示策略,从而可以写作:

πθ(as)\pi_\theta(a|s)

这里,θ\theta 可以是一个神经网络的权重,它通过学习来调整策略。

策略梯度

策略梯度方法旨在通过直接优化策略来提高强化学习的性能。相较于值函数方法(如Q学习),策略梯度方法直接对策略进行建模和优化,有以下主要优点:

  1. 能够处理高维和连续的动作空间。
  2. 更容易优化复杂的策略,因为梯度信息提供了更为直接的调整方式。

策略梯度定理

策略的每一步产生的期望收益 E[R]\mathbb{E}[R] 可以用策略梯度定理表示为:

J(θ)=Eτπθ[logπθ(atst)Gt]\nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \nabla \log \pi_\theta(a_t | s_t) G_t \right]

其中:

  • J(θ)J(\theta) 是我们希望最大化的目标函数(通常是期望回报)。
  • GtG_t 是在时间步 tt 时,从该状态开始的回报。

这表明我们可以通过取每个动作的对数梯度与累积回报的乘积的期望,来计算目标函数的梯度。

示例:简单的策略梯度更新

设想一个简单的策略梯度智能体,通过随机策略在一个网格世界中移动。在每个时间步中,智能体根据当前状态选择一个动作,并执行该动作以获得回报。以下是一个基本的策略更新的伪代码示例:

import numpy as np

# 初始化策略的参数
theta = np.random.rand(n_actions)

def policy(state):
    # softmax 策略
    exp_theta = np.exp(theta)
    return exp_theta / np.sum(exp_theta)

def policy_gradient_update(state, action, reward):
    p = policy(state)
    G_t = reward  # 这里假设 G_t 是当前获得的回报
    
    # 计算梯度
    grad_log_policy = np.zeros_like(theta)
    grad_log_policy[action] = 1 - p[action]
    
    # 更新参数
    theta += alpha * grad_log_policy * G_t

在上面的代码中,我们通过计算动作的概率分布来选择动作,并根据接收到的回报更新策略的参数。这是一个非常基础的策略梯度更新过程,后续的REINFORCE算法将基于此基础进行扩展和优化。

总结

在这一部分中,我们介绍了强化学习中策略的基本概念,以及策略梯度的核心思想和基本公式。通过构建和优化策略,我们可以更有效地处理复杂的强化学习问题,并为解锁更多的策略梯度方法(如REINFORCE算法)奠定基础。

下一篇文章将深入探讨REINFORCE算法,展示如何将策略梯度方法具体应用于强化学习问题。希望读者在理解基本概念后,能更好地迎接下一个挑战。