3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DDQNについて何となく理解してること

Last updated at Posted at 2020-12-21

※この記事にはソースコードは一切ありません
※まだ理解しきれているとは言い難いので、もし間違っていればご指摘お願いします

はじめに

 今、Ape-XをKerasで実装しようとしているけど、それに使われている手法「DDQN(Double Deep Q Network)」の理解がようやくできたので書いていきます。

DDQNの誕生

 まず、DDQNが誕生した経緯を説明していきます。
 従来使われていたDQN(Double Q NetWork)では、行動を決定するときに使うネットワークと、あとでその行動を評価するときに使うネットワークが同じであることが問題でした。言い換えると、自分の行動を自分で評価しているため、過大評価・過小評価になってしまうということです。
 これを解決するために、自分の行った行動を「第三者」に評価してもらおう、というのがDDQNの基本的な考え方です。

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使用】

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?