策略梯度估计方法解析
立即解锁
发布时间: 2025-08-31 01:36:19 阅读量: 4 订阅数: 14 AIGC 

### 策略梯度估计方法解析
#### 1. 引言
在许多应用中,通过优化策略参数来最大化预期效用是一个重要的问题。利用效用关于策略参数的梯度来指导优化过程往往是很有用的。然而,由于环境和探索的随机性,轨迹的随机性会导致梯度估计的方差较大,这是一个主要挑战。接下来将介绍几种从轨迹展开中估计梯度的方法。
#### 2. 有限差分法
有限差分法通过函数评估的微小变化来估计函数的梯度。
- **单变量函数导数近似**:对于单变量函数 \(f(x)\),其导数定义为 \(\frac{df}{dx}(x) = \lim_{\delta \to 0} \frac{f(x + \delta) - f(x)}{\delta}\),当 \(\delta\) 足够小时,可以近似为 \(\frac{df}{dx}(x) \approx \frac{f(x + \delta) - f(x)}{\delta}\)。
- **多变量函数梯度估计**:对于输入长度为 \(n\) 的多变量函数 \(f\),其梯度为 \(\nabla f(x) = [\frac{\partial f}{\partial x_1}(x), \cdots, \frac{\partial f}{\partial x_n}(x)]\)。在策略优化中,我们要估计由 \(\theta\) 参数化的策略的预期效用梯度 \(\nabla U(\theta) = [\frac{\partial U}{\partial \theta_1}(\theta), \cdots, \frac{\partial U}{\partial \theta_n}(\theta)] \approx [\frac{U(\theta + \delta e^{(1)}) - U(\theta)}{\delta}, \cdots, \frac{U(\theta + \delta e^{(n)}) - U(\theta)}{\delta}]\),其中 \(e^{(i)}\) 是第 \(i\) 个标准基向量。
以下是生成轨迹和估计梯度的代码:
```julia
function simulate(𝒫::MDP, s, π, d)
τ = []
for i = 1:d
a = π(s)
s′, r = 𝒫.TR(s,a)
push!(τ, (s,a,r))
s = s′
end
return τ
end
struct FiniteDifferenceGradient
𝒫 # problem
b # initial state distribution
d # depth
m # number of samples
δ # step size
end
function gradient(M::FiniteDifferenceGradient, π, θ)
𝒫, b, d, m, δ, γ, n = M.𝒫, M.b, M.d, M.m, M.δ, M.𝒫.γ, length(θ)
Δθ(i) = [i == k ? δ : 0.0 for k in 1:n]
R(τ) = sum(r*γ^(k-1) for (k, (s,a,r)) in enumerate(τ))
U(θ) = mean(R(simulate(𝒫, rand(b), s->π(θ, s), d)) for i in 1:m)
ΔU = [U(θ + Δθ(i)) - U(θ) for i in 1:n]
return ΔU ./ δ
end
```
- **挑战与解决方法**:轨迹奖励的方差可能很高,这会影响策略梯度的准确估计。一种减少梯度估计方差的方法是让每个滚动使用相同的随机生成器种子。
- **策略参数化的影响**:策略表示对策略梯度有显著影响。例如,对于一个单状态、单步的马尔可夫决策过程(MDP),不同的策略参数化可能导致相同的策略,但梯度却有很大差异。
#### 3. 回归梯度法
回归梯度法通过线性回归从随机扰动的结果中估计梯度,而不是像有限差分法那样沿着每个坐标轴采取固定步长。
- **参数扰动矩阵**:将随机扰动存储在矩阵 \(\Delta \Theta = \begin{bmatrix} (\Delta \theta^{(1)})^T \\ \vdots \\ (\Delta \theta^{(m)})^T \end{bmatrix}\) 中,更多的策略参数扰动通常会产生更好的梯度估计。
- **效用变化估计**:对于每个扰动,进行一次滚动并估计效用的变化 \(\Delta U = [U(\theta + \Delta \theta^{(1)}) - U(\theta), \cdots, U(\theta + \Delta \theta^{(m)}) - U(\theta)]\)。
- **梯度估计**:使用线性回归估计策略梯度 \(\nabla U(\theta) \approx \Delta \Theta^+ \Delta U\)。
以下是实现代码:
```julia
struct RegressionGradient
𝒫 # problem
b # initial state distribution
d # depth
m # number of samples
δ # step size
end
function gradient(M::RegressionGradient, π, θ)
𝒫, b, d, m, δ, γ = M.𝒫, M.b, M.d, M.m, M.δ, M.𝒫.γ
ΔΘ = [δ.*normalize(randn(length(θ)), 2) for i = 1:m]
R(τ) = sum(r*γ^(k-1) for (k, (s,a,r)) in enumerate(τ))
U(θ) = R(simulate(𝒫, rand(b), s->π(θ,s), d))
ΔU = [U(θ + Δθ) - U(θ) for Δθ in ΔΘ]
return pinv(reduce(hcat, ΔΘ)') * ΔU
end
```
#### 4. 似然比法
似然比法使用 \(\nabla \pi_{\theta}\) 的解析形式来改进 \(\nabla U(\theta)\) 的估计。
- **预期效用表达式**:\(U(\theta) = \int p_{\theta}(\tau) R(\tau) d\tau\),则 \(\nabla U(\theta) = \nabla_{\theta} \int p_{\theta}(\tau) R(\tau) d\tau = \int \nabla_{\theta} p_{\theta}(\tau) R(\tau) d\tau = \int p_{\theta}(\tau) \frac{\nabla_{\theta} p_{\theta}(\tau)}{p_{\theta}(\tau)} R(\tau) d\tau = E_{\tau}[\frac{\nabla_{\theta} p_{\theta}(\tau)}{p_{\theta}(\tau)} R(\tau)]\)。
- **对数导数技巧**:应用对数导数技巧,\(\nabla U(\theta) = E_{\tau}[\nabla_{\theta} \log p_{\theta}(\tau) R(\tau)]\)。
- **随机策略梯度计算**:对于随机策略,\(\nabla_{\theta} \log p_{\theta}(\tau) = \sum_{k = 1}^{d} \nabla_{\theta} \log \pi_{\theta}(a^{(k)} |
0
0
复制全文
相关推荐









