Q深度学习算法不起作用

时间:2016-12-09 08:28:09

标签: c# machine-learning neural-network deep-learning reinforcement-learning

一直试图实施一个Q深度学习算法,虽然有一个问题,它没有工作,经过10万次游戏并使用1000次迭代来训练每一步(虽然我已经尝试过较低的数字)但是仍然没有学习。网络和游戏都在链接的图像中,http://imgur.com/a/hATfB这里是每个训练步骤中发生的事情:

double maxQval;
double[] inputvec;
int MaxQ = GetRandDir(state, out maxQval, out inputvec);//input vec is board
double[] QtarVec = new double[] { 0, 0, 0, 0 };
double r = GetR((int)state[0], (int)state[1]); // GetR is reward
QtarVec[MaxQ] = Qtar(r, maxQval); // backprop vector of 0's except Qtar replaces a value

associator.Train(50, new double[][] { inputvec }, new double[][] { QtarVec });​

backprop的训练数据对是(输入i链接在图像中,QTarget = r + gamma * MaxQ),MaxQ是最大网络输出层激活或随机的(epsilon greedy)。 r是从每次移动获得的奖励,-10是障碍物,10是目标。 (althogh我已经尝试了10个目标而0个用于其他一切。这是训练代码。

public void Train(int nTrails)
{
    double[] state = new double[] { 1, 1 }; // inital position
    int its = 0;
    for (int i = 0; i < nTrails; i++)
    {
        while (((state[0] < 4) && (state[1] < 4))&&((state[0] * 100 >0) && (state[1] * 100 >0)) && (state[0] != 3 && state[1] != 3))//while on board and not at goal     postion
        {
            double temp = r.NextDouble();
            int next = -1;
            lines.Add(new Vector2((float)(state[0] * 100), (float)(state[1] * 100)));
            if (temp < epsilon)
            {
                next = TrainRandIt(state); // move random direction, backprop
            }
            else
            {
                next = TrainMaxIt(state); // move in max activation direction, backprop
            }
            if (next == 0) .//updating postion
            {
                state[0]++;
            }
            else if (next == 1)
            {
                state[0]--;
            }
            else if (next == 2)
            {
                state[1]++;
            }
            else if (next == 3)
            {
                state[1]--;
            }
        }
    }
    state[0] = 1;
    state[1] = 1; // resetting game

}

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

从您提供的链接图像判断,它就像一个迷宫游戏,您可以输入玩家的位置,输出作为玩家应该移动的方向(向上,向下,向左或向右) 。

这是一个机器学习引擎,它能够准确地解决这个问题 - Ryskamp Learning Machine(RLM)。与您迄今为止尝试过的典型机器学习引擎相比,RLM采用了不同的方法,因此我建议您转到我提供的链接,以了解有关它的更多信息以及它与众不同之处。

它是用C#编写的,我们有一个Maze游戏的例子,就像您正在尝试的那样,您可以浏览我们的Github page,甚至可以通过克隆/下载源代码来自己尝试提供的示例应用程序。

有关文档,您可以参考所提供的Documentations files或甚至通过github wiki

RLM也可通过Nuget获得。