首页 > 编程问答 >为什么演员评论家的演员损失乘以-1?

为什么演员评论家的演员损失乘以-1?

时间:2024-07-26 14:59:05浏览次数:6  
标签:python tensorflow reinforcement-learning actor-critics

https://www.tensorflow.org/tutorials/reinforcement_learning/actor_critic#3_the_actor-critic_loss

在 Actor-Critic 方法的 TensorFlow 指南中,actor 损失使用以下公式计算:

advantage = returns - values

action_log_probs = tf.math.log(action_probs)

actor_loss = -tf.math.reduce_sum(action_log_probs * advantage)

描述说, “在总和中添加了一个负项,因为这个想法是通过最小化组合损失来最大化产生更高奖励的行动的概率。”

据我的理解, action_log_probs 总是负数。

然后该公式令人困惑因为 tf.math.reduce_sum(action_log_probs * advantage) 乘以-1意味着当 advantage 为正数时, actor_loss 变为正数。假设 advantege 越高越好,则最小化 actor_loss 将调整参数以最小化产生更高奖励的操作的概率。

advantage 总是负值并且较小 advantage 更好?我运行代码并打印出

by advantage ,这表明 tf.print('advantage: ', advantage) 始终为负数。 advantage 您能解释一下为什么

为负数以及为什么较小的 advantage 更好吗? advantage 显示最后一集最后 500 步的优势值的图形图像

An image of the figure showing the advantage values over the last 500 steps of the final episode


你对 Actor-Critic 损失函数的理解基本上是正确的,但对优势的解释有一些误解。让我们来分解一下:

  1. action_log_probs 不一定为负数: 你是正确的, action_log_probs 表示采取所选行动的对数概率,由于概率在 0 到 1 之间,它们的对数通常为负数。但是,重要的是要注意,它们的值接近于零。

  2. advantage 可以是正数或负数: 优势表示在给定状态下采取行动相对于预期回报的好坏程度。

  3. 正的 advantage 意味着采取的行动比该状态下的平均行动要好(即,它产生了比批评家预期的更高的回报)。
  4. 负的 advantage 意味着采取的行动比平均水平差。

  5. 最小化 Actor 损失: 目标是通过梯度下降来最小化 Actor 损失。让我们看看当 advantage 为正数和负数时会发生什么:

    • 正的 advantage actor_loss = - (positive value) 。最小化损失意味着增加采取该行动的对数概率(并因此增加概率本身),因为它导致了比预期更好的结果。
    • 负的 advantage actor_loss = - (negative value) 。这有效地成为正损失。最小化它意味着减少采取该行动的对数概率(并因此降低概率本身),因为它导致了比预期更差的结果。
  6. 为什么乘以 -1: 乘以 -1 是一个数学技巧,允许我们将最大化期望奖励的问题转换为最小化损失函数的问题,这与梯度下降的标准优化过程一致。

  7. 较小的 advantage 不一定更好: 你观察到 advantage 值为负数,并且在你的实验中随着时间的推移而减小。这可能表明:

    • 你的 Actor 正在学习,并且在选择行动方面正在变得不那么“糟糕”。随着 Actor 的改进, advantage 值将趋向于 0,因为它采取的行动与预期值没有太大差异。
    • 你的批评家可能在高估状态值。

总的来说,Actor-Critic 方法的目标是通过增加导致正 advantage 的行动的概率并减少导致负 advantage 的行动的概率来训练 Actor 采取更好的行动。 advantage 值本身的大小表示所采取行动与预期值相比的相对好坏程度。

为了进一步调试你的观察结果,跟踪奖励的移动平均值以及 advantage value 函数可能会很有帮助。这将使你能够更好地了解代理的学习进度以及是否有任何潜在问题(例如,批评家中的偏差)。

标签:python,tensorflow,reinforcement-learning,actor-critics
From: 78794504

相关文章

  • 用Python解析邮件日志
    我的任务有点困难。我有一个邮件日志,如:Oct315:30:18mail1postfix/lmtp[5369]:DB10242054:to=<XXXXX>,orig_to=<XXXXXX>,relay=ip[ip]:port,delay=1.4,delays=0.04/0/0.01/1.4,dsn=2.0.0,status=sent(2502.0.0fromMTA(smtp:[iP]:port):2502.0.0Ok:queueda......
  • Python,Pyinstaller打包含taichi模块的程序
    Python版本3.9、taichi版本1.7.1,pyinstaller版本6.9.0问题描述:正常Pyinstaller打包后报错[Taichi]version1.7.1,llvm15.0.1,commit0f143b2f,win,python3.9.19[Taichi]Startingonarch=x64Traceback(mostrecentcalllast):File"taichi\lang\_wrap_inspec......
  • Python,运行Yolo项目,报错AttributeError: ‘ImageDraw‘ object has no attribute ‘te
    Python3.9问题描述:其他电脑已经运行成功的Python,YOLO代码到我电脑上运行报错Traceback(mostrecentcalllast): File"C:\Users\Administrator\Desktop\20240725\识别项目\predict.py",line122,in<module>  frame=np.array(yolo.detect_image(frame)) Fil......
  • Python从零开始制做文字游戏(荒岛求生)
    文章目录前言开发游戏《荒岛求生》游戏大纲背景内容通关条件游戏过程探索荒岛购买物资休息总结代码开发定义变量当前代码引入背景故事当前代码循环问题解决:函数当前代码制作延时当前代码制作a函数(探索荒岛阶段)展示数......
  • 使用 Python 进行数据分析:入门指南
    使用Python进行数据分析:入门指南1.简介本指南将介绍如何使用Python进行数据分析,涵盖从数据加载到可视化分析的各个方面。2.必要的库NumPy:用于数值计算和数组操作。Pandas:用于数据处理和分析,提供DataFrame结构。Matplotlib:用于数据可视化,创建各种图表。Seab......
  • IT实战课堂计算机毕业设计源码精品基于Python的高校教育教材采购出入库进销存储信息管
    项目功能简介:《[含文档+PPT+源码等]精品基于Python的高校教育教材信息管理系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开......
  • 为什么我的 Python 脚本失败并出现 TypeError?
    我正在编写一个Python脚本,该脚本应该计算数字列表的总和。但是,当我运行代码时遇到TypeError这是一个最小的例子:numbers=[1,2,3,'4']total=sum(numbers)print(total)Theerrormessageis:TypeError:unsupportedoperandtype(s)for+:'int'and'str......
  • 如何通过socks代理传递所有Python的流量?
    有如何通过http代理传递所有Python的流量?但是,它不处理sock代理。我想使用sock代理,我们可以通过ssh隧道轻松获得它。ssh-D5005user@server你可以使用socks库,让你的Python代码通过SOCKS代理传递所有流量。这个库可以让你在套接字级别上指定代......
  • 如何在streamlit python中流式传输由LLM生成的输出
    代码:fromlangchain_community.vectorstoresimportFAISSfromlangchain_community.embeddingsimportHuggingFaceEmbeddingsfromlangchainimportPromptTemplatefromlangchain_community.llmsimportLlamaCppfromlangchain.chainsimportRetrievalQAimports......
  • python mysql操作
    pipinstallmysql-connector-pythonimportmysql.connector#配置数据库连接参数config={'user':'your_username','password':'your_password','host':'your_host','database'......