WEBVTT

00:00.930 --> 00:03.840
こんにちは､ 人工知能のコースにようこそ｡ 

00:03.840 --> 00:09.780
今日は83 Cの世界への旅の続きです｡ Cの非同期側について話しているので､ 私たちの略語である同期の利点､

00:09.780 --> 00:14.190
アクティブ・クリティックがあります｡

00:14.190 --> 00:18.900
そして今日は､ ここにあるシンクロナスとは何の略なのか､ その意味するところを探ってみたいと思います｡ 

00:18.900 --> 00:20.940
そして､ 一歩さかのぼってみましょう｡ 

00:20.940 --> 00:23.730
では､ この講座のスタートは何だったのかを見てみましょう｡ 

00:23.730 --> 00:28.890
私たちは強化学習と､ エージェントがある状態にあるということがどういうことなのか､ ということから始めました｡ 

00:29.160 --> 00:34.260
その状態を観察し､ ある決定を下し､ その状態で行動を起こす｡ 

00:34.260 --> 00:36.660
そして､ 状態を変化させる｡ 

00:36.660 --> 00:38.910
だから､ 新しい状態になり､ しかも報酬を得ることができるのです｡ 

00:38.910 --> 00:45.570
つまり､ その行動を取ることで報酬を得るか､ あるいはペナルティにもなりうる何らかの報酬を得るのです｡ 

00:45.840 --> 00:47.670
そして､ 新しい州で終わるのです｡ 

00:47.670 --> 00:52.350
そして､ それをもとに今度はまた別の行動を起こし､ 報酬を得て新しい状態で終わり､ また次の行動を起こす､

00:52.350 --> 00:53.910
ということを繰り返しています｡

00:54.390 --> 00:59.580
これが強化学習の基本です｡ 

00:59.580 --> 01:05.820
そして､ それを学習､ 深層学習､ 深層畳み込み学習で使ってきたのです｡ 

01:05.820 --> 01:10.560
そして､ そのおかげで､ 我々のエージェントは徐々に複雑化していく環境に打ち勝つことができるようになったのです｡ 

01:10.560 --> 01:16.340
しかし､ 今回はさらにその上を行くコンセプトをご紹介します｡ 

01:16.350 --> 01:23.130
A3Cが導入しているシンクロナス要素とは､ 1人のエージェントが環境を攻撃するのではなく､

01:23.130 --> 01:31.080
3人のエージェント､ あるいは何人かのエージェントがいる､ というものです｡

01:31.080 --> 01:34.110
つまり､ 複数のエージェントが同じ環境を攻撃しているわけです｡ 

01:34.110 --> 01:39.300
ここで重要なのは､ 同期と呼ばれるのは､ 初期化が異なるからだということです｡ 

01:39.300 --> 01:40.860
つまり､ スタート地点が違うのです｡ 

01:40.860 --> 01:47.790
例えば､ 実用上もわかると思いますが､ ランダムシードを設定し､ それをエージェントごとに異なるように設定するわけです｡

01:47.790 --> 01:55.710
そうすると､ スタート地点が違うので､ まず環境をいろいろと調べて､ いろいろと探検していくことになります｡

01:55.710 --> 01:58.530
そして､ 次のイテレーションでは､ また､ さまざまな方法で探索することになります｡ 

01:58.530 --> 02:03.540
例えば､ 3人のエージェントがいれば､ 1人のエージェントが環境を探索し､

02:03.540 --> 02:12.330
その環境での操作方法を理解する代わりに､ 突然3倍の経験値を得ることができるのです｡

02:12.330 --> 02:17.670
それを3人でも何人でも経験して､ この経験を積んでいるわけです｡ 

02:17.670 --> 02:21.690
そしてそこで､ この大きな経験を通じて､ 一人ひとりが学んでいくように｡ 

02:21.690 --> 02:31.260
また､ 単に経験の幅を広げるだけでなく､ 一人のエージェントが地域の最大公約数にはまり込む可能性を減らすことができるのです｡

02:31.260 --> 02:37.470
例えば､ あるエージェントが環境に打ち勝つ方法を見つけたとして､ それが最も最適とは言えない場合､ その見つけた解決策から左や右に逸脱すると､

02:37.470 --> 02:43.380
常により多くのペナルティを受けることになるからです｡

02:43.380 --> 02:45.450
その局所的な最大値に引っかかってしまうかもしれません｡ 

02:45.460 --> 02:49.440
それが最適解だと思い込んで､ 実際にはそうでないところをそうし続けるかもしれない｡

02:49.440 --> 02:59.640
さて､ 複数のエージェントがその同じ局所最大値にはまり込む可能性は､ エージェントの数によって減少したり､ 減ったりします｡

02:59.640 --> 03:07.920
つまり､ あるエージェントがある局所的な最大値にはまる確率は高いかもしれないが､ あるいはある値かもしれないのである｡

03:07.920 --> 03:12.600
しかし､ 3つもあると､ 3つともその局所最大値にはまり込む確率はずっと低くなります｡

03:12.690 --> 03:17.850
そして､ お互いの経験を共有していれば､ お互いに助け合うことができるのです｡ 

03:17.850 --> 03:20.970
ですから､ 例えばそのうちの1つが引っかかると､ 局所的な最大値で止まってしまうんです｡ 

03:20.970 --> 03:24.960
ただ単純に､ あれが一番いい､ あれが一番いい解決策だとずっと思っていて､ 他のエージェントと相互作用している限り､

03:24.960 --> 03:28.020
それをうまくやり続けている｡

03:28.020 --> 03:32.670
つまり､ この男がローカル・マックスに陥ったとしましょう｡ 私たちがアルゴリズム全体を構築する方法を通じて､

03:32.670 --> 03:37.530
他のエージェントと相互作用している限り､ アルゴリズムを通じて､ 他のエージェントが彼を助けてくれるのです｡

03:37.530 --> 03:44.550
このような知識を与えることで､ 「おい､ お前はこれを探求するべきだ」「彼はそこから抜け出す可能性が高い」ということを実際に知ることができるのです｡

03:44.550 --> 03:49.740
また､ 全体的に見れば､ 「これは最高の選択肢だが､ 他のエージェントはもっといい選択肢を見たことがあり､

03:49.740 --> 03:54.990
その方がよさそうだから調査を続けるべきだ」と環境は認識します｡

03:54.990 --> 04:02.430
このように､ 非同期型エージェントの利点について､ ざっくりとした直感的な理解で､ 簡単に説明することができます｡

04:02.430 --> 04:05.910
まず､ あなたは､ 好きなように､ より多くの経験から選択し､ 学ぶことができます｡ 

04:06.000 --> 04:08.070
より早く解答にたどり着けるはずです｡ 

04:08.130 --> 04:16.410
そして一般的には､ ある局所的な最大値にはまる可能性が低くなると言われています｡ 

04:16.410 --> 04:20.670
では､ これまで作ったこのモデルで､ どのように展開していくかを見ていきましょう｡ 

04:20.670 --> 04:24.930
ということで､ 思い出していただくと､ ここまでがエクストラクリティックを通じて得たものです｡ 

04:24.930 --> 04:26.670
そして､ ここがすべてのつながりのようなものです｡ 

04:26.670 --> 04:31.230
これは､ 前回のチュートリアルで紹介したとおりで､ 深い畳み込みQ学習でもすでにあったものなので､

04:31.230 --> 04:35.100
今回は余計にそう名付けただけです｡

04:35.460 --> 04:38.670
しかし､ 今回､ クリテックを導入しましたが､ 今のところ､ あまり意味がないですね｡ 

04:38.670 --> 04:43.770
この批評があって､ 同じニューラルネットワーク､ この同じアプローチで国家の価値を測ったり､

04:43.770 --> 04:48.060
予測することに何の意味があるのでしょうか｡

04:48.330 --> 04:51.870
でも､ これからが本番です｡ 

04:52.260 --> 04:56.820
これからどうするかというと､ 複数のエージェントがいるので､ これを複製するのです｡ 

04:56.820 --> 04:58.320
だから､ 複数のエージェントで､ これは｡ 

04:58.320 --> 04:59.310
こんな感じでしょうか｡ 

04:59.310 --> 04:59.910
だから

05:00.530 --> 05:05.120
最初のイメージは､ 今､ 私たちはこの3つを手に入れたということです｡ 

05:05.120 --> 05:09.170
さて､ 「お互いの経験を共有する」と言ったことを思い出してください｡ 

05:09.170 --> 05:11.000
だから､ これは実は正しいんです｡ 

05:11.000 --> 05:12.200
今は､ みんな独立しているんです｡ 

05:12.200 --> 05:15.350
ゲームで遊んでいる人､ ゲームで遊んでいる人､ ゲームで遊んでいる人がいますよね｡ 

05:15.350 --> 05:19.400
まるで､ 3台のパソコンでエージェントを起動するような感じです｡ 

05:19.400 --> 05:21.740
3種類のコンピュータを横に並べて､ 起動させるんです｡ 

05:21.740 --> 05:22.970
そして､ その､ 素晴らしいことです｡ 

05:22.970 --> 05:27.260
そうですね､ 確かに......経験値が上がりますね｡ 

05:27.290 --> 05:29.750
特に初期化が異なれば､ より多くのバリエーションを得ることができます｡ 

05:29.750 --> 05:32.840
ですから､ ここからはすべて初期値､ 常に異なる初期化であると仮定します｡ 

05:32.990 --> 05:37.820
ここに同じ絵があっても､ 実は初期化が違うことを知ることになる｡ 

05:37.820 --> 05:43.220
だから､ このゲームから同一のトレーニング､ 同一の学習をするようなことはありえない｡ 

05:43.670 --> 05:47.540
3台のコンピュータを並べて起動させたとしても､

05:47.540 --> 05:58.490
3人のエージェントがプレイすることになるので､ より多くの経験を積むことができますし､ 可能なソリューションの種類も多くなります｡

05:58.490 --> 06:00.020
そうなんですね｡ 

06:00.020 --> 06:02.540
しかし､ 問題は､ 彼らがその経験を私たちと共有していないことです｡ 

06:02.570 --> 06:04.010
互いに学び合っていない｡ 

06:04.010 --> 06:06.740
だから､ その相乗効果がないんです｡ 

06:06.740 --> 06:11.390
協力することで得られるアドバンテージや余分なパワーがないのです｡ 

06:11.390 --> 06:17.840
例えば､ チームで仕事をする場合､ 一人一人が別々に仕事をするよりも､ 一緒に仕事をした方がうまくいきますよね｡

06:17.840 --> 06:21.140
つまり､ このチームでは､ 1＋1＋1で3人ということですね｡ 

06:21.140 --> 06:23.120
しかし､ チームでは､ 1＋1＋1は3ではない｡ 

06:23.120 --> 06:28.220
お互いの長所を活かし､ 短所を緩和し合うので､ 33みたいな感じですね｡ 

06:28.220 --> 06:29.180
そして､ ここでも同じことが言える｡ 

06:29.180 --> 06:36.080
この3台のコンピュータを並べると､ そうですね､ より多くの経験､ より多くの種類､ そしておそらく誰かが他のものよりも良い解決策を得ることができるでしょう｡

06:36.080 --> 06:39.500
それは素晴らしいことですが､ その経験を共有するようになれば､ さらに素晴らしいことになります｡ 

06:39.500 --> 06:41.030
そして､ それをどのように実現しているのか｡ 

06:41.030 --> 06:43.880
まあ､ このVを通して計算するんですけどね｡ 

06:43.880 --> 06:49.310
つまり､ このネットワークの出力であるV値は､ 実際にはそのようなものなのです｡ 

06:49.310 --> 06:57.980
つまり､ 彼らは同じVを持ち､ すべてのエージェントが同じ評論家に貢献しているわけです｡ 

06:57.980 --> 06:59.870
評論家が別にいるわけではないのです｡ 

06:59.870 --> 07:01.190
彼らには共通の批判者がいる｡ 

07:01.190 --> 07:06.020
そして､ それが俳優評論家と同期がどう結びつくかの鍵になります｡ 

07:06.020 --> 07:09.650
だから､ 経験を積みながら見ている評論家が一人いるんです｡ 

07:09.650 --> 07:17.510
では､ どうやってVを計算するかというと､ 覚えているように､ 得られた値からVを計算するのである｡

07:17.510 --> 07:20.660
つまり､ 環境を通して得られる報酬です｡ 

07:20.660 --> 07:30.620
エージェントは環境を探索しながら､ Vを計算し､ 予測し､ さらに計算できるVを手に入れるわけです｡

07:30.630 --> 07:35.390
これは､ このコースの前のセクションですでに説明したこととすべて結びついているのです｡

07:35.600 --> 07:43.100
つまり､ 彼らはすでに､ この迷路に存在し､ すでに探索したことのある報酬を通じて､

07:43.100 --> 07:47.090
予想できるVを手にしているのです｡

07:47.090 --> 07:53.390
そして､ 探索するうちに､ もちろんその値が変わることもありますが､ このVがニューラルネットワークの出力であるということもわかっています｡

07:53.390 --> 08:01.340
そのため､ このようなことを繰り返しているうちに､ その予想に合うようにニューラルネットワークを調整するようになるのです｡

08:01.340 --> 08:11.120
V つまり､ 基本的にこれは共有されるもので､ 重要な部分はエージェント間で共有され､ それが互いの情報を共有する方法です｡

08:11.120 --> 08:16.250
このようにして､ 互いに共有された環境の中で何が起こっているかを確認し､

08:16.250 --> 08:20.840
次のパートでさらに詳しく説明します｡

08:21.200 --> 08:25.280
その環境下での行動を最適化するために､ それを利用する｡ 

08:25.460 --> 08:32.690
そして､ もうひとつ注目すべきは､ ここがa3cだったわけで､ ここまではa3cのコアのようなものです｡ 

08:32.990 --> 08:46.640
これはa3cの一種ですが､ 実はこれのさらに優れた実装であるa3cがあり､ 実用面では最初のチュートリアルの1つでアドランドが実際に話しているのを聞くことができます｡

08:46.640 --> 08:54.050
そして､ 彼が話すのは､ PyTorchの作者が実際にGitHubで共有されているコードの1つに調整を加えて､

08:54.050 --> 08:58.310
これらすべてを取り込んだという話です｡

08:58.310 --> 09:01.880
今はご覧の通り､ 別々のニューラルネットワークを持っていて､ その2つだけがVを共有しています｡ 

09:02.060 --> 09:09.260
その調整とは､ 実は､ これらのニューラルネットワークをすべて1つにまとめ､ 取り込んで､ 一緒にすることでした｡

09:09.260 --> 09:14.990
つまり､ 最終的にエージェント間で共有されるニューラルネットワークは1つだけなのです｡ 

09:14.990 --> 09:21.620
ですから､ 以前は､ 俳優用と評論家用にそれぞれ1つのニューラルネットワークが共有されていました｡

09:21.620 --> 09:25.340
クリティカルな1つのニューラルネットワークをアクター用に共有した図｡ 

09:25.490 --> 09:31.340
今では､ 俳優､ 評論家､ 俳優､ 評論家､ 俳優､ 評論家のために共有されている1つのニューラルネットワークを持っているのです｡

09:31.790 --> 09:35.030
そして､ 評論家がここに共通している｡ 

09:35.030 --> 09:38.390
では､ これらの写真を左側に移動してみましょう｡ 

09:38.390 --> 09:39.350
だから､ スペースを作ってください｡ 

09:39.800 --> 09:48.050
そして､ これが基本的に､ 実践的なチュートリアルで使用するアーキテクチャや構造になっているのです｡

09:48.050 --> 09:55.730
このように､ 今の段階ではちょっと無理があるように聞こえるかもしれませんが､ もう1つ､ そのアドバンテージについてお話します｡

09:55.730 --> 10:00.260
そして､ そこで､ これがどのように進んでいるのか､ もう少し実際に見てみることにします｡ 

10:00.260 --> 10:00.380
だから

10:00.480 --> 10:02.670
そこでの直感的な行動についてお話します｡ 

10:02.670 --> 10:05.570
しかし､ 一般的にはこれはこれであります｡ 

10:05.580 --> 10:10.560
これは､ 各エージェントが使用するネットワークが1つで､ それを共有するというものです｡ 

10:10.560 --> 10:13.020
基本的にその意味は､ ウェイトを共有するということです｡ 

10:13.020 --> 10:16.080
ネットワークの重みは､ エージェント間で共有されます｡ 

10:16.080 --> 10:19.590
そして､ 更新されると､ 自分のネットワークだけでなく､ ネットワーク全体が更新されるのです｡ 

10:20.250 --> 10:21.600
そして､ アウトプットをするのです｡ 

10:21.600 --> 10:27.630
各エージェントのアクションがあり､ それを共有する評論家がいて､ それがモニタリングになるわけです｡

10:27.630 --> 10:35.460
今はいろいろと大変ですが､ 少しずつでもまとまっていけばいいと思っています｡

10:35.460 --> 10:48.540
少なくともここから得られる主な収穫は､ 批評家は共有されているので､ エージェントはより速く結果に到達するために協力し合うことを確認できるということです｡

10:48.540 --> 10:53.610
そして､ 次のチュートリアルでは､ このすべてがどのように組み合わされ､ どのように組み合わされるのかを､ さらに詳しく見ていきます｡

10:53.610 --> 11:01.140
そして今のところ､ 私がお勧めしたい､ あるいは私たちがお勧めしたい､ 追加の読み物があるようです｡

11:01.140 --> 11:06.690
というわけで､ 今回はJaromir Jaenischのブログです｡ 

11:06.720 --> 11:08.560
Let's Make an A 3つのキーで実施ということです｡ 

11:08.560 --> 11:11.280
実は､ 実装と理論の2つのパートがあるんです｡ 

11:11.670 --> 11:12.450
リンク先があります｡ 

11:12.450 --> 11:19.320
そしてそれは､ チュートリアルの実践編でアランが実装するものと非常によく似ています｡ 

11:19.320 --> 11:24.810
このチュートリアルのためだけでなく､ このセクション全体の励みになるような､

11:24.810 --> 11:30.840
追加情報､ 追加洞察を提供します｡

11:30.840 --> 11:33.120
だから､ ここで取り上げるのです｡ 

11:33.120 --> 11:38.940
しかし､ それでも､ 次のチュートリアルでは､ これまでに説明したことをすべてまとめていきます｡

11:39.000 --> 11:40.440
そして､ 次回お会いできるのを楽しみにしています｡ 

11:40.440 --> 11:41.760
そしてそれまで､ お楽しみに｡ 

11:41.760 --> 11:42.300
I.
