论文阅读-多目标强化学习-envelope MOQ-learning

introduction

一种多目标强化学习算法,来自2019 Nips《A Generalized Algorithm for Multi-Objective Reinforcement Learning and Policy Adaptation》

总体思想

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

算法

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

论文阅读-多目标强化学习-envelope MOQ-learning_第1张图片

输入

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

输出

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

损失函数

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)。显然也是前者的优化更简单。

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 的优化方向是朝着使得当前偏好的期望回报最大的方向优化的。

更新方式

数据收集方式

论文中伪代码表示用类似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()
               

待补充

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

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

其他bug和优化技巧

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

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

你可能感兴趣的:(论文阅读)