寻找用于序列生成的 RL 解决方案

数据挖掘 强化学习
2022-02-20 04:09:36

我正在为以下问题寻找合适的强化学习解决方案:

假设我有一个候选函数池f \in Pool(例如f1, f2, ... fn),并且我试图合成几个函数序列,每个序列包含任意数量f.

给定一个序列s,当决定是否s通过附加一个新函数f并形成一个新序列来扩展时s' = sf,我有以下奖励方案:

  1. 当 F(s') = true 时,奖励 += 1

  2. 当 T(s') = true 时,奖励 += 3

  3. 每次序列增长一时,我都会尝试通过奖励 -= 0.5 进行惩罚

换句话说,我不希望每个序列s太长,但也会考虑特殊属性FT满足的情况。

我认为这是一个学习问题,并设想它可以通过强化学习技术来解决,例如DQN但我是这个领域的新手,我很难将这个问题正式化。任何人都可以对此有所了解,我可以尝试什么样的强化学习算法/方案?非常感谢。任何建议或意见将不胜感激。

1个回答

要将您的问题表述为 RL 问题,我们首先需要从1n. 这样,就会有n+1总共的动作,即

ai={stopi=0add fi1in
因此,状态st将由一个序列表示t动作,最终状态以动作结束a0. 此外,步骤奖励t(做动作后at) 如下
rt={0.5+1F(stat)=True+3T(stat)=Trueata00at=a0

为了为神经网络准备这样的表示,我们需要用 one-hot 编码来表示动作。这是一个例子,

s = [
      [0, 0, 0, 1, 0]  #a^1
      [0, 0, 1, 0, 0]  #a^2
      [0, 0, 0, 0, 1]  #a^0
    ]

它表示具有三个动作(和四个功能)的最终状态。

问题的棘手部分是state 的不断变化的表示作为一个相反的例子,对于那些在DQN 论文中研究的视频游戏,每个状态都是固定数量的固定大小的 2D 图像。

为了解决这个设计挑战,我们可以选择以下两种方法之一(可能还有许多其他方法):

  1. 将状态的最终长度限制为T并为那些(尚未)采取的步骤添加“未采取”行动。例如,

     s = [
        [0, 0, 0, 0, 1, 0]  #a^1
        [0, 0, 0, 1, 0, 0]  #a^2
        [0, 0, 0, 1, 0, 0]  #a^2
        [1, 0, 0, 0, 0, 0]  #not taken
        [1, 0, 0, 0, 0, 0]  #not taken
      ]
    

    四个功能和T=5. 这样一来,我们总共得到n+2代表每个状态的符号。

  2. 使用循环神经网络(RNN、LSTM 等)将可变长度状态编码为固定长度表示;这类似于在 NLP 任务中将可变长度的句子编码为固定长度的表示。

该问题现在被完全表述为 RL 问题,同时考虑了一些实施挑战。

从这一点开始,我们可以通过例如在 RNN 表示之上设计一个 1D Dense 网络,或者在固定长度的 2D 表示之上设计一个 2D Dense 或卷积网络来进行 RL(使用m×(n+2)大小的内核只沿着动作移动,而不是沿着n+2one-hot 编码的维度),它接收状态的表示s,记为ϕ(s), 和输出Q(s,a)对于每个n+1动作,与 DQN 论文相同(参见算法 1:具有经验回放的深度 Q 学习)。

额外说明

  1. 您可以查看这篇文章,了解使用 Keras 向 LSTM 提供可变长度多维序列。