神经网络可以有连续的输入和输出,还是必须是离散的?

人工智能 神经网络 强化学习 连续动作空间 连续状态空间 离散化
2021-11-16 02:35:36

一般来说,人工神经网络可以有连续的输入和输出,还是必须是离散的?

所以,基本上,我想有一个连续输入到连续输出的映射。这可能吗?这是否取决于 ANN 的类型?

更具体地说,我想使用神经网络来学习强化学习中的 Q 函数。我的问题基本上有一个连续的状态和动作空间,我想知道我是否必须离散化它(我的问题的更详细的描述可以在这里找到)。

1个回答

神经网络通常在连续空间中工作。一个典型的神经网络函数可以写成f(x,θ):RNRM. 也就是说,一些函数N实数的维输入向量x输出一些M实数的维输出向量(你可以称之为y) 并且由权重和偏差向量参数化θ.

当你用一些数据训练神经网络时X,Y那么你正在尝试调整θ以便f(x,θ)近似一些假设的映射函数g(x):XY提供所有可能输入之间的“真实”映射X以及来自所有可能输出的匹配正确值Y. 在神经网络中,那么XY必须是实数向量集。

所以,是的,默认情况下,所有神经网络都在连续值之间映射*。当 NN 用于处理离散值时,需要将离散变量转换为实值变量才能与 NN 一起使用。因此,离散输入可能会映射到一小组不同的实数值或{0,1}(称为“单热”编码)。离散输出通常映射到一个概率向量,给出学习函数分配给每个可能的离散输出的置信度——这是分类器中的常见情况。

您有一个特定的用例:

更具体地说,我想使用神经网络来学习强化学习中的 Q 函数。我的问题基本上有一个连续的状态和动作空间,我想知道我是否必须离散化它

对于强化学习中的动作值或 Q 函数,您无需担心状态空间或动作空间是连续的。但是,有些细节可能很重要:

  • 当输入元素在类似单元的分布内时,神经网络学习效率最高,例如N(0,1)(正态分布,均值0, 标准差1)。这不必很精确,但您应该注意缩放输入值,以便每个元素都有一个典型的幅度1.

  • 您要学习的输出值需要在输出层的激活函数的域内。出于这个原因,通常在输出层使用线性(或“无”激活函数)来解决回归问题,并且学习与状态相关的动作值 Q,动作对是一个回归问题。因此,除非您有充分的理由不这样做,否则请在输出层上使用线性激活函数。

  • 仅使用学习的动作值函数无法解决连续动作空间中的控制问题。那是因为,为了从 Q 函数推导出贪婪策略,你需要解决π(s)=argmaxaQ(s,a)在连续动作空间中找到最大值是不切实际的。如果您的 Q 网络是解决控制问题的代理的一部分 - 即找到最佳策略 - 那么您将需要一些其他方法来生成和改进策略。这通常使用策略梯度方法来完成。

由于最后一点,如果您想使用更简单的基于值的 RL 方法(例如 DQN),有时建议将动作空间离散化。


*注意事项:

  • 有一些架构确实使用离散输入、权重和/或输出。这些要么是历史变体,要么是专家,但您不会找到任何默认执行此操作的主流库。

  • 由于 CPU 的实际限制,计算机将实数建模为在技​​术上是离散的浮点数。有时了解这一点很重要,但不会影响 Q 函数的建模。