一般来说,人工神经网络可以有连续的输入和输出,还是必须是离散的?
所以,基本上,我想有一个连续输入到连续输出的映射。这可能吗?这是否取决于 ANN 的类型?
更具体地说,我想使用神经网络来学习强化学习中的 Q 函数。我的问题基本上有一个连续的状态和动作空间,我想知道我是否必须离散化它(我的问题的更详细的描述可以在这里找到)。
一般来说,人工神经网络可以有连续的输入和输出,还是必须是离散的?
所以,基本上,我想有一个连续输入到连续输出的映射。这可能吗?这是否取决于 ANN 的类型?
更具体地说,我想使用神经网络来学习强化学习中的 Q 函数。我的问题基本上有一个连续的状态和动作空间,我想知道我是否必须离散化它(我的问题的更详细的描述可以在这里找到)。
神经网络通常在连续空间中工作。一个典型的神经网络函数可以写成. 也就是说,一些函数实数的维输入向量输出一些实数的维输出向量(你可以称之为) 并且由权重和偏差向量参数化.
当你用一些数据训练神经网络时那么你正在尝试调整以便近似一些假设的映射函数提供所有可能输入之间的“真实”映射以及来自所有可能输出的匹配正确值. 在神经网络中,那么和必须是实数向量集。
所以,是的,默认情况下,所有神经网络都在连续值之间映射*。当 NN 用于处理离散值时,需要将离散变量转换为实值变量才能与 NN 一起使用。因此,离散输入可能会映射到一小组不同的实数值或(称为“单热”编码)。离散输出通常映射到一个概率向量,给出学习函数分配给每个可能的离散输出的置信度——这是分类器中的常见情况。
您有一个特定的用例:
更具体地说,我想使用神经网络来学习强化学习中的 Q 函数。我的问题基本上有一个连续的状态和动作空间,我想知道我是否必须离散化它
对于强化学习中的动作值或 Q 函数,您无需担心状态空间或动作空间是连续的。但是,有些细节可能很重要:
当输入元素在类似单元的分布内时,神经网络学习效率最高,例如(正态分布,均值, 标准差)。这不必很精确,但您应该注意缩放输入值,以便每个元素都有一个典型的幅度.
您要学习的输出值需要在输出层的激活函数的域内。出于这个原因,通常在输出层使用线性(或“无”激活函数)来解决回归问题,并且学习与状态相关的动作值 Q,动作对是一个回归问题。因此,除非您有充分的理由不这样做,否则请在输出层上使用线性激活函数。
仅使用学习的动作值函数无法解决连续动作空间中的控制问题。那是因为,为了从 Q 函数推导出贪婪策略,你需要解决在连续动作空间中找到最大值是不切实际的。如果您的 Q 网络是解决控制问题的代理的一部分 - 即找到最佳策略 - 那么您将需要一些其他方法来生成和改进策略。这通常使用策略梯度方法来完成。
由于最后一点,如果您想使用更简单的基于值的 RL 方法(例如 DQN),有时建议将动作空间离散化。
*注意事项:
有一些架构确实使用离散输入、权重和/或输出。这些要么是历史变体,要么是专家,但您不会找到任何默认执行此操作的主流库。
由于 CPU 的实际限制,计算机将实数建模为在技术上是离散的浮点数。有时了解这一点很重要,但不会影响 Q 函数的建模。