WEBVTT

00:00.150 --> 00:07.470
こんにちは､ 私の友人たち｡ そして､ 深い畳み込み学習モデルの結果の視覚化に関するこの新しいセクションへようこそ｡

00:07.710 --> 00:13.530
まず､ 深層畳み込みニューラルネットワークの実装をすべてやり遂げたことに､

00:13.530 --> 00:15.830
心からおめでとうと言いたい｡

00:15.840 --> 00:22.560
そしていよいよ､ 作ったAIの結果を可視化する楽しいパートに突入です｡ 

00:22.680 --> 00:27.630
そして､ 前回のチュートリアル､ つまり実装の最後のチュートリアルの最後に言ったように､

00:27.630 --> 00:29.940
サプライズがあると言ったんです｡

00:29.940 --> 00:32.610
で､ まあ､ その驚きはまさにこれ｡ 

00:32.610 --> 00:36.090
その結果をGoogle CoLabで可視化するのです｡ 

00:36.090 --> 00:38.110
それがなぜ､ 良いサプライズになるのか？

00:38.130 --> 00:44.910
それは､ 基本的にコードを実行し､ コードを実行し､ 結果を可視化することに全く問題がないため､

00:44.910 --> 00:46.890
良い驚きです｡

00:47.040 --> 00:49.620
確かに､ これはコースの新しい機能です｡ 

00:49.920 --> 00:56.430
これ以前は､ 実際にPythonでSpider上のコードを動かしていたのですが､ パッケージやpytorch､

00:56.430 --> 01:02.730
gymの依存関係､ いろいろな依存関係をすべてインストールするのは非常に大変でした｡

01:02.850 --> 01:08.460
実際に多くの学生が､ すべてをインストールするのに膨大な問題があり､ 最後にはほとんどの学生が､ コード全体をうまく動かすことができず､

01:08.460 --> 01:12.480
ほとんどの場合､ 最終的な結果を見ることができなかったのです｡

01:12.480 --> 01:15.030
だから､ 絶対にこれを直したかったんです｡ 

01:15.030 --> 01:19.830
そして､ 私が考え出した最良の解決策は､ コード全体を含めることでした｡ 

01:19.830 --> 01:24.180
つまり､ このパートで実装したものと全く同じコードが出来上がるわけです｡ 

01:24.180 --> 01:30.300
しかし､ 私はGoogle CoLabノートブックにコード全体を含めました｡ このコードを実行し､ 結果を視覚化するために必要なことは､

01:30.300 --> 01:35.160
ここにある再生ボタンをクリックすることだけです｡

01:35.160 --> 01:40.200
Google CoLabの良さは､ ほとんどのライブラリやパッケージがすでにインストールされていることなので､

01:40.200 --> 01:42.120
やることはそれだけです｡

01:42.120 --> 01:47.400
例えば､ TensorFlowは既にインストールされていますし､ PyTorchはtorchモジュール､ 関数､

01:47.400 --> 01:51.690
クラスが全てインストールされていますので､ インストールする必要はありません｡

01:51.690 --> 01:56.970
しかし､ すべてがうまく接続されていることを確認するために､ まだいくつかの小さな依存関係をインストールする必要があります｡

01:56.970 --> 02:04.620
しかし､ 自動運転車のようにターミナルやAnacondaプロンプトからインストールする必要はないでしょう｡

02:04.620 --> 02:10.830
この最初のセルで､ この再生ボタンをクリックして､ 知恵のためのシステム依存をインストールする必要があります｡

02:11.070 --> 02:13.770
さて､ 皆さんの中には､ こんなことを思っている人もいるかもしれませんね｡ 

02:13.770 --> 02:16.700
なぜ､ 自動運転車にも同じことをしなかったのでしょうか？

02:16.710 --> 02:22.950
しかし､ 残念ながら､ 自動運転車のモジュールでは､ ユーザーとのインタラクションがあったため､ 同じことはできませんでした｡

02:22.950 --> 02:28.230
地図上に感覚をプロットして､ 道路を設計したり､ 障害物を置いたりするわけですが､

02:28.230 --> 02:35.730
残念ながら､ Google CoLabには､ 地図とユーザーとのインタラクションを可能にする機能がまだありません｡

02:35.730 --> 02:38.340
だから､ 自動運転車にはできなかったんです｡ 

02:38.340 --> 02:46.860
それは申し訳ないのですが､ そのために､ 私の本の「クラッシュコース」の全章に､ 自動運転車に関するすべての説明が書かれているものをお渡ししたのです｡

02:46.860 --> 02:49.440
とにかく全部ちゃんとインストールしてほしい｡ 

02:49.440 --> 02:53.940
Doomに比べるとインストールするものが少なかったので､ 自動運転車はすべてうまくいったと思います｡

02:53.940 --> 02:55.530
しかし､ ここでドゥームのために｡ 

02:55.530 --> 02:56.580
これでカバーできる｡ 

02:56.580 --> 03:00.750
コードを実行し､ 結果を可視化するのに苦労することはないでしょう｡ 

03:00.750 --> 03:01.890
だから､ それが驚きなんです｡ 

03:01.890 --> 03:03.030
気に入っていただけたら幸いです｡ 

03:03.030 --> 03:11.610
では､ この実装の全体像をお見せしましょう｡ このパート2で実装したものとまったく同じコードであることがおわかりいただけると思います｡

03:11.610 --> 03:14.610
ただ､ 3つのコードを合体させただけです｡ 

03:14.610 --> 03:20.370
これは､ フォルダ内にあったコードで､ 画像の前処理（pファイル）､ 体験の再生（pファイル）､

03:20.370 --> 03:25.980
そしてAI（pファイル）の2つのパートから構成されています（パート1はAIを構築し､

03:25.980 --> 03:28.230
パート2はAIを訓練する）｡

03:28.260 --> 03:35.460
さて､ 私が単純にやったことは､ まず画像の前処理をpファイルにして､ 3つを統合したことです｡

03:35.460 --> 03:37.020
それはワークブックでお見せします｡ 

03:37.020 --> 03:39.090
次に2つ目は､ 体験です｡ 

03:39.090 --> 03:42.020
Pファイルを再生し､ 3つ目はAIを再生する｡ 

03:42.050 --> 03:46.290
そこには､ Pがちょうど1つ下に順番に落ちていた｡ 

03:46.920 --> 03:48.240
そこで､ これをあなたにお見せします｡ 

03:48.240 --> 03:53.670
そして､ このコード全体の中で2つか3つだけ変更する必要がありました｡ その変更点を正確にお見せしますので､

03:53.670 --> 03:56.700
その違いを確実にキャッチしてください｡

03:56.700 --> 04:02.010
基本的に､ そのファイルでは､ すべてが同じであり､ そのファイルでも､ すべてが同じである｡ 

04:02.010 --> 04:04.920
しかし､ そのファイルには全く変化がありません｡ 

04:04.920 --> 04:13.410
さて､ ここではOpenaiとZoomのパッケージをインポートする際に､ まあPパッケージのdoomのラッパーアクションスペースを使って離散にインポートしているわけではありません｡

04:13.410 --> 04:14.940
もう使っていないんです｡ 

04:14.940 --> 04:16.560
他のものを使うから､ 見ていてね｡ 

04:16.560 --> 04:25.230
また､ ここのフレームの寸法を80×80から256×256に変更しました｡ 

04:25.230 --> 04:30.960
そうすれば､ より大きな動画を見ることができるので､ 確かに良い映像化結果を得ることができます｡ 

04:31.260 --> 04:32.460
それを変えただけです｡ 

04:32.460 --> 04:32.940
見せてあげるよ｡ 

04:32.940 --> 04:39.420
さて､ 画像処理からですが､ 確かに､ 先ほどお話したように､ 3つのファイルを合成しただけですからね｡

04:39.420 --> 04:43.350
そこで､ まずはp yを押して､ indeedの画像を表示します｡ 

04:43.350 --> 04:45.870
そして､ ご覧の通り､ これは全く同じです｡ 

04:45.870 --> 04:49.470
まず､ ここにあるのと全く同じライブラリをインポートすることから始めます｡ 

04:49.470 --> 04:56.580
そして､ initメソッドとobservationメソッドからなるプリプロセス画像クラスで画像をプリプロセスします｡

04:56.580 --> 04:59.670
そして､ ご覧の通り､ これは全く同じ処理前の画像です｡ 

05:00.130 --> 05:02.470
その中で､ 方法と観察方法｡ 

05:02.500 --> 05:07.480
では､ 次に体験リプレイに移りますが､ ここでもまったく同じことが言えます｡ 

05:07.480 --> 05:11.350
実際､ 私たちはここで初めて2つのライブラリを採用しましたが､ いずれも名前ではありません｡ 

05:11.370 --> 05:13.060
右をタップしてください｡ 

05:13.060 --> 05:17.260
そして､ ここと全く同じように1つのステップを定義します｡ 

05:17.260 --> 05:24.280
そして､ ワークブックと全く同じようにStep Progressクラスで数歩､

05:24.280 --> 05:26.770
数十歩の進捗を行います｡

05:26.770 --> 05:27.130
そうですね｡ 

05:27.130 --> 05:29.200
ここにコピーペーストをしただけです｡ 

05:29.200 --> 05:31.300
initの方法は全く同じです｡ 

05:31.300 --> 05:34.780
方法であり､ 報酬ステップの方法です｡ 

05:34.780 --> 05:40.540
もちろん､ リプレイメモリクラスで経験値リプレイを実装しています｡ 

05:40.540 --> 05:44.140
そして､ ご覧の通り､ Googleのコラボでも全く同じものを用意しています｡ 

05:44.140 --> 05:48.660
さらに､ テキストセルを追加したことで､ 構造をよりよく理解できるかもしれません｡ 

05:48.670 --> 05:52.720
だから､ このワークブックで視覚化すると､ もっと素敵になりますよ｡ 

05:52.720 --> 05:53.140
わかりました｡ 

05:53.140 --> 05:58.840
そこで､ メモリクラスのinitメソッドのサンプルバッチ実行ステップを再生すると､ 基本的に全く同じコードになります｡ 

05:58.840 --> 05:59.500
わかりました｡ 

05:59.500 --> 06:06.340
そして､ 3つ目のファイルAPI､ freedom APIに移ります｡ このAPIは､ 2つのパート､ パート1､ AIの構築､ パート2､

06:06.340 --> 06:09.190
APIのトレーニングが含まれています｡

06:09.220 --> 06:12.670
では､ このワークブックに全く同じものがあることをお見せしましょう｡ 

06:12.670 --> 06:17.950
そこで､ Freedom APIでは､ まず､ まったく同じライブラリをインポートします｡ 

06:17.950 --> 06:19.210
そうですね､ ご覧の通りです｡ 

06:19.210 --> 06:25.030
では､ ここで､ OpenaiとDhoomのパッケージをインポートする際に､ すでに強調した違いです｡ 

06:25.030 --> 06:31.960
gemのラッパーをインポートして､ ラッパーを飛ばしてパックしてスクリプトにインポートするのではなく､

06:31.960 --> 06:41.770
同じgemをインポートして､ 新しいdoomの環境であるdoomed gemをインポートすればいいんです｡

06:41.770 --> 06:44.980
そして最後に､ ジェムライブラリーによるラッピングです｡ 

06:44.980 --> 06:45.310
わかりました｡ 

06:45.310 --> 06:51.220
この差分だけで､ Google CoLabでもPythonでも動くようになります｡

06:51.220 --> 06:55.960
そして､ ここでは､ もちろん､ Google崩壊の中にそのコードを含める必要はありません｡ なぜなら､ ここでは､

06:55.960 --> 06:59.410
他のファイルが分離されているので､ ここでインポートするからです｡

06:59.410 --> 07:04.360
そして､ Google CoLab上で3つのファイルをマージしたので､ まあ､ このインポートは必要ないですね｡ 

07:04.360 --> 07:13.150
ここで､ ポート1に直接移動して､ APIを構築します｡ ここでは､ 先ほどお話したように､ 寸法以外はまったく同じコードになっています｡

07:13.150 --> 07:13.750
そうですね｡ 

07:13.750 --> 07:20.950
このポートワン､ ポートワンビルIIを見ると､ まずCとクラスで脳を作るところから始まります｡ 

07:20.950 --> 07:25.870
そして､ ご覧の通り､ 入力フレームの寸法以外は全く同じコードになっています｡ このコードは､

07:25.870 --> 07:29.110
80×80のコードを実装したときのものです｡

07:29.110 --> 07:36.940
しかし､ Google CoLabではそれを256×256に変更し､ より良いフレームを表示できるようにしたため､ より良い動画を見ることができるようになりましたが､

07:36.940 --> 07:40.450
それ以外は全く同じです｡

07:40.450 --> 07:46.450
ここでは､ CNNクラスで脳を作り､ ソフトマックスバディクラスでバディを作ることにします｡ 

07:46.450 --> 07:49.000
つまり､ ここにあるものとまったく同じなのです｡ 

07:49.000 --> 07:58.090
そして最後に､ 脳と体を含むクラスと､ 動作を実行するための何らかのメソッドで全体をまとめます｡

07:58.090 --> 07:59.980
そうですね､ まったく同じです｡ 

08:00.040 --> 08:05.350
体の中にある脳から構成されるクラスで､ その後､ 同じ方法でアクションを実行します｡ 

08:05.350 --> 08:05.980
わかりました｡ 

08:05.980 --> 08:07.120
だから､ まったく同じです｡ 

08:07.120 --> 08:09.670
入力枠の寸法が変わっただけです｡ 

08:09.670 --> 08:13.690
そして､ 第2部も全く同じ内容で進めていきましょう｡ 

08:13.690 --> 08:16.630
まず､ ドゥーム環境を整える｡ 

08:16.630 --> 08:18.610
ここで､ その2もお見せしましょう｡ 

08:18.880 --> 08:27.940
我々は､ 最初にdoom環境を取得し､ ここでは､ もはや環境をインポートするためにパケットを使用しないので､ 代わりにこのdoomを覚えています｡

08:27.940 --> 08:31.480
まあ､ そのコードで変わったのは､ 確かにここの部分だけなんですけどね｡ 

08:31.480 --> 08:35.680
確かに知恵の廊下はありますが､ これとまったく同じ環境です｡ 

08:35.860 --> 08:36.280
わかりました｡ 

08:36.280 --> 08:40.600
そして､ もちろん､ この新しい次元を変えて､ ここに大きな動画ができるようにします｡ 

08:40.600 --> 08:46.240
つまり､ もはや80×80ではなく､ 今度は256×256なのです｡ 

08:46.240 --> 08:52.750
そして､ 同じように「運命」を手に入れ､ アクションの数は7つになります｡

08:53.230 --> 08:58.840
そして､ 脳のオブジェクト､ つまりCNNを作り､ 次に体のオブジェクト､ ソフトマックスボディを作り､

08:58.870 --> 09:05.470
脳と体からなるAI全体を､ 一緒に実装したものと全く同じように作り上げます｡

09:05.710 --> 09:06.100
わかりました｡ 

09:06.100 --> 09:07.870
そして､ 経験値リプレイを設定しました｡ 

09:07.870 --> 09:09.820
ここも全く同じなんですね｡ 

09:09.820 --> 09:14.080
そして､ まだ全く同じように適格性追跡を実施します｡ 

09:14.080 --> 09:15.550
そして､ どうするのか？

09:15.550 --> 09:19.840
まあ､ 100歩譲って移動平均は作るんだけどね｡ 

09:19.840 --> 09:20.320
こちらも同じです｡ 

09:20.320 --> 09:22.030
つまり､ まったく同じコードなんですね｡ 

09:22.030 --> 09:28.000
基本的にはフレームの寸法と環境の取り込み方だけが変わりました｡ 

09:28.510 --> 09:33.160
そして最後に､ まったく同じコードでAIを学習させます｡ 

09:33.730 --> 09:41.260
ここまでは､ ダウンロードしたときにフォルダにあったコード全体､ つまりコード内のデータセットです｡

09:41.560 --> 09:45.250
そして､ 基本的には一緒に実装したコード全体も持っています｡ 

09:45.340 --> 09:53.560
しかし､ Google Labで可視化するために､ このコードを追加しましたが､ このCoLabノートブックにのみ､

09:53.560 --> 09:59.530
また､ 可視化にのみ特化したコードです｡

09:59.740 --> 10:03.490
そのA． I. を､ ドゥーム環境でのアクションでお楽しみください｡ 

10:03.490 --> 10:08.350
ここにあるすべてのコードを理解することに悩む必要はありません｡ なぜなら､ ドゥーム環境でプレイするAIを構築し､

10:08.350 --> 10:13.400
訓練したいときに､ 人生で一度だけ見ることになるからです｡

10:13.420 --> 10:19.750
どういうことかというと､ AIを構築して学習させる際に､ 他のアプリケーションでこのコードを使う必要がなくなるということです｡

10:19.780 --> 10:21.960
だから､ このコードについてはあまり気にしないでください｡ 

10:21.970 --> 10:26.010
Google CoLabで動作させるために追加しただけなのですが､ どうでしょう｡ 

10:26.260 --> 10:28.060
まず､ 当然のことながら､ ライブラリをインポートします｡ 

10:28.060 --> 10:34.030
そして､ アクションの数がすぐにわかるように､ 実用的なコードを追加し､

10:34.030 --> 10:39.310
環境のフレームを表示するようにしました｡

10:39.310 --> 10:46.870
そして､ なぜそれを付け加えたかというと､ 実はドゥーム環境はたくさんあるので､ 他のドゥーム環境での遊び方も紹介しようと思っているからです｡

10:46.870 --> 10:54.070
そこで､ 知恵の廊下を､ ここにある他の環境の名前に置き換えるだけでいいのです｡

10:54.070 --> 10:57.400
このチュートリアルの直前まで､ そのページのリンクを貼っておきますね｡ 

10:57.430 --> 11:01.540
しかし､ ここではご覧のように､ たくさんのドゥーム環境を用意して､ 遊んでもらうことができるのです｡ 

11:01.540 --> 11:06.250
知恵の基礎､ 知恵の回廊､ これは今遊ぼうとしているものですが､ 知恵の防衛センター､

11:06.250 --> 11:11.800
その他､ 室内迷路もありますし､ ここの指示に従うだけでいいんです｡

11:11.800 --> 11:15.760
このフォルダの中に､ このinitメソッドですべて見つかります｡ 

11:15.760 --> 11:17.740
ここで名前を探すだけでいいんです｡ 

11:17.740 --> 11:20.710
ウィズダム・ベーシック､ ウィズダム・コリドー､ ウィズダム・ディフェンス・センター｡ 

11:20.710 --> 11:22.600
しかも､ たくさん､ たくさん持っているじゃないですか｡ 

11:22.600 --> 11:26.020
ですから､ 他のドゥーム環境でも遊びたい方は､ ご自由にどうぞ｡ 

11:26.020 --> 11:29.830
環境名を変更するだけです｡ 

11:29.830 --> 11:34.150
このワークブックでドゥームコリドーを見るたびに､ それを名前に置き換えるだけでいいのです｡ 

11:34.150 --> 11:39.580
そして､ このコードとこのコードのおかげで､ まあ､ アクションの数が何であるか､ 入力されたシェイプの寸法､

11:39.580 --> 11:45.790
また､ 環境がどのように見えるかを確認するためのフレームの表示もすぐに分かるようになります｡

11:45.790 --> 11:47.410
だから､ これはかなり実用的でしょう｡ 

11:47.530 --> 11:50.920
そして､ この可視化用のヘルパー関数を作っただけです｡ 

11:50.920 --> 11:55.540
そして､ AIを学習させた後に､ もちろん1エピソードで走らせています｡ 

11:55.540 --> 11:57.760
そこで､ まずはここでトレーニングします｡ 

11:57.760 --> 12:02.460
ご覧のように､ エポック数を100から20に変更したことをお伝えするのを忘れていましたが､

12:02.460 --> 12:06.730
これは単にフレームの寸法を大きくしたためです｡

12:06.730 --> 12:12.820
そして､ フレームにディメンションを増やすので､ まあ､ 当然トレーニングは難しくなるので､ もっと時間がかかるでしょう｡

12:12.820 --> 12:17.700
そのため､ 100エポックの数を20OCまで減らしました｡ 

12:17.740 --> 12:20.950
そして､ それで心配しないでください､ 私たちはすでによく､ 肯定的な報酬を得るでしょう｡ 

12:20.950 --> 12:26.680
しかし､ もちろん最終的にパフォーマンスを向上させ､ 結果を改善したいのであれば､ そのエポック数を自由に増やすことができます｡

12:26.680 --> 12:32.350
さらに良い結果が得られますが､ すでに20エポックと､ 学習にかなりの時間がかかっていることがわかります｡

12:33.160 --> 12:35.380
さてと､ どこまで話したかな？

12:35.380 --> 12:37.540
そう､ それは視覚化のための機能を助けることです｡ 

12:37.540 --> 12:41.560
そして､ AIを学習させた後に､ もちろん1つのエピソードで動かしています｡ 

12:41.560 --> 12:59.920
そして最後に､ このコードのセルは､ この1つのエピソードにおけるゲームプレイのビデオを出力します｡

13:00.670 --> 13:01.300
わかりました｡ 

13:01.300 --> 13:03.130
さて､ 次は実行です｡ 

13:03.130 --> 13:06.370
本当にゆったりと椅子に座れる時間｡ 

13:06.370 --> 13:08.470
おいしいコーヒーや紅茶を飲んでほしい｡ 

13:08.480 --> 13:13.990
あとは､ 各セルにある異なる再生ボタンを押して､ 最終的な結果を実行するだけです｡ 

13:14.000 --> 13:14.920
では､ こうしてみましょう｡ 

13:14.920 --> 13:17.420
しかし､ その前に､ これはとても重要なことなのです｡ 

13:17.420 --> 13:18.460
そして､ Google CoLab｡ 

13:18.460 --> 13:24.760
つまり､ これは全員がアクセスできるGoogle CoLabのワークブックのリンクなので､ 当然ですが､ 誰かがうまく修正すると､

13:24.760 --> 13:30.100
他の人にも修正内容が見えてしまうので､ 何も修正することができません｡

13:30.100 --> 13:34.750
このワークブックは読み込み専用なので､ 環境名を変更したい､ エポック数を増やしたい､

13:34.750 --> 13:38.920
AIをチューニングしたいなど､ 何らかの変更を加えるには､

13:38.920 --> 13:47.170
このワークブックのコピーを自分のGoogle Driveに作成する必要があります｡

13:47.170 --> 13:52.930
そのためには､ Googleドライブを持つために､ Gmailアドレスが必要になるわけです｡

13:53.500 --> 13:55.450
だから､ 必ず持っていてください｡ 

13:55.450 --> 14:01.150
そして､ そうなったら､ まあ､ ここのファイルをクリックして､ コピーを保存してドライブすればいいわけです｡ 

14:01.150 --> 14:08.620
そして､ このワークブックのコピーが自分のGoogle Driveに作成され､ その上でいくつかの修正を行うことができるようになります｡

14:08.620 --> 14:09.310
わかりました｡ 

14:09.310 --> 14:12.910
そして今､ この実行の始まりです｡ 

14:12.910 --> 14:18.640
あとは､ すべてのセルを再生して､ どんどん最終的な結果に近づけていくわけです｡
