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 を試しましたが、どちらも、新しいサンプルが利用可能になるたびにトレーニングをトリガーできる実際のオンライン学習に欠けているようです (いつでもサンプルを分類できる必要があります)。