A2C (Advantage Actor-Critic) 算法

A2C (Advantage Actor-Critic)

Algorithm 算法

π(as;θ)\pi(a|s;\theta) 为当前智能体策略网络,其中 θ\theta 为网络参数,Vπ(S)V_\pi(S) 为状态价值函数,最优化目标

maxθES[Vπ(S)]=:J(θ)\max_\theta\mathbb{E}_S[V_{\pi}(S)] =: J(\theta)

带基线的策略梯度定理可知:

J(θ)θ=ES[EAπ(S;θ)[(Qπ(S,A))Vπ(S)θlnπ(AS;θ)]]\frac{\partial J(\theta)}{\partial \theta} = \mathbb{E}_S[\mathbb{E}_{A\sim\pi(\cdot|S;\theta)}[(Q_{\pi}(S,A)) - V_{\pi}(S)\nabla_{\theta}\ln\pi(A|S;\theta)]]

v(s;w)v(s;w) 为对策略 π(as;θ)\pi(a|s;\theta) 的状态价值估计的网络,其中 ww 为网络参数,则对于四元组 (s,a,r,s)(s,a,r,s') ,由Bellman方程可知,Qπ(s,a)Q_\pi(s,a) 的近似为

Qπ(s,a)r+γv(s;w)Q_\pi(s,a)\approx r + \gamma\cdot v(s';w)

则近似策略梯度可以表示为:

J(θ)θ(r+γv(s;w)v(s;w))θlnπ(as;θ)\frac{J(\theta)}{\partial\theta} \approx (r+\gamma\cdot v(s';w) - v(s;w))\nabla_\theta\ln\pi(a|s;\theta)

Model Training 模型训练

对于由策略 π(as;θ)\pi(a|s;\theta) 走出的四元组 (s,a,r,s)(s,a,r,s'),进行以下计算:

  1. TD target: y^=r+γv(s;w)\hat{y} = r + \gamma\cdot v(s';w)

  2. Loss: L(w)=12v(s;w)y^22=12δ22\mathcal{L}(w) = \frac{1}{2}||v(s;w)-\hat{y}||_2^2 = \frac{1}{2}||\delta||_2^2 where δ=v(s;w)y^\delta = v(s;w) - \hat{y} is the TD error

  3. Approximate gradient: g=(y^v(s;w))θlnπ(as;θ)=δθlnπ(as;θ)g = (\hat{y}-v(s;w))\nabla_\theta\ln\pi(a|s;\theta) = -\delta\cdot\nabla_\theta\ln\pi(a|s;\theta)

  4. Update value network: wwαL(w)w=wαδwv(s;w)w\gets w - \alpha \frac{\partial\mathcal{L}(w)}{\partial w} = w - \alpha\delta\cdot \nabla_wv(s;w)

  5. Updata policy network: θθ+βg=θβδθlnπ(as;θ)\theta\gets\theta + \beta g = \theta - \beta\delta\cdot \nabla_{\theta}\ln\pi(a|s;\theta)

Environment test 环境测试

KataRL中用JAX实现了A2C算法,核心代码a2c_jax.py超参数文件不同环境下与其他模型的比较

可以看出A2C的效果较差且慢,但是其实现较为简单,以后可以进一步用GAE对其进行优化(类似PPO算法)。测试代码:

python katarl/run/a2c/a2c.py --train --wandb-track
python katarl/run/a2c/a2c.py --train --wandb-track --env-name Acrobot-v1

Cartpole 平衡木

Cartpole environment information - Gymnasium

Hyper-parameters 超参数

Agent

  1. model struct:

    1. Input(4)-Dense(32)-Dense(32)-Output (We call it origin one)
    2. Input(4)-Dense(128)-Dense(64)-Dense(16)-Output (We call it deeper one)
  2. model optimizer & learning rate (After multi test, get the best args, maybe~)

    1. Adam: α=103,β=105\alpha=10^{-3}, \beta=10^{-5}
    2. SGD: α=5×104,β=104\alpha=5\times 10^{-4}, \beta = 10^{-4}

Environment

  1. positive reward rpos=1r_{pos} = 1
  2. negative reward rneg=10r_{neg} = -10 and 20-20 (compare)

测试结果1(模型结构)

We try different model struct, origin and deeper model, after compare, we found the deeper is almost rolling the origin one.

我们尝试测试origin和deeper两种模型,更深的模型几乎完全碾压了浅的模型。

compare origin with deeper model

测试结果2(完全失效策略的调参思路)

We also find the deeper model can avoid complete failure of the policy since random environment,this is the result of restarting the origin model twice: (one almost dead, and the other is powerful)

我们还发现更深的模型可以避免因环境随机性导致策略完全失效,以下是我们重启origin模型两侧得到的完全不同的两个结果(其中一个几乎无法走出10步,而另一个几乎获得了最优策略)

big variance

The training results of 5 restarts of the deeper model are given below:

以下给出了5次重启deeper model的训练结果:

deeper 5 restart

测试结果3(比对不同奖励的影响)

我们又尝试了两种不同的失败损失,如果平衡木在没有达到最长步数(500)时失去平衡,那么最后一个动作就会获得 10-1020-20 的损失,在下图中我们分别记为 r10r20,根据比对,我们发现更大的失败损失确实能提高达到更高step的可能(可能因为这样critic能给出更准确的判断?因为如果记失败损失是 rnegr_{neg},折扣率 γ=0.95\gamma=0.95,那么求解关于折后回报的方程

1+γ+γn1rnegγn=0n=log0.9511+rneg/201+\gamma+\cdots\gamma^{n-1}-r_{neg}\cdot \gamma^{n} = 0\Rightarrow n = \log_{0.95}\frac{1}{1+r_{neg}/20}

带入 rneg=10,20r_{neg}=10,20 分别得到 n8,13n\approx 8, 13。也就是说,假设给定 rnegr_{neg}

  1. 在critic评估正确的情况下,critic可以在actor最终失败前 nn 步预判出actor的错误,从而可以对其进行修正。
  2. 在critic评估错误的情况下,在失败前的相同步数时,更大的 rnegr_{neg},可以获得更大的TD error,从而迅速更正critic的的错误。

compare-rewards

rregr_{reg} 越大越好?虽然 nnrnegr_{neg} 是成类似 loglog 函数的关系,进一步测试了在deeper模型下不同的失败损失大小:

compare-rewards-deeper

测试结果4(比对不同优化器)

我们尝试两种优化器 Adam 和 SGD(学习率上文已经给出),在deeper网络结构下的比较:

compare-optimizer

可以看出基本上Adam碾压了SGD,但是SGD优化器竟有时可以在第一个step中达到最优,虽然支撑不了几步:

SGD-intersting


A2C (Advantage Actor-Critic) 算法
https://wty-yy.github.io/posts/6031/
作者
wty
发布于
2023年8月3日
许可协议