WEBVTT

00:00.420 --> 00:01.260
準備はいいですか？

00:01.290 --> 00:02.300
こうしよう｡ 

00:02.310 --> 00:05.970
まずは､ wisdomのシステム依存部分をすべてインストールしましょう｡ 

00:06.000 --> 00:12.510
この再生ボタンをクリックすると､ ご覧のように､ pillowやpsi､ piなどの依存関係をすべてインストールし､

00:12.510 --> 00:18.150
さらに､ これを正常に実行するために必要ないくつかの依存関係をインストールします｡

00:18.150 --> 00:22.140
しかし､ pytorchのような残りのすべては､ ジムのモジュールはすでにインストールされています｡ 

00:22.140 --> 00:23.070
だから､ 本当にすごいことなんです｡ 

00:23.070 --> 00:32.040
これがGoogle CoLabの良さであり､ コードを実行し､ 最終結果を視覚化することに何の問題も生じないということです｡

00:32.430 --> 00:32.760
わかりました｡ 

00:32.760 --> 00:35.250
だから､ 実際には1〜2分で終わります｡ 

00:35.250 --> 00:41.430
では､ ここで早送りして､ 残りのコードの実行については､ またすぐにお会いしましょう｡

00:42.820 --> 00:43.420
わかりました｡ 

00:43.420 --> 00:46.240
システムのインストールも終盤に差し掛かっているようです｡ 

00:46.240 --> 00:53.680
依存関係は､ ご覧の通り､ それらをダウンロードし､ インストールしながら､ すべての適切な要件を集めています｡

00:53.680 --> 00:58.180
そして､ 一瞬で､ 正しく仕上げること｡ 

00:58.180 --> 00:59.800
そして､ 見てみましょう｡ 

00:59.800 --> 01:01.360
3､ 2

01:01.360 --> 01:02.140
これでよしとしよう｡ 

01:02.140 --> 01:03.910
すべてのインストールに成功しました｡ 

01:03.910 --> 01:05.260
ここでは､ これらのエラーは気にしないでください｡ 

01:05.260 --> 01:11.050
これらはコードの実行に影響を与えませんが､ 私たちが望むようにすべてが正常にインストールされています｡ 

01:11.050 --> 01:13.450
さて､ それでは次のステップです｡ 

01:13.450 --> 01:14.770
とても重要なことです｡ 

01:14.800 --> 01:16.600
この重要なノードをご覧ください｡ 

01:16.600 --> 01:24.010
依存関係をすべてインストールした後､ 基本的にはこの最初のセルを実行した後に､ ランタイムを再起動する必要があると書かれています｡

01:24.010 --> 01:26.560
そうでない場合は､ ここで実行エラーが発生します｡ 

01:26.560 --> 01:27.610
では､ 早速やってみましょう｡ 

01:27.610 --> 01:28.390
それはとてもシンプルなことです｡ 

01:28.390 --> 01:33.910
ここでランタイムをクリックし､ ランタイムを再起動すれば､ はい､ OKです｡ 

01:33.910 --> 01:35.500
これにより､ ランタイムが復元されます｡ 

01:35.500 --> 01:40.480
そして今､ 再生ボタンをクリックするだけで､ これらのセルをすべて実行することができます｡ 

01:40.480 --> 01:44.800
では､ この最初のファイルの画像の前処理からやってみましょう｡ 

01:44.830 --> 01:51.370
では､ まずライブラリをインポートして､ プリプロセス画像クラスで画像をプリプロセスして､

01:51.370 --> 01:58.570
もうこの体験リプレイの実装に移っていますね｡

01:58.570 --> 02:00.340
よし､ じゃあやってみようか｡ 

02:00.340 --> 02:05.140
まずライブラリをインポートし､ 次に環境の1ステップを定義します｡ 

02:05.170 --> 02:14.770
そして､ Step Progressクラスで数ステップ､ ステップの進捗をフォルダーにあるものと全く同じにします｡

02:14.830 --> 02:20.500
そして､ このリプレイメモリクラスを構築することで､ 体験リプレイを実装しています｡ 

02:20.500 --> 02:21.940
よし､ いいぞ｡ 

02:21.940 --> 02:30.160
そして､ 3番目のファイルであるI for do me either pyに移り､ まずライブラリをインポートします｡ 

02:31.100 --> 02:31.940
それから｡ 

02:31.940 --> 02:32.240
わかりました｡ 

02:32.240 --> 02:38.820
torchのモジュールを全部インポートして､ openaiとdoomのパッケージをインポートしているので､ ここで少し時間がかかっていますね｡

02:38.840 --> 02:41.990
だから､ ジムとウィズダムとラッパーと｡ 

02:42.320 --> 02:43.310
だから､ すべて順調です｡ 

02:43.310 --> 02:51.380
そして､ このパート1に進み､ AIを作り､ 脳を作り､ 体を作り､ そしてすべてを組み立てるのです｡

02:51.380 --> 02:55.610
そこで､ まずCNNクラスで脳を万全にしよう｡ 

02:55.700 --> 03:04.580
そして､ ソフトマックスボディクラスでボディを作り､ クラスでAIを作りましょう｡ 

03:04.730 --> 03:05.210
わかりました｡ 

03:05.210 --> 03:06.260
だから､ すべて順調です｡ 

03:06.260 --> 03:12.350
そして､ もう第2部へと進みます｡ もちろん､ 深層学習､ 畳み込み学習でAIを訓練します｡

03:12.590 --> 03:12.950
わかりました｡ 

03:12.950 --> 03:15.200
つまり､ ここにあるものとまったく同じなのです｡ 

03:15.380 --> 03:19.130
まずはtombで新しいモジュールの入ったdoom環境を手に入れます｡ 

03:19.130 --> 03:20.270
この点はご安心ください｡ 

03:20.270 --> 03:21.560
これはエラーではありません｡ 

03:21.650 --> 03:27.620
そして､ 脳､ CNN､ マックスボディのボディ､ 脳とボディを含むAI全体という異なるオブジェクトを作り､

03:27.620 --> 03:31.010
AIを構築していくことになります｡

03:31.010 --> 03:31.430
わかりました｡ 

03:31.430 --> 03:32.300
これ､ 実行したっけ？

03:32.300 --> 03:32.870
はい｡ 

03:33.110 --> 03:39.800
そして､ 経験値､ ステップとリプレイ､ 記憶を客観的なリプレイ記憶として設定し､

03:39.800 --> 03:42.950
適格性追跡を実施します｡

03:43.220 --> 03:43.730
わかりました｡ 

03:43.730 --> 03:45.320
パフォーマンスを向上させるために

03:45.620 --> 03:50.120
そして､ MAクラスで100ステップの移動平均を作成します｡ 

03:50.120 --> 03:52.490
そして最後に､ 私の友人たちよ､ 準備はいいか？

03:52.490 --> 03:58.520
さて､ ここからはいよいよ､ 20エポックにわたってAIを学習させるという､ 非常にエキサイティングなパートに入ります｡

03:58.520 --> 04:01.430
さて､ それでは少し長くなりますが､ ご覧ください｡ 

04:01.430 --> 04:05.780
寸法を大きくしていくので､ 1時間か2時間くらいはかかると思います｡ 

04:05.780 --> 04:09.770
長すぎると感じる場合は､ 80×80のサイズに縮小してください｡ 

04:09.770 --> 04:13.100
でも､ この寸法ならもっといい動画が撮れると信じています｡ 

04:13.910 --> 04:15.620
では､ 準備はいいですか？

04:15.620 --> 04:20.450
3､ 2､ 1､ ゴーでやってみよう｡ 

04:20.450 --> 04:24.140
よし､ これでトレーニングのコードが実行されるぞ｡ 

04:24.140 --> 04:30.020
そして､ 数秒後には､ 最初のエポックを見ることができるはずです｡ もちろん､ 負の報酬を持つことになります｡

04:30.020 --> 04:40.220
しかし､ エポックを重ねるうちに､ 少しずつ報酬が増え､ 正の報酬に到達し､ さらに数百の報酬に到達することがわかります｡

04:40.220 --> 04:42.230
まあ､ 実際､ 目指してみましょうよ｡ 

04:42.230 --> 04:53.240
20回のエポックでは､ 100回､ 200回､ 300回といった具合に､ 最終的な報酬が得られることを期待しましょう｡

04:53.240 --> 04:53.450
はい｡ 

04:53.450 --> 04:56.990
最初のエポック､ 負の報酬､ -98｡ 

04:56.990 --> 05:02.960
だから､ 100､ 2,300くらいの報酬で､ すでに素晴らしい結果が得られるだろうと申し上げたのです｡ 

05:02.960 --> 05:10.010
AIがモンスターを倒したり､ 避けたり､ ベストの方に移動したりするのを見ることができますね｡

05:10.700 --> 05:14.360
これが最初のエポック､ エポック1 -98というわけだ｡ 

05:14.360 --> 05:18.740
そして､ エポック・ナンバー2には､ もっと良い報酬が待っているかもしれませんね｡ 

05:18.740 --> 05:21.620
でもね､ 最初はもちろん､ AIは訓練されていないんですよ｡ 

05:21.620 --> 05:23.510
環境を探っているのです｡ 

05:23.510 --> 05:23.750
そうですね｡ 

05:23.750 --> 05:28.610
強化学習における「探索」と「開拓」のトレードオフを覚えていますか？

05:28.610 --> 05:33.170
まあ､ 最初のうちはAIは純粋に探索するだけですが､ それが訓練され､

05:33.170 --> 05:37.850
どんどん賢くなって､ ある程度高い報酬に到達するようになるんです｡

05:37.850 --> 05:41.000
だから､ 最初のうちは報酬がマイナスでも全然いいんです｡ 

05:41.000 --> 05:46.700
3回/1回のエポックではそうなるかもしれませんが､ 4回目､ 5回目､ 6回目のエポックでは､

05:46.700 --> 05:54.380
ポジティブな報酬が得られるようになり､ さらに102回目､ 300回目あたりで報酬が得られるようになることが期待できます｡

05:55.040 --> 05:57.560
だから､ やっぱりちょっと時間がかかるんですよ｡ 

05:57.560 --> 06:02.510
だから､ 2時間もここにいたら､ 話すことがなくなってしまう｡ 

06:02.510 --> 06:08.030
そこで､ どうするかというと､ 今､ 楽しい音楽､ カッコいい音楽をかけるんです｡ 

06:08.030 --> 06:10.790
そして､ エポック2､ -62です｡ 

06:10.820 --> 06:12.200
ですから､ すでにある程度の改善はされています｡ 

06:12.200 --> 06:12.620
それはいいことだ｡ 

06:12.620 --> 06:18.380
しかし､ エポックが進めば進むほど､ さらに優れた改良があることがおわかりいただけると思います｡ 

06:18.980 --> 06:20.030
それで､ 私は何を言ったのでしょうか？

06:20.030 --> 06:25.460
はい､ 今からかっこいい音楽をかけて､ アクセラレーションモードでトレーニングを再生します｡ 

06:25.460 --> 06:30.350
もちろん､ トレーニングの最後には､ 最終的な成果を確認するためにお会いしますよ｡ 

06:30.350 --> 06:30.980
わかりました｡ 

06:30.980 --> 06:32.030
そうそう､ そうなんです｡ 

06:32.030 --> 06:35.060
3, 2, 1, 行け

07:20.030 --> 07:20.810
わかりました｡ 

07:20.810 --> 07:22.610
そして､ 研修も終盤に差し掛かったところです｡ 

07:22.610 --> 07:23.600
おめでとうございます｡ 

07:23.600 --> 07:30.170
運命のゲームという非常に難しいアプリケーションで､ 深い畳み込み学習モデルを学習させるのです｡

07:30.570 --> 07:32.130
では､ まず何を話すか｡ 

07:32.130 --> 07:37.290
さて､ 期待通り､ 平均報酬は100を超え､ ある程度達成できました｡ 

07:37.470 --> 07:43.340
では､ 何が重要かというと､ 当然ながら､ エポック数が多ければ多いほど､ より高い報酬が得られるということです｡ 

07:43.350 --> 07:49.470
例えば､ このモデルをさらに100エポック､ あるいはそれ以上訓練して､ 30400､

07:49.470 --> 07:54.600
500､ あるいは1000の報酬に到達する準備ができたとします｡

07:54.600 --> 07:55.980
まあ､ 遠慮なくやってください｡ 

07:55.980 --> 08:02.220
例えば､ 夜寝ている間にこれを作動させておけば､ 朝起きたときに､ より良い結果が得られます｡

08:02.250 --> 08:05.550
なお､ ランタイムではGPUを使うこともできますよね？

08:05.550 --> 08:10.500
ランタイムタイプを変更すると､ そうでなければノートブックが再起動するので､ 私はすべきではない｡ 

08:10.500 --> 08:16.440
しかし､ ハードウェアアクセラレータでは､ GPUやCPUも選択できますが､ それはパフォーマンスを最適化したい場合や､

08:16.830 --> 08:20.280
超ハードなトレーニングを行いたい場合に限ります｡

08:20.280 --> 08:25.200
しかし､ ここでは古典的なものを使っています｡ なぜなら､ これをすべて実行する方法を示したいだけだからです｡ 

08:25.200 --> 08:26.220
そして､ そこに行く｡ 

08:26.220 --> 08:32.860
さて､ このカーネルブックにだけ特別なコードを追加して､ 残りのワークブックを実行します｡

08:32.880 --> 08:36.210
もちろん､ AIを実際に可視化します｡

08:36.480 --> 08:37.440
よし､ じゃあやってみようか｡ 

08:37.440 --> 08:39.810
まず､ ライブラリをインポートしましょう｡ 

08:39.810 --> 08:40.380
そうですね｡ 

08:40.380 --> 08:41.250
すべて良好です｡ 

08:41.430 --> 08:46.110
そして､ 入力された図形と､ 考えられるいくつかのアクションを表示します｡ 

08:46.110 --> 08:46.470
わかりました｡ 

08:46.470 --> 08:52.800
ここで､ 「Doom Corridor」の環境では7つのアクションが可能であることを実感することになります｡ 

08:52.800 --> 08:57.840
つまり､ 前進､ 後退､ 左回り､ 右回り､ 射撃です｡ 

08:57.840 --> 09:00.420
そして､ 自分を守るとか｡ 

09:00.420 --> 09:03.570
最後のアクションが何かは分かりませんが､ そんな感じです｡ 

09:03.570 --> 09:07.470
そして､ これが入力枠の寸法です｡ 

09:07.470 --> 09:09.420
これは､ フレームの高さに相当します｡ 

09:09.420 --> 09:11.580
高さは240ピクセルです｡ 

09:11.610 --> 09:14.550
これは､ フレームの幅に相当しますよね？

09:14.550 --> 09:17.010
320の大きさです｡ 

09:17.010 --> 09:25.580
これは､ 私たちがカラー画像を使って仕事をしていることと､ この3つが私たちのチャンネルの3つの要素に対応していることを表していますね｡

09:25.860 --> 09:32.040
では､ 次のセルを実行し､ 環境を1フレーム表示させて､ どんな感じか見てみましょう｡

09:32.040 --> 09:37.170
そして実際に､ 作業している環境を見るのに便利なことを思い出してください｡ 

09:37.170 --> 09:43.200
ここでは､ 「破滅の回廊」にいることがわかりますが､ もっといろいろな環境で実験したい場合は､

09:43.200 --> 09:48.510
実は､ このメインページにもあることを思い出してください｡

09:48.510 --> 09:48.960
ここです｡ 

09:48.960 --> 09:49.200
はい｡ 

09:49.200 --> 09:53.280
環境はすべてリストアップされているので､ ぜひ試してみてください｡ 

09:53.280 --> 09:56.430
だから､ もしよかったら､ もう一回見てみてください｡ 

09:56.430 --> 09:58.230
まあ､ 実際にお見せすることもできますけどね｡ 

09:58.230 --> 10:02.760
これを取ってから､ この運命の回廊に戻ろうか｡ 

10:02.790 --> 10:03.240
そうですね｡ 

10:03.240 --> 10:06.810
だから､ それをこれに置き換えたら｡ 

10:07.500 --> 10:10.290
右と私はこれをよく実行します｡ 

10:10.290 --> 10:12.290
今回は3つのアクションを用意します｡ 

10:12.300 --> 10:17.610
もちろん､ もっとシンプルなもので､ このセルをうまく実行すれば､ この環境が見えてきますよね？

10:17.610 --> 10:26.190
これは､ AIがどのような環境でどのような働きをするのか､ 手早く確認できる方法なのです｡

10:26.400 --> 10:26.760
わかりました｡ 

10:26.760 --> 10:29.220
では､ 知恵の輪の話に戻りましょう｡ 

10:29.250 --> 10:34.080
次のセルに必要な場合に備えて､ 今すぐ再実行しましょう｡ 

10:34.110 --> 10:37.230
よし､ 完璧なドゥームコリドーだ｡ 

10:37.260 --> 10:39.720
では､ 最後のセルに移りましょう｡ 

10:39.720 --> 10:43.620
つまり､ これは可視化のために使われるヘルパー関数なのです｡ 

10:43.620 --> 10:48.090
では､ このセルを実行して､ 今度は1つのエピソードでAIを動かしてみましょう｡ 

10:48.090 --> 10:53.160
なぜなら､ 基本的には､ 各ステップで特定の状態になり､ その状態の中でアクションを行い､

10:53.550 --> 11:04.950
報酬を得て､ 次の状態に到達するという､ 1話分の放送を実行するためのプロセスだからです｡

11:04.950 --> 11:07.440
これが古典的なMDPのプロセスなんですね｡ 

11:07.440 --> 11:09.000
マルコフ決定過程｡ 

11:09.000 --> 11:09.960
そして､ こうなりました｡ 

11:09.960 --> 11:11.580
それは1話分で終わりです｡ 

11:11.580 --> 11:19.620
そして最後に､ 20ドルで訓練したAIが100以上の報酬に到達できたゲームプレイのビデオをご覧いただきます｡

11:19.620 --> 11:26.040
これはかなり良い結果を得ることができますが､ ベストには到達しないかもしれません｡

11:26.040 --> 11:26.880
でも､ いいんです｡ 

11:26.880 --> 11:28.680
それは自分で実験してください｡ 

11:28.680 --> 11:35.340
そして､ このフルボタンをクリックしていただきたいと思います｡

11:35.340 --> 11:42.720
これらのフォルダには､ 結果のフレームや､ JS､ ファイルなどの要素が含まれています｡

11:42.720 --> 11:45.600
しかし､ 本当に気になるのは､ 最終的な映像です｡ 

11:45.600 --> 11:52.110
そして､ この再生ボタンをクリックすると､ このメインフォルダに入力されるのがわかります｡

11:52.110 --> 11:53.670
見逃さずに､ 大丈夫です｡ 

11:53.670 --> 11:57.420
セルがすでに実行されたように見える､ ということですね｡ 

11:57.420 --> 11:59.220
しかし､ それは数秒後にわかることです｡ 

11:59.220 --> 12:03.840
ここでは､ AVIファイルという動画ファイルが入力されているのが確認できます｡ 

12:03.840 --> 12:05.640
10秒くらいで表示されます｡ 

12:05.640 --> 12:08.010
なんならカウントダウンもしますよ｡ 

12:08.010 --> 12:09.150
では､ こうしてみましょう｡ 

12:09.150 --> 12:20.970
そして､ 10､ 9､ 8､ 7､ 6､ 5､ 4､ 3､ 2､ 1､ GO｡ 

12:21.710 --> 12:24.050
そして今､ 本当に数秒後に表示されるはずです｡ 

12:24.050 --> 12:24.890
そうだ､ そうだ｡ 

12:25.040 --> 12:25.460
わかりました｡ 

12:25.460 --> 12:26.570
で､ エージェントゲーム｡ 

12:26.570 --> 12:27.500
再生してくれ､ アヴィ｡ 

12:27.500 --> 12:28.400
それがあなたのビデオです｡ 

12:28.400 --> 12:36.740
では､ ダウンロードしてみましょう｡ あなたのコンピューターにダウンロードされますので､ ここにあります｡ 

12:36.740 --> 12:37.030
そうですね｡ 

12:37.040 --> 12:38.810
それがビデオエージェントゲームなんですね｡ 

12:38.810 --> 12:39.800
FBIを演じる｡ 

12:39.830 --> 12:44.060
必ずVLCなどのコーデックを搭載したビデオプレーヤーで開いてください｡ 

12:44.090 --> 12:44.450
そうですね｡ 

12:44.450 --> 12:49.070
Macの場合､ quicktime playerでは動作しませんが､ VLCでは間違いなく動作します｡ 

12:49.100 --> 12:52.190
それでは､ 早速､ 動画をご覧ください｡ 

12:52.190 --> 12:52.550
わかりました｡ 

12:52.550 --> 12:55.040
そこで､ ここで一旦停止をさせてください｡ 

12:55.250 --> 12:55.520
わかりました｡ 

12:55.520 --> 12:56.210
では､ その映像をご覧ください｡ 

12:56.210 --> 13:01.460
そして､ ご覧のように､ これが256×256の枠の寸法です｡ 

13:01.460 --> 13:03.050
ですから､ ご覧の通り､ あまり大きくはありません｡ 

13:03.050 --> 13:03.320
そうですね｡ 

13:03.320 --> 13:08.210
だから､ 80×80ではなく､ どうしてもこのサイズでやりたかったんです｡ 

13:08.630 --> 13:10.070
では､ 次に映像をご覧ください｡ 

13:10.070 --> 13:15.920
これはAIが1つのエピソードでドゥームを演じていて､ モンスターを殺さずに避けなければいけないということですね｡ 

13:15.920 --> 13:17.990
ベストに到達するためには､ 前に進まなければならないのです｡ 

13:17.990 --> 13:19.400
では､ その成果をご覧ください｡ 

13:19.400 --> 13:22.280
3対1ゴー

13:23.920 --> 13:24.460
わかりました｡ 

13:24.460 --> 13:27.850
だから､ まず撃たれて､ 前に進むんだ､ いいね？

13:27.940 --> 13:29.920
そして､ モンスターに殺されてしまった｡ 

13:29.920 --> 13:31.510
でも､ それでもかなりいい｡ 

13:31.510 --> 13:37.870
ベストに到達することで最高の報酬が得られるのだから､ ベストに向かって前進しなければならないことを理解していたんですね｡

13:38.080 --> 13:42.730
もちろん､ このゲームでベストに到達して勝利する映像を本当に見たいのであれば､

13:42.730 --> 13:48.790
基本的にはもっと多くのエポック数で目を訓練する必要がありますし､ 目の脳のチューニングや学習率のチューニングなど､

13:48.790 --> 13:55.090
他の種類の改善も行うかもしれません｡

13:55.090 --> 14:01.060
例えば､ AIが1000以上の報酬を達成したときの映像とか､ すごい映像を手に入れた人がいたら､

14:01.060 --> 14:03.820
いろんな選択肢がありますよね｡

14:03.820 --> 14:06.490
では､ Q&amp;Aで遠慮なく教えてください｡ 

14:06.490 --> 14:09.490
他の学生も手に入れたら超喜ぶと思います｡ 

14:09.850 --> 14:10.420
わかりました｡ 

14:10.420 --> 14:14.890
というわけで､ ディープな畳み込み学習モデルの実装はいかがだったでしょうか｡ 

14:14.890 --> 14:19.330
さて､ 次のパートに進みますが､ それは､ ブレイクアウトのゲームをプレイするために実装する､

14:19.330 --> 14:25.000
A3キーモデル､ さらに優れた､ より強力なモデルについてのものです｡

14:25.000 --> 14:26.800
では､ 次のパートでお会いしましょう｡ 

14:26.800 --> 14:28.180
そしてそれまで､ お楽しみに｡ 

14:28.180 --> 14:28.780
I.
