こんにちは､ このチュートリアルにようこそ｡
よし､ これで目が合ったぞ｡
トレーニングができるようになっています｡
そして､ トレーニングの最初のステップは､ 経験値リプレイの設定です｡
だから､ 少しずつですが､ そこに到達しています｡
訓練といい､ 経験値リプレイの実装といい｡
そのほかにも､ エリジブルトレースという､ キュー値を学習するのではなく､ 10回遷移するごとに学習していく手法も適応されていますね｡
だから､ 基本的には今までと全く同じです｡
しかし､ 1つのステップに1つの目標､ 1つの報酬を用意するのではなく､ 10ステップに累積目標､
10ステップに累積報酬を用意し､ 毎回10ステップで学習していくのです｡
そのため､ 以前のように1つのステップではなく､ 10のトランジション､ 10のステップで学習しているのです｡
そして､ これによって､ 私たちの目が不思議と働き､ それがトレーニングの過程でも不思議と働くようになるのです｡
このテクニックのおかげで､ トレーニングの時間が大幅に短縮されるんだ｡
しかし､ 私たちは10ステップごとに学習している経験､ リプレイを指定しなければならないのです｡
だから､ この体験再生は､ 自動運転車用のような古典的な体験再生の実装ではないんです｡
この10ステップの学習を考慮した体験リプレイの実装です｡ したがって､ この体験リプレイファイルには2つのクラスがあり､
1つは10ステップの間にあなたの目を進歩させ､ この10ステップで観察された報酬を合計することができるようにするクラスです｡
それがファーストクラスです｡
そして､ このクラスが必要なのは､ 体験リプレイのために実装するクラスであるリプレイメモリクラスに､ この10ステップを含める必要があるからです｡
そうやって､ 10ステップで学習していることを記憶も考慮しているのです｡
そのため､ 今回の体験リプレイの実装では､ 2つのクラスが用意されているわけです｡
しかし､ それはあくまでも10段階で学習していることを考慮したものであり､ 記憶の上でも考慮しなければならないのです｡
では､ 私たちの記憶といえば､ それを作りましょう｡
このメモリをメモリと呼ぶことにします｡
そして､ メモリはリプレイメモリクラスのオブジェクトになるわけです｡
そして､ リプレイメモリークラスは､ この体験リプレイPファイルのクラスである｡
というわけで､ まずはこのファイルを体験リプレイしてみます｡
それから｡
ダット そして､ そこでリプレイメモリーの授業を受けるんです｡
完璧です｡
そして､ ご覧のように､ 2つの入力､ 2つの引数があります｡
最初の引数はand stepsで､ これはQ値を学習するステップ数に正確に対応する｡
つまり､ 目標値と報酬を積み重ねるステップ数ですね｡
そこで､ 累積目標と累積報酬を設定することになりました｡
そして､ 2つ目の引数は､ メモリのサイズを表す容量です｡
ですから､ 例えばここでは10,000と表示されています｡
つまり､ 容量が10,000に等しければ､ メモリのサイズも10,000になるということです｡
したがってそれは､ AIが行った1万歩の歩数を減らした記憶を得るということになるわけです｡
しかし､ 繰り返しになりますが､ すべてのトランジションを習得できるわけではありません｡
この最後の1万歩の記憶の中で､ 10歩ごとに覚えていくんです｡
そして､ それこそが､ 今回ご紹介する以前と比較した新しい機能です｡
以前は､ このリプレイメモリーのトリックしかありませんでした｡
そしてここには､ このリプレイメモリーの仕掛けに加え､ 10ステップごとに学習する仕掛けがあります｡
そして､ 10歩ごとに学習していくのですが､ それを過去1万歩で構成されたメモリーで行うのです｡
そして､ この経験したリプレイを10ステップの適格性トレースと組み合わせることで､ トレーニングのパフォーマンスをかなり向上させることができるのです｡
そこで､ この2つの引数をインプットしてみましょう｡
最初のものはステップで､ それはとりあえず何に等しいか､ 言ってみれば､ ステップになります｡
ステップとは何かというと､ この体験リプレイファイルのもう一つのクラスであるMN Step
Progressクラスのオブジェクトになり､ 10ステップの間にAIを進行させることができます｡
そして､ 10ステップの間に､ 10ステップ以下の報酬を合計して､ 10ステップ以上の累積報酬を得ることを忘れないでください､
それがまさに適格トレースなのです｡
そして､ この経験リプレイファイルの2番目のクラスで作成します｡
では､ 次にエンドステップを作成します｡
こんな感じ｡
そして､ これは経験から再び取るMN Step Progressクラスのオブジェクトになります｡
リプレイファイルです｡
これでよしとしよう｡
それが最終段階なんですね｡
プログレスクラス｡
そして､ 今度は3つの引数を入力しなければならない｡
ご覧のように､ ここではインポートしたdoomの環境を入力する必要があります｡
2つ目の引数はAIで､ これはもちろん､ このプレビューセクションで作成したAIになります｡
そして､ 最後の引数がエンドステップです｡
そして､ この､ 10ステップごとに学習してほしいということを指定するところです｡
つまり､ 10回のトランジションごとに｡
そこで､ これらの主張をインプットしてみましょう｡
まず､ 環境ですが､ これはドゥームです｡
そして､ 2つ目が私たちのAIで､ AIと呼んでいます｡
それがここなんです｡
つまり､ これはエンドステップ進行クラスの引数の名前に過ぎません｡
そして､ ここにあるこのAIは､ 私たちが作ったAIです｡
そして､ 最後の引数がエンドステップで､ これは10に相当します｡
わかりました｡
だから今は､ 10段階の学習があることを記憶の中で考慮しているだけなのです｡
そして､ この10段階での学習がエリフィカルトレースと呼ばれるものです｡
だから､ ここでは本当に高度なことをやっているんです｡
しかし､ 私たちが馬鹿にしようとしているから､ それはケーキを作るのと何も変わらないことを忘れないでください｡
だから､ こうした高度な技術が必要なのです｡
これで､ 次のステップに進む前に､ ほぼ準備が整いました｡
もちろん定員だけは､ 仮に1万人としても入れなければなりません｡
つまり､ AIが実行した直近の1万ステップを記憶することで､ いくつかのミニバッチを生成することができるようになるのです｡
サンプル機能では､ メモリに1万トランジション入っているのは覚えていると思いますが､ AIを学習させるために､
今回は10トランジションの前に比べて1つではなく､ 10トランジションのミニバッチをいくつかサンプルすることにします｡
そして､ この10個の遷移のミニバッチを､ 最後の1万個のステップで構成されるメモリにサンプリングするのです｡
わかりました｡
それでは､ 次のステップ､ つまり､ エリフィカルトレースの実装についてです｡
だから､ ここで冒険をすることになるんです｡
これは簡単な実装ではないでしょう｡
それでは､ よい休暇を｡
そして､ 準備ができたら､ これを攻撃することができます｡
それまではお楽しみに｡
I.