【王树森深度强化学习】价值学习 Value-Based Reinforcement Learning (2/5)

动作价值函数(Action-Value Functions)回顾

  • R 都是环境给的奖励,每当 agent 做一个动作,环境都会更新状态并且给一个奖励 R。Return UtU_tUt 来源于从 ttt 时刻开始所有的动作和状态
    在这里插入图片描述
  • 未来的动作和状态都是随机变量,而 UtU_tUt 依赖于这些动作和状态,因此 UtU_tUt 也是随机的
  • 动作的随机性来自于 Policy 函数 π\piπ,动作是 agent 根据函数 π\piπ 随机抽样得到的
  • 状态的随机性来自于状态转移函数 p,新的状态是根据函数 p 随机抽样得到的在这里插入图片描述
  • UtU_tUt 的值可以反映出未来奖励的总和,所以我们想要了解 UtU_tUt 的大小,由于 UtU_tUt 是个随机变量,在 ttt 时刻我们并不知道 UtU_tUt 的值,我们可以对 UtU_tUt 求期望,这样我们就可以排除掉 UtU_tUt 中的随机性,这个期望是对于未来所有的动作和状态求的,只留下 sts_tstata_tat 这两个变量
  • 求到 QπQ_{\pi}Qπ 我们叫它动作价值函数,QπQ_{\pi}Qπ 跟策略函数 π\piπ 有关,跟变量 sts_tstata_tat 也有关,未来的随机性都被期望消除了,QπQ_{\pi}Qπ 只依赖于当前的动作 ata_tat 和状态 sts_tst
  • QπQ_{\pi}Qπ 可以反映出当前 sts_tst 下做出 ata_tat 的好坏程度
    在这里插入图片描述
  • 想要进一步消除 π\piπ,我们可以关于 QπQ_{\pi}Qππ\piπ 的最大化,得到最优动作函数 Q∗Q^*Q。它可以告诉我们不管我们用什么样的策略函数 π\piπ,要使当前状态下做动作 ata_tat,回报的期望顶多就是 Qπ(st,at)Q_{\pi}(s_t,a_t)Qπ(st,at),不会更好
  • QπQ_{\pi}Qπ 函数和 Policy 函数 π\piπ 无关,只要 agent 现在做了动作 aaa,那么 Qπ(st,at)Q_{\pi}(s_t,a_t)Qπ(st,at) 就是最好的结果了
  • QπQ_{\pi}Qπ 可以指导 agent 做决策
    在这里插入图片描述

Deep Q-Network(DQN)

  • 用一个神经网络近似 Q∗Q^*Q 函数

Approximate the Q function

  • 目标:游戏中 agent 的目标是打赢游戏,用强化学习的语言来说就是赢得游戏的情况下目标的奖励越大越好
  • 问题:如果我们知道 Q∗(s,a)Q^*(s,a)Q(s,a),怎么样才是最好的决策
  • 显然最好的决策就是 Q∗Q^*Q 最好的那个动作。Q∗Q^*Q 函数就像是个先知,它可以预见未来的结果,比如你问先知现在有 a, b, c 三个股票应该买哪一只,未来是充满随机性的,所以先知没办法告诉你一个准确答案,只能告诉你一个平均值,先知 Q∗Q^*Q 说:从平均值来看,a 股票涨了 10 倍,b 股票涨了 2 倍,c 股票跌了一半,先知还告诉你,实际情况和平均值并不一样,那么你该买哪个股票呢?显然是 a 股票,因为先知告诉你 a 股票的期望是最高的,但是实际情况未必是涨 10 倍,有可能下跌也有可能涨 20 倍,但是从期望来看还是买 a 是最好的
  • 回到整体,Q∗Q^*Q 是个先知,它能告诉你每个动作给你带来的平均回报,你该听先知的话,选平均回报最高的那个动作
    在这里插入图片描述
  • 因此我们希望有 Q∗Q^*Q 这个先知,agent 可以通过 Q∗Q^*Q 来做决策,这样 agent 就像开了挂一样,但是我们并没有 Q∗Q^*Q 函数
  • 而价值学习就是学习近似 Q∗Q^*Q,你觉得有可能近似出来一个先知吗?谁也没开天眼,当然不可能近似出一个万能的先知,谁也没可能预测单只股票的波动,但是像对于超级玛丽这样的游戏,学出来并不难。假如我玩了 10w 次,我也能和先知一样看一眼就能告诉你什么操作是最好的
  • DQN 是一种价值学习的方法,它用一个神经网络去近似 Q∗Q^*Q 函数,我们把它记为 Q(s,a;w)Q(s,a;w)Q(s,a;w)。神经网络的参数是 w,神经网络的输入是状态 sss,神经网络的输出是很多数值,这些数值是对所有可能动作的打分,每一个动作对应一个分数。我们通过奖励来学习这个神经网络,这个动作就会通过打分来逐步改进,会越来越准。如果让神经网络玩几百万次超级玛丽,这个神经网络就和先知一样准确了

在这里插入图片描述

Deep Q Network(DQN)

  • 下面是 DQN 的一个网络,对于不同的问题,DQN 的结构可能不一样
  • 我们以超级玛丽为例,可以以屏幕上的图片作为输入,用一个卷积层把图片作为特征向量,最后用全连接层把特征映射到一个输出的向量,这个输出的向量就是对动作的打分,一个元素对应一个动作
    在这里插入图片描述
  • 问题:根据这些预测的分数,哪个应该作为最终的 action
    在这里插入图片描述
  • 显然应该向上跳,因为向上的期望最高

Apply DQN to Play the Game

  • 当前观测到状态 sts_tst,用 DQN 把 sts_tst 作为输入给所有的动作打分选出分数最高的动作作为 ata_tat
    在这里插入图片描述
  • agent 执行 ata_tat 这个动作后,环境的状态会改变。用状态转移函数来抽一个新的状态 st+1s_{t+1}st+1,环境还会告诉我们这一步的奖励 rtr_trt(可以为正的,负的或者零)
  • 奖励就是强化学习中的监督信号,DQN 要靠这个奖励来训练
    在这里插入图片描述
  • 有了新的状态 st+1s_{t+1}st+1,DQN 再对所有的动作打分,选择分数最高的动作作为 at+1a_{t+1}at+1。agent 执行 at+1a_{t+1}at+1 后,环境会再更新状态并给出奖励
    在这里插入图片描述
  • 一直重复这个过程,直到游戏结束
    在这里插入图片描述

Temporal Difference (TD) Learning

Example

  • 我想要开车从纽约到亚特兰大
  • 我有一个模型 Q,参数是 w,它可以预测出开车出行的时间开销。此时我要出发了,我的模型告诉我要开车 1000 分钟才能到。这个模型一开始可能不太准,但是随着更多人的使用,数据会越来越多,模型会越来越准
  • 问题:我需要怎么样的数据,有了这些数据我应该怎么更新我的模型
  • 最简单的办法:在出发之前做一个预测,记作 q=Q(w)q=Q(w)q=Q(w),模型告诉我需要 1000 分钟,q=1000q=1000q=1000
  • 而我实际的时间为 y=860y=860y=860 分钟。模型有偏差,比我实际的 yyy 要多,这就造成了 Loss,我们进行梯度下降
    在这里插入图片描述
  • 假如我不完成旅行,我走到半路就不走了,那我还有没有办法对模型做一个更新呢?
    在这里插入图片描述
  • 我们可以用 TD 算法来做这个事情
  • 模型预估从起点到终点为 1000。而我们到中间点的时候,实际花了 300 分钟
  • 而此时模型又告诉我们从中间点到重点需要 600 分钟。而此时从起点到重点的 TD target(也是估计,未必是实际情况) 就是 300+600=900 分钟
  • 虽然 TD target 有估计,但是它存在事实的成分,当我离终点越近我就约接近真实值
  • 用 TD target 我不用跑完整个路程去知道真实的时间开销,我们假设这个 TD target 就是真实观测出来的 target。算 Loss 就是用一开始的预估值和 TD target 去算,我们把它们之间的差叫做 TD error
    在这里插入图片描述

Why does TD learning work?

  • 模型估计从起点到终点要花 1000 分钟,从中间点到终点要花 600 分钟,两者的差等于 400 分钟。所以我们可以任务模型从起点到中间点得花 400 分钟,而我们的实际只走了 300 分钟,比预计的要快
  • 而 400-300=100 就是 TD error,这和我们之前算的 TD error 完全相等,TD 算法的目标就是让 TD error 尽量接近 0,TD error 等于 0 就意味着预计时间和实际时间相等,这是最理想的状况。所以 TD 算法要用 TD error 来减小 TD error
    在这里插入图片描述

TD Learning for DQN

  • 刚在的例子里面有这样一个公式:有这样一个公式才能使用 TD 算法。左边是整个的时间,右边是两个分别的时间。理想情况下两个应该相等
    在这里插入图片描述
  • 整个旅途的时间和第二段路程的时间都是模型的估计,而第一段旅途的时间则是真实的观测
    在这里插入图片描述
  • 想要用 TD 算法,必须用这样的公式:等式左边有一项,右边有两项,它们中有一项是真实观测到的
  • 下面的公式中,左边的是未来奖励的期望,这相当于上面例子中预估的起点到终点的时间
  • 右边第一项 rtr_trt 是真实观测到的奖励,相当于上面例子中从起点到中心点的距离
  • 右边第二项是 DQN 在 t+1t+1t+1 时刻做的估计,相当于从中间点到终点的预计时间

在这里插入图片描述

  • 回顾一下折扣回报
    在这里插入图片描述
  • 我们提出来一个 γ\gammaγ,就能写成和上面一样的形式。即括号里面的内容就是 Ut+1U_{t+1}Ut+1。这个公式反应了相邻两个折扣回报之间的关系

在这里插入图片描述

  • 现在我们要把 TD 算法用到 DQN 上。在 ttt 时刻,DQN 输出的 Q(st,at;w)Q(s_t,a_t;w)Q(st,at;w) 是对 E[Ut]E[U_t]E[Ut] 做出的估计,这就是我们例子中预估的起点到终点的时间
  • 在下一时刻,DQN 输出 Q(st+1,at+1;w)Q(s_{t+1},a_{t+1};w)Q(st+1,at+1;w) 是对 E[Ut+1]E[U_{t+1}]E[Ut+1] 做出的估计,这是我们例子中预估中间点到终点的时间
  • 我们利用上面的两个折扣回报之间的关系有:
    在这里插入图片描述
  • 我们把左边作为预测值,右边作为 target
    在这里插入图片描述

Train DQN using TD learning

  • 预测:Q(st,at;wt)Q(s_t,a_t;w_t)Q(st,at;wt)sts_tst 是当前的状态,ata_tat 是实际已经做出的动作,wtw_twt 是模型的参数
  • TD target:yt=rt+γ⋅Q(st+1,at+1;wt)y_t=r_t+\gamma·Q(s_{t+1},a_{t+1};w_t)yt=rt+γQ(st+1,at+1;wt),到了 t+1t+1t+1 时刻,我们观测到了真实的奖励 rtr_trt,还观测到了新的状态 st+1s_{t+1}st+1,有了状态 st+1s_{t+1}st+1,我们就可以用 DQN 算出下一个动作 at+1a_{t+1}at+1 了。在 t+1t+1t+1 时刻,我们知道了 rtr_trtst+1s_{t+1}st+1 还有 at+1a_{t+1}at+1 的值,这时候我们就可以计算 TD target,记作 yty_tyt
  • t+1t+1t+1 时刻的动作,是通过 DQN 对所有动作打分,最高的哪个就被选出来作为动作
    在这里插入图片描述
  • 计算 loss 和梯度下降:来让两者尽量接近
    在这里插入图片描述

Summary

Value-Based Reinforcement Learning

  • 我们首先用到了动作价值函数:首先对回报 UtU_tUt 求期望,把除了 sts_tstata_tat 之外的用期望给去掉,然后再关于策略函数 π\piπ 求一个最大化,去掉了 π\piπ,得到的函数就和 π\piπ 没关系了
  • 只要有了 Q∗Q^*Q 函数就可以用 Q∗Q^*Q 函数来控制 agent 运动
    在这里插入图片描述
  • 然而我们并没有 Q∗Q^*Q,而价值学习的目标就是去学出一个 Q∗Q^*Q 函数
  • 而 DQN 就是去近似一个 Q∗Q^*Q 函数,把这个 DQN 记作是 Q(s,a;w)Q(s,a;w)Q(s,a;w),这里的 www 是神经网络的参数。DQN 的输入的是观测到的状态 sss,比如超级玛丽的游戏画面。DQN 的输出是对每一个动作的打分,比如超级玛丽中有左右上三个动作,那么就是输出一个三维向量

Temporal Difference (TD) Learning

  • 一开始模型的参数都是随机的,agent 回根据 DQN 的指导不断的尝试,有时获得正奖励,有时获得负奖励,强化学习就是通过奖励来更新模型参数让模型越来越好
  • 这节课讲了 TD 算法来通过奖励更新模型参数,TD 是学习 DQN 最常用的算法,TD算法不断重复这个过程:
    1. 观测到状态 sts_tst 和已经执行的动作 ata_tat
    2. 用 DQN 做一次计算,输入是状态 sts_tst,输出是对动作的打分,把预估的值记作 qtq_tqt
    3. 用反向传播对 DQN 求导,得到梯度
    4. 由于执行了动作 ata_tat,环境会更新状态 sts_tst 并返回奖励 rtr_trt
    5. 有了 rtr_trt,和公式我们就可以求出 TD target
    6. 梯度下降
      在这里插入图片描述
  • agent 在多次迭代后学到了连消技巧,这个就是通过奖励实现的,因为连消分数高
    在这里插入图片描述
打开链接下载源码: https://pan.quark.cn/s/05da658a2377 在信息技术领域中,输入法作为操作系统的一个核心构成部分,赋予了用户利用键盘输入多语种文字的能力。"ime-日语输入法安装必须文件"这一资源是一套为日语输入法部署而设计、包含全部必要元素的集成包,对于那些需要在个人计算机上执行日语文字输入的操作者而言具有不可替代的作用。接下来将深入剖析其中所包含的核心概念。 IME(Input Method Editor,输入法编辑器)是操作系统内的一种软件支持服务,其功能在于为非拉丁字符环境提供文字输入方案,例如中文、日文、韩文等文字系统。在日本地区,IME通常被用来将罗马字(罗马拼音)形式的输入转换为平假名、片假名乃至汉字。此压缩文件内含的日语IME文件夹即为执行这一转换功能的关键要素。 kbdjpn.dll被视为一个关键的系统性文件,其意指“Japanese Keyboard Layout”(日语键盘布局)。该动态链接库文件负责设定日语键盘的排列方式及快捷操作组合,使用户能够借助常规的QWERTY键盘输入日语文字。倘若缺少这一文件,即便已经安装了日语输入法,依然无法正常显示及输入日语字符。 另外,imjp81k.dll同样是一个重要的系统性构成,它属于日语IME的范畴,全称为“Input Method Japanese for Windows 8.1 and later, Katakana mode”(适用于Windows 8.1及更新版本的日语输入法,片假名模式)。该文件支持日语的片假名输入,是处理日语输入的核心组成部分。在安装或升级日语输入法的过程中,保证imjp81k.dll的准确性与完整性显得尤为关键。 压缩包所含的"Window...
内容概要:本文研究了基于DPWMA调制与正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器在谐波抑制、电网不平衡适应性及动态响应方面的技术瓶颈。通过构建融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相控制与电网电压前馈的一体化控制体系,全面优化逆变器的输出波形质量、相位同步精度与抗扰能力。文章深入分析了ANPC三电平拓扑的结构优势,如开关损耗均衡、中点电位可控性强和电压利用率高等特点,并设计了包含信号采集、核心控制与调制驱动三层架构的完整控制系统。通过Simulink仿真平台对稳态运行、电网不平衡及动态扰动等多种工况进行验证,结果表明该策略显著降低了总谐波畸变率,提升了锁相精度与系统动态稳定性,有效增强了逆变器在复杂电网环境下的适应能力和运行可靠性。; 适合人群:具备电力电子、自动控制及新能源并网相关基础知识,从事新能源发电、微电网、电力系统仿真等领域的科研人员与工程技术人员,特别适合研究生及以上层次的研究者。; 使用场景及目标:①用于提升大功率并网逆变器在电网电压不平衡、谐波干扰和动态扰动等复杂工况下的运行性能;②为高电能质量要求的应用场景提供先进控制解决方案;③支持科研仿真、论文复现与实际工程项目中的高性能并网控制系统设计与优化。; 阅读建议:建议结合提供的Simulink仿真模型进行实践操作,重点理解DPWMA调制机制、正负序分离锁相算法与电网电压前馈控制之间的协同作用,按照文档结构系统学,并与传统控制策略进行对比分析,以深入掌握改进策略的技术优势与实现细节。
代码下载链接: https://pan.quark.cn/s/d9794888cbc0 ### G代码经典解释程序知识点详解 #### 一、引言 随着数控技术的持续进步,尤其是开放式数控系统的广泛应用,软件层面的设计在数控领域占据了核心地位。G代码作为数控机床编程的基础语言,在自动化生产流程中发挥着不可或缺的作用。本文的核心内容是关于一个基于Linux平台、采用C语言开发的G代码解释程序的设计思路及其具体实现。 #### 二、G代码解释器概述 **1. 设计背景** - 当前数控技术发展的主要方向是开放式数控系统,这类系统具备出色的可扩展能力、良好的移植性、高度的互换性以及优异的互操作性等优势。 - 计算机硬件技术的快速发展使得在PC平台上构建数控系统成为可能,进而推动了全软件式数控系统的普及。 **2. G代码解释器的重要性** - G代码解释器在全软件式数控系统中是至关重要的组成部分,其主要职责是将G代码转化为数控系统能够识别的数据格式。 - 为了提升数控系统的开放程度,G代码解释器的设计必须兼顾开放性和灵活性。 #### 三、G代码解释器设计与实现 **1. 总体结构设计** - G代码解释器主要由两个核心部分构成:G代码关键字函数表(GKFT)和G代码分组(GG)- GKFT用于解析G代码中的关键字,它是解释器的核心骨架;而GG则是语法检查的基础框架。 **2. G代码关键字函数表(GKFT)** - GKFT是一种专门用于存储G代码关键字及其关联处理函数的数据结构。 - 解释器通过查询GKFT,能够根据特定的G代码关键字调用相应的处理函数,从而完成对G代码的有效解析。 - 此种设计方法不仅简化了解释器的构建过程,同时也增强了其可扩展性,因为新增功能...
已经博主授权,源码转载自 https://pan.quark.cn/s/458849d2eac8 Microblaze代表由Xilinx公司研发的一款软核处理器,其核心特性在于使用户能够针对FPGA(Field Programmable Gate Array)平台进行嵌入式系统的个性化构建。此“Xinlin中Microblaze的培训教程”致力于辅助学人员深入理解和熟练掌握Microblaze在Xilinx开发环境中的实际应用。 一、Microblaze基础 Microblaze作为一款可配置的32位RISC处理器,具备高度适应性,允许在设计中根据具体需求对性能、功耗及面积进行灵活调整。Microblaze支持多种指令集架构(ISA),涵盖Xtensa-like和Classic两种模式,并且与包括UART、SPI、I2C在内的多种外设接口标准保持兼容。 二、Xilinx ISE与Vivado工具 Xilinx ISE(Integrated Software Environment)是一个用于FPGA系统设计、实现和调试的集成开发平台,而Vivado则是一款功能更为先进且全面的工具套件。在本次教程中,学员将学会如何在上述工具中配置和执行Microblaze处理器,以及如何开发相关的硬件描述语言(HDL)代码。 三、Microblaze硬件设计 在Xinlin提供的教程里,学员将学如何在Xilinx FPGA中部署Microblaze处理器。这涉及到选择合适的处理器配置参数,如时钟频率、缓存容量和外设接口设置。此外,学员还将接触到创建和连接内存模块、中断控制器以及其他必需硬件组件的方法。 四、软件开发 Microblaze的软件开发通常涉及嵌入式编程,采用C或C++语言来...
内容概要:本文围绕并网与离网模式下的风光互补制氢合成氨系统,开展容量配置与运行调度的联合优化分析,并提供了完整的Python代码实现。研究构建了综合考虑风能、太阳能发电特性、电解水制氢、合成氨工艺及储能环节的系统模型,重点解决了在不同运行模式(并网/离网)下,如何通过优化算法确定各单元的最佳容量配置,并在此基础上实现系统经济高效的运行调度。文中详细阐述了数学模型的建立过程,包括以最小化综合成本为目标的目标函数,以及涵盖功率平衡、设备容量、物料守恒等多方面的约束条件体系,并利用Python编程语言调用专业优化求解器进行仿真求解,最终获得系统的最优容量配置方案与精细化的调度策略。; 适合人群:具备一定Python编程基础和优化理论知识,从事新能源系统规划、综合能源系统、氢能或化工过程优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学如何对复杂的“电--氨”多能转换与存储系统进行一体化建模与仿真;②掌握使用Python实现能源系统容量优化与运行调度联合求解的具体方法与技术路线;③为相关领域的科研项目、学位论文撰写或实际工程设计提供可复现的代码参考和系统性的解决方案借鉴。; 阅读建议:在阅读时应重点关注模型构建的逻辑框架与严谨的数学表达,并结合所提供的Python代码逐行理解其具体实现方式,建议读者务必自行复现代码以加深对优化算法求解过程和系统运行机制的理解,同时可尝试修改模型参数或拓展系统结构以适应不同的研究需求和应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值