如何用线性函数逼近法对权重q-学习进行归一化

时间:2016-06-29 09:03:23

标签: javascript machine-learning q-learning

我正在开发简单的游戏程序,以显示具有线性函数近似的q学习。 screen shot

在这场比赛中,有无数状态。我必须考虑许多因素,如球员的位置,速度和敌人的位置(有12~15个敌人物体)。我最终将算法从使用表改为使用线性函数逼近。

我决定了大约20~22个特征。(常数,玩家位置,玩家速度,所有敌人位置)。

实施该算法后,我遇到了一些问题。

运行程序后,重量值会在几秒钟内溢出。我发现我没有将功能和体重标准化。

很容易规范化特征值,因为每个特征都有它们的界限。 但是,仅仅标准化特征值是不够的。 它最终仍然溢出。

我的问题是如何规范我的体重。

以下是我实现规范化功能的代码。

//f is feature 

    f[0] = 1;
    f[1] = this.getNormMinMax(this.player.x,0,cc.winSize.width);
    f[2] = this.getNormMinMax(this.player.vel,-80,80);

    for(var i=0; i<pooList.length;++i)
    {
        f[3 + 2*i] = this.getNormMinMax(pooList[i].x,0,cc.winSize.width);
        f[3 + 2*i+1] = this.getNormMinMax(pooList[i].y,0,cc.winSize.height*3);
    }

以下代码正在更新权重而没有任何规范化。

for(var i=0; i<this.featureSize; ++i)
        {
            var w = this.weightArray[this.doAction][i];
            this.weightArray[this.doAction][i] =
                w + this.learningRate*(this.reward + this.discountFactor*maxAction - this.updateQSA) * f[i];
        }

1 个答案:

答案 0 :(得分:1)

似乎您没有正则化使用线性回归,并且存在共线特征。尝试添加L1或L2正则化(使用Ridge,Lasso或Elastic Net模型)。