WEBVTT

00:00.300 --> 00:02.280
こんにちは､ このチュートリアルにようこそ｡ 

00:02.310 --> 00:04.500
よし､ これで目が合ったぞ｡ 

00:04.530 --> 00:06.090
トレーニングができるようになっています｡ 

00:06.090 --> 00:09.610
そして､ トレーニングの最初のステップは､ 経験値リプレイの設定です｡ 

00:09.630 --> 00:11.220
だから､ 少しずつですが､ そこに到達しています｡ 

00:11.220 --> 00:16.580
訓練といい､ 経験値リプレイの実装といい｡ 

00:16.590 --> 00:27.060
そのほかにも､ エリジブルトレースという､ キュー値を学習するのではなく､ 10回遷移するごとに学習していく手法も適応されていますね｡

00:27.060 --> 00:29.340
だから､ 基本的には今までと全く同じです｡ 

00:29.340 --> 00:34.740
しかし､ 1つのステップに1つの目標､ 1つの報酬を用意するのではなく､ 10ステップに累積目標､

00:34.740 --> 00:40.710
10ステップに累積報酬を用意し､ 毎回10ステップで学習していくのです｡

00:40.710 --> 00:44.900
そのため､ 以前のように1つのステップではなく､ 10のトランジション､ 10のステップで学習しているのです｡ 

00:44.910 --> 00:50.250
そして､ これによって､ 私たちの目が不思議と働き､ それがトレーニングの過程でも不思議と働くようになるのです｡ 

00:50.250 --> 00:53.730
このテクニックのおかげで､ トレーニングの時間が大幅に短縮されるんだ｡ 

00:53.730 --> 00:58.740
しかし､ 私たちは10ステップごとに学習している経験､ リプレイを指定しなければならないのです｡ 

00:58.740 --> 01:06.000
だから､ この体験再生は､ 自動運転車用のような古典的な体験再生の実装ではないんです｡

01:06.030 --> 01:12.390
この10ステップの学習を考慮した体験リプレイの実装です｡ したがって､ この体験リプレイファイルには2つのクラスがあり､

01:12.390 --> 01:23.220
1つは10ステップの間にあなたの目を進歩させ､ この10ステップで観察された報酬を合計することができるようにするクラスです｡

01:23.220 --> 01:24.390
それがファーストクラスです｡ 

01:24.390 --> 01:31.560
そして､ このクラスが必要なのは､ 体験リプレイのために実装するクラスであるリプレイメモリクラスに､ この10ステップを含める必要があるからです｡

01:31.560 --> 01:37.770
そうやって､ 10ステップで学習していることを記憶も考慮しているのです｡

01:37.770 --> 01:41.610
そのため､ 今回の体験リプレイの実装では､ 2つのクラスが用意されているわけです｡ 

01:41.610 --> 01:48.870
しかし､ それはあくまでも10段階で学習していることを考慮したものであり､ 記憶の上でも考慮しなければならないのです｡

01:49.140 --> 01:51.780
では､ 私たちの記憶といえば､ それを作りましょう｡ 

01:51.780 --> 01:54.600
このメモリをメモリと呼ぶことにします｡ 

01:55.140 --> 02:00.270
そして､ メモリはリプレイメモリクラスのオブジェクトになるわけです｡ 

02:00.270 --> 02:04.740
そして､ リプレイメモリークラスは､ この体験リプレイPファイルのクラスである｡ 

02:04.740 --> 02:08.880
というわけで､ まずはこのファイルを体験リプレイしてみます｡ 

02:10.100 --> 02:10.370
それから｡ 

02:10.370 --> 02:15.770
ダット そして､ そこでリプレイメモリーの授業を受けるんです｡ 

02:15.770 --> 02:16.610
完璧です｡ 

02:16.610 --> 02:19.720
そして､ ご覧のように､ 2つの入力､ 2つの引数があります｡ 

02:19.730 --> 02:27.320
最初の引数はand stepsで､ これはQ値を学習するステップ数に正確に対応する｡

02:27.320 --> 02:31.910
つまり､ 目標値と報酬を積み重ねるステップ数ですね｡ 

02:31.910 --> 02:35.630
そこで､ 累積目標と累積報酬を設定することになりました｡ 

02:35.630 --> 02:39.620
そして､ 2つ目の引数は､ メモリのサイズを表す容量です｡ 

02:39.620 --> 02:42.560
ですから､ 例えばここでは10,000と表示されています｡ 

02:42.560 --> 02:47.600
つまり､ 容量が10,000に等しければ､ メモリのサイズも10,000になるということです｡ 

02:47.600 --> 02:54.140
したがってそれは､ AIが行った1万歩の歩数を減らした記憶を得るということになるわけです｡ 

02:54.170 --> 02:57.170
しかし､ 繰り返しになりますが､ すべてのトランジションを習得できるわけではありません｡ 

02:57.170 --> 03:01.700
この最後の1万歩の記憶の中で､ 10歩ごとに覚えていくんです｡ 

03:01.700 --> 03:05.960
そして､ それこそが､ 今回ご紹介する以前と比較した新しい機能です｡ 

03:05.960 --> 03:08.990
以前は､ このリプレイメモリーのトリックしかありませんでした｡ 

03:08.990 --> 03:13.940
そしてここには､ このリプレイメモリーの仕掛けに加え､ 10ステップごとに学習する仕掛けがあります｡ 

03:13.940 --> 03:19.940
そして､ 10歩ごとに学習していくのですが､ それを過去1万歩で構成されたメモリーで行うのです｡

03:19.940 --> 03:29.090
そして､ この経験したリプレイを10ステップの適格性トレースと組み合わせることで､ トレーニングのパフォーマンスをかなり向上させることができるのです｡

03:29.240 --> 03:31.040
そこで､ この2つの引数をインプットしてみましょう｡ 

03:31.040 --> 03:38.540
最初のものはステップで､ それはとりあえず何に等しいか､ 言ってみれば､ ステップになります｡ 

03:38.540 --> 03:44.810
ステップとは何かというと､ この体験リプレイファイルのもう一つのクラスであるMN Step

03:44.810 --> 03:52.070
Progressクラスのオブジェクトになり､ 10ステップの間にAIを進行させることができます｡

03:52.070 --> 03:57.920
そして､ 10ステップの間に､ 10ステップ以下の報酬を合計して､ 10ステップ以上の累積報酬を得ることを忘れないでください､

03:57.920 --> 04:01.970
それがまさに適格トレースなのです｡

04:01.970 --> 04:12.830
そして､ この経験リプレイファイルの2番目のクラスで作成します｡

04:12.830 --> 04:15.050
では､ 次にエンドステップを作成します｡ 

04:16.170 --> 04:16.980
こんな感じ｡ 

04:17.220 --> 04:28.200
そして､ これは経験から再び取るMN Step Progressクラスのオブジェクトになります｡ 

04:28.620 --> 04:30.450
リプレイファイルです｡ 

04:30.720 --> 04:31.570
これでよしとしよう｡ 

04:31.590 --> 04:32.570
それが最終段階なんですね｡ 

04:32.580 --> 04:33.480
プログレスクラス｡ 

04:33.480 --> 04:35.490
そして､ 今度は3つの引数を入力しなければならない｡ 

04:35.520 --> 04:40.920
ご覧のように､ ここではインポートしたdoomの環境を入力する必要があります｡ 

04:40.950 --> 04:48.600
2つ目の引数はAIで､ これはもちろん､ このプレビューセクションで作成したAIになります｡

04:48.840 --> 04:51.270
そして､ 最後の引数がエンドステップです｡ 

04:51.270 --> 04:57.060
そして､ この､ 10ステップごとに学習してほしいということを指定するところです｡ 

04:57.060 --> 04:58.740
つまり､ 10回のトランジションごとに｡ 

04:58.950 --> 05:01.050
そこで､ これらの主張をインプットしてみましょう｡ 

05:01.050 --> 05:04.230
まず､ 環境ですが､ これはドゥームです｡ 

05:04.740 --> 05:11.590
そして､ 2つ目が私たちのAIで､ AIと呼んでいます｡ 

05:11.610 --> 05:12.620
それがここなんです｡ 

05:12.630 --> 05:16.530
つまり､ これはエンドステップ進行クラスの引数の名前に過ぎません｡ 

05:16.530 --> 05:20.850
そして､ ここにあるこのAIは､ 私たちが作ったAIです｡ 

05:21.060 --> 05:26.610
そして､ 最後の引数がエンドステップで､ これは10に相当します｡ 

05:27.000 --> 05:27.690
わかりました｡ 

05:27.690 --> 05:33.270
だから今は､ 10段階の学習があることを記憶の中で考慮しているだけなのです｡ 

05:33.270 --> 05:36.780
そして､ この10段階での学習がエリフィカルトレースと呼ばれるものです｡ 

05:36.960 --> 05:39.450
だから､ ここでは本当に高度なことをやっているんです｡ 

05:39.450 --> 05:44.060
しかし､ 私たちが馬鹿にしようとしているから､ それはケーキを作るのと何も変わらないことを忘れないでください｡ 

05:44.070 --> 05:47.310
だから､ こうした高度な技術が必要なのです｡ 

05:47.430 --> 05:54.610
これで､ 次のステップに進む前に､ ほぼ準備が整いました｡

05:54.630 --> 06:01.590
もちろん定員だけは､ 仮に1万人としても入れなければなりません｡ 

06:01.980 --> 06:13.740
つまり､ AIが実行した直近の1万ステップを記憶することで､ いくつかのミニバッチを生成することができるようになるのです｡

06:13.740 --> 06:19.470
サンプル機能では､ メモリに1万トランジション入っているのは覚えていると思いますが､ AIを学習させるために､

06:19.470 --> 06:27.000
今回は10トランジションの前に比べて1つではなく､ 10トランジションのミニバッチをいくつかサンプルすることにします｡

06:27.000 --> 06:32.790
そして､ この10個の遷移のミニバッチを､ 最後の1万個のステップで構成されるメモリにサンプリングするのです｡ 

06:33.300 --> 06:33.720
わかりました｡ 

06:33.720 --> 06:39.330
それでは､ 次のステップ､ つまり､ エリフィカルトレースの実装についてです｡

06:39.330 --> 06:41.490
だから､ ここで冒険をすることになるんです｡ 

06:41.490 --> 06:43.560
これは簡単な実装ではないでしょう｡ 

06:43.560 --> 06:45.090
それでは､ よい休暇を｡ 

06:45.090 --> 06:47.580
そして､ 準備ができたら､ これを攻撃することができます｡ 

06:47.700 --> 06:48.860
それまではお楽しみに｡ 

06:48.870 --> 06:49.260
I.
