论文复现-多目标强化学习-envelope MOQ-learning

这篇具有很好参考价值的文章主要介绍了论文复现-多目标强化学习-envelope MOQ-learning。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

introduction

1 总体思想

2 算法

2.1 输入

2.2 输出

2.3 损失函数

2.3.1 Critic loss

2.3.2 Actor loss

2.4 更新方式

2.4.1 数据收集方式

2.4.2 参数更新方式

2.5 损失函数中偏好和输入网络偏好的关系

3 其他bug和优化技巧


introduction

一种多目标强化学习算法,来自2019 Nips《A Generalized Algorithm for Multi-Objective Reinforcement Learning and Policy Adaptation》本文引用代码全部来源于论文中的链接。主要参考run_e3c_double.py文件。下图为训练效果图,在4070上耗时11小时收敛。

论文复现-多目标强化学习-envelope MOQ-learning,强化学习,深度学习,动态规划,论文阅读,1024程序员节,动态规划,深度学习,机器学习,人工智能

论文复现-多目标强化学习-envelope MOQ-learning,强化学习,深度学习,动态规划,论文阅读,1024程序员节,动态规划,深度学习,机器学习,人工智能

论文复现-多目标强化学习-envelope MOQ-learning,强化学习,深度学习,动态规划,论文阅读,1024程序员节,动态规划,深度学习,机器学习,人工智能

1 总体思想

1.将输入中加入多目标的偏好参数。 2. 在输出中改本为标量的状态价值为向量的状态价值。 3. 实现了可以在多个目标上寻找帕累托前沿,也即多目标最优解的算法。

论文复现-多目标强化学习-envelope MOQ-learning,强化学习,深度学习,动态规划,论文阅读,1024程序员节,动态规划,深度学习,机器学习,人工智能论文补充部分截图

2 算法

虽然论文中用的是Q-learning的架构,但是在提供的代码中,采用的是A3C的架构,使用envelope 网络作为价值网络,估计状态价值用于更新,所以接下来以代码为准,结合论文思想,展示用到的输入、输出和损失函数。

论文复现-多目标强化学习-envelope MOQ-learning,强化学习,深度学习,动态规划,论文阅读,1024程序员节,动态规划,深度学习,机器学习,人工智能

2.1 输入

以多目标马里奥环境为例,输入为连续四帧状态 S,随机采样的偏好w。w的值均为正数,且和为1,每一位的值,代表对该维目标的偏好大小。

2.2 输出

Actor 网络和Value网络共享同一个特征提取网络,Actor网络输出维度为所有可能动作数,Value网络输出维度为偏好的维度,也即多目标的目标维度数。

2.3 损失函数

2.3.1 Critic loss

        mse = nn.MSELoss()
        critic_loss_l1 = mse(wvalue, wtarget)
        critic_loss_l2 = mse(value.view(-1), target_batch.view(-1))
        loss += 0.5 * (self.beta * critic_loss_l1 + (1-self.beta) * critic_loss_l2)

Critic 网络的损失由critic loss1和critic loss2加权和组成,critic loss2 理解为多目标损失函数,即当Critic网络能够准确评估多目标状态时,所有pareto前沿上的点都满足critic loss2 为零。因此用梯度下降优化CL2显得不平滑且困难(因为它的解不止一个,而是很多个)。所以引入critic loss1 来减少这种不平滑,critic loss 1 是某种偏好下,critic网络的TD LOSS,因为偏好确定了,所以解只有一个,作者认为这样的损失函数更容易优化,更平滑。

操作上,wvalue和wtarget的唯独都是(batch_size, 1) ; 而 value和target的维度都是(batch_size,reward_size)。显然也是前者的优化更简单。

2.3.2 Actor loss

wadv_batch = torch.bmm(adv_batch.unsqueeze(1), 
                               w_batch.unsqueeze(2)).squeeze()
actor_loss = -m.log_prob(action_batch) * wadv_batch

actor loss形式上和带基线的policy gradient的损失函数类似,只不过Critic网络输出的维度不是1而是reward_size,优势adv先与偏好权重w矩阵相乘,得到维度为1的优势adv后再输入actor loss中,这也说明actor loss 的优化方向是朝着使得当前偏好的期望回报最大的方向优化的。

2.4 更新方式

2.4.1 数据收集方式

论文中伪代码表示用类似Q-learning 离线更新的方式, 给出的代码中使用类A3C在线更新的方式,以下以代码为准。

在一个epsiode开始前,随机初始化一个preference,并用这个偏好贯穿这一幕,直至结束。

explore_w = generate_w(args.num_worker, pref_param)

每一步,模型输入状态和偏好,输出动作

 while True:
     actions = agent.get_action(states, explore_w)
     for parent_conn in parent_conns:
         s, r, d, rd, mor, sc = parent_conn.recv()
               

将一幕中数据以此收齐后立即用于更新神经网络参数(因为A3C是在线算法,所以E3C也是在线)

2.4.2 参数更新方式

 value, next_value, policy = agent.forward_transition(
                total_state, total_next_state, total_update_w)

1.将收集到的状态,下一状态,偏好的序列输入网络,得到价值(5维)下一状态价值(5维)策略(和动作维度相同)

 for idx in range(args.num_worker):
                    target = make_train_data(args,
                                  total_moreward[idx*args.num_step+idw*ofs : (idx+1)*args.num_step+idw*ofs],
                                  total_done[idx*args.num_step+idw*ofs: (idx+1)*args.num_step+idw*ofs],
                                  value[idx*args.num_step+idw*ofs : (idx+1)*args.num_step+idw*ofs],
                                  next_value[idx*args.num_step+idw*ofs : (idx+1)*args.num_step+idw*ofs],
                                  reward_size)

2.从最后一状态以此计算 TD-error中的taget,target = r+v(s'),target也是五维

> (ps:一直不知道为什么在线算法要从最后一步一直迭代倒推到第一步,都用r+γv(s')来做代表当前状态价值,导致第一个状态v(s0)=r0+γ*r1+γ**2+....+γ**nV(Sn),导致方差很大。为什么不每一步直接从价值网络导出,这样v(s0)=r0+v(s1),这样方差小的方法呢?很奇怪)

total_target, total_adv = envelope_operator(args, update_w, total_target, value, reward_size, global_step)

 3. 使用envelope operator函数对target做处理,在训练初期,只计算优势 adv = target - value,

在训练中后期用于从随机采样的多个偏好(代码默认八个偏好,总和维度为(8,5))中,挑选出能使target最大的一种偏好。和Q-learning中取q=r+qmax(s')有点像。[这里的reshape我也有点看不懂,此观点只做参考]

agent.train_model()
actor_loss = -m.log_prob(action_batch) * wadv_batch

# Entropy(for more exploration)
entropy = m.entropy()

# Critic loss
 mse = nn.MSELoss()
critic_loss_l1 = mse(wvalue, wtarget)
critic_loss_l2 = mse(value.view(-1), target_batch.view(-1))


 # Total loss (don't compute tempreture)
 loss = actor_loss.mean()
 loss += 0.5 * (self.beta * critic_loss_l1 + (1-self.beta) * critic_loss_l2)
 loss -= self.entropy_coef * entropy.mean()

4.计算loss,反向传播。这一部分就很明了了,计算前面提到的几种loss,给与不同权重后反向传播,唯一特别注意的是,actor loss中使用的优势adv,不知出于什么理由,使用了优势向量与偏好向量做内积后的偏好,(可能是因为解唯一,优化方便)

5.其他注意事项:1、用于和环境交互的偏好并不被保存,更新参数时会重新抽样偏好,这样做有什么理论依据嘛?暂时还没想明白。

2.5 损失函数中偏好和输入网络偏好的关系

从伪代码,和代码中可见,在进行前向推导时输入网络的preference 和在训练时使用的preference并不是同一个。并且,前向时所用的preference并没有被replayer buffer记录下来。训练时actor 和 critic里用的偏好仍然是随机抽取的偏好。

3 其他bug和优化技巧

1.为达到论文所示的训练速度,需要使用简化后的Mario-v3环境,并且跳5帧。

2.由于A3C是异步算法,有多个环境并行采样,所以环境初始化的位置应在启动进程的代码之后,即在multiprocess的run函数之中再reset环境,否则会发生内存地址错误,找不到创造的环境的错误。

对于文中的问题,欢迎有不同见解的同学在评论区讨论交流学习,祝你学习愉快!文章来源地址https://www.toymoban.com/news/detail-745639.html

到了这里,关于论文复现-多目标强化学习-envelope MOQ-learning的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 强化学习Chapter2——优化目标(1)

    上节涉及强化学习基本思路以及利用数学方式表征强化学习,但对强化学习的目标并没有进行详尽的定义。本节的目标旨在介绍 algorithm-free 的优化目标,即本文将不涉及算法地详述强化学习的目标。 上文提到,强化学习的目标可以解释为:在一个 Trajectories (tau) 中积累的

    2024年02月15日
    浏览(45)
  • 【单目3D目标检测】FCOS3D + PGD论文解析与代码复现

    本文对OpenMMLab在Monocular 3D detection领域做的两项工作FCOS3D和PGD(也被称作FCOS3D++)进行介绍。 在此之前,建议大家通过这篇博客:“3Dfy” A General 2D Detector: 纯视觉 3D 检测再思考,来回顾单目3D目标检测的更多细节。   Wang, T, Zhu, X, Pang, J, et al. Fcos3d: Fully convolutional one-stage mono

    2024年02月02日
    浏览(42)
  • 强化学习-DQN改进及一些强化学习路由优化论文笔记

    通用超参数 Duel Structure VS→该state在当前policy下的value QSA→该state进行这个action在当前policy下的value advantage = VS - QSA 裁剪区域的确定? 34 194按行输出min,33 193min为90*90 background knowledge [bisect Module] python自带的二分查找的包 基本使用 bisect with list 在一个increasing array插入一个元素

    2024年04月13日
    浏览(50)
  • 基于深度强化学习的目标驱动型视觉导航泛化模型

    参考论文《Towards Generalization in Target-Driven Visual Navigation by Using Deep Reinforcement Learning》   目标是仅使用视觉输入就能导航并到达用户指定目标的机器人,对于此类问题的解决办法一般有两种。 将经典导航系统与目标检测模块结合起来。 基于地图的导航算法或者SLAM系统与最

    2024年02月06日
    浏览(51)
  • YOLOv8改进 | 损失篇 | VarifocalLoss密集目标检测专用损失函数 (VFLoss,原论文一比一复现)

    本文给大家带来的是损失函数改进 VFLoss损失函数 ,VFL是一种为 密集目标检测器 训练预测IoU-aware Classification Scores(IACS)的损失函数,我经过官方的版本将其集成在我们的YOLOv8的损失函数使用上, 其中有很多使用的小细节 (否则按照官方的版本使用根本拟合不了,这也是为啥

    2024年02月02日
    浏览(53)
  • 强化学习论文阅读(二)SAC算法

    原文传递:SAC算法原文 作者指出深度强化学习样本效率低下的原因是:策略学习,TRPO、PPO、A3C每次策略更新都需要收集样本。学习有效的策略需要的步骤和样本数量伴随着任务的复杂性呈现增加的趋势。Off-Policy为了重复使用过去产生的经验值,但是在传统的策略公式当中不

    2024年02月06日
    浏览(46)
  • 英文论文(sci)解读复现【NO.18】基于DS-YOLOv8的目标检测方法用于遥感图像

    此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文 ,并对相应的SCI期刊进行介绍,帮助大家解

    2024年02月21日
    浏览(53)
  • 迁移强化学习论文笔记(一)(Successor Features)

    M ≡ ( S , A , p , R , γ ) M equiv(mathcal{S}, mathcal{A}, p, R, gamma) M ≡ ( S , A , p , R , γ ) S cal S S :状态空间 A cal A A :行动空间 p p p : p ( ⋅ ∣ s t , a t ) p(cdotmid s_t,a_t) p ( ⋅ ∣ s t ​ , a t ​ ) 状态转移概率 R R R : R ( s t , a t , s t + 1 ) R(s_t,a_t,s_{t+1}) R ( s t ​ , a t ​ , s t + 1 ​ ) 奖励

    2024年04月17日
    浏览(52)
  • 高创新!EI论文复现+改进:聚合温度调控策略的综合能源系统/微电网/虚拟电厂多目标优化调度程序代码!

    程序考虑供热的热惯性,并根据室内供热效果进行柔性供热,发挥热温度负荷的“储能”能力;针对普适性参数的室内空调进行集群研究,深入剖析温度设定值调整导致负荷波动的机理,并提出一种新的温度调整方法,平抑负荷波动;利用P2G装置实现电-气网络间能源双向协调

    2024年02月01日
    浏览(53)
  • 【论文阅读】1 SkyChain:一个深度强化学习的动态区块链分片系统

    1.1 文献标题 SkyChain: A Deep Reinforcement Learning-Empowered Dynamic Blockchain Sharding System 1.2 作者 中山大学系统科学与工程学院,广州中国数据与计算机学院 香港理工大学计算学系,中山大学数字生活国家工程研究中心 1.3 年份 :2020年8月 1.4 期刊 :ICPP 1)分片是将网络划分为多个不相

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包