强化学习算法实践(一)——策略梯度算法

策略梯度是一种基于策略的算法,相比于DQN一类的基于价值的算法,它会直接显式的学习一个目标策略。梯度下降的基础知识可以参考之前的博客强化学习(六)策略梯度《动手学强化学习》部分内容。

Reference

[1] 《动手学强化学习》 https://hrl.boyuai.com/
[2] David Silver: https://www.youtube.com/watch?v=KHZVXao4qXs&t=4609s

我们假设目标策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as)是一种随机策略,并且处处可微, θ \theta θ为对应参数。可以通过神经网络或线性模型对目标策略进行建模。输入某个状态,输出动作的概率分布。
(1)目标函数
我们期望获得一个最优策略,能够最大化策略在环境中的期望回报。
J ( θ ) = E [ V π θ ( s ) ] J(\theta)=E[V^{\pi_\theta}(s)] J(θ)=E[Vπθ(s)]

根据贝尔曼方程,我们可以用Q函数表示目标函数
J ( θ ) = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( a ∣ s ) Q π θ ( s , a ) J(\theta)=\sum_{s \in S} d(s) \sum_{a \in A} \pi_\theta(a|s) Q^{\pi_\theta}(s,a) J(θ)=sSd(s)aAπθ(as)Qπθ(s,a)

(2)梯度
我们希望通过梯度下降(上升)优化策略,策略梯度可以表示为
∇ θ = α ∇ J ( θ ) ∇ J ( θ ) = ∑ s ∈ S d ( s ) ∑ a ∈ A ∇ π θ ( a ∣ s ) Q π θ ( s , a ) = E π θ [ Q π θ ( s , a ) ∇ log ⁡ π θ ( a ∣ s ) ] \nabla \theta = \alpha \nabla J(\theta) \\ \nabla J(\theta) = \sum_{s \in S} d(s) \sum_{a \in A} \nabla \pi_\theta(a|s) Q^{\pi_\theta}(s,a)=E_{\pi_\theta}[Q^{\pi_\theta}(s,a) \nabla \log \pi_\theta(a|s)] θ=αJ(θ)J(θ)=sSd(s)aAπθ(as)Qπθ(s,a)=Eπθ[Qπθ(s,a)logπθ(as)]

因此我们可以将 Q π θ ( s , a ) log ⁡ π θ ( a ∣ s ) Q^{\pi_\theta}(s,a) \log \pi_\theta(a|s) Qπθ(s,a)logπθ(as)作为损失值反向传递优化模型。

1. REINFORCE

1.1 Basic

上文我们提到可以将 Q π θ ( s , a ) log ⁡ π θ ( a ∣ s ) Q^{\pi_\theta}(s,a) \log \pi_\theta(a|s) Qπθ(s,a)logπθ(as)作为损失值反向传递优化模型。我们在强化学习(五)价值函数拟合中学到可以通过MC或TD近似Q或V函数。REINFORCE算法就是采用MC方法,利用轨迹的累计回报预估Q函数,所以策略梯度改变成为:
∇ θ = α ∇ J ( θ ) ∇ J ( θ ) = E π θ [ G t ∇ log ⁡ π θ ( a ∣ s ) ] \nabla \theta = \alpha \nabla J(\theta) \\ \nabla J(\theta) =E_{\pi_\theta}[G_t \nabla \log \pi_\theta(a|s)] θ=αJ(θ)J(θ)=Eπθ[Gtlogπθ(as)]

其中G_t是一条完整轨迹获得的累积奖励。REINFORCE是一种在线学习方法,采样到的轨迹数据只能使用一次。同时因为使用累计回报 G t G_t Gt预测Q函数,所以算法的性能有一定程度的波动(高方差)。
在这里插入图片描述

1.2 Code

import gym
import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
import rl_utils

首先定义策略网络PolicyNet,输入是某个状态,输出则是该状态下的动作概率分布。

class PolicyNet(torch.nn.Module):
    def __init__(self, state_dim, hidden_dim, action_dim):
        super(PolicyNet, self).__init__()
        self.fc1 = torch.nn.Linear(state_dim, hidden_dim)
        self.fc2 = torch.nn.Linear(hidden_dim, action_dim)
        
    def forward(self, x):
        x = F.relu(self.fc1(x))
        return F.softmax(self.fc2(x), dim=1) # dim=1,对每行使用softmax

接着定义REINFORCE算法,take_actionupdate是算法最重要的两个部分。在

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
深度强化学习算法汇总包括MuZero、SAC、PPO、TD3、DDPG、DQN等算法。MuZero是一种基于Monte Carlo Tree Search(MCTS)的算法,它可以在没有先验知识的情况下学习玩多种不同的游戏。SAC(Soft Actor-Critic)是一种基于最大熵强化学习算法,它可以处理连续动作空间,并且可以实现对环境的探索和利用的平衡。PPO(Proximal Policy Optimization)是一种基于策略梯度算法,它通过对策略进行近邻优化来提高训练的稳定性。TD3(Twin Delayed DDPG)是一种改进的DDPG算法,它通过引入两个目标网络和延迟更新策略来提高算法的稳定性和收敛性。DDPG(Deep Deterministic Policy Gradient)是一种结合了深度学习强化学习的方法,它可以处理高维输入和连续动作空间的情况。DQN(Deep Q-Network)是一种基于深度神经网络的Q-learning算法,它可以用于解决离散动作空间的强化学习问题。以上算法都是深度强化学习领域的热门算法,每种算法都有其适用的场景和特点。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2022年度强化学习领域19个重要进展汇总](https://blog.csdn.net/u013250861/article/details/128785220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [深度强化学习——概念及算法总结](https://blog.csdn.net/weixin_42898871/article/details/128904723)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冠long馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值