WEBVTT

00:00.240 --> 00:05.250
こんにちは､ 深層畳み込み学習でAIをトレーニングするパート2へようこそ｡ 

00:05.250 --> 00:06.090
そうなんです｡ 

00:06.090 --> 00:11.460
ニューラルネットワークのアーキテクチャ､ 身体､ アクションの演じ方､ すべてにおいてAIを構築したところで､

00:11.460 --> 00:16.980
いよいよこのAIを深層学習､ 畳み込み学習で鍛えていくことになります｡

00:16.980 --> 00:22.740
今後は､ 経験値再生､ キュー値との連動､ 報酬との連動､ さらにトレーニングプロセスを改善するためのボーナスとして､

00:22.740 --> 00:31.410
適格性追跡というものを導入する予定です｡

00:31.530 --> 00:38.940
Eligibility traceは､ 報酬を数段階に分けて蓄積していく強力な手法であり､ 以前は遷移ごとに手がかり値を学習していたのに対し､

00:38.940 --> 00:44.700
この報酬の蓄積に対して手がかり値を学習するため､ 今回は1つの報酬だけでなく､

00:44.700 --> 00:54.390
複数の報酬を得てから手がかり値を学習していくことになります｡

00:54.390 --> 01:01.020
つまり､ 次々に遷移してその都度キュー値を更新するのではなく､ キュー値はステップごとに更新されることになります｡

01:01.020 --> 01:12.570
なぜなら､ 適格性トレースはむしろステップ適格性トレースと呼ばれ､ MNはキュー値が更新されるこの番号になるからです｡

01:12.570 --> 01:15.390
そして､ このモデルでは､ イコール10を使用することにします｡ 

01:15.390 --> 01:20.910
ということは､ 10ステップの適格トレースになるので､ この10ステップで報酬を蓄積した後､

01:20.910 --> 01:25.470
10ステップごとにキュー値を更新して学習していくことになりますね｡

01:25.470 --> 01:29.490
つまり､ 我々のモデルをより強力にするためのボーナスなのです｡ 

01:29.490 --> 01:33.000
そして､ 最終的には卓越した結果を得ることができるのがおわかりいただけると思います｡ 

01:33.000 --> 01:35.820
最終的な仕上がりを見たときは､ 本当に驚きました｡ 

01:35.820 --> 01:40.200
以前は､ 実行に時間がかかるモデルを手掛けていました｡ 

01:40.200 --> 01:44.280
AIの訓練に時間がかかったが､ これを見ればわかるだろう｡ 

01:44.280 --> 01:50.400
さらに､ 私たちが作った神経ネットワークは､ 私たちの脳であり､ 私たちの体であり､

01:50.400 --> 01:56.460
マックス､ 私たちは非常に強力な道徳を得ることになります｡

01:56.490 --> 01:58.920
私の言っていることが理解できるでしょうか？

01:59.100 --> 02:06.510
そこで､ このパート2では､ まずdoom環境を手に入れることから始め､ 実際に私がコードの行を用意します｡

02:06.540 --> 02:12.690
作業ディレクトリのフォルダにある画像前処理の外部ファイルを使用しているだけです｡ 

02:12.690 --> 02:19.980
ですから､ 基本的には､ むしろ最初にこのコード行を取り､ ゼロのパチスロコードを作るジムです｡ 

02:19.980 --> 02:24.270
ドゥームコードオブゼロは､ 今やっているゲームの環境名ということですね｡ 

02:24.270 --> 02:26.910
そこでまず､ これで環境をインポートします｡ 

02:26.910 --> 02:35.250
オープンジムのチュートリアルにあるように､ このプリプロセス画像クラスを使って､

02:35.250 --> 02:48.930
ニューラルネットワークに入る画像を事前に処理し､ 寸法が80×80の正方形になるようにプリプロセスしています｡

02:48.930 --> 03:00.360
ニューラルネットワークでは､ 入力画像の寸法を1×80×80に設定しているので､ 1がチャンネル数だと覚えておいてください｡

03:00.360 --> 03:03.360
それで､ 1つはモノクロの画像を扱うということです｡ 

03:03.420 --> 03:06.150
ここがグレースケールなんですね｡ 

03:06.600 --> 03:14.670
そして､ 80×80というのは､ 入力画像の寸法が80×80になるということで､ それをニューラルネットワークに設定するのです｡

03:14.670 --> 03:22.950
しかし､ もちろん､ 画像を入力するときにこれを指定する必要があり､ このプリプロセス画像クラスでは､ まさにそれを行っているのです｡

03:23.400 --> 03:32.250
そして､ 入力画像の正しいフォーマットで環境をインポートした後､ まあ､ この行のコードでビデオと一緒にゲーム全体をインポートしています｡

03:32.250 --> 03:37.650
そして､ これのクールなところは､ 最終的に私たちのAIがドゥームをプレイしているビデオを見ることができることです｡ 

03:37.650 --> 03:41.880
そのため､ モンスターをどのように倒すのか､ ベストに到達しようとするのか､ すべてを見ることができます｡ 

03:41.910 --> 03:43.290
だから､ とても楽しみなんです｡ 

03:43.290 --> 03:47.940
そして､ これらの動画はこのvideosフォルダに入ることを忘れないでください｡ 

03:48.480 --> 03:49.050
わかりました｡ 

03:49.050 --> 03:52.980
そして最後の行ですが､ ここが重要なのでお見せします｡ 

03:52.980 --> 03:56.610
それはもう､ 私たちが作っているAIとの関連性の方が強いですね｡ 

03:56.610 --> 04:02.610
さて､ このニューラルネットワークは､ 数字のアクションを入力として受け取ることを思い出してください｡ 

04:02.610 --> 04:09.390
それは､ いくつかの環境で､ いくつかの運命の環境で､ 簡単にテストできるAIを作りたいからです｡

04:09.390 --> 04:19.080
そして､ 運命の環境が異なれば､ 行動数も異なるので､ この行動数の変数をCNN（脳）の入力として指定します｡

04:19.080 --> 04:26.160
したがって､ これから行うのは､ 先ほどインポートして作成したdoom環境を使って､ この変数にこのnumber

04:26.160 --> 04:29.040
actionsを取得することです｡

04:29.040 --> 04:34.410
そして､ 後にこのこれから作るナンバーアクションの変数が､ 脳のインプットとなるのです｡ 

04:34.620 --> 04:35.820
では､ こうしてみましょう｡ 

04:35.820 --> 04:40.230
このリアルナウな可変アクション数をご紹介しています｡ 

04:40.230 --> 04:42.420
だから､ アクションの数は等しい｡ 

04:42.450 --> 04:45.630
今度はドゥーム環境です｡ 

04:45.630 --> 04:47.730
それが､ 今回作った変数です｡ 

04:47.880 --> 04:52.590
ドゥーム環境､ そしてここにドットを追加して､ さて､ どうでしょう｡ 

04:52.590 --> 04:54.780
私たちは､ ここで初めてアクションスペースをとります｡ 

04:54.780 --> 04:56.970
それは､ 自分の行動とセットになっているのです｡ 

04:56.970 --> 04:59.910
ぜひ､ オープニングからご覧になってください｡ 

05:00.060 --> 05:05.430
ホイルは､ オープンエアーのジム環境の仕組みを理解するために､ その仕組みを見ているんです｡ 

05:05.430 --> 05:07.800
しかし､ 基本的にはこれがアクションのセットです｡ 

05:07.800 --> 05:12.750
そして､ このアクションの集合から､ 環境にあるアクションの数にアクセスすることができます｡ 

05:12.750 --> 05:23.790
そして､ これを行うには､ ここでそれを追加し､ DNはアクションの数であるため､ ドゥームとそのアクション空間ドットnは7を返します｡

05:23.790 --> 05:26.520
アクションが7つあるので､ 7が返されます｡ 

05:26.520 --> 05:32.250
冒頭のドゥーム環境では6つのアクションが見られますが､ 走ることもできるので､

05:32.250 --> 05:38.820
前進､ 左移動､ 右移動､ 左折､ 右折､ 撮影ができるのだと思います｡

05:38.820 --> 05:39.990
それに､ 私たちは走れるんです｡ 

05:39.990 --> 05:41.370
ということは､ 7つのアクションになりますね｡ 

05:42.140 --> 05:42.520
わかりました｡ 

05:42.530 --> 05:48.350
そして､ 私たちが持っているドゥーム環境､ アクションの数を取得するのはこれで終わりです｡

05:48.350 --> 05:52.640
つまり､ 私たちの脳に必要なものは､ 今のところすべて揃っているのです｡ 

05:52.640 --> 05:58.220
そして､ CNNと呼ぶことにするオブジェクト､ 脳のオブジェクトと最小限の文字を作るだけです｡ 

05:58.220 --> 06:06.890
そして､ init関数は引数としてアクションの数を受け取るので､ まあ､ これから作るCNNオブジェクトにアクションの数を入力することになる｡

06:07.310 --> 06:11.630
そしてもちろん､ 肉体を作り､ やがて死んでいく｡ 

06:11.630 --> 06:18.940
そのため､ 次のセクションでは､ AIを構築する､ と呼ぶことにします｡ 今､ 私たちは好きなだけ目を作ることができるからです｡

06:18.950 --> 06:21.950
それがオブジェクト指向プログラミングのすごいところです｡ 

06:21.950 --> 06:28.280
私たちは好きなように目を作ることができるので､ 洗練された脳を持つAIを作ろうと思っているのですが､

06:28.280 --> 06:31.370
それはまさに次のチュートリアルで行うことです｡

06:31.670 --> 06:32.930
それまではお楽しみに｡ 

06:32.930 --> 06:33.320
I.
