[学習](CartPole-v1のゲームで強化学習を)学習の理解の深さを強化します

前回の記事で[] PaddlePaddle強化(CartPole-V1)を学んで、私たちが達成するためにアイデアを説明するために多くのことをCartPole-V1ゲームに強化学習を達成PaddlePaddleを使用する方法を説明しますが、ではない、それは非常に明確ではありません。だから、この記事では、主に上記の強化学習やアイデアの具体的な実現の記録内容を実現しています。

Q-学習

伝統的なグラフ探索では、我々は一般的な経験に学んだのすべてのステップを記録するQテーブルの行列を使用して(私たちは、一般的に「最大限の利益」のための「体験」と呼ばれ、このステップの最大の利益を取ることは達成することができますどのくらいです)ステップで更新Q-テーブル上の各ステップは、これらのQ-表はに参加学びました。ある程度Q-テーブルの反復は、Q-テーブルの状態が安定したら、その後、私たちは、あなたがQ-テーブルによってほとんどがすべてのステップを学んだ恩恵を受けることができますどのように行くことができるので、意思決定を行うためにQ-テーブルを使用しています。
Updateメソッドは、以前の記事では、アルゴリズムが言及されたベルマン方程式、ある、くらいそこに話をされていない、特定のQ学習は、この記事を参照することができます理解する:理解Q学習を、物品は十分ですより良いいくつかを理解するために、この記事の例があります。

DQN

DQNがディープQ-学習ネットワークの略で、このアイデアは、Q-学習で、学習の深さが最大の利益のQ値を記録していないQ-テーブルの利用を促進するために組み合わせるが、ニューラルネットワークの使用は、(アクション=アクション)対応のアクションを実行し予測します売上値Q.
私たちは、現在の状態でQが得られたすべてのアクション値の実装を予測するニューラルネットワークを使用しています。動作は次に実行されるように、Qの最大値に対応するアクションを削除します。アクションは、次の動きとして最大の利益を達成するためにとられています。

アイデアの実現

最初のステップ:メモリを作成します

我々は、システムがランダムにゲームを数回再生し、定義されたイプシロン-欲張り探索戦略によって、トレーニングの進捗状況に応じて、自動的にアクションまたはアクションを実行することを選択したモーション入力として予測するモデルを使用することですしましょう。こんなに早くもう少し自動列車運転装置、訓練およびより遅く、いくつかのニューラルネットワークの予測行動の戦略を検索します。
その後、現在の状態でこのアクション情報実行:使用に続くトレーニング用メモリバンクに記録され、(例えば、動作の現在の状態、実行後の次の状態、報酬の作用をゲームおよび他の情報の終わりかどうか)。無作為に抽出されたメモリからデータをトレーニング。次のデータは、メモリ内の最初のデータが上書きされますときに、データが一杯になると私たちは、Pythonで両端キューを使用します。
メモリを充填するプロセスにおける現在のアクションの実装の現在の状態がゲームの終わりにつながった場合、我々は、(ゲームの終わりをマークするために使用されるかどうか)done_dataます1に設定され、報酬セット-10に、この賞は罰に相当します対策。現在のアクションの実装の現在の状態がゲームの終わりにつながらない場合は、done_dataセット0は、報酬が自動的にゲームのルールに応じて(ゼロより確実に報酬も大きい)を計算します。
メモリがほとんど満杯になると、あなたがトレーニング過程で、トレーニングを開始することができ、メモリはまだ埋められていなければならないが、サイクル以上のバックプロパゲーションプロセスの最適化パラメータ。

ステップ2:ニューラルネットワークを構築するためのアイデア

私たちのネットワークが2分割され、一つは私たちのコールtarget_modelを広めるために私たちはstate_modelを呼び出す逆伝搬アップデートパラメータ、前者のみです。しかし、ニューラルネットワーク状態のQ値の予測値に応じて、どちらも同じように使用しています。

ニューラルネットワークDQNetWork Qの状態予測値

私たちは、単純な神経回路網、この状態では、入力と出力の状態、Q値に対応するすべてのアクションを定義します。CartPole-V1ゲームのため、2つの操作(左右)がある、次元Q値2を最終的に生成され、各操作の現在の状態に対応して得られた2つの利点を行います。次のコードスニペット:

def DQNetWork(ipt, variable_field):
    fc1 = fluid.layers.fc(input=ipt, size=24, act='relu', param_attr=ParamAttr(name='{}_fc1'.format(variable_field)),
                          bias_attr=ParamAttr(name='{}_fc1_b'.format(variable_field)))
    fc2 = fluid.layers.fc(input=fc1, size=24, act='relu', param_attr=ParamAttr(name='{}_fc2'.format(variable_field)),
                          bias_attr=ParamAttr(name='{}_fc2_b'.format(variable_field)))
    # size=2,即输出维度为2,对应两个动作的Q值(收益值)
    fc3 = fluid.layers.fc(input=fc2, size=2, param_attr=ParamAttr(name='{}_fc3'.format(variable_field)),
                          bias_attr=ParamAttr(name='{}_fc3_b'.format(variable_field)))
    return fc3

だから私たちは、それぞれの状態で2を得ることができるというアクションが実行され、対応する値Q1とQ2を返します。

target_modelの役割

唯一target_modelの前に広がっへ。
state_modelラベルがtarget_modelによって生成されるので、次のようにstate_modelリピート前に、我々は、特定のルックtarget_modelを取る:
1、次の状態を入力操作がDQNetWork、値Q1に行われ、2つの利点のQ2を取得された後、この値は、next_state、収益の向上です。
2、ベルマン方程式式によって現在の状態到達可能な最大の利益を計算します。次のように具体的な式は次のとおりです。

q_target = reward_data + gamma * best_v * (1 - done_data)

Q1とQ2は、利益値の大きいbest_v、報酬の現在のアクションであるreward_data、ガンマbest_v(最大利益値に対応する次の状態)の割合、done_dataでこのアクションゲームオーバーです。ベルマン方程式の式を定義することで、我々は知っている、q_target現在のアクションは、報酬を得利点であるプラスフォロー状態をガンマ×best_v、実際には、現在のアクションの実装の現在の状態最大の利益(q_target)=明示的なインセンティブ(報酬)+潜在的な利点(ガンマ×best_vは)ので、モデルが前向きされたことが、最大の次の状態の潜在的な利点に、報酬を得るために現在のアクション現在のアクションを参照していないだけで、また作られた参照を実行します。q_targetは、現在の状態で、アクションの実装は、現在の理論の最大の利益を得ることができる、です。

なぜならdone_data = 1つのデータの1 done_data入力データ、そしてq_target -10には、我々は罰の報酬= -10を設定した場合、あなたは、q_targetがある小さな値であり、この場合には見ることができます理論的な利益は、それが収益を罰するために属し、非常に小さいです。

入力データが0をdone_data場合、q_targetは、明示的なインセンティブ報酬とガンマの潜在的な利点を結合します* best_v、理論的に得ることができ、現在の状態で最大の利益を計算します。

state_modelの役割

バックプロパゲーションのためのstate_model最適化パラメータ。現在の状態を計算するstate_model、現在の操作リターンの入力予測値に到達することができます。我々はDQNetWorkは、現在の状態に入力され、現在の状態の予測は、二つの動作の各利益値Q1及びQ2を実行します。次に[Q1、Q2]と指定された入力アクションの要素毎の行列乗算one_hot得q_eval利益値の入力動作。

state_modelはtarget_modelにq_eval結果がq_target近くを予測し、予測しました。それstate_model計算q_evalは近い理論上の最大の利益またはPENALIZEの利益です。

我々はDQNetWork状態に入力され、二つの操作は二つの収益値を得るために、それぞれ、実行され、我々は、現在の状態として実行されるリターン・アクションに対応する値の大きい2つの動作復帰を取ります。このアクションで最高の収入利用できるので。

第三段階:ニューラルネットワークを訓練します

近いtarget_modelにq_eval言及フロントは、我々が算出しq_eval q_target間の単純平均二乗誤差の差を使用して、q_targetを予測し、逆方向伝搬損失関数などのパラメータを最適化します。
この期間中、DQNetWorkのネットワークパラメータは、定期的にDQNetWorkパラメータstate_model剪定のに応じて複製しtarget_model。target_modelは、パラメータを最適化するための逆伝搬ではありませんので。

公開された61元の記事 ウォン称賛16 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_41427568/article/details/103552660