Actor-Critic方法
Actor-Critic方法 是强化学习中的一种重要算法,它结合了策略梯度方 Actor 和价值函数估计 Critic 的优点,提供了一种高效的策略学习方式。Actor-Critic方法通过同时更新策略和价值函数,能够在连续或高维动作空间中稳定地学习最优策略。
Actor-Critic方法
Actor-Critic方法的基本原理
Actor-Critic方法的核心思想是将策略的更新(由Actor完成)和状态价值或动作价值的评估(由Critic完成)分开处理。这种方法既保持了策略梯度方法的灵活性,又利用了价值函数估计的高效性。
-
Actor(行为者):
-
Actor 负责直接生成策略,它根据当前的状态 s 选择一个动作 a 。
-
策略函数
π ( a ∣ s ; θ ) 通常由一个神经网络表示,参数为 θ 。 \pi(a \mid s; \theta) 通常由一个神经网络表示,参数为 \theta 。 π(a∣s;θ)通常由一个神经网络表示,参数为θ。
Actor的目标是最大化策略的预期回报。
-
-
Critic(评论者):
-
Critic 评估 Actor 选择的动作好坏,
通常通过估计状态价值函数 V ( s ; w ) 或动作价值函数 Q ( s , a ; w ) ,其中 w 是 C r i t i c 的参数。 通常通过估计状态价值函数 V(s; w) 或动作价值函数 Q(s, a; w),其中 w 是Critic的参数。 通常通过估计状态价值函数V(s;w)或动作价值函数Q(s,a;w),其中w是Critic的参数。 -
Critic计算时序差分误差(TD误差)来衡量当前策略的优劣,并反馈给Actor进行策略更新。
-
Actor-Critic方法的工作流程
-
动作选择:
- A c t o r 根据当前策略 π ( a ∣ s ; θ ) 从状态 s 中选择一个动作 a 。 Actor根据当前策略 \pi(a \mid s; \theta) 从状态 s 中选择一个动作 a 。 Actor根据当前策略π(a∣s;θ)从状态s中选择一个动作a。
-
环境交互:
- 智能体执行动作 a ,并从环境中接收即时奖励 r 和下一个状态 s’ 。
-
Critic更新:
-
Critic使用TD误差更新其价值函数。对于状态价值函数,TD误差为:
δ t = r t + 1 + γ V ( s t + 1 ; w ) − V ( s t ; w ) \delta_t = r_{t+1} + \gamma V(s_{t+1}; w) - V(s_t; w) δt=rt+1+γV(st+1;w)−V(st;w)
Critic的更新公式为:
w ← w + α δ t ∇ w V ( s t ; w ) w \leftarrow w + \alpha \delta_t \nabla_w V(s_t; w) w←w+αδt∇wV(st;w)
Actor更新: -
Actor根据Critic提供的反馈更新策略。Actor的梯度更新方向为:
∇ θ J ( θ ) = E [ δ t ∇ θ log π ( a t ∣ s t ; θ ) ] \nabla_\theta J(\theta) = \mathbb{E} \left[ \delta_t \nabla_\theta \log \pi(a_t \mid s_t; \theta) \right] ∇θJ(θ)=E[δt∇θlogπ(at∣st;θ)]
Actor的更新公式为:
θ ← θ + β δ t ∇ θ log π ( a t ∣ s t ; θ ) 其中 β 是 A c t o r 的学习率。 \theta \leftarrow \theta + \beta \delta_t \nabla_\theta \log \pi(a_t \mid s_t; \theta) \\ 其中 \beta 是Actor的学习率。 θ←θ+βδt∇θlogπ(at∣st;θ)其中β是Actor的学习率。
-
-
循环迭代:
- 以上过程不断循环迭代,直到策略收敛或达到指定的训练目标。
Actor-Critic方法的变种
由于Actor-Critic方法在实践中表现优异,许多改进的变种被提出,以提高其稳定性和学习效率:
-
优势行为者-评论家(Advantage Actor-Critic, A2C):
- A2C是对Actor-Critic的一种改进,使用优势函数 A(s, a) = Q(s, a) - V(s) 代替TD误差,从而减少方差,提升学习效果。
-
异步优势行为者-评论家(Asynchronous Advantage Actor-Critic, A3C):
- A3C是A2C的异步版本,它通过多个异步并行的智能体同时与环境交互,并更新共享的全局网络参数,以加快收敛速度和增强稳定性。
-
深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG):
- DDPG是用于连续动作空间的Actor-Critic变种,结合了DQN的思想。DDPG中的Actor生成确定性策略,Critic评估Q值,并且使用经验回放和目标网络来稳定训练过程。
-
近端策略优化(Proximal Policy Optimization, PPO):
- PPO引入了一个“剪切”损失函数,限制策略更新的步长,避免了过大的更新带来的不稳定性。PPO可以看作是Actor-Critic方法的一种改进。
Actor-Critic方法的应用
Actor-Critic方法由于其灵活性和效率,广泛应用于以下领域:
- 机器人控制:帮助机器人在连续状态和动作空间中进行路径规划和任务执行。
- 自动驾驶:通过实时调整策略,优化车辆在复杂交通环境中的驾驶行为。
- 游戏AI:训练游戏中的智能体,使其能够在动态环境中做出最佳决策。
- 金融交易:在不确定的市场条件下进行动态投资决策,以实现最大化收益。
总结
Actor-Critic方法是强化学习中的一个重要算法,通过结合策略梯度和价值函数估计的优点,能够在高维和连续动作空间中有效学习和优化策略。通过不断的发展和改进,Actor-Critic方法已经成为处理复杂强化学习问题的强大工具。
笔记
Actor-Critic方法是结合价值学习和策略学习。
策略网络是让智能体作出动作,价值网络是评估动作的好坏,从而让智能体能够决策出更好的动作,环境给的奖励也会促使价值函数评价打分能力越来越精确。价值网络是辅助策略网络学习的,网络训练好之后,价值网络就不需要了。
状态价值函数= 期望(策略函数 * 动作价值函数)
是动作价值函数的期望。离散动作用连加,连续动作用定积分。策略函数用来控制动作,动作价值函数用来给动作打分。
使用策略网络来近似策略函数,策略网络来决定动作(运动员);使用价值网络来近似动作价值函数,给动作打分(裁判)。
策略网络
输入是当前状态St;输出是动作的概率(策略函数是概率密度函数,所以网络输出的结果也要复合分布规律,使用SoftMax,是的结果概率和为1)。
conv:用来提取特征->dense:全连接层用来映射结果->SoftMax
价值网络
输入是:当前状态和动作(onehot格式的动作,例如:001, 010,011)
输出是:分数
conv/dense1:提取特征->concate->dense2:映射结果->action score
训练网络
5个步骤:
- 观测当前状态St
- 使用当前状态St作为输入用策略网络来计算出动作的概率分布,随机抽样选择动作at
- agent执行动作at并且观测环境产生的新的状态St+1和奖励Rt
- 使用TD根据环境给的奖励Rt计算Loss,更新价值网络参数w
- 使用策略梯度算法更新策略网络的参数θ
更新价值网络参数
使用TD算法
-
使用价值网络q来给动作at和at+1打分;动作是根据策略网络pi随机抽样得到的。
q ( s t , a t ; w t ) q ( s t + 1 , a t + 1 ; w t ) q(s_{t}, a_{t}; w_{t}) \\ q(s_{t+1}, a_{t+1}; w_{t}) q(st,at;wt)q(st+1,at+1;wt) -
计算TD target:
y t = r t + γ ∗ q ( s t + 1 , a t + 1 ; w t ) r t : 奖励 γ : 折扣率,让未来的奖励没有当前奖励的权重高 y t 和 q ( s t , a t ; w t ) 都是对未来奖励总和的估计,但是 y t 更加准确一些(一部分是真实奖励估计的一部分) y_{t} = r_{t} + \gamma * q(s_{t+1}, a_{t+1}; w_{t}) \\ r_{t}: 奖励 \\ \gamma:折扣率,让未来的奖励没有当前奖励的权重高 \\ y_{t}和q(s_{t}, a_{t}; w_{t})都是对未来奖励总和的估计,但是y_{t}更加准确 一些(一部分是真实奖励估计的一部分) yt=rt+γ∗q(st+1,at+1;wt)rt:奖励γ:折扣率,让未来的奖励没有当前奖励的权重高yt和q(st,at;wt)都是对未来奖励总和的估计,但是yt更加准确一些(一部分是真实奖励估计的一部分) -
计算损失函数:
L ( w ) = 1 2 [ q ( s t , a t ; w t ) − y t ] 2 L(w) = \frac {1}{2}[q(s_{t}, a_{t}; w_{t}) - y_{t}]^{2} L(w)=21[q(st,at;wt)−yt]2 -
梯度下降法:
w t + 1 = w t − α ∗ ∂ L ( w ) ∂ w ∣ w = w t α : 学习率 w_{t+1} = w_{t} - \alpha * \frac {\partial {L(w)}}{\partial {w}} | w=w_{t} \\ \alpha:学习率 wt+1=wt−α∗∂w∂L(w)∣w=wtα:学习率
更新策略网络参数
使用策略梯度法
状态价值函数:相当于所有动作的平均分
策略梯度算法:状态价值函数对参数的求导可以转化为g函数的期望,使用蒙特卡洛估计,将g函数的期望转化为g函数。
- 在st下策略函数给出动作概率分布,随机采样动作a
- 使用随机梯度上升法更新参数