c# - Q深度学习算法不工作

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

一直在尝试实现 Q 深度学习算法,虽然有一个问题,但它不起作用,在玩了 100 000 次游戏并使用 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 为目标。 (虽然我只尝试了 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

}

感谢任何帮助。

最佳答案

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

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

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

有关文档,您可以引用 Documentations files提供甚至通过 github wiki .

RLM 也可以通过 Nuget 获得.

关于c# - Q深度学习算法不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41056103/

相关文章:

c# - 按多列分组 linq count 嵌套行

c# - 如何对所有者 == 当前用户的实体计数进行 LINQ 查询?

Python:如何通过用户定义的函数拟合曲线?

python - Python 中 numpy.random.rand 与 numpy.random.randn 之间的区别

python - Udacity 深度学习卷积神经网络 - TensorFlow

c# - SqlBulkCopy - 给定的 ColumnName 与源或目标中的任何列都不匹配

c# - 创建缩略图会产生质量很差的图像

python - tf.matmul 没有按预期工作

python - 如何在mlflow中记录Hydra的多次运行

python - PyTorch - 自定义 ReLU 平方实现