WEBVTT

00:01.400 --> 00:03.230
こんにちは､ そしてお帰りなさい｡ 

00:03.260 --> 00:08.990
前回の講義では､ 実際に環境の定義､ 価値観の表現､ 罰と報酬､ 環境での行動などを仕上げたり､

00:08.990 --> 00:14.330
確定させたりして終了しました｡

00:14.360 --> 00:20.600
この講義で私が行いたいのは､ トレーニングの紹介､ モデルをどのようにトレーニングするかという考え方､ そして､

00:20.600 --> 00:22.880
それを始めるための手助けです｡

00:22.880 --> 00:28.520
そして､ 次の講義では､ その解決策と､ より詳細なステップを提供します｡ 

00:28.520 --> 00:32.960
そこで､ モデルのトレーニングに何が必要かというと､ トレーニングが必要なのです｡ 

00:33.620 --> 00:38.840
これは､ 次のステップでモデルを学習させる際に使えるアプローチです｡ 

00:38.840 --> 00:47.210
ランダムな非終末状態､ つまりエージェントの白い四角を選び､ それをトレーニングのエピソードとして始めたいのです｡

00:47.210 --> 00:50.360
そして､ もちろん､ 現在の状態に対するアクションを選択したい｡ 

00:50.360 --> 00:53.120
エージェントが環境内を動き回れるようにする必要があるのです｡ 

00:53.120 --> 00:59.450
そこで､ 今回のチャレンジでは､ 我々とエージェントの行動を､ イプシロングリーディを使って選択することにしました｡ 

00:59.660 --> 01:05.870
このアルゴリズムは､ 通常､ エージェントにとって最も有望な行動を選択するが､ 時には､ より有望でない選択肢を選択することもある｡

01:05.870 --> 01:10.850
エージェントに環境探索を促すためには､ どうしても最適なポリシーを見つけたいのです｡ 

01:11.210 --> 01:15.140
そして､ 選択されたアクションを実行し､ 次の状態へ遷移したい｡ 

01:15.140 --> 01:16.490
次の場所に移動する｡ 

01:16.490 --> 01:23.060
なぜこんなことを言うかというと､ この問題を解決するために､ これをどのように関数に分解できるかを皆さんに考えてほしいのです｡

01:23.480 --> 01:29.660
次に､ 新しい状態になったときに報酬を受け取り､ 時間差を計算する必要があります｡ 

01:29.660 --> 01:34.940
アクションペアの前の状態のQ値を更新し､ 新しい状態または現在の状態が終端状態であれば､ その後､

01:34.970 --> 01:37.550
終端状態に移行することになるのです｡

01:37.550 --> 01:39.380
そうでなければ､ 2番目のステップに進むことになる｡ 

01:39.380 --> 01:43.610
だから､ 全体の流れとしては､ 1000話分走ることを目標にトレーニングしていくことになります｡ 

01:43.610 --> 01:55.790
これにより､ 商品の梱包エリアと､ この都市の他の場所との間の最短経路を計算する十分な機会が得られます｡

01:56.570 --> 01:57.260
すごい｡ 

01:57.440 --> 02:02.990
そこで､ あなたならどうアプローチするか考えてみてください｡ 私は､ これを解決するためのアイデアを提供したいと思います｡

02:02.990 --> 02:08.240
そこで､ 私たちのソリューションでは､ 次のような関数を使用することになります｡ 

02:08.540 --> 02:10.700
コードセルなので､ 実はコメントアウトできるんです｡ 

02:10.730 --> 02:11.840
申し訳ございませんでした｡ 

02:11.840 --> 02:13.250
ドル箱はいらない｡ 

02:13.250 --> 02:18.230
これらをコメントアウトして､ 最初の一歩を踏み出す手助けをしたいと思います｡ 

02:19.020 --> 02:24.600
全体として､ これらの関数がモデルのトレーニングのステップを定義することになります｡ 

02:24.900 --> 02:29.910
Pythonで関数を作成する際に､ 端末の状態にどのようにアプローチするかを見てみましょう｡

02:29.910 --> 02:36.450
まず最初に､ もちろん関数をそのまま定義したいと思います｡

02:37.610 --> 02:39.530
端末の状態です｡ 

02:40.640 --> 02:45.320
そして､ これらは､ 分解するのに役立つかもしれないアイデアを提供するために表示される関数の名前です｡

02:45.350 --> 02:51.170
ここで行いたいのは､ 現在の行インデックスと現在の列インデックスを取得することです｡ 

02:52.980 --> 03:02.010
これはエージェントの位置を示すもので､ 報酬としてtrueまたはfalseを追加できます｡

03:02.010 --> 03:03.210
だから､ if文が必要なのです｡ 

03:03.210 --> 03:05.790
だから､ 私たちの報酬を設定しましょう｡ 

03:07.490 --> 03:08.630
現在の私たちの

03:09.410 --> 03:11.600
行番号です｡ 

03:12.480 --> 03:20.190
また､ 現在の列のインデックスは､ その状態にある場合､ 負の1に等しくなります｡ 

03:24.300 --> 03:28.500
falseやother or elseを返すことになる｡ 

03:29.850 --> 03:30.990
また来たいと思います｡ 

03:31.470 --> 03:32.100
本当です｡ 

03:33.590 --> 03:35.030
とても分かりやすいですね｡ 

03:35.360 --> 03:41.390
このように､ 終端状態で存在するかどうかを判断した後､

03:41.390 --> 03:44.240
始端位置を求めます｡

03:44.240 --> 03:52.820
ヒントとして､ 現在の行インデックスと現在の列インデックスを使用し､ numpyにランダムを設定することを見てみましょう｡

03:52.820 --> 03:57.200
それを環境の行環境列にランダムに初期化したいのです｡ 

03:57.200 --> 04:00.620
しかし､ 次の講義では､ その内訳がわかります｡ 

04:00.620 --> 04:04.790
残りの機能については､ イメージをつかんでいただくためのメモを添えてご覧ください｡ 

04:04.790 --> 04:10.700
この方法は､ 勉強にもなるし､ アイデアを出すのにも役立つので､ ぜひ皆さんも試してみてください｡

04:10.700 --> 04:12.200
そして､ これがきっかけとなるのです｡ 

04:12.200 --> 04:15.260
だから､ 次の講義で解答を得ることができるので､ 心配しないでください｡ 

04:15.260 --> 04:21.860
そして､ 実際にイプシロン割引係数や学習率などをトレーニングに割り当てて､ トレーニングを実行し､

04:21.860 --> 04:25.760
結果を見るという流れで締めくくります｡

04:26.060 --> 04:26.900
すごい｡ 

04:27.260 --> 04:29.660
またここでやめましょう｡ 

04:29.660 --> 04:30.890
これを解いてみてください｡ 

04:30.890 --> 04:38.180
しかし､ もしそうでない場合は､ 次の講義に進み､ これらの関数を定義するためのトレーニングの解答を得ることができます｡

04:38.420 --> 04:40.340
では､ 次の講義でお会いしましょう｡ 
