DDQNについて何となく理解してること
※この記事にはソースコードは一切ありません
※まだ理解しきれているとは言い難いので、もし間違っていればご指摘お願いします
はじめに
今、Ape-XをKerasで実装しようとしているけど、それに使われている手法「DDQN(Double Deep Q Network)」の理解がようやくできたので書いていきます。
DDQNの誕生
まず、DDQNが誕生した経緯を説明していきます。
従来使われていたDQN(Double Q NetWork)では、行動を決定するときに使うネットワークと、あとでその行動を評価するときに使うネットワークが同じであることが問題でした。言い換えると、自分の行動を自分で評価しているため、過大評価・過小評価になってしまうということです。
これを解決するために、自分の行った行動を「第三者」に評価してもらおう、というのがDDQNの基本的な考え方です。
DDQNの流れ
まずは疑似コード(っぽいもの)を書いてみます。
行動決定用ネットワークを定義
価値計算用ネットワークを定義
経験を保存するためのMemoryを定義
for epoch in range(試行回数):
行動決定用ネットワークによる行動決定(a)
実際にaを行ってみる(b)
Memoryに(行動前の状況・行動・行動後の状況・報酬)を格納
行動決定用ネットワークの重みを価値計算用ネットワークにコピー
if Memory.len()>batch_size(=学習が可能なくらい経験がたまった):
学習()
def 学習():
Memoryから一定数取り出す(batchに格納)
batchのそれぞれのデータについて、そのときの次の状態(state(time+1))における行動を行動決定用ネットワークを使って選択
選択した行動を価値計算用ネットワークで評価。
これに割引率をかけたものとそのとき得られた報酬(reward(time))を足し合わせて教師用データに
state(time)はターゲットデータ(ねっっとワークに与える情報)にする
ターゲットデータと教師用データで行動決定用ネットワークを更新
こんな感じです
こうすると、ループの初め(行動決定(a)のとき)で、
行動決定用ネットワークは学習後の状態に
価値計算用ネットワークは学習前の状態に
なります。
(Ape-Xのコードはgithubにあります(2020年12月21日時点制作中))
参照ページ
【強化学習初心者向け】シンプルな実装例で学ぶQ学習、DQN、DDQN【CartPoleで棒立て:1ファイルで完結、Kearas使用】
Author And Source
この問題について(DDQNについて何となく理解してること), 我々は、より多くの情報をここで見つけました https://qiita.com/Luke02561/items/1cde64e5e388d116ac34著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .