神经网络框架和 RL 算法库有啥区别?
Posted
技术标签:
【中文标题】神经网络框架和 RL 算法库有啥区别?【英文标题】:What is the difference between Neural Network Frameworks and RL Algorithm Libraries?神经网络框架和 RL 算法库有什么区别? 【发布时间】:2021-03-25 05:23:59 【问题描述】:我知道这是一个愚蠢的问题,但我找不到一个好的方法。
我曾使用过 TensorFlow 和 TFAgents,现在正在转向 Ray RLlib。查看所有 RL 框架/库,我对以下两者之间的区别感到困惑:
Keras、TensorFlow、PyTorch 等框架 RL 实现库,例如 TFAgents、RLlib、OpenAi Baseline、Tensorforce、KerasRL 等例如,TensorFlow 中有 Keras 代码,Ray RLlib 同时支持 TensorFlow 和 PyTorch。它们之间有什么关系?
到目前为止,我的理解是 Keras 允许制作神经网络,而 TensorFlow 更像是一个用于 RL 的数学库(我对 PyTorch 的理解不够)。而 TFAgents 和 RLlib 等库使用 Keras 和 TensorFlow 等框架来实现现有的 RL 算法,以便程序员轻松利用它们。
有人能解释一下它们是如何相互联系/不同的吗?非常感谢。
【问题讨论】:
【参考方案1】:是的,你是对的。 Keras、TF(也使用 keras btw)和 Pytorch 等框架是通用的深度学习框架。对于大多数人工神经网络用例,这些框架工作得很好,您的典型管道将如下所示:
-
预处理您的数据集
为此问题设置选择合适的模型
model.fit(数据集)
分析结果
尽管强化学习与大多数其他数据科学机器学习应用程序有很大不同。首先,在 RL 中,您实际上是通过让您的模型(代理)与环境交互来生成自己的数据集;从计算的角度来看,这使情况大大复杂化。这是因为在传统的 ML 场景中,大部分繁重的计算都是由 model.fit() 调用完成的。上述框架的好处是,从该调用中,您的代码实际上会输入非常高效的 C/C++ 代码(通常还实现 CUDA 库以使用 GPU)。
在 RL 中,最大的问题是代理与之交互的环境。我把这个问题分成两部分:
a) 环境无法在这些框架中实现,因为它总是会根据您所做的事情而改变。因此,您必须编写环境代码,而且 - 很有可能 - 这不会非常有效。
b) 环境是代码中的关键组件,它不断与您的代理进行多次交互,并且可以通过多种方式来调节交互。
这两个因素导致标准化环境及其与代理之间的交互的必要性。这种标准化允许高度可重用的代码以及其他人更容易解释其操作方式的代码。此外,即使您的环境对象并没有真正编写来管理它,也可以通过这种方式轻松运行并行环境(例如,TF-agents 允许这样做)。
RL 框架因此提供了这种标准化和随之而来的特性。它们与深度学习框架的关系是 RL 库通常带有许多预先实现且灵活的代理架构,这些架构在文献中是最相关的。这些代理通常只不过是一些花哨的 ANN 架构,封装在某个类中,在给定的 RL 框架内标准化它们的操作。因此,作为这些 ANN 模型的后端,RL 框架使用 DL 框架来高效地运行计算。
【讨论】:
非常感谢您的详细解答!所以总结一下我的理解:TensorFlow、Keras 和 PyTorch 只是通用的 ML 框架,RLlib 和 TF-Agents 等 RL 库为 RL 环境及其与代理之间的交互提供了必要的标准化。因此,RL 库构建在这些 ML 框架之上,因为它更复杂。 一模一样以上是关于神经网络框架和 RL 算法库有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章