WEBVTT

00:00.210 --> 00:06.870
こんにちは､ 談話室の第3モジュール､ A3 C Asynchronous Act to critique agentへようこそ｡ 

00:06.870 --> 00:11.760
そして今､ 私は本当に最先端の機械学習へようこそと言うことができるのです｡ 

00:11.910 --> 00:16.500
まあ､ 当時は1年後､ 2年後に受講する人もいるかもしれないので､ こんなことを言っているんですけどね｡ 

00:16.500 --> 00:23.070
しかし､ 2017年にこんなことを言っている時点で､ 人工知能で最も強力なモデルの1つに取り組もうとしているのに､

00:23.070 --> 00:28.530
このモジュールだけが特別なわけではないことがもっとあるのです｡

00:28.560 --> 00:34.620
これから最も強力なAIモデルを扱うだけでなく このアルゴリズムの最も強力なバージョンを実装します

00:34.620 --> 00:42.180
それは最も最適化されたバージョンで a3cモデルの実装バージョンです 3Cアルゴリズムの心臓部があることは想像できますが

00:42.180 --> 00:50.730
それからモデル全体を最適化するために使えるツールがたくさんあります｡

00:50.730 --> 00:55.650
そして､ アルゴリズムの心臓部だけでなく､ その周りにあるすべてのツールを実装して､

00:55.650 --> 00:59.340
モデルを超強力なものにするのです｡

00:59.340 --> 01:01.380
そして､ なぜそうしようと思ったのか｡ 

01:01.380 --> 01:02.900
まあ､ それには2つの理由があります｡ 

01:02.910 --> 01:06.090
第一の理由は､ この講座が終盤に差し掛かっていることです｡ 

01:06.090 --> 01:11.550
本講座は､ ML､ DL､ AI・Zの3つの講座のうち､ 最もレベルの高い講座です｡ 

01:11.550 --> 01:14.160
これで､ 次の段階に進めると思いますね｡ 

01:14.160 --> 01:18.900
そして2つ目の理由は､ ブレイクアウトを解くのは､ 実は超難易度が高いからです｡ 

01:18.930 --> 01:24.210
プロモビデオでは､ ブレイクアウトを最初のモジュールにしたのは､ 最も簡単なチャレンジだと思ったからですが､

01:24.210 --> 01:26.490
全く違いました｡

01:26.490 --> 01:28.680
実はこれが一番難しいチャレンジだったんです｡ 

01:28.710 --> 01:37.560
これを簡単に説明すると､ まあ､ 『Doom』ではモンスターが大きいので発見しやすく､ その分､ 殺したり避けたりしやすいということです｡

01:37.560 --> 01:44.850
しかし､ ブレイクアウトでは､ この小さなボールもAIが検出しなければなりません｡ なぜなら､ AIはここでも目を持つことになるからです｡

01:44.850 --> 01:47.640
まだまだ深い強化学習をやっていきます｡ 

01:47.640 --> 01:55.740
だから､ 実は超難関で､ だからこそ､ 3つのCのうち最強のバージョンを実装するという選択肢はないんです｡

01:55.770 --> 01:58.980
さて､ なぜこれが最強のバージョンと言えるのか｡ 

01:58.980 --> 02:00.240
それは､ ある理由があるからです｡ 

02:00.240 --> 02:06.330
今､ 3つのCの最強バージョンを実装すると言っても､ これじゃないんです｡

02:06.330 --> 02:11.490
なぜこんなことを言うかというと､ 私たちがこれから実装しようとしていたバージョン､

02:11.490 --> 02:18.030
これは私たちがこれから行う非常に特別なことなのですが､ 実は誰かが実装したC言語のバージョンなのですが､

02:18.030 --> 02:24.300
今日機械学習で最も影響力のある人の一人が､ たまたまPyTorchの作者だったので修正したのです｡

02:24.600 --> 02:26.790
彼の名はアダム・パッカー｡ 

02:27.420 --> 02:33.120
GitHubのPyTorchのメインページで､ 下にスクロールしていくと､

02:33.120 --> 02:40.560
PyTorchのクリエイターとコントリビューターのチームが表示されるでしょう｡

02:40.560 --> 02:45.390
そして､ PyTorchは現在､ Adam Pascalによってメンテナンスされていることがここでわかります｡ 

02:45.420 --> 02:53.040
ブレイクアウトでうまく機能する3つのキーのバージョンは非常に少ないので､ 本当に感謝すべき人です｡

02:53.040 --> 02:58.020
また､ RCのコードの一つを修正し､ ブレイクアウトが完全に動作するようにしてくれました｡ 

02:58.170 --> 03:03.450
アダム・パスカルは､ PyTorchのメンテナンスだけでなく､ クリエイティブなPytorchの一人でもあるわけです｡ 

03:03.630 --> 03:07.980
そして､ 今日申し上げたように､ 彼は機械学習で最も影響力のある人物のトップ10に入っています｡ 

03:07.980 --> 03:14.670
ですから､ これから実装するバージョンは､ おそらく現在の3つのCの中で最も強力なバージョンであると確信が持てます｡

03:14.970 --> 03:17.490
で､ この実装は何なんだ？

03:17.490 --> 03:22.900
まあ､ もともとはIlia Stoichkovという開発者のものなんですけどね｡ 

03:22.920 --> 03:29.310
そしてご覧のように､ 彼はa3cのPyTorch実装を行いました｡ これはもともとブレイクアウトではうまく動作しなかったのですが､

03:29.310 --> 03:32.820
誰かがプルリクエストをしました｡

03:32.820 --> 03:40.950
このプルリクエストにアクセスすると､ クローズしたものに､ 卒業問題に対するよりクリーンなソリューションがあることがわかります｡

03:40.950 --> 03:43.560
そして､ このプールリクエストは誰からされたと思いますか？

03:43.770 --> 03:47.220
PyTorchの生みの親であるAdam Pascalから作られたものです｡ 

03:47.220 --> 03:54.480
そして､ 何日も何日も待つことなく､ BreakoutでHRCが非常によく機能するようになった問題を解決したのです｡

03:54.930 --> 04:01.470
したがって､ この実装に戻ると､ この最強の実装の4つの貢献者が見えてくるわけですが､

04:01.470 --> 04:04.410
その貢献者を紹介します｡

04:04.410 --> 04:06.450
だから､ すべての人に､ 本当にありがとうございます｡ 

04:06.450 --> 04:12.570
そして､ グラデーションの共有問題を解決してくれたAdam Paschkeには､ 大きな､ そして特別な感謝を捧げることができます｡ 

04:12.570 --> 04:18.030
彼はまずフォーク（コードのサブブランチ）を行い､ コードにあったこの問題を解決するために開発者にプルリクエストを行いました｡

04:18.030 --> 04:30.210
これは素晴らしい共有問題です｡ こうして彼はこの実装の主要貢献者となり､ 全体を完璧に機能させることができました｡

04:30.450 --> 04:34.290
そして､ 信じて欲しいのは､ 私は3Cモデルで多くの実験をしたことです｡ 

04:34.350 --> 04:36.240
実際に5つのモデルを導入してみました｡ 

04:36.240 --> 04:40.920
うまくいかないことに絶望すら覚えたので､ 球が大きいので画像の前処理がしやすいように､

04:40.920 --> 04:44.070
カーブでブレイクアウトを自作したのです｡

04:44.070 --> 04:53.220
その後､ オープンAPIに戻り､ HRCの実装を自作しましたが､ かなり高性能なコンピュータで動作させ､ トレーニングするのに時間がかかりました｡

04:53.220 --> 04:56.760
だから､ もっといい方法を探したいと思って､ このような形になりました｡ 

04:56.760 --> 04:59.820
この非常に強力なa3cモデルの実装｡ 

05:00.130 --> 05:04.090
その中でも､ PyTorchの作者は主要な貢献者の一人です｡ 

05:04.300 --> 05:13.800
このモジュールで行うのは､ RCの実装のための最高レベルのコードの実装です｡

05:13.810 --> 05:19.660
ですから､ 基本的にはこれらのファイルをすべて再実装し､ RCに直接関係する部分については､

05:19.660 --> 05:24.410
ほとんどファイルにこだわっていくことになります｡

05:24.430 --> 05:27.670
その他については､ 一行ずつコードを実装していきます｡ 

05:27.670 --> 05:29.220
コードだけ説明します｡ 

05:29.230 --> 05:33.460
だから､ 無理なく取り組めるはずです｡ 

05:33.580 --> 05:34.560
そうそう､ そうなんです｡ 

05:34.570 --> 05:36.040
かなり特殊なモジュールです｡ 

05:36.040 --> 05:45.550
私たちはAIの最新モデルに取り組んでいるだけでなく､ 私が話している時点では､ RCの最も強力なバージョンを実装していることに強い自信を持っています｡

05:45.820 --> 05:46.890
では､ やってみましょう｡ 

05:46.900 --> 05:50.230
Pythonに戻って､ このすべてを始めましょう｡ 

05:50.500 --> 05:56.770
始める前に､ このモジュールで行う最も簡単なこと､ 作業ディレクトリ・フォルダーの設定を行います｡

05:56.860 --> 05:59.580
では､ A-Zテンプレートフォルダに移動してみましょう｡ 

05:59.590 --> 06:03.700
モジュール3､ 一番難しいのを割って､ そこへ｡ 

06:03.700 --> 06:05.050
これが私たちのファイルのすべてです｡ 

06:05.050 --> 06:14.200
では､ どれがa3cに直接関係するのか､ だから､ どれを一行ずつ実行してエネルギーを集中させるのかを確認しましょう｡

06:14.590 --> 06:16.270
だから､ 実際には2つのファイルがある｡ 

06:16.270 --> 06:19.390
まず､ PIでモデル化されているのがこれ｡ 

06:19.390 --> 06:22.840
そこで､ 一番重要なので､ 一行ずつ再実装していきます｡ 

06:22.840 --> 06:25.330
そこで､ 3つのキーブレインを作るのです｡ 

06:25.330 --> 06:34.150
そして､ ここで理解すべき最も重要なことは､ 俳優と評論家の重みの更新が同じになる共有モデルを持つということです｡

06:34.150 --> 06:39.550
つまり､ RCの特別バージョン､ 重みの更新を共有したモデルの部分ですね｡

06:39.880 --> 06:47.140
そして､ もう1つの最も重要なファイルは､ 1行ずつ実装していくのですが､ PIが落ちた列車は､

06:47.140 --> 06:51.160
もちろんRCの頭脳を作った直後です｡

06:51.280 --> 06:55.870
さて､ 彼らを訓練しなければならないのですが､ この列車､ あのPIファイルで訓練するのです｡ 

06:55.870 --> 07:02.410
これはかなり長いコードですが､ これがa3cモデルの心臓部を含むもので､ 評論家の予測に関連する損失であるバリューロスと､

07:02.410 --> 07:14.590
俳優の予測に関連する最後の損失であるポリシーロスの2つを減らすために持つことになります｡

07:14.590 --> 07:15.700
だから､ これはかなり新しい｡ 

07:15.700 --> 07:23.050
でもね､ a3tでは､ 基本的に複数のエージェントが､ それぞれ自分の環境のコピーを持って作業しているからです｡

07:23.050 --> 07:31.270
しかし､ V関数の値を出力する完全に接続されたレイヤーもあり､ それは基本的にゲームで何が起こっているかという共通のビジョンを持っているのです｡

07:31.270 --> 07:34.060
だから､ これはかなりチャレンジングなことだと思います｡ 

07:34.060 --> 07:38.170
だから､ 体調を整え､ 残りのファイルのためにも｡ 

07:38.170 --> 07:43.210
まあ､ 詳しく説明するだけで､ あまり時間をかけることはないでしょう｡ 

07:43.210 --> 07:45.670
信じてください､ このためにエネルギーを蓄えておきたいのです｡ 

07:45.670 --> 07:47.020
これはもう､ たくさんでしょう｡ 

07:47.020 --> 07:55.330
つまり､ これらのファイルはPIに対するもので､ universeのおかげでジム環境が改善されたわけです｡ 

07:55.330 --> 08:00.880
つまり､ このファイルはuniverseでジム環境を改善するだけで､

08:00.880 --> 08:10.030
画像の前処理を最適化し､ 色強度や報酬強度など､ 環境のすべての値を正規化することができるようになるのです｡

08:10.030 --> 08:12.070
まあ､ 環境の価値観はすべてそうなんですけどね｡ 

08:12.070 --> 08:17.890
このファイルでは､ これらの値をすべて正規化し､ また画像の前処理を最適化するようにします｡ 

08:17.890 --> 08:24.610
そして､ ご覧の通り､ これはuniverse store agentがあるこのopenai GitHubのページから引用しています｡ 

08:24.610 --> 08:27.340
ですから､ あまり時間をかけることはありません｡ 

08:27.340 --> 08:28.720
実際にここでストップします｡ 

08:28.720 --> 08:36.220
ユニバースでスポーツジムの環境を改善し､ 画像の最適な前処理を行うことを理解すればいいのです｡

08:36.220 --> 08:39.520
あとは､ 特に3つのCはそれほど重要ではありません｡ 

08:40.120 --> 08:45.040
そして､ 全体を実行するコードであるmain APIがあります｡ 

08:45.040 --> 08:50.140
つまり､ 全体を動かし､ 脳を作り､ 脳を鍛え､ 映像を出力するコードを知っているわけです｡

08:50.140 --> 08:53.680
そして､ ここにあるすべてのコードを実行することになるからです｡ 

08:54.070 --> 08:56.710
そこで､ その時の様子を見たのがモデルです｡ 

08:56.710 --> 09:00.130
私の最適πは､ 特別なオプティマイザーです｡ 

09:00.130 --> 09:06.070
これは基本的にアトム・オプティマイザですが､ 今回実装する共有モデルに適応させます｡ 

09:06.070 --> 09:08.860
そこで､ このコードを1回のチュートリアルですべて説明します｡ 

09:09.040 --> 09:11.380
そして､ πをテストするのです｡ 

09:11.410 --> 09:12.790
実はこれが最後の1枚なんです｡ 

09:12.790 --> 09:17.290
つまり､ test the piは基本的にテストエージェントを実装するためのファイルです｡ 

09:17.290 --> 09:22.270
つまり､ それはモデルを更新せずにブレイクアウトを再生するエージェントです｡ 

09:22.270 --> 09:24.670
だから､ トレーニングとはまったく関係ないんです｡ 

09:24.670 --> 09:27.370
そして､ このコードの詳細についても説明します｡ 

09:27.370 --> 09:33.550
さらに､ 良いニュースは､ 2つのコードがあることです｡ 1つのコードは､ チュートリアルで実装したコードになりますが､

09:33.550 --> 09:36.010
コメントはありません｡

09:36.010 --> 09:41.860
そして､ コードの1つは､ すべてのコードのコマンドが入ったコードフォルダの1つです｡ この6つのファイルは､

09:41.860 --> 09:47.800
すべてうまくコマンド化されているので､ チュートリアルで何か見逃したとしても､ コードのコマンドを見て､

09:47.800 --> 09:50.950
何が起こっているかを理解することができます｡

09:50.950 --> 09:51.970
そうそう､ そうなんです｡ 

09:51.970 --> 09:54.340
ぜひ､ ワクワクしながら実装してほしいですね｡ 

09:54.340 --> 09:59.530
今､ 本当に頂上にいるのか､ 頂上直下なのか､ まずはこれを理解する必要がありますから｡

10:00.010 --> 10:02.860
酸素をしっかり吸い込むために､ そこまでしているんですね｡ 

10:02.860 --> 10:05.410
そして､ この超エキサイティングな旅に出るのです｡ 

10:05.470 --> 10:06.810
それまではお楽しみに｡ 

10:06.820 --> 10:07.360
I.
