WEBVTT

00:00.780 --> 00:03.990
こんにちは､ 人工知能の講座にようこそ｡ 

00:04.020 --> 00:04.380
わかりました｡ 

00:04.380 --> 00:06.960
それでは､ これまでのチュートリアルを楽しんでいただければ幸いです｡ 

00:06.960 --> 00:08.460
直感はもう少しで完成です｡ 

00:08.460 --> 00:09.000
もうすぐですね｡ 

00:09.000 --> 00:09.340
もうすぐです｡ 

00:09.360 --> 00:10.470
実用面を重視する

00:10.470 --> 00:13.290
ちょっとしたことでカバーできるようになったんです｡ 

00:13.290 --> 00:20.220
さて､ 前回は､ このキーとなる学習の方程式にニューラルネットワークを追加し､ 学習を次のステップに進め､

00:20.310 --> 00:25.140
ディープラーニングに変えていく方法についてお話しました｡

00:25.380 --> 00:33.330
そして今日は､ 実用面でコーディングすることになる､ 特別に重要な機能を追加する予定です｡

00:33.330 --> 00:39.450
そこで､ ハドリンと私は､ 直感の部分でカバーすることが重要だと考え､ コーディングの部分になったときに､

00:39.450 --> 00:42.120
より準備ができているようにしました｡

00:42.120 --> 00:46.410
ですから､ 先ほどお話したように､ 私たちはそこにネットワークを持っているのです｡ 

00:46.410 --> 00:47.880
起こるのは2つのパートだ｡ 

00:47.880 --> 00:49.080
まず､ 学習です｡ 

00:49.080 --> 00:52.860
つまり､ ネットワークは新しい状態になるたびに実際に学習していくのです｡ 

00:53.190 --> 00:58.590
この環境に対応するために､ ウエイトを少しずつ更新して､ どんどん良くしていくのです｡ 

00:58.590 --> 01:01.890
そして､ 国家内部での演技です｡ 

01:01.890 --> 01:07.980
そのため､ Q値の状態がカウントされた後､ 1つのキーバリューが選択される｡ 

01:07.980 --> 01:11.700
そこで今日は､ やはり学習の部分についてお話します｡ 

01:11.700 --> 01:17.370
これから､ まあ面白い機能を考え出すのですが､ この機能を自分たちで考え出すわけではないのですが､

01:17.370 --> 01:25.860
ディープラーニングにとって非常に重要な機能についてお話します｡

01:25.860 --> 01:29.310
そして､ その機能が「エクスペリエンス・リプレイ」です｡ 

01:29.520 --> 01:31.770
さて､ ここで私たちのネットワークを紹介します｡ 

01:31.770 --> 01:34.500
だから､ ここにコピーしてきたんだ｡ 

01:34.500 --> 01:38.820
下側で計算された損失は､ ネットワークを通じて逆伝播されることがわかりました｡ 

01:38.820 --> 01:45.390
そして､ 私たちが扱っている問題をもう少し理解するために､ 何が起こるかの例を見てみましょう｡

01:45.390 --> 01:49.050
そこで､ 実際にこのコースで学んだ例をご紹介します｡ 

01:49.050 --> 01:53.010
これはまさにこのコースから撮影したスクリーンショットです｡ 

01:53.010 --> 01:54.600
これをプログラミングするのです｡ 

01:54.750 --> 02:03.600
これは自動運転車で､ この道路に沿ってこの中を走っているのですが､ この道路のナビゲーションの仕方を学ばなければなりません｡

02:03.600 --> 02:09.180
それで､ 前回お話したように､ この状態で何があるのか？

02:09.180 --> 02:12.030
そしてもちろん､ 国家は×1､ ×2だけでは済まない｡ 

02:12.030 --> 02:18.450
アランがもう少し詳しく説明しますが､ 車の角度に関連するいくつかのパラメータと､

02:18.750 --> 02:26.400
相対的なパラメータ､ センサーの読み取り値などが､ どのような状態になっているかを示しています｡

02:26.400 --> 02:31.530
そのため､ 状態を記述するためのパラメータはそれ以上になりますが､ それでも値のベクトルになります｡

02:31.530 --> 02:33.690
ニューラルネットワークを経由することになります｡ 

02:33.690 --> 02:36.390
そして､ 出力には､ いくつかのQ値が表示されます｡ 

02:36.390 --> 02:44.280
繰り返しになりますが､ 環境に応じて､ さまざまなアクション､ 可能性のあるアクションの数があります｡

02:44.280 --> 02:48.960
しかし､ ここで何が起こっているのかをもう少し理解できるように､ わかりやすくするために､

02:49.020 --> 02:50.550
このままにしておきます｡

02:50.550 --> 02:58.470
では､ この場合､ これまでのところ､ このニューラルネットワークへの入力は何なのか､ ということが問題になっています｡ 

02:58.470 --> 03:03.450
もっと言えば､ この神経回路網をどれくらいの頻度で起動させるか｡ 

03:03.450 --> 03:05.070
このニューラルネットワークは､ どれくらいの頻度で通っているのでしょうか？

03:05.070 --> 03:10.620
まあ､ 毎回新しい状態で終わるので､ 車が動くと新しい状態で終わるわけです｡ 

03:10.620 --> 03:12.600
そして､ すべてがうまくいく｡ 

03:12.600 --> 03:17.910
すべてのデータ､ 状態に関するすべての情報がネットワークを通過するのは､ 計算されたエラーです｡ 

03:17.910 --> 03:22.380
このエラーは､ 以前のチュートリアルで説明した内容に基づいて計算されているのでしょうか｡ 

03:22.800 --> 03:25.260
このエラーはネットワークを通じて逆伝播される｡ 

03:25.260 --> 03:31.530
重みが更新され､ その後､ 車がどの行動を取るべきかを選択し､ その移動が新しい状態で終了します｡

03:31.530 --> 03:34.050
新しい状態では､ すべてがやり直しになります｡ 

03:34.230 --> 03:38.040
そして､ 基本的にこれは車が新しい状態になるたびに起こるわけです｡ 

03:38.160 --> 03:39.780
さて､ この例をご覧ください｡ 

03:39.780 --> 03:48.960
私がこのスクリーンショットを撮ったのは､ 経験､ リプレイ､ 体験によって解決される問題を非常によく表しているように見えるからです｡

03:48.960 --> 03:52.590
リプレイは､ このコースやこの特定の問題で使うだけのものではありません｡ 

03:52.590 --> 04:00.330
これは､ 人工知能のアルゴリズムのように､ 何度も何度も繰り返し使われるもので､

04:00.330 --> 04:05.010
非常に強力で重要なものだからです｡

04:05.010 --> 04:09.540
だからこの車､ この問題､ この環境の中で見てください｡ 

04:09.540 --> 04:12.330
その目標は､ ここからここまで往復することです｡ 

04:12.330 --> 04:17.400
その目的は､ 砂でできたこの壁を越えないように､ ここ､ ここに進むことです｡ 

04:17.610 --> 04:25.050
そして､ 車はこっちからスタートして､ 下に降りていき､ 目標にどれだけ近づいたかで報酬が決まるような仕組みになっています｡

04:25.050 --> 04:26.910
ここから先は車の話か｡ 

04:26.910 --> 04:29.400
下がっては､ こうして､ こうして､ こうして､ こうして､ こうして｡ 

04:29.450 --> 04:31.320
この壁に沿って､ この壁に沿って｡ 

04:31.320 --> 04:32.580
そして､ 次は何をするつもりなのか｡ 

04:32.580 --> 04:34.830
回ってくるから､ どんどん進む｡ 

04:34.830 --> 04:37.410
では､ どうすればいいかというと､ このままでいいのです｡ 

04:37.410 --> 04:39.330
でも､ ちょっと考えてみましょう｡ 

04:39.330 --> 04:44.160
この壁まで来たら､ いちいち前に出るんですよ｡ 

04:44.160 --> 04:47.640
前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､

04:47.640 --> 04:48.360
前へ､ 前へ｡

04:48.360 --> 04:54.540
だから､ 構造環境によっては､ ここで100手とか､ ここで50手とか､ そういうこともあるかもしれない｡

04:54.840 --> 04:57.510
彼らはただひたすら､ 前へ､ 前へ､ 前へと4人で進んでいく｡ 

04:57.510 --> 04:58.920
そして､ 何も変わらない｡ 

04:58.920 --> 04:59.520
何もない｡ 

04:59.620 --> 05:00.310
本当に変わるんですね｡ 

05:00.310 --> 05:03.280
そう､ このターゲットからさらに遠ざかり､ このターゲットに近づいていくのです｡ 

05:03.280 --> 05:03.970
それは素敵ですね｡ 

05:03.970 --> 05:08.350
しかし､ 周囲の環境という点では､ あまり変わっていない｡ 

05:08.350 --> 05:09.870
相変わらずの壁です｡ 

05:09.880 --> 05:15.220
車に乗っている人なら､ このような状況を見たことがあると思いますが､

05:15.220 --> 05:21.760
何を見ても環境が単調で､ ただ通り過ぎるのと同じようなものを見ているだけなのです｡

05:21.760 --> 05:26.080
でも､ 例えば､ 砂漠を車で走っていて､ 同じものを見ているだけだとしたら､ どうでしょう｡ 

05:26.080 --> 05:27.670
同じ音なんです､ 同じ音なんです｡ 

05:27.670 --> 05:30.250
何も起こらない､ 何も変わらない｡ 

05:30.250 --> 05:38.890
もちろん､ 何かが変わるかもしれません｡

05:38.890 --> 05:43.330
例えば､ 車を運転しているときに､ GPSが目的地に近づいていることを表示しているとします｡ 

05:43.330 --> 05:45.910
つまり､ このインプットのひとつが「変化」なのです｡ 

05:45.910 --> 05:51.820
しかし､ その他の多くの入力､ たとえばクルマに搭載されているセンサーは､ 変化しません｡ 

05:51.820 --> 05:53.260
そのため､ 運転中に

05:53.260 --> 05:56.530
この状態で､ ニューラルネットワークにインプットを入れていくわけです｡ 

05:56.530 --> 06:00.430
ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここです｡ 

06:00.730 --> 06:03.040
ずっと入力はほとんど同じです｡ 

06:03.040 --> 06:10.390
ですから､ 同じ入力､ 同じ値､ 同じベクトル､ あるいは非常に似たベクトルをネットワークに入力し続ければ､

06:10.390 --> 06:16.570
多様性がないため､ 車は非常によく学習します｡

06:16.570 --> 06:21.490
ひとつは､ その右側にあるこの壁沿いの走り方がとても勉強になることです｡ 

06:21.490 --> 06:24.870
そうしてネットワークが更新され､ やりがいを感じていくのでしょう｡ 

06:24.870 --> 06:27.370
運転することで徐々に報われるようになる｡ 

06:27.370 --> 06:32.140
だから､ まあ､ いいかという感じで､ ここからが勉強のスタートです､ ああ､ 私はとてもいいことをしている｡ 

06:32.140 --> 06:32.950
さらに良くなっています｡ 

06:32.950 --> 06:33.760
もっとうまくやるんだ｡ 

06:33.760 --> 06:43.270
この壁に沿って運転する方法を学んだだけなのに､ 実際にはとてもうまくいっているという誤った認識を持つことになるのです｡

06:43.270 --> 06:47.470
そうすると､ ニューラルネットワークは､ この壁に沿って走ることに非常に適応してくるわけです｡ 

06:47.470 --> 06:55.180
そして､ 突然このカーブが出てきて､ 車はどうしたらいいかわからなくなり､ 完全にこのニューラルネットワークに合わなくなるのです｡

06:55.180 --> 07:01.480
そして､ 仮に何らかの形で調整されたとしても､ この部分を通過して､ この壁に行き着いたとしても､

07:01.480 --> 07:03.130
同じことが起こるのです｡

07:03.130 --> 07:05.170
ここから､ ここ､ こことドライブしていくんです｡ 

07:05.500 --> 07:10.780
さて､ ニューラルネットワークはこの壁に適応するように自らを再構築しているのですが､ あるとき､ バーンとこんなことが起こりました｡ 

07:10.780 --> 07:14.590
そして､ どうにかしてそれを乗り越えたとしても､ このままでは追い越されてしまう｡ 

07:14.590 --> 07:16.180
そして､ この線に沿って同じことを｡ 

07:16.180 --> 07:22.120
つまり､ 私たちが抱えている問題を非常に鮮明に表しているのです｡ 

07:22.120 --> 07:28.150
それは､ ニューラルネットワークの使い方として､ 1つ1つの状態を更新していくので､ 連続したステップがたくさんあれば､

07:28.150 --> 07:30.790
それらが同じである必要さえないからでしょう｡

07:30.790 --> 07:40.720
しかし､ 環境には､ 連続した状態が何らかの形で相関していたり､ 相互に依存していたりすることが普通にあります｡ 

07:40.720 --> 07:45.490
そして､ その相互依存関係によってネットワークが偏らないようにしたいのです｡ 

07:45.490 --> 07:52.830
自動車に直線や長い曲線の走り方を学ばせるのではありません｡ また､

07:54.000 --> 08:01.330
エージェントが環境をナビゲートする際､ 相関関係や相互依存の状態が次々に発生すると､

08:01.330 --> 08:15.190
エージェントに学習させるだけではニューラルネットワークを台無しにしてしまいます｡

08:15.190 --> 08:17.560
そこで登場するのが､ エクスペリエンス・リプレイです｡ 

08:17.560 --> 08:21.790
経験値再生で何が起こるかというと､ これらの経験値です｡ 

08:21.790 --> 08:30.760
そのため､ 1～3州､ つまり50州ある州は､ すぐにネットワークに接続されるわけではありません｡

08:31.330 --> 08:34.990
実際には､ エージェントのメモリに保存されます｡ 

08:35.920 --> 08:40.990
例えば､ これらすべてを保存して､ ある時点である閾値に達すると､

08:40.990 --> 08:50.290
エージェントが自分で判断するようになります｡

08:50.290 --> 08:51.220
よし､ 勉強の時間だ｡ 

08:51.220 --> 08:56.500
私は､ 自分が持っているこのバッチを､ 今度はそのバッチから学ぼうとしているのです｡ 

08:56.500 --> 09:05.860
そして､ 一様に分布したものをランダムに選択します｡ ここで重要なのは､ 次のスライドで説明する「一様に」という点です｡

09:06.670 --> 09:08.050
それは言っておきます｡ 

09:08.050 --> 09:11.650
しかし､ それは一様に分布したサンプルを取ります｡ 

09:12.280 --> 09:15.520
つまり､ 基本的にすべての経験は平等であると考えられているのです｡ 

09:15.520 --> 09:20.050
その経験のバッチから一様に分布したサンプルを取るのです｡ 

09:20.320 --> 09:24.640
そして､ それを経て､ 彼らから学ぶのです｡ 

09:24.640 --> 09:26.710
だから､ すべての経験が必要なわけではないんです｡ 

09:26.710 --> 09:28.270
ただ､ 一様に分布したサンプルを取るだけです｡ 

09:28.270 --> 09:31.180
だから､ ここから2人､ ここから2人､ ここから2人という具合にかかるかもしれません｡ 

09:31.180 --> 09:34.840
そして､ そして､ それぞれの体験は､ 状態によって特徴づけられます｡ 

09:34.840 --> 09:44.740
それは､ その行動､ その結果得られた状態､ そしてその特定の状態でのその行動によって得られた報酬にあるのです｡

09:44.740 --> 09:49.750
そのため､ 各経験状態の要素に対して､ 1つのアクション状態から報酬を得ることができます｡ 

09:49.870 --> 09:54.580
そして､ そのような経験をすべてネットワークに流し､ 学習していくのです｡ 

09:54.580 --> 09:59.170
そうすれば､ そのパターンを断ち切ることができるのです｡ 

09:59.210 --> 10:07.970
イライアス それは､ ネットワークを通して次々と体験させることで､ その連続性からくるものです｡

10:08.060 --> 10:11.820
体験リプレイのメインはそこなんですね｡ 

10:11.840 --> 10:14.300
それこそが､ アドレスの問題なのです｡ 

10:14.300 --> 10:22.160
また､ 経験値再生のもう一つの利点は､ このような環境では､ 時として非常に貴重な､ レアな経験をすることができるかもしれないことです｡

10:22.160 --> 10:25.940
だから､ 例えば､ よくわからないけど､ このコーナーを見てみよう｡ 

10:25.940 --> 10:26.270
そうだろ？

10:26.270 --> 10:28.280
これは......これは右コーナーです｡ 

10:28.310 --> 10:28.550
そうですね｡ 

10:28.640 --> 10:29.690
しかも､ とてもシャープなもの｡ 

10:29.690 --> 10:30.770
シャープって何本？

10:30.770 --> 10:34.970
だから､ このコーナーに抱きつくことを想定して､ ここから来ることになる｡ 

10:35.450 --> 10:39.190
では､ この部屋全体では､ いくつの鋭い右角があるのでしょう？

10:39.230 --> 10:42.260
右の角はこことここしかないんです｡ 

10:43.580 --> 10:43.850
そうだろ？

10:43.850 --> 10:46.130
だから､ こっちに来るときは､ 右の角なんです｡ 

10:46.130 --> 10:48.530
そして､ 戻るときは､ この右端の鋭角の部分です｡ 

10:48.530 --> 10:49.610
だから､ そしてこれはシャープじゃないんです｡ 

10:49.610 --> 10:50.120
こちらはシャープです｡ 

10:50.120 --> 10:56.450
つまり､ 鋭い右コーナーから学ぶ機会は､ 全環境で1回しかないのです｡ 

10:56.660 --> 11:02.720
直線を走るのが得意になったり､ 柔らかいコーナーが得意になったり､

11:02.720 --> 11:06.350
そういうのは大事な経験です｡

11:06.350 --> 11:15.470
しかし､ それから学ぶ機会がそれほど多くないために､ この鋭い右隅を台無しにし続けることになるのです｡

11:15.470 --> 11:20.000
そのため､ 他のことはすぐに覚えますが､ この右の角を覚えるのには長い時間がかかるのです｡

11:20.030 --> 11:21.830
非常に単純化した例です｡ 

11:21.830 --> 11:29.990
非常に単純化された説明ですが､ これは､ 時には貴重な経験となり得るという概念を示しています｡

11:29.990 --> 11:35.930
単純なニューラルネットワークで､ ここに自分の価値観を入れると､ それが通過していきます｡

11:35.930 --> 11:40.970
経験の順序性や相互依存性､ 相関性の問題を忘れて､ ちょっと忘れても､

11:40.970 --> 11:46.250
何が起こるかというと､ 経験を入れると､ それがネットワークを通過して更新され､

11:46.640 --> 11:53.270
その経験を瞬時に忘れてしまうのです｡

11:53.270 --> 11:54.320
次へ次へと進むのです｡ 

11:54.320 --> 11:56.000
それがニューラルネットワークの仕組みなんです｡ 

11:56.000 --> 12:00.980
そして､ 次の状態､ 次の状態､ 次の体験､ 次の体験､ 次の体験と移っていくのです｡

12:00.980 --> 12:07.340
この右隅は､ ネットワークを通した途端に消えてしまい､ その貴重な体験の記憶がないわけです｡

12:07.340 --> 12:15.590
一方､ 経験値再生では､ これらの経験をバッチにまとめるので､ バッチをローリングウィンドウとして整理することができます｡

12:15.590 --> 12:20.270
例えば､ 100個のバッチのように､ バッチに100個の経験ができるわけです｡ 

12:20.270 --> 12:26.900
だから､ ここから戻ってくるときは､ この経験をバッチリ記録しているときと同じなんです｡ 

12:27.110 --> 12:35.000
そして､ ある時点で､ 経験値のバッチから一様な分布を取って､ ローリングウィンドウにするのです｡

12:35.000 --> 12:39.560
だから､ これらの経験を忘れてしまうのです｡ しかし､ これらの経験を保ちながら､

12:39.560 --> 12:42.200
再び､ このバッチから学ぶのです｡

12:42.320 --> 12:47.930
そして､ ここまで来たら､ でも､ そんな経験もバッチリしています｡

12:47.930 --> 12:50.450
だから､ 今はその経験から学んでいるのです｡ 

12:50.450 --> 12:58.670
そうすると､ この右側の角は学習過程で何度も出てくるかもしれません｡ なぜなら､ バッチがこの辺にあったときに､

12:58.670 --> 13:02.990
そのバッチの中にあったからです｡

13:02.990 --> 13:05.090
それから､ ここのバッチで､ ここのバッチで｡ 

13:05.090 --> 13:11.390
だから､ 何回かに分けて出てきたのです｡ バッチは､ 経験のローリングウィンドウとして更新されるかもしれないからです｡ 

13:11.390 --> 13:16.150
古い経験が追い出され､ 新しい経験が加わり､ そしてまた古い経験がそれを追い上げるわけです｡

13:16.160 --> 13:23.990
そのため､ 経験というものは､ かなりの期間､ バッチに残り､ 車や代理店はその経験から何度も学ぶことができます｡

13:23.990 --> 13:27.320
それも経験値リプレイのメリットですね｡ 

13:27.320 --> 13:29.750
そしてもちろん､ 最後のアドバンテージは経験値です｡ 

13:29.750 --> 13:40.040
リプレイは､ 一度に1つの経験から学ぶよりも､ より多くの経験から学ぶ機会を与えてくれます｡

13:40.040 --> 13:49.130
そのため､ 経験値が限られた環境であっても､ 経験値再生のアプローチによって､ より早く学習することができるのです｡

13:49.130 --> 13:55.640
また､ 何度も何度も環境をやり直すのではなく､ やり直しが効かない分､ 学習スピードが上がります｡

13:55.640 --> 13:57.230
その経験を保存しているのですね｡ 

13:57.590 --> 13:59.510
それが経験による主なメリットですね｡ 

13:59.510 --> 13:59.840
リプレイ

13:59.840 --> 14:00.560
それについておさらいしておきましょう｡ 

14:00.560 --> 14:03.860
私たちは､ 独立のパターンを打破し

14:04.770 --> 14:07.230
連続した体験の相関関係

14:07.680 --> 14:12.540
重要かもしれない希少な経験を保存しておくことで､ そこからより多くのことを学べるのです｡ 

14:12.870 --> 14:16.770
そして､ 環境の中で学ぶことができるのです｡ 

14:16.770 --> 14:24.900
私たちは､ 経験豊かな環境､ 経験不足の環境､ エージェントが経験することがそれほど多くない環境でも､

14:24.900 --> 14:29.100
それを学ぶことができます｡

14:29.100 --> 14:31.740
それがエクスペリエンス・リプレイというわけですね｡ 

14:32.310 --> 14:38.900
これよりもう少し詳しく読みたい方は､ 2016年にDeepMindが発表した興味深い記事があります｡

14:38.910 --> 14:44.300
Prioritized Experience Replayと呼ばれるもので､ その理由について語られています｡ 

14:44.310 --> 14:50.420
なぜ､ 体験バッチから体験を選択するのに､ 一様分布を使っているのでしょうか？

14:50.430 --> 14:56.640
より良い選択方法を見つけて､ 重要だと思う体験に優先順位をつけてみてはどうでしょうか｡

14:56.880 --> 14:58.110
というわけで､ なかなか面白いことになっています｡ 

14:58.110 --> 15:12.570
この場合､ 経験値再生で知識を補強するだけでなく､ 実際に技術の最先端で動くことができるようになるわけです｡

15:12.570 --> 15:14.970
これは2016年で､ ディープマインドから出版されているんですね｡ 

15:14.970 --> 15:17.460
つまり､ 非常に最近の､ 非常に強力な論文なのです｡ 

15:17.460 --> 15:24.330
ですから､ 実際にこのアルゴリズムの限界を探る､ あるいはさらに探求して､ 次のレベルに持っていくことができるようになるのです｡

15:24.330 --> 15:30.810
では､ なぜ一様分布なのか､ どのように変えれば経験値再生につながるのか､ この論文から読み取っていただくことにして､

15:30.810 --> 15:35.580
よろしければ､ 今日のチュートリアルを楽しんでください｡

15:35.580 --> 15:41.160
そして､ エクスペリエンス・リプレイとは何かということがわかり､ 自信を持って実践的なチュートリアルに使うことができるようになりました｡ 

15:41.160 --> 15:42.810
そして､ 次回お会いできるのを楽しみにしています｡ 

15:42.810 --> 15:44.130
それまではお楽しみに｡ 

15:44.130 --> 15:44.670
I.
