WEBVTT

00:00.700 --> 00:04.350
こんにちは､ 人工知能のコースにようこそ｡ 

00:04.360 --> 00:09.460
今日のチュートリアルは､ AIの世界への第一歩であり､ 今日は強化学習についてお話ししますので､

00:09.460 --> 00:13.120
ワクワクしていただけたらと思います｡

00:13.120 --> 00:18.340
このチュートリアルは､ このコースで行われる他のすべてのことの基礎となる､ 非常に重要なチュートリアルです｡

00:18.610 --> 00:20.950
では､ ここからが本題です｡ 

00:20.950 --> 00:29.140
小さな迷路がありますが､ この迷路は環境を表現しており､ このコースで扱うのはこの迷路です｡

00:29.140 --> 00:35.080
私たちの人工知能が活躍する環境は決まっています｡

00:35.080 --> 00:36.790
行動を起こすことになるのです｡ 

00:36.790 --> 00:41.770
このような環境に打ち勝つこと､ このような環境で勝つことを目指すのです｡ 

00:42.100 --> 00:44.140
そして､ ここにはエージェントがいる｡ 

00:44.140 --> 00:46.930
エージェントは､ 私たちの人工知能です｡ 

00:46.930 --> 00:56.860
このような環境をナビゲートするのが人間であり､ 特定のアクションを実行するために心が与えるフィードバックから学習するのが心です｡

00:56.860 --> 01:06.160
そして､ この環境下でエージェントがある行動を起こすと､ その結果､ エージェントが置かれている状態が変化するという仕組みになっています｡

01:06.160 --> 01:10.000
だから､ もっと遠いかもしれないし､ 近いかもしれない､ もっと左かもしれない､ もっと右かもしれない｡ 

01:10.000 --> 01:15.070
その状態を表す他のある種のパラメータを持ち､ それらのパラメータは変化していくかもしれません｡

01:15.070 --> 01:20.920
つまり､ アクションを起こすことで状態が変化し､ そのアクションに応じた報酬も得られるということです｡

01:20.930 --> 01:24.670
だから､ 行動を起こすたびに状態が変化し､ 報酬を得ることができるのです｡ 

01:24.670 --> 01:33.970
さて､ 時には､ その行動が状態を変えない､ あるいは､ ある状態でその行動をとったとしても報酬が得られないということが起こるかもしれないことを心に留めておいてください｡

01:33.970 --> 01:34.380
そうではありませんでした｡ 

01:34.450 --> 01:38.020
しかし､ それでもエージェントはそれを続け､ 行動を起こし､ 状態を変え､

01:38.020 --> 01:42.400
報酬を得､ 行動を変え､ 行動を起こし､ 状態を変え､ 報酬を得るのです｡

01:42.580 --> 01:47.200
そして､ そのプロセスを行うことで､ 環境を探索し､ どのような行動が良い報酬や好ましい状態につながり､

01:47.200 --> 01:55.180
どのような行動が悪い報酬や好ましくない状態につながるかを理解し､ 環境について学ぶことになるのです｡

01:55.750 --> 01:59.590
そしてこれは､ 非常にグローバルな問題を非常に単純化して表現したものです｡ 

01:59.590 --> 02:04.330
そう考えると､ 実は環境は迷路だけである必要はないんです｡ 

02:04.330 --> 02:08.350
迷路から抜け出したり､ 迷路の中で宝物を見つけたりすることだけが目的ではありません｡ 

02:08.980 --> 02:11.680
環境というのは､ 人生においてほとんど何でもありなんです｡ 

02:11.680 --> 02:15.100
では､ 朝起きてオムレツを作っているところを想像してみてください｡ 

02:15.100 --> 02:19.750
そのオムライスを作るためには､ ある手順を踏まなければならないわけです｡ 

02:19.750 --> 02:25.060
塩を用意し､ 卵を用意し､ フライパンを用意し､ 火をつけて......と｡ 

02:25.060 --> 02:29.740
そして､ それは日常的で平凡なことのように聞こえますが､ 何度もやっているうちに日常的になっているのです｡

02:29.740 --> 02:34.390
しかし､ 実際には､ 自分がとっているある行動を実行し､ 火にかけ､

02:34.390 --> 02:37.310
フライパンを火にかけるという環境です｡

02:37.310 --> 02:42.940
フライパンに卵を全部入れて､ 卵に塩を振って､ ひっくり返したりしていませんか？

02:42.940 --> 02:52.390
このように､ ある行動､ ある状態で取っている行動があり､ その行動が他のある状態や､ 時には報酬につながることもあるわけです｡

02:52.390 --> 02:58.960
例えば､ 火をつけて､ 待て待てというのは､ 待つ､ 待つ､ 待ちすぎるという行動をとっているわけです｡

02:58.960 --> 03:01.750
そして､ フライパンに卵を入れるのです｡ 

03:01.780 --> 03:03.490
報酬は非常にマイナスになりそうです｡ 

03:03.490 --> 03:04.540
燃えてしまいそうです｡ 

03:04.960 --> 03:08.920
逆に､ すべての正しい行動を正しいタイミングで行えば､ その効果は絶大です｡ 

03:08.920 --> 03:13.780
ですから､ 適切なタイミングでアクションを起こすことも非常に重要なことなのです｡ 

03:13.780 --> 03:20.590
だから､ たとえば卵を入れる前にフライパンに塩を入れるのは､ ベストな方法ではないかもしれません｡

03:20.590 --> 03:26.140
フライパンに卵を入れた後に塩を入れるというアクションを起こすといいかもしれませんね｡ 

03:26.140 --> 03:28.150
だから､ in the different stateで｡ 

03:28.150 --> 03:29.500
だから､ それを忘れないようにすることが大切なんです｡ 

03:29.500 --> 03:33.550
そして同時に､ 正しい順番で､ 正しい状態で､ すべての正しい行動をとれば､

03:33.550 --> 03:38.230
最終的な報酬として､ オムライスを食べることができるかもしれないのです｡

03:38.830 --> 03:41.950
そして､ それは人生の中でとても基本的な活動なんですね｡ 

03:41.950 --> 03:48.750
しかし､ よく考えてみると､ 実際には環境であり､ あなたはこの環境の中を進み､ タスクを実行するエージェントなのです｡

03:48.760 --> 03:52.060
すでにかなり分かっていることなので､ 特に学ぶ必要はありません｡ 

03:52.060 --> 03:55.990
でも同時に､ もっとおいしいオムレツを作る方法も学べるかもしれないし､ 特に初めて作るオムレツなら､

03:55.990 --> 03:58.900
きっと失敗するはずです｡

03:58.900 --> 04:05.770
しかし､ そこから学ぶのは､ どのような行動が状態や報酬など､ 人生におけるあらゆることにつながるのかを理解することでしょう｡

04:05.890 --> 04:11.830
例えば､ 株式市場で取引をして､ 売買して､ プラスやマイナスのリターンを返すという意味で､

04:11.830 --> 04:16.300
市場から一定のフィードバックを受けることだってありますよね｡

04:16.300 --> 04:20.020
それも環境であり､ その環境に自分がエージェントとして参加することです｡ 

04:20.020 --> 04:27.700
車の運転も､ ハンドルを切って､ 加速して､ ブレーキをかけて...と､ 環境からのフィードバックがありますよね｡

04:27.700 --> 04:36.820
そして､ そのフィードバックのひとつが､ 高速道路で許容される制限速度を超えて走っていると､ 警察官からスピード違反の罰金を取られることです｡

04:36.820 --> 04:42.970
そのため､ そこから「それはマイナスの報酬につながるから､ やってはいけないことだ」と学ぶのです｡

04:42.970 --> 04:45.520
だから､ 報酬はプロセスの一番最後にだけある必要はないのです｡ 

04:45.520 --> 04:47.740
彼らは､ 旅の間中､ プロセスの間中､ ずっといることができます｡ 

04:47.740 --> 04:49.420
そのため､ これらはいくつかの例です｡ 

04:49.420 --> 04:54.670
強化学習というのは､ 簡単に言うと､ 犬のしつけのようなものです｡ 

04:54.670 --> 04:58.120
犬にしつけをするときは､ ある命令を出します｡ 

04:58.120 --> 05:00.220
そして､ その命令に従った場合､ それを与えるのです｡ 

05:00.600 --> 05:02.260
ビスケットみたいなのをあげるんですね｡ 

05:02.260 --> 05:06.510
その命令に従わない場合は､ 「お前は悪い犬だ」と言い聞かせるか､ おやつを与えないだけです｡ 

05:06.520 --> 05:14.890
そして､ そのプロセスを通じて､ ある状態において､ あるコマンドや何をすべきか､ どんな行動をとるべきかを学習していくのです｡

05:14.890 --> 05:18.310
そして､ その状態とは､ あなたが与えているコマンドのことです｡ 

05:18.310 --> 05:21.100
そして､ それに基づいて､ 一定の報酬を得ることができるのです｡ 

05:21.400 --> 05:24.520
もちろん､ AIの世界では､ そこまで複雑ではありません｡ 

05:24.520 --> 05:26.860
AIにおやつを与えなくてもいいんです｡ 

05:26.860 --> 05:29.620
ビスケットの袋のようなものを毎回持っている必要はないのです｡ 

05:29.980 --> 05:32.170
プラス1かマイナス1をつけるだけです｡ 

05:32.170 --> 05:37.210
だから､ AIの世界では､ このAISを自分たちで作ってきたことが大きなアドバンテージになっているんです｡ 

05:37.210 --> 05:41.320
だから､ 私たちが彼らに与えている報酬は､ 考えてみれば､ これは本当にクールなことなのです｡ 

05:41.530 --> 05:43.450
あなたが彼らに与えている報酬は､ 実際には存在しないのです｡ 

05:43.450 --> 05:48.430
プラスマイナス1とか､ 1とか0とか､ そんなのばかりです｡ 

05:48.430 --> 05:52.990
つまり､ すべて非実在､ すべて空想のものでありながら､ 同時に素晴らしい結果につながるということです｡ 

05:53.110 --> 05:58.990
実際には存在しないプラスとマイナスの報酬を与えるだけで､ この素晴らしい人工知能によって､ このような素晴らしいもの､

05:58.990 --> 06:02.740
人工知能を作ることができるのです｡

06:02.770 --> 06:03.700
コストはかかりません｡ 

06:03.700 --> 06:09.700
しかし､ 同時に､ この結果は「Real World」やあの犬の例と非常によく似ています｡ 

06:09.700 --> 06:14.650
しかし､ ここでは報酬はデジタルで､ ただの数字です｡ 

06:14.890 --> 06:18.730
それを踏まえて､ ロボット犬について少しお話します｡ 

06:18.730 --> 06:19.420
私はこの例が大好きです｡ 

06:19.420 --> 06:21.250
だから､ これはただのランダムな写真なんだ｡ 

06:21.250 --> 06:28.870
必ずしもその通りのロボット犬が強化学習によって訓練されているわけではなく､ 一部のロボット犬､ 特に古いロボット犬はそうです｡

06:28.870 --> 06:30.850
そこにアルゴリズムがあるんだろう｡ 

06:31.180 --> 06:39.820
これは､ プリプログラム型エージェントと強化学習型エージェントの違いを示す良い例だと思います｡

06:39.820 --> 06:45.100
つまり､ 歩き方があらかじめプログラムされたロボット犬ができるわけです｡ 

06:45.130 --> 06:49.030
それは､ 例えばソフトウェアの中の犬の背後にあるアルゴリズムにそう書いてあるでしょう｡ 

06:49.030 --> 06:49.200
なるほど｡ 

06:49.240 --> 06:56.230
つまり､ 歩くためには､ 左足を前に出し､ 左前足を前に出し､ 後ろの右足を前に出し､ 前の右足を前に出し､

06:56.230 --> 07:00.700
後ろの左足を前に出し､ その動作を繰り返す必要があるのです｡

07:00.700 --> 07:04.720
そしてそれは､ 歩くということがこの犬の中の機能であるという定義なんです｡ 

07:05.120 --> 07:08.830
そして､ 座り方､ 立ち方などが書かれているかもしれません｡ 

07:09.460 --> 07:16.570
一方､ 強化学習によって訓練されるロボット犬では､ 事前にプログラミングをすることはありません｡

07:16.570 --> 07:24.670
これは､ ドッグにハードコードされたアルゴリズムを内部に持たないという､ ここでのすべてのキーコンセプトです｡

07:24.670 --> 07:28.240
その代わり､ これからお話しすることがありますよね｡ 

07:28.240 --> 07:41.860
強化学習アルゴリズムに､ 「今いる場所から､ 何も知らない状態で､ 例えば部屋の端まで行くことが目標だ」と言われたとします｡

07:41.860 --> 07:44.170
そして､ あなたができる確かなアクションをご紹介します｡ 

07:44.170 --> 07:49.300
右足､ 左足､ 右後ろ足､ 右後ろ足､ 左後ろ足のどれを動かしてもいいんです｡

07:49.300 --> 07:51.220
そこで､ できる自由度をすべてご紹介します｡ 

07:51.220 --> 07:52.390
このように動かすことができます｡ 

07:52.390 --> 07:53.050
本当に好きになっていいんです｡ 

07:53.050 --> 08:00.160
つまり､ 自分ができる行動をリストアップし､ 一歩前進するたびにプラス1が報酬となるような仕組みです｡

08:00.160 --> 08:03.970
転倒するたびにマイナス1点､ それだけです｡ 

08:03.970 --> 08:07.180
そして､ そのまま犬を放置して､ 自分で解決させるのです｡ 

08:07.180 --> 08:13.390
そこで､ 犬は立ち上がろうとして転び､ 「転ぶたびにマイナス1がつくから､ 転ぶきっかけになったあの行動はしてはいけない」と悟り､

08:13.390 --> 08:18.940
それなら立ち上がるのに役立った他の行動も同様だ､ と｡

08:18.940 --> 08:23.470
そして､ 実験､ 実験､ 実験､ ランダムにいろいろ試しているうちに､ 右前足を動かせば一歩前進できることがわかり､

08:23.470 --> 08:31.330
プラス1点を得て､ 「ああ､ もっとこうすればいいんだ」と気づくのです｡

08:31.330 --> 08:31.900
なるほど､ クールだ｡ 

08:31.900 --> 08:35.530
だから､ もっとこうすればいい､ もっとこうすればいい､ と学習するようになった｡ 

08:35.530 --> 08:42.160
そして､ この学習プロセスを通じて､ どうすれば歩けるようになるのかを､ 素早く､ とても素早く理解することができるのです｡ 

08:42.160 --> 08:49.810
そして､ 自分で考えた犬たちは､ 実はあらかじめプログラムされた犬よりも上手に歩けることがあるのです｡

08:49.810 --> 08:55.630
というのも､ プリプログラムは､ 実際の犬を見ながら､ あるいは自分たちの想像力を駆使して､ どうすればいいかということを考えるからです｡

08:55.630 --> 09:03.400
一方､ 強化学習ドッグは自分で最適化することができ､ AIなのでさらに良い結果が得られることもあります｡

09:03.400 --> 09:07.150
そうすることで､ 同じロボットである犬にサッカーをさせることができるのです｡ 

09:07.270 --> 09:12.910
普通の犬にサッカーをさせることはできません｡ なぜなら､ アプローチの仕方が違うからです｡ 

09:12.910 --> 09:22.750
そしてそれは､ おそらく普通の犬がその進化の過程で訓練されたり､ したことのあることではありません｡

09:22.750 --> 09:28.090
一方､ 強化学習ロボットの犬は､ 報酬は何か､ ゴールは何か､ 取りうる行動は何かを教えてあげれば､

09:28.090 --> 09:32.560
サッカーのやり方を簡単に理解することができます｡

09:32.830 --> 09:36.880
一般的な強化学習の仕組みはそうなっているんですね｡ 

09:36.880 --> 09:39.070
以上が強化学習の簡単な概要です｡ 

09:39.070 --> 09:44.560
なぜなら､ プリプログラムされたソリューションやハードプログラム､ ハードコーディングされたソリューションとはまったく異なる世界であり､

09:44.560 --> 09:51.880
「もし､ そうでなければ」という条件があるからです｡

09:51.880 --> 09:55.900
これは全く違うので､ これから詳しくお話しします｡ 

09:55.900 --> 09:59.140
その間に､ 追加の読み物を用意しました｡ 

09:59.140 --> 09:59.710
だから

09:59.940 --> 10:06.760
裏付けとなる資料が欲しいという方は､ こちらの記事をご覧になってみてください｡

10:06.780 --> 10:09.180
TensorFlowによるシンプルな強化学習ということです｡ 

10:09.210 --> 10:10.500
10個のパーツがあるんです｡ 

10:10.500 --> 10:15.660
リンクはこちらで､ コースの中で完全なクリッカブルリンクを見つけることができます｡ 

10:15.660 --> 10:17.750
リソースはArthur Giulianiによるものです｡ 

10:17.760 --> 10:24.660
2016年の記事ですが､ このコースに沿って､ その記事から追加情報を得ることもできます｡

10:24.660 --> 10:29.640
しかし､ その記事はTensorFlowを使ったものであるのに対し､ この講座ではPyTorchを使っているので､

10:29.640 --> 10:33.150
実装は違えどインプリメンテーションがあることに留意してください｡

10:33.150 --> 10:41.190
しかし同時に､ このコースで行う学習を補うようなものを､ あちこちで手に入れることができるかもしれません｡

10:41.190 --> 10:44.700
だから､ 確実にフォローしようと考えていなくても､ 素晴らしい記事がフォローされるのです｡ 

10:44.700 --> 10:51.750
ただ､ 念のため､ その最初の部分をチェックして､ 気に入ったかどうか､ もう少し読んでみたいかどうかを見てください｡

10:51.900 --> 10:56.580
そして､ このチュートリアルでは､ 強化学習について具体的に説明しています｡ 

10:56.580 --> 11:02.370
Richard Suttonの論文で､ Reinforcement Learning One Introductionというのがあります｡ 

11:02.370 --> 11:04.590
1998年の論文ですから､ かなり古いものです｡ 

11:04.680 --> 11:08.850
しかし､ 同時に強化学習についても少し学ぶことができます｡ 

11:09.090 --> 11:14.880
あのオムライスの例など､ 強化学習が適用できる例もあります｡

11:14.880 --> 11:20.520
また､ 強化学習の一般的な概要もご紹介していますので､ ぜひご一読ください｡ 

11:20.520 --> 11:23.130
ということで､ このチュートリアルを終わります｡ 

11:23.130 --> 11:24.570
次回が待ち遠しいです｡ 

11:24.570 --> 11:26.100
そしてそれまで､ お楽しみに｡ 

11:26.100 --> 11:26.670
I.
