在强化学习中限制神经网络输出的最佳方法
Best way to bound outputs from neural networks on reinforcement learning
我正在训练一个神经网络(前馈,Tanh 隐藏层),它接收状态作为输入并给出动作作为输出。我正在遵循用于策略梯度强化学习的 REINFORCE 算法。
但是,我需要限制我的控制动作(比如说从 0-5)。目前我这样做的方法是使用 sigmoid 输出函数并将输出乘以 5。虽然我的算法性能适中,但我发现使用这种“边界方案”作为输出有以下缺点:
我知道对于回归(因此我想对于强化学习)线性输出是最好的,虽然 sigmoid 有线性部分但恐怕网络无法正确捕获这种线性输出行为,或者它捕获它的速度太慢(因为它的最佳性能是用于分类,因此使输出极化)。
我想知道还有哪些其他选择,也许还有一些启发式方法。
您是否考虑过使用 nn.ReLU6()
?这是整流线性单元的有界版本,其输出定义为
out = min( max(x, 0), 6)
我正在训练一个神经网络(前馈,Tanh 隐藏层),它接收状态作为输入并给出动作作为输出。我正在遵循用于策略梯度强化学习的 REINFORCE 算法。
但是,我需要限制我的控制动作(比如说从 0-5)。目前我这样做的方法是使用 sigmoid 输出函数并将输出乘以 5。虽然我的算法性能适中,但我发现使用这种“边界方案”作为输出有以下缺点:
我知道对于回归(因此我想对于强化学习)线性输出是最好的,虽然 sigmoid 有线性部分但恐怕网络无法正确捕获这种线性输出行为,或者它捕获它的速度太慢(因为它的最佳性能是用于分类,因此使输出极化)。
我想知道还有哪些其他选择,也许还有一些启发式方法。
您是否考虑过使用 nn.ReLU6()
?这是整流线性单元的有界版本,其输出定义为
out = min( max(x, 0), 6)