强化学习5:策略梯度推导

devtools/2024/11/13 9:12:27/

1 介绍

Q-learning、SARSA 等算法都是基于值的学习方法。基于值的方法主要用于离散动作空间。如果动作空间是连续的,离散化可能会导致精度下降或增加计算复杂度。基于值的方法通常要求对每个状态-动作对估计值函数,这限制了策略的复杂性和灵活性。为了使强化学习适用于连续的动作空间,策略梯度被设计了出来。
DQN 算法输出的是所有行为的 Q-Value。如果用于连续的动作空间,我们可以让 DQN中的网络直接输出行为。但随之而来的问题是:如何学习学习就是训练网络,那么就需要设计损失函数。可以采用如下损失函数,也就是最大化奖励的期望。
<a class=学习目标" />
第三节有相关的详细介绍和推导。

2 设计思想

  • 直接优化策略:
    策略梯度方法通过优化策略参数来直接最大化期望回报。这种方法可以自然地处理连续动作空间,因为策略参数化通常不依赖于离散化动作。
  • 灵活的策略表示:
    策略梯度方法可以使用复杂的函数逼近(如神经网络)来表示策略,使其能够捕捉复杂的策略行为。这种灵活性使得策略梯度方法能够处理高维状态和动作空间。
  • 无须显式建模环境:
    策略梯度方法不需要对环境的动态进行显式建模,而是通过与环境的交互直接学习和优化策略。这使得它们在环境模型不可用的情况下也能有效工作。
  • 强化探索:
    策略梯度方法通过策略优化促进更广泛的探索。它们通过调整策略的参数来增加对有潜力的动作的探索,这有助于发现更好的策略。
  • 处理长期回报:
    策略梯度方法能够处理长期回报的优化,因为它们直接优化期望回报函数,可以更好地处理长期奖励的延迟性。

总结来说,策略梯度方法通过直接优化策略函数、处理高维和连续动作空间的复杂性,以及强化探索等优势,克服了基于值方法的一些限制,使其在许多实际应用中表现得更加有效和灵活。

3 梯度推导

建议先了解神经网络、梯度下降。
首先约定一下符号。学习过程开始后,智能体观察环境所获得状态记为 s 1 s_{1} s1,然后根据当前状态 s 1 s_{1} s1,采取行为 a 1 a_{1} a1。行为作用到环境,导致状态发生变化,记为 s 1 s_{1} s1 变为 s 2 s_{2} s2。同时环境反馈奖励 。这是第一轮学习
第二轮中,智能体观察到状态 s 2 s_{2} s2,采取行为 a 2 a_{2} a2,获得奖励 r 2 r_{2} r2,状态由 s 2 s_{2} s2 变为 s 3 s_{3} s3。后续循环这个过程,数字表示轮次。
则一整个学习过程可记为:
请添加图片描述
τ \tau τ 中共有 T 次操作。
如果以打手机游戏为例,s 为屏幕像素,r 为释放技能或走位,击杀基于奖励 r 为 10,赢得游戏给予奖励 1000,输掉游戏给予奖励 -1000。 τ \tau τ 为一局游戏的整个过程。
记第 n 局游戏为: τ n \tau^{n} τn
学习什么呢?学习根据当前状态,判断采取尽可能好的行为的能力。可以通过神经网络或其他算法采取行动。那么这里就需要学习你所使用的算法中的参数,这里统一把参数记为 θ \theta θ。简单起见,我们就以多层感知机(MLP) 作为决策模型,那么 θ \theta θ就是:
请添加图片描述
学习目标是使得奖励最大化。下面公式也就是学习目标,或称为损失函数:
<a class=学习目标" />
解释一下这个公式。
θ \theta θ 为当前参数数值; P ( τ ∣ θ ) P(\tau|\theta) P(τθ) 为打出游戏状况为 τ \tau τ 的概率; R ( τ ) R(\tau) R(τ) τ \tau τ 中获得的奖励总和,即 r 1 + r 2 + . . . r_{1}+r_{2}+... r1+r2+... 。那么根据数学期望知,当前智能体打完所有的可能的游戏对局情况 τ \tau τ,所得到的平均奖励可记为:
请添加图片描述
但是一般情况下,不可能让智能体打完所有的对局情况的,所以这个公式没办法计算。退一步讲,我们可以使用大数定律。即,让智能体打 N 局游戏,N 足够大,那么就近似为平均奖励为:
请添加图片描述
我们的目标就是让这个平均奖励尽可能大。那么这个函数可以理解为损失函数,我们需要通过调整 θ \theta θ 对这个函数进行优化。
怎么做呢?我们可以使用梯度下降来更新参数 θ \theta θ。即求解如下:
请添加图片描述
接下来推导一下如何更新 θ:
假设我们当前已经学习了若干组 τ \tau τ,每一组会有若干个 τ \tau τ。我们以组为单位进行训练,也就是每次训练时,会有若干个 τ \tau τ 参与。
对于每一组, θ \theta θ 更新公式为:
请添加图片描述
其中,η 是学习率, ∇ \nabla 为梯度。
那么梯度怎么求?如下:
请添加图片描述
这个梯度公式不难理解。由于只有 P ( τ ∣ θ ) P(\tau|\theta) P(τθ) 中包含 θ \theta θ,因此 ∇ \nabla 可以直接挪到 P ( τ ∣ θ ) P(\tau|\theta) P(τθ) 前。
然后我们进而求解 ∇ P ( τ ∣ θ ) \nabla P(\tau|\theta) P(τθ)
请添加图片描述
这里转化为 log 形式,方便后面将乘法转换为加法,方便求解。
进一步我们知:
请添加图片描述
我们上面说不可能让智能体打完所有的对局情况,因此:
请添加图片描述
到这一步,怎么求 ∇ P ( τ n ∣ θ ) \nabla P(\tau^{n}|\theta) P(τnθ) ?我们可按照全概率公式先将 P ( τ n ∣ θ ) P(\tau^{n}|\theta) P(τnθ) 展开。我们这里简单一些,展开如下:
请添加图片描述
按照全概率公式展开的话,并不是这样的。为了避免太复杂,我们这里考虑每次状态变化不受行为影响,完全独立,来简化一下。
然后我们知道:
请添加图片描述
最后整理一下:
请添加图片描述
然后我们就可以更新 θ \theta θ 了,也就是说我们可以使用强化学习学习模型了。


http://www.ppmy.cn/devtools/100449.html

相关文章

抖音收购“联动优势”,存量客户将清退

持牌支付机构联动优势电子商务有限公司&#xff08;以下简称“联动支付”&#xff09;母公司海联金汇科技股份有限公司&#xff08;以下简称“海联金汇”&#xff09;发布公告:将联动支付作价14亿元转让天津同融电子商务有限公司&#xff08;以下简称“同融电子”&#xff09; …

Flink CDC Standalone模式部署及Flink CDC Job提交

目录 部署规划 Flink CDC下载 Flink CDC安装 安装包解压 添加connector包 添加MySQL驱动 提交Flink CDC任务 独立模式(Standalone mode)是Flink最简单的部署模式。本文将介绍如何下载、安装和运行Flink CDC。 Flink CDC是基于Flink开发的一个流式数据…

SpringBoot笔记01

第1章 Spring Boot概要 1.1 SpringBoot介绍 随着动态语言的流行&#xff08;Ruby、Scala、Node.js&#xff09;, Java的开发显得格外的笨重&#xff1b;繁多的配置、低下的开 发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下&#xff0c;Spring Boot由此诞生…

Linux云计算 |【第二阶段】SECURITY-DAY1

主要内容&#xff1a; 监控基础&#xff08;系统监控命令、监控软件&#xff09;、Zabbix监控服务端部署、Zabbix监控客户端部署、创建监控主机、调用监控模板、自定义key、创建模板、应用集、监控项、绑定模板&#xff1b; 一、监控概述 1&#xff09;监控的目的 ① 实时报…

Hostease的Windows虚拟主机如何设置错误页面

404错误设置主要用于定义当访问网站上不存在的页面时服务器应该如何响应。通常&#xff0c;404错误表示请求的页面或资源不存在。在Plesk面板中&#xff0c;你可以通过404错误设置来配置服务器对这种情况的处理方式。下面我就介绍如何在Hostease的Windows虚拟主机中设置404错误…

介绍几种常用的排序算法

常用的排序算法包括以下几种&#xff0c;它们各有特点和适用场景&#xff1a; 1. 冒泡排序 (Bubble Sort) 原理&#xff1a;通过重复地遍历要排序的序列&#xff0c;每次比较相邻的元素并交换它们的位置&#xff0c;使得每次遍历都将当前未排序部分中的最大&#xff08;或最小…

Go语言标准错误error解析

错误类型 errorString 错误是程序中处理逻辑和系统稳定新的重要组成部分。在go语言中内置错误如下&#xff1a; // The error built-in interface type is the conventional interface for // representing an error condition, with the nil value representing no error. …

Python中csv文件的操作1

1 csv文件简介 csv是Comma-Separated Values即逗号分隔符的简称&#xff0c;其文件以纯文本的形式存储表格数据&#xff0c;数据之间用逗号分隔。csv文件的后缀名是csv。 2 手动创建csv文件 2.1 显示文件后缀名 打开“此电脑”&#xff0c;在窗口上方的菜单栏中选择“查看”…