Q-learning,我的解释是否正确Q ( s , a ) = r + γ最大限度一个'问(s',一个')Q(s,a)=r+γmaxa′Q(s′,a′)?

人工智能 神经网络 强化学习 q学习
2021-10-18 12:27:12

好的,由于前面的问题,我被指出要使用强化学习。

到目前为止,我从随机网站上了解到的内容如下:

  • 涉及到一个 Q(s,a) 函数
  • 我可以假设我的神经网络 ~ Q(s,a)
  • 我的模拟有一个状态(N 个输入变量)
  • 我的演员可以执行 M 个可能的动作(M 个输出变量)
  • 在模拟的每一步,我的演员只执行与max(outputs)
  • (在我的情况下,动作是增加或减少螺旋桨推力的 1/2/3 %。)

从这个网站我发现在某些时候我必须

  • 估计输出 Q[t](或所谓的 q 值)
  • 估计下一个状态 Q[t+1] 的输出
  • 让反向传播算法只对下一个状态执行的动作进行纠错。

最后三点对我来说根本不清楚,事实上我还没有下一个状态我要做的是

  • 估计先前的输出 Q[t-1]
  • 估计电流输出 Q[t]
  • 让反向传播仅修复最大 q 值的错误

实际上对于代码我只使用这个库,它很简单,可以让我理解里面发生了什么:

神经网络库

初始化神经网络(具有 N 个输入神经元、N+M 个隐藏神经元和 M 个输出神经元)非常简单:

Network network = new NeuralNetwork( N, N+M, M);

然后我想了解需要一个任意的奖励函数

public double R()
{
     double distance = (currentPosition - targetPosition).VectorMagnitude();
     if(distance<100)
         return 100-distance; // the nearest the greatest the reward
     return -1; // too far
}

那么我要做的是:

// init step
var previousInputs = ReadInputs();
UpdateInputs();
var currentInputs = ReadInputs();

//Estimate previous outputs Q[t-1]
previousOutputs = network.Query( previousInputs );

//Estimate current outputs Q[t]
currentOutputs = network.Query( currentInputs);

// compute modified max value
int maxIndex = 0;
double maxValue = double.MinValue;
SelectMax( currentOutputs, out maxValue, out maxIndex);

// apply the modified max value to PREVIOUS outputs
previousOutputs[maxIndex] = R() + discountValue* currentOutputs[maxIndex];

//Let backpropagation fix the error for max q value only
network.Train( previousInputs, previousOutputs);

// advance simulation by 1 step and see what happens 
RunPhysicsSimulationStep(1/200.0);
DrawEverything();

但这似乎不是很好。我让模拟运行了一个多小时没有成功。可能我以错误的方式阅读算法。

1个回答

DQN 中通常发生的情况如下:

首先,NN 用于通过使用权重向量为每个状态-动作对估计 Q 的近似值:

Q(s,a,w)Q(s,a)

有两种选择:您可以为其提供某种状态,然后将每个可能的操作的值作为输出,或者,您可以输入一个状态-操作对并获得该对的值作为输出。(基本上NN给你政策)

获得此输出后,您现在可以使用您的环境来模拟下一个状态。所以基本上你应用NN给出的动作(也许使用ϵgreedy),然后您通过观察环境获得下一个状态和下一个奖励。

Q 函数在所有这些中来自哪里?Q 函数

Q(s,a)=Q(s,a)+α[r(s,a)+γmaxaQ(s,a)Q(s,a)]
在标准 Q 学习中用于在每个模拟步骤后更新值,现在用作神经网络的目标,以进行反向传播。

您必须考虑一些因素来帮助这种融合,主要是体验重放和固定的 Q 目标。

所以当你说“我还没有下一个状态”时,是因为你需要模拟为获得下一个状态而选择的动作。

编辑:您可能缺少的主要内容是您在标题中出现的等式的正确部分称为 TD-Target,它不用于进行更新,您可能会将其视为您想要实现的最终结果Q(s,a)(收敛后的最优值)。但是要进行更新,您需要使用具有先前值的加权函数Q(s,a)如上所示,使用学习率0<α<1