深度强化学习算法之SAC算法

2023-11-23 14:31
文章标签 算法 学习 深度 强化 sac

本文主要是介绍深度强化学习算法之SAC算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度强化学习算法之SAC(Soft Actor Critic)算法

文章地址:
Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
Soft Actor-Critic Algorithms and Applications

代码地址:
demo1
demo2

参考地址:
BLOG1
BLOG2
BLOG3
BLOG4

1、最大熵强化学习

  • 一般的强化学习的目标是最大化累积奖励:
    ∑ t E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) ] \sum_{t} \mathbb{E}_{\left(s_t, a_{t}\right) \sim \rho_{\pi}}\left[r\left(s_{t}, a_{t}\right)\right] tE(st,at)ρπ[r(st,at)]

  • 最大熵强化学习的目标是带熵的累积奖励:
    J ( π ) = ∑ t = 0 T E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) + α H ( π ( ⋅ ∣ s t ) ) ] J(\pi)=\sum_{t=0}^{T} \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi}}\left[r\left(s_{t}, a_{t}\right)+\alpha H\left(\pi\left(\cdot \mid s_{t}\right)\right)\right] J(π)=t=0TE(st,at)ρπ[r(st,at)+αH(π(st))]

​ 其中, α \alpha α 为温度系数,决定熵相对于奖励的重要程度,从而控制策略的随机程度

entropy可以理解为是一个值,用来衡量一个随机变量的随机性有多强。举个例子,如果对一个硬币出现正反面的变量进行加权,如果总是出现正面,那么这个变量的熵就很小;反之,如果出现正反面的加权值都接近0.5,那么就说明这个变量的熵很大。

假设 x ∼ P x \sim P xP P P P 是一个分布,那么 x x x的熵 H H H的计算方式为:
H ( P ) = E P x ∼ P [ − log ⁡ P ( x ) ] H(P)=\underset{x \sim P}{E_{P}}[-\log P(x)] H(P)=xPEP[logP(x)]

2、从策略迭代到软策略迭代

  • 策略迭代

    分成两步:

    • 策略评估,更新值函数,用来对策略进行评估
    • 策略改进,更新策略,用上一步的值函数来知道策略提高

在这里插入图片描述

​ 如上图所示,不断经过策略评估个策略提高最终找到最优策略。

  • 软策略迭代

    • 策略评估

      对于一个固定的策略 π \pi π,soft Q-value可以用Bellman backup 算子 Γ π \Gamma^{\pi} Γπ 迭代求出来:
      T π Q ( s t , a t ) ≜ r ( s t , a t ) + γ E s t + 1 ∼ p [ V ( s t + 1 ) ] \mathcal{T}^{\pi} Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \triangleq r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \mathbb{E}_{\mathbf{s}_{t+1} \sim p}\left[V\left(\mathbf{s}_{t+1}\right)\right] TπQ(st,at)r(st,at)+γEst+1p[V(st+1)]
      其中,soft state value function 为:
      V ( s t ) = E a t ∼ π [ Q ( s t , a t ) − log ⁡ π ( a t ∣ s t ) ] V\left(\mathbf{s}_{t}\right)=\mathbb{E}_{\mathbf{a}_{t} \sim \pi}\left[Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\log \pi\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right] V(st)=Eatπ[Q(st,at)logπ(atst)]

    • 策略提高

      在实际操作中,我们更希望策略最好可以方便处理。因此我们将策略限定在一个特定集合 Π \Pi Π当中,比如带有参数的高斯分布。为了将策略限定在集合 Π \Pi Π中,我们采用KL散度去投影新的策略:
      π new  = arg ⁡ min ⁡ π ′ ∈ Π D K L ( π ′ ( ⋅ ∣ s t ) ∥ exp ⁡ ( Q π old  ( s t , ⋅ ) ) Z π old  ( s t ) ) \pi_{\text {new }}=\arg \min _{\pi^{\prime} \in \Pi} D_{K L}\left(\pi^{\prime}\left(\cdot \mid \mathbf{s}_{t}\right) \| \frac{\exp \left(Q^{\pi_{\text {old }}}\left(\mathbf{s}_{t}, \cdot\right)\right)}{Z^{\pi_{\text {old }}}\left(\mathbf{s}_{t}\right)}\right) πnew =argπΠminDKL(π(st)Zπold (st)exp(Qπold (st,)))

信息熵:可以表达数据的信息量大小
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∑ i = 1 n p ( x ) log ⁡ p ( x ) H(p)=H(X)=\mathrm{E}_{x \sim p(x)}[-\log p(x)]=-\sum_{i=1}^{n} p(x) \log p(x) H(p)=H(X)=Exp(x)[logp(x)]=i=1np(x)logp(x)
或者
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∫ p ( x ) log ⁡ p ( x ) d x H(p)=H(X)=\mathrm{E}_{x \sim p(x)}[-\log p(x)]=-\int p(x) \log p(x) d x H(p)=H(X)=Exp(x)[logp(x)]=p(x)logp(x)dx
KL散度(相对熵): 表示两个概率分布之间差异的非对称性度量,相对熵等价于两个概率分布的信息熵。
D K L ( p ∥ q ) = ∑ i = 1 N [ p ( x i ) log ⁡ p ( x i ) − p ( x i ) log ⁡ q ( x i ) ] D_{K L}(p \| q)=\sum_{i=1}^{N}\left[p\left(x_{i}\right) \log p\left(x_{i}\right)-p\left(x_{i}\right) \log q\left(x_{i}\right)\right] DKL(pq)=i=1N[p(xi)logp(xi)p(xi)logq(xi)]

结合以上两个步骤,最终得到软策略迭代算法,但只适用于离散动作和状态空间,想要处理连续的动作和状态空间,接下来引入SAC算法。

3、SAC算法

  • Value Network

    本来根据上面公式,值函数和Q函数是有关系的,因此我们没有必要去估计值函数,但是在实际操作中发现用单独的网络估计值函数可以稳定训练,它的loss是:
    J V ( ψ ) = E s t ∼ D [ 1 2 ( V ψ ( s t ) − E a t ∼ π ϕ [ Q θ ( s t , a t ) − log ⁡ π ϕ ( a t ∣ s t ) ] ) 2 ] J_{V}(\psi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}}\left[\frac{1}{2}\left(V_{\psi}\left(\mathbf{s}_{t}\right)-\mathbb{E}_{\mathbf{a}_{t} \sim \pi_{\phi}}\left[Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right]\right)^{2}\right] JV(ψ)=EstD[21(Vψ(st)Eatπϕ[Qθ(st,at)logπϕ(atst)])2]

​ 其梯度可以用一个无偏的估计器:
∇ ^ ψ J V ( ψ ) = ∇ ψ V ψ ( s t ) ( V ψ ( s t ) − Q θ ( s t , a t ) + log ⁡ π ϕ ( a t ∣ s t ) ) \hat{\nabla}_{\psi} J_{V}(\psi)=\nabla_{\psi} V_{\psi}\left(\mathbf{s}_{t}\right)\left(V_{\psi}\left(\mathbf{s}_{t}\right)-Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right) ^ψJV(ψ)=ψVψ(st)(Vψ(st)Qθ(st,at)+logπϕ(atst))
​ 其中的动作是从现在的策略中采样而不是replay buffer。

  • Soft-Q Network

    soft Q函数参数可以通过最小化soft Bellman residual来得到:
    J Q ( θ ) = E ( s t , a t ) ∼ D [ 1 2 ( Q θ ( s t , a t ) − Q ^ ( s t , a t ) ) 2 ] J_{Q}(\theta)=\mathbb{E}_{\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \sim \mathcal{D}}\left[\frac{1}{2}\left(Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\hat{Q}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right)^{2}\right] JQ(θ)=E(st,at)D[21(Qθ(st,at)Q^(st,at))2]

其中, Q ^ ( s t , a t ) = r ( s t , a t ) + γ E s t + 1 ∼ p [ V ψ ˉ ( s t + 1 ) ] \hat{Q}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \mathbb{E}_{\mathbf{s}_{t+1} \sim p}\left[V_{\bar{\psi}}\left(\mathbf{s}_{t+1}\right)\right] Q^(st,at)=r(st,at)+γEst+1p[Vψˉ(st+1)]

其中, V ψ ˉ V_{\bar{\psi}} Vψˉ 是Deep Q Network中的目标值网络(target value network)。Q函数的梯度:
∇ ^ θ J Q ( θ ) = ∇ θ Q θ ( a t , s t ) ( Q θ ( s t , a t ) − r ( s t , a t ) − γ V ψ ˉ ( s t + 1 ) ) \hat{\nabla}_{\theta} J_{Q}(\theta)=\nabla_{\theta} Q_{\theta}\left(\mathbf{a}_{t}, \mathbf{s}_{t}\right)\left(Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\gamma V_{\bar{\psi}}\left(\mathbf{s}_{t+1}\right)\right) ^θJQ(θ)=θQθ(at,st)(Qθ(st,at)r(st,at)γVψˉ(st+1))

  • Policy Network

    策略参数可以通过最小化KL散度来获得:
    J π ( ϕ ) = E s t ∼ D [ D K L ( π ϕ ( ⋅ ∣ s t ) ∥ exp ⁡ ( Q θ ( s t , ⋅ ) ) Z θ ( s t ) ) ] J_{\pi}(\phi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}}\left[\mathrm{D}_{\mathrm{KL}}\left(\pi_{\phi}\left(\cdot \mid \mathbf{s}_{t}\right) \| \frac{\exp \left(Q_{\theta}\left(\mathbf{s}_{t}, \cdot\right)\right)}{Z_{\theta}\left(\mathbf{s}_{t}\right)}\right)\right] Jπ(ϕ)=EstD[DKL(πϕ(st)Zθ(st)exp(Qθ(st,)))]

    这里我们使用 reparameterization trick来采样动作
    a t = f ϕ ( ϵ t ; s t ) \mathbf{a}_{t}=f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) at=fϕ(ϵt;st)

​ 其中, ϵ t \epsilon_{t} ϵt 为高斯分布, f f f是一个关于 ϕ \phi ϕ 的表达式,整理得到:
J π ( ϕ ) = E s t ∼ D , ϵ t ∼ N [ log ⁡ π ϕ ( f ϕ ( ϵ t ; s t ) ∣ s t ) − Q θ ( s t , f ϕ ( ϵ t ; s t ) ) ] J_{\pi}(\phi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}, \epsilon_{t} \sim \mathcal{N}}\left[\log \pi_{\phi}\left(f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) \mid \mathbf{s}_{t}\right)-Q_{\theta}\left(\mathbf{s}_{t}, f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right)\right)\right] Jπ(ϕ)=EstD,ϵtN[logπϕ(fϕ(ϵt;st)st)Qθ(st,fϕ(ϵt;st))]

∇ ^ ϕ J π ( ϕ ) = ∇ ϕ log ⁡ π ϕ ( a t ∣ s t ) + ( ∇ a t log ⁡ π ϕ ( a t ∣ s t ) − ∇ a t Q ( s t , a t ) ) ∇ ϕ f ϕ ( ϵ t ; s t ) \begin{aligned} &\hat{\nabla}_{\phi} J_{\pi}(\phi)=\nabla_{\phi} \log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right) \\ &\quad+\left(\nabla_{\mathbf{a}_{t}} \log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)-\nabla_{\mathbf{a}_{t}} Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right) \nabla_{\phi} f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) \end{aligned} ^ϕJπ(ϕ)=ϕlogπϕ(atst)+(atlogπϕ(atst)atQ(st,at))ϕfϕ(ϵt;st)

4、第二篇文章改进

前面的SAC中,我们只是人为给定一个固定的temperature α \alpha α 作为entropy的权重,但实际上由于reward的不断变化,采用固定的temperature并不合理,会让整个训练不稳定,因此,有必要能够自动调节这个temperature。当policy探索到新的区域时,最优的action还不清楚,应该调到temperature 去探索更多的空间。当某一个区域已经探索得差不多,最优的action基本确定了,那么这个temperature就可以减小。

构造一个带约束的优化问题,让平均的entropy权重是有限制的,但是在不同的state下entropy的权重是可变的,即
max ⁡ π 0 : T E ρ π [ ∑ t = 0 T r ( s t , a t ) ] s.t.  E ( s t , a t ) ∼ ρ π [ − log ⁡ ( π t ( a t ∣ s t ) ) ] ≥ H ∀ t \max _{\pi_{0: T}} \mathbb{E}_{\rho_{\pi}}\left[\sum_{t=0}^{T} r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right] \text { s.t. } \mathbb{E}_{\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \sim \rho_{\pi}}\left[-\log \left(\pi_{t}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right)\right] \geq \mathcal{H} \forall t π0:TmaxEρπ[t=0Tr(st,at)] s.t. E(st,at)ρπ[log(πt(atst))]Ht

J ( α ) = E a t ∼ π t [ − α log ⁡ π t ( a t ∣ s t ) − α H ‾ ] J(\alpha)=\mathbb{E}_{\mathbf{a}_{t} \sim \pi_{t}}\left[-\alpha \log \pi_{t}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)-\alpha \overline{\mathcal{H}}\right] J(α)=Eatπt[αlogπt(atst)αH]

为了更快速稳定的训练,引入了两个Q网络,然后每次选择Q值小的一个作为target Q值。

总结来说:

  1. 去掉了Value Netowrk;
  2. 用两个Q Network;
  3. 将熵的系数 α \alpha α 作为一个变量,在程序中自动调节。

5、代码实现

文章1:

在这里插入图片描述

文章2:

在这里插入图片描述

这篇关于深度强化学习算法之SAC算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418583

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499