WEBVTT

00:01.340 --> 00:03.110
皆さん､ こんにちは！おかえりなさい｡ 

00:03.140 --> 00:11.300
前回の講義では､ モデルを学習するための機能のコアを設定するために､ ヘルパー関数をどのように使用するかを見てきました｡

00:11.300 --> 00:16.430
つまり､ 端末の状態､ 出発地､ 次の行動､ 次の場所､ そして最短経路が､

00:16.430 --> 00:21.460
エージェントや環境の動作の大部分を決定しているのです｡

00:21.470 --> 00:25.520
最後は､ トレーニングを活用することです｡ 

00:25.520 --> 00:31.940
何を入れるかという意味では非常にわかりやすいのですが､ それをどうするかはまた別の話です｡

00:32.180 --> 00:36.830
とはいえ､ また､ 皆さんが別の方法を使ったり､ これをカスタマイズして実験したりするのであれば､

00:36.830 --> 00:38.510
非常におすすめです｡

00:38.510 --> 00:43.670
そのほか､ 別の方法を用いていて､ それについて議論したい場合は､ Q&amp;Aで自由に共有してください｡

00:43.700 --> 00:45.470
相談にのってくれるのは何より嬉しい｡ 

00:45.470 --> 00:52.220
なぜなら､ これを解決する方法はたくさんあり､ もっと良い方法､ もっと有利な方法が見つかるかもしれないからです｡

00:52.220 --> 00:55.670
また長所と短所を見ることができる､ 議論するのはもっと楽しい｡ 

00:55.670 --> 00:56.090
わかりました｡ 

00:56.090 --> 00:57.290
では､ どうすればいいのか？

00:57.320 --> 00:59.090
トレーニングを開始しなければならない｡ 

00:59.090 --> 01:00.050
私たちのトレーニングのために｡ 

01:00.050 --> 01:01.520
イプシロンを使いたい｡ 

01:01.520 --> 01:08.960
つまり､ 基本的にはランダムなアクションではなく､ 私たちにとって最適なアクションを取るためのパーセンテージです｡

01:08.960 --> 01:18.080
そこで､ イプシロンを設定し､ 0に設定してみましょう｡  9 して､ 割引率や学習率の値も同じようにします｡

01:18.080 --> 01:23.300
そこで､ 割引率を0とします｡  9.

01:23.660 --> 01:29.780
また､ 学習率も0に設定しましょう｡  9.

01:29.810 --> 01:33.860
それが､ 私たちのエージェントが学ぼうとしている､ あるいは学ぶべき率になるのです｡ 

01:33.860 --> 01:39.320
また､ トレーニングエピソードの数､ 仮にn個のトレーニングエピソードと呼ぶことにします｡ 

01:39.320 --> 01:41.330
だから､ トレーニングのエピソードをいくつも持っているんです｡ 

01:41.330 --> 01:42.560
1000に設定してみましょう｡ 

01:42.560 --> 01:46.640
これは何回くらい訓練するのか､ 何話くらい訓練するのか｡ 

01:48.140 --> 01:48.800
すごい｡ 

01:49.010 --> 01:52.910
さて､ 基本的にやりたいことは､ 各エピソードを繰り返し再生することです｡ 

01:52.910 --> 02:00.100
トレーニングエピソードの数の範囲を取り､ 基本的に私たちのイプシロンに設定したいと思います｡ 

02:00.110 --> 02:01.820
私たちの時間差を知りたいのです｡ 

02:01.820 --> 02:04.640
それを設定するためには､ 過去のQ値をいくつか見ておく必要がある｡ 

02:04.640 --> 02:08.510
アクションインデックスで開始位置を計算する必要があります｡ 

02:08.510 --> 02:10.790
では､ さっそく始めましょう｡ 

02:11.000 --> 02:12.500
大きなforループをとってみましょう｡ 

02:12.500 --> 02:14.750
というわけで､ 4つのエピソードをご紹介します｡ 

02:16.840 --> 02:20.080
私たちのトレーニングエピソードの数の範囲内で｡ 

02:22.120 --> 02:22.730
さあ､ どうぞ｡ 

02:22.750 --> 02:33.970
構文上の間違いがなければ､ グリッドの行インデックスと列インデックスを maize の列インデックスに使用します｡

02:36.110 --> 02:39.950
そして､ 目標のスタート地点に設定する｡ 

02:39.950 --> 02:44.480
スタート地点が必要なので､ それを各エピソードに注いでもらいましょう｡ 

02:45.040 --> 02:49.600
これで､ 端末の状態をしばらく設定できるようになりました｡ 

02:51.210 --> 02:51.990
ない｡ 

02:52.880 --> 02:56.330
端末の状態です｡ 

02:56.360 --> 03:01.580
行インデックスと列インデックスを見たいと思います｡ 

03:03.020 --> 03:07.340
次に､ 次のアクションのためのアクションインデックスを設定しましょう｡ 

03:07.340 --> 03:09.050
だから､ 次のアクションが必要なんです｡ 

03:09.050 --> 03:16.790
このエージェントが行動インデックスを求めて迷路を反復するとき､ get next actionを使うことができます｡ 

03:17.740 --> 03:24.760
そして､ 行インデックス､ 列インデックスを使用して､ イプシロンと呼ぶことにしましょう｡ 

03:24.760 --> 03:29.860
そこで､ ランダムアクションの代わりに､ カラムインデックスを使用することにします｡ 

03:32.020 --> 03:33.880
そして､ イプシロンが必要です｡ 

03:34.300 --> 03:34.910
すごい｡ 

03:35.350 --> 03:37.510
正しく綴ることができれば､ ここに｡ 

03:37.510 --> 03:39.220
イプシロンが欲しいのか？

03:39.910 --> 03:42.330
よし､ このOCを削除しよう｡ 

03:42.370 --> 03:48.280
私が一行一行タイプしているのを見なくてすむように､ 残りのコードを取ってきて､ それを見ていきましょう｡

03:48.280 --> 03:55.120
しかし､ 古い行を設定するというアプローチには､ 古い行のインデックスが必要であることを念頭においてください｡

03:55.120 --> 04:00.310
また､ 列と行の報酬も欲しいところです｡ 

04:00.310 --> 04:05.890
キュー値と古いキュー値を見て､ 時間的な差を計算する必要があるのです｡ 

04:06.220 --> 04:10.000
OC コードの変更､ またはコードのアップデートを見るわけです｡ 

04:10.000 --> 04:16.450
古い行インデックスと古い列インデックスを取って､ 行インデックスと列インデックスを見ているところです｡ 

04:16.450 --> 04:22.300
行インデックス､ 列インデックス､ インデックス､ アクションは次の場所に等しく､ 次の場所には行インデックス､ 列インデックス､

04:22.300 --> 04:24.280
インデックス､ アクションが必要です｡

04:25.250 --> 04:27.410
最後に､ リワードについてです｡ 

04:27.680 --> 04:34.640
私たちの古いQ値は､ 古い行インデックス､ 古い列インデックス､ そしてまた､ 私たちの行動インデックスを参照し､

04:34.640 --> 04:40.700
私たちの報酬である時間差を計算し､ 行インデックスと列インデックスによるQ値に割引率を掛け､

04:40.700 --> 04:48.440
前のQ値から古いQ値を引いたQ値であるでしょう｡

04:50.040 --> 04:56.040
新しいQ値は､ 古いQ値に学習率､ 時間､ 時間差を加えたもので､ 古い行インデックス､

04:56.040 --> 05:04.560
古い列インデックスが新しいQ値に等しいQ値が必要なところでほぼ終了です｡

05:05.770 --> 05:09.940
もし､ 皆さんがこれ以上また議論したいのであれば､ Q&amp;Aを強くお勧めします｡ 

05:09.940 --> 05:11.270
ご自由にプリントしてください｡ 

05:11.290 --> 05:13.660
ここで使われているすべての変数で実験してみてください｡ 

05:13.660 --> 05:17.380
形状を見るなら､ それがどのように使えるのか､ 何を参照しているのかを見てください｡ 

05:17.380 --> 05:20.620
とてもお勧めですし､ さらにご相談に乗ることも可能です｡ 

05:21.040 --> 05:24.640
最後にもう一つ､ ちょっとしたお知らせがあるので､ ご紹介します｡ 

05:24.640 --> 05:30.040
1000行の学習が完了したことを知るために､ print文を追加してみましょう｡ 

05:30.040 --> 05:30.880
わかりました｡ 

05:30.910 --> 05:34.660
私のほうで構文に間違いがなければ､ 問題ないはずです｡ 

05:34.690 --> 05:36.730
コラボノートブックが初期化されます｡ 

05:36.730 --> 05:37.770
全部やり直しました｡ 

05:37.820 --> 05:38.710
これを実行させてください｡ 

05:38.710 --> 05:41.560
numpyしか使っていないので､ とても速いはずです｡ 

05:41.590 --> 05:44.050
ある意味､ 非常に最適化されたモデルだと思います｡ 

05:44.080 --> 05:47.080
これをクリックすると､ 最短経路を探すことができます｡ 

05:48.400 --> 05:48.790
わかりました｡ 

05:48.790 --> 05:50.320
トレーニングは完了しました｡ 

05:50.530 --> 05:54.820
また､ いくつかの開始オプションの最短経路を表示してみましょう｡ 

05:54.820 --> 05:59.920
そこで､ 3行目､ 9列目から､ 最短経路のオプションで､ 最短経路を設定することにしました｡ 

06:00.010 --> 06:06.940
5行目と0行目､ そして9行目と5列目から見ていきたいと思います｡ 

06:07.030 --> 06:08.320
これをプリントアウトしてみよう｡ 

06:08.920 --> 06:09.430
すごい｡ 

06:09.430 --> 06:12.430
最短経路はわかったが､ まだ終わっていない｡ 

06:12.430 --> 06:13.630
あと少しです｡ 

06:13.870 --> 06:22.840
私たちの郵便配達員は､ 私たちの街から商品の梱包エリアまでの法的な位置を考慮した最短経路を自動的に取得することができます｡

06:22.840 --> 06:25.540
しかし､ その逆はどうでしょう？

06:25.540 --> 06:31.300
基本的には､ 「郵便局員は､ 市内のどこからでも梱包エリアまで商品を届けることができるのでしょうか？

06:31.300 --> 06:40.470
しかし､ その後に次の商品をピックアップするために､ そのエリアから包装エリア､ そして市内の別の場所に移動する必要があるのです｡

06:40.480 --> 06:43.840
では､ これを解決するためにはどうすればいいのか｡ 

06:43.840 --> 06:45.370
そして､ それは実はとてもシンプルなことなのです｡ 

06:45.370 --> 06:48.100
最短経路の順番を見直すとか｡ 

06:48.700 --> 06:52.270
ちょっと考えてみてください｡ そうすれば､ これが解決するのではないでしょうか｡ 

06:53.290 --> 06:55.150
最短経路を使えばいいんです｡ 

06:55.150 --> 07:00.580
では､ 5行目と2列目を例にとると､ 必要なのはリバースオプションを使うことです｡ 

07:00.580 --> 07:04.450
Pythonの場合､ path reverseを使うので､ パスを出力することができます｡ 

07:04.450 --> 07:06.250
つまり､ 5と2ということですね｡ 

07:07.080 --> 07:07.860
そして､ そこに行く｡ 

07:07.860 --> 07:14.940
最短経路があるので､ セルの中の画像をつかんで下に持っていって､ それらの経路を比較したり見たりしたいときにとても便利です｡

07:14.940 --> 07:23.250
しかし､ 印刷した明細書を取り出し､ 順番に列を見れば､ 実際に経路を確認することができますし､ このセールスマンがどのように移動しているかを見ることができます｡

07:23.250 --> 07:25.770
あなたが使っているのは､ とても素晴らしい作品です｡ 

07:25.770 --> 07:26.820
Q学習について｡ 

07:26.820 --> 07:35.100
このコースで学んだことは､ この本質的な巡回セールスマンのような問題を解決するために､ ちょっとしたボーナスや楽しいシナリオとセクションがあります｡

07:35.100 --> 07:41.880
その最短の選択肢､ 最短の道筋を見つけるために､ 街中で荷物や物を配達する郵便屋さんに注目しています｡

07:41.880 --> 07:47.460
カスタマイズしたり､ 他のオプションを試したり､ ハイパーパラメータを変更したりすることを強くお勧めします｡

07:47.460 --> 07:55.200
もし､ 何か良い方法を発見したり､ 最適なパラメータを発見したりしたら､ ぜひQ&amp;Aでシェアしてください｡

07:55.680 --> 07:56.340
驚きです｡ 

07:56.340 --> 07:58.260
皆さんは本当に楽しんでいただけたでしょうか？

07:58.260 --> 08:01.470
カスタマイズし､ 実験し､ 学び続けてください｡ 

08:01.470 --> 08:02.820
一緒に仕事をするのがとても楽しいです｡ 

08:02.830 --> 08:03.030
Q.

08:03.030 --> 08:04.980
学び､ 楽しむi｡ 
