4

Encog ライブラリを強化学習問題の関数近似として使用しようとしています。より正確には、多層パーセプトロン (BasicNetwork) を稼働させようとしています。私のエージェントは、選択した RL アルゴリズムに基づいて何らかの方法で世界を探索するため、 XOR の例に示されているように、BasicNeuralDataSet を事前に構築することはできません。おそらく、pause() および resume() 関数を使用する必要がありますが、これらのドキュメントや例が見つからないため、これらの機能の使用方法がわかりません (私のバージョンで動作する場合でも。 2番目のリンクの質問への回答を読んだ後に確認してください)。

Java と encog-core-2.5.3 jar を使用しています。私の現在のアプローチは次のようになります。

BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true,2));
network.addLayer(new BasicLayer(new ActivationTANH(), true,4));
network.addLayer(new BasicLayer(new ActivationTANH(), true,1));
network.getStructure().finalizeStructure();
network.reset();

TrainingContinuation cont = null;
double error = 0;

do {
    int rnd = random.nextInt(trainInputs.length);
    NeuralDataSet trainingSet = new BasicNeuralDataSet(
        new double[][] { trainInputs[rnd] },
        new double[][] { trainOutputs[rnd] });

    Backpropagation train = new Backpropagation(network, trainingSet);

    // train the neural network
    if (cont != null) {
        train.resume(cont);
    }

    train.iteration();
    cont = train.pause();

    error = train.getError();
} while (error > 0.01);

これは明らかに、おもちゃのサンプル (XOR) からランダムなデータポイントを抽出する最小限の例です。何が起こるかというと、MLP は収束しません。ログに完全にランダムなエラーが表示されているため、トレーナーがリセットされており、一時停止/再開のアプローチが正しく実装されていないと思います。


PS: 私は Encoq に縛られていませんが、任意のフレームワークを使用できるので、私の要件を満たすサンプル コードも高く評価しています。これまでのところ、Weka と Neuroph を試しましたが、どちらも、新しいサンプルが利用可能になるたびにトレーニングをトリガーできる実際のオンライン学習に欠けているようです (いつでもサンプルを分類できる必要があります)。

4

1 に答える 1

8

遅い応答について申し訳ありません。基本的には、オンライントレーニングを求めているようです。つまり、1 つのケースを提示するだけで、ニューラル ネットワークの重みがすぐに更新されます。そうすれば、トレーニング セット全体を作成する必要はなく、必要に応じてトレーニングするだけです。残念ながら、Encog はこれを適切にサポートしていません。よくある質問になりましたので、次のリリースで追加する予定です。

今のところ、これを実行できる唯一の方法は、1 つの項目でトレーニング セットを作成し、1 回の反復でトレーニングすることです。

編集 Encog 3.2 でオンライン トレーニングが追加されました。詳細については、この FAQ を参照してください。

http://www.heatonresearch.com/faq/5/3

于 2013-04-20T20:01:47.510 に答える