我最近读了很多关于 RL 的文章。据我了解,大多数 RL 应用程序的状态比可供选择的动作多得多。
我正在考虑使用 RL 来解决我有很多动作可供选择的问题,但只有很少的状态。
举一个方便的例子:算法应该(无论出于何种原因)渲染一个包含三个单词的句子。我一直想用三个词来造句,但我有很多词可供选择。选择单词后,我得到了某种奖励。
强化学习算法是解决这个问题的有效方法吗?
我正在考虑使用带有 ε-greedy 算法的策略梯度来探索许多可能的动作,然后再利用所获得的知识。
我最近读了很多关于 RL 的文章。据我了解,大多数 RL 应用程序的状态比可供选择的动作多得多。
我正在考虑使用 RL 来解决我有很多动作可供选择的问题,但只有很少的状态。
举一个方便的例子:算法应该(无论出于何种原因)渲染一个包含三个单词的句子。我一直想用三个词来造句,但我有很多词可供选择。选择单词后,我得到了某种奖励。
强化学习算法是解决这个问题的有效方法吗?
我正在考虑使用带有 ε-greedy 算法的策略梯度来探索许多可能的动作,然后再利用所获得的知识。
据我了解,大多数 RL 应用程序的状态比可供选择的动作多得多。
是的,这很常见,但马尔可夫决策过程 (MDP)的基本理论绝不要求这样做。相反事物的最极端版本 - 有一个状态(或实际上没有状态,因为状态不相关) - 是 k 臂老虎机问题,其中代理试图从选择中找到一般的最佳长期动作的行动。这些问题通常不会使用 RL 算法,例如 Q-learning 或策略梯度。然而,这部分是因为在描述它们时考虑了不同的目标(例如,尽量减少“遗憾”或在学习过程中尽可能多地获得奖励),并且 RL 算法将努力解决这些问题,尽管效率低于旨在解决这些问题的算法。直接处理强盗问题。
我正在考虑使用 RL 来解决我有很多动作可供选择的问题,但只有很少的状态。
如果您的问题仍然是 MDP,那应该可以。例如,这意味着状态会根据规则演变,具体取决于在哪个起始状态下采取的操作。如果状态演化是任意的或随机的,那么您可能会遇到上下文老虎机问题。
这里有一个重要的区别:
和
前者需要大量探索,因为动作和状态的任何特定组合都可能是理想的。对于后者,您可以利用这样一个事实,即相似的数值通常会给出相似的结果,这将使通过函数逼近(例如神经网络)的泛化对您有利。
该算法应该(无论出于何种原因)呈现一个包含三个单词的句子。我一直想用三个词来造句,但我有很多词可供选择。选择单词后,我得到了某种奖励
这似乎更像上面的第一个要点,尽管这可能取决于是否可以应用自然语言模型。例如,如果“这很好”和“这很好”会在特定状态下产生类似的奖励,那么概括可能会有一些好处,尽管我不太确定你会在哪里适应这些知识——可能在生成器中句子向量作为“原始”动作,然后让基于 LSTM 的语言模型从该向量产生实际动作,类似于 seq2seq 翻译模型。
强化学习算法是解决这个问题的有效方法吗?
是的,但它是否最有效将取决于其他因素,例如:
环境在奖励和状态进展方面是随机的还是确定的。
状态进展是否是长期获得最佳奖励的关键(例如,有一些“目标”或“最佳”状态只能通过特定路线达到)。
MDP的实际大小是多少. 可以完全枚举小型 MDP,使您可以在一个简单的表中估计操作值。如果您有 10 个状态和 1,000,000 个离散动作,并且没有真正的动作模式映射到结果,那么一个包含 1000 万个条目的大表实际上是相当有效的。
RL 的竞争算法在这里可能是全局搜索和优化算法,例如遗传算法。您的环境越任意和确定性越高,详尽搜索就越有可能比 RL 更快地找到您的最佳策略。
我正在考虑使用带有 ε-greedy 算法的策略梯度来探索许多可能的动作,然后再利用所获得的知识。
这应该没问题。在这里探索绝对是重要的,但要找到合适数量的最佳位置会很困难,并且取决于环境的其他特征。
您可能希望使用诸如置信上限动作选择或简单的乐观初始值之类的东西,以确保探索不会错过某些动作。一个 epsilon 贪心方法会随着时间的推移错过某个部分的动作,并且该部分的期望值逐渐变小,变得更慢,所以如果你依赖于能够随机选择一个重要的动作,它可能会在很长一段时间内错过它.
举一个方便的例子:算法应该(无论出于何种原因)渲染一个包含三个单词的句子。我一直想用三个词来造句,但我有很多词可供选择。选择单词后,我得到了某种奖励。
我会考虑将其建模为 3 个动作的序列,每个动作选择一个单词,状态是开始标记(无论您已经拥有什么状态)加上到目前为止的句子,并且每 3 个单词咨询环境以重置下一个启动令牌的状态并收集奖励(中间步骤的奖励为零)。
立即执行此操作会使状态空间比操作空间大得多,因为您的状态包含最多两个操作的历史记录。如果你有 10 个不同的起始状态和 100 个单词选择,那么你的状态空间将是 101,010,动作空间是 100。
这将适合 RL 算法的可用设计,并允许学习一些相关的内部语言建模。它将减少您在代理之外对句子结构建模的需要。最重要的是,如果“好”或“坏”句子倾向于以某些单词开头或结尾,并且您使用函数逼近,那么该算法可能会比迭代所有句子更有效地发现组合,就好像它们完全独立一样。