WEBVTT

00:00.180 --> 00:02.580
こんにちは､ このPythonチュートリアルへようこそ｡ 

00:02.730 --> 00:08.160
さて､ ネットワーククラスのinit関数でニューラルネットワークのアーキテクチャを構築したところで､

00:08.160 --> 00:12.870
今度は2番目の関数､ つまりforward関数を作ってみましょう｡

00:12.870 --> 00:15.630
そして､ その機能が神経細胞を活性化させることになるのです｡ 

00:15.630 --> 00:19.200
つまり､ 順伝搬を行う機能である｡ 

00:19.710 --> 00:20.730
では､ こうしてみましょう｡ 

00:20.730 --> 00:25.500
この機能を､ 先程のようにフォワードと呼ぶことにしましょう｡ 

00:25.500 --> 00:29.420
そして､ この関数は2つの引数を取ることになる｡ 

00:29.430 --> 00:37.250
まず､ いつものようにセルフで､ FC1とFC2を使うので､ オブジェクトの変数を使えるようにすることです｡

00:37.260 --> 00:38.640
だから､ 自己が必要なんです｡ 

00:39.320 --> 00:41.120
これらの変数を使用できるようにすること｡ 

00:41.120 --> 00:46.910
そして､ 2番目の引数が必要です｡ これは入力で､ stateと呼ぶことにします｡ stateは､

00:46.910 --> 00:50.480
まさにニューラルネットワークの入力だからです｡

00:50.720 --> 00:54.560
それが､ ニューラルネットワークに入る入力となる状態です｡ 

00:54.560 --> 01:00.470
そして､ 出力として､ 左へ行く､ まっすぐ行く､ 右へ行くという3つの行動の可能性を示すキュー値が用意されます｡

01:00.470 --> 01:05.620
しかし､ ここで引数として入力する必要はない｡ なぜなら､ それこそが返したいものだからだ｡ 

01:05.630 --> 01:11.270
この前方関数は､ ニューロンを活性化するだけでなく､ 入力の状態に応じて､

01:11.270 --> 01:15.860
可能な行動ごとに手がかりとなる値を返します｡

01:16.430 --> 01:18.920
よし､ これで必要な引数は2つだ｡ 

01:18.920 --> 01:24.020
そして､ この関数の内部で､ 何をさせたいかを指定しましょう｡ 

01:24.650 --> 01:24.920
なるほど｡ 

01:24.920 --> 01:32.030
そこで､ まず最初に行うのは隠れニューロンを活性化することで､ 隠れニューロンを変数Xで呼び出すことにします｡

01:32.030 --> 01:34.550
つまり､ Xは隠れニューロンを表しています｡ 

01:34.550 --> 01:36.620
それで､ どうやって活性化させるのか？

01:36.650 --> 01:39.890
まあ､ もちろん､ 入力したニューロンを

01:39.920 --> 01:49.430
最初のFC1完全接続を使って隠れニューロンを作り､ その上に活性化関数を適用するつもりです｡

01:49.580 --> 01:51.160
では､ どうすればいいのか？

01:51.170 --> 02:02.570
ニューラルネットワークを実装するためのPyTorchの全関数を含むtorch dot net dot functionalモジュールをインポートして､ ショートカットをつけたことを思い出してください｡

02:02.570 --> 02:08.060
F では､ 実際にこれから行うのは､ 関数モジュールからこれらの関数の一つを使用し､

02:08.060 --> 02:11.180
この関数が本当の関数となるわけです｡

02:11.180 --> 02:12.290
では､ 価値とは何でしょうか｡ 

02:12.320 --> 02:16.370
値とは､ 直観講義で見た整流器の機能です｡ 

02:16.370 --> 02:18.950
これは､ レクチファイヤーという機能に付けられた名前に過ぎません｡ 

02:18.950 --> 02:26.060
しかし､ この関数はその中のfというショートカットの関数から取ったものなので､ まずここにf

02:26.060 --> 02:31.730
dotと入力し､ そこからこの関数を取ることができます｡

02:31.730 --> 02:36.140
そして､ 実際にr eと入力すると､ ほら､ 価値関数が出来上がりました｡ 

02:36.410 --> 02:41.600
つまり､ これが隠れニューロンを活性化させる整流関数で､ それがXです｡ 

02:41.780 --> 02:46.160
この値関数で､ 私たちは何を入力しなければならないかを完全に理解することができました｡ 

02:46.160 --> 02:50.570
それが､ 活性化させたいニューロン､ つまり隠れニューロンです｡ 

02:50.570 --> 02:54.290
そして､ これらの隠れニューロンを得るために､ 最初の完全な接続を行うことになります｡ 

02:54.290 --> 03:01.430
FC One 入力ニューロンから隠れニューロンへ行くために､ 入力ニューロンに適用するものです｡ 

03:01.580 --> 03:03.710
では､ 最初のフル接続をしてみましょう｡ 

03:03.710 --> 03:07.970
FC one しかし､ 最初の完全な接続は､ 私たちのオブジェクトの変数です｡ 

03:07.970 --> 03:13.460
したがって､ ここにまず自己のドットFC1を入力する必要があります｡ 

03:13.460 --> 03:16.670
これが私たちのニューラルネットワークの最初の完全な接続です｡ 

03:16.700 --> 03:24.080
そして､ この最初の接続の中に､ 入力ニューロンから隠れニューロンへ行くための入力状態を入力することになります｡

03:24.170 --> 03:30.530
そして､ stateという名前をつけたので､ ここでstateと入力すればいいわけです｡ 

03:30.530 --> 03:33.530
これで隠れニューロンを活性化させることができました｡ 

03:34.390 --> 03:34.900
わかりました｡ 

03:34.900 --> 03:40.300
そして､ 隠れニューロンができたので､ 出力ニューロンを返すことにします｡ 

03:40.420 --> 03:46.180
次の行で､ ご理解いただいたように､ 出力ニューロンは私たちの行動に対応するわけです｡ 

03:46.180 --> 03:48.060
しかし､ これらは直接的にはアクションではありません｡ 

03:48.070 --> 03:55.840
これらはQ値で､ ディープラーニングモデルを組み合わせて学習し続けるモデルを構築しているからです｡

03:55.840 --> 04:00.820
したがって､ ここではキー・ラーニングを使って､ 各アクションのQ値を求めているのです｡ 

04:00.820 --> 04:05.770
そして､ 後でソフトマックスやARGマックスを使い､ 最終的なアクションを得ることになるのです｡ 

04:06.590 --> 04:11.060
つまり､ ここでは､ これから紹介する変数が出力ニューロンに対応することになる｡ 

04:11.060 --> 04:17.360
そして､ 出力ニューロンはQ値なので､ まあ､ この変数をQ値と呼ぶことにします｡ 

04:18.030 --> 04:18.710
これでよしとしよう｡ 

04:18.720 --> 04:24.470
そこで､ 値をキューに入れ､ 今度は直接､ 完全な接続､ つまり変数を取ります｡ 

04:24.480 --> 04:26.850
FC 2 しかし､ 私たちのオブジェクトから変数を｡ 

04:26.850 --> 04:28.500
だから､ 私たちはここで自己紹介をします｡ 

04:28.920 --> 04:34.660
FC 2 そしてもちろんここでは､ この接続の左側のニューロンを入力します｡ 

04:34.680 --> 04:38.010
それが､ 1行目からxとなった｡ 

04:38.010 --> 04:40.600
そこでX､ です｡ 

04:40.620 --> 04:42.510
これでQ値が求まりました｡ 

04:42.510 --> 04:45.570
これがニューラルネットワークの出力ニューロンです｡ 

04:46.800 --> 04:48.700
そして､ 最後の行のコード｡ 

04:48.720 --> 04:57.840
もちろん､ この4番目の関数は､ このQ値を返すために使われるので､ returnを付けて単にQとするだけでいいのです｡

04:58.750 --> 05:03.370
値で､ 可能な各アクションの Q 値を返します｡ 

05:03.370 --> 05:05.500
左へ行く､ まっすぐ行く､ 右へ行く｡ 

05:06.240 --> 05:08.280
それでは､ おめでとうございます｡ 

05:08.280 --> 05:09.990
最初の授業は終了しました｡ 

05:09.990 --> 05:13.440
そして実は､ ニューラルネットワークのアーキテクチャを作り終えているのです｡ 

05:13.470 --> 05:15.390
これは完成品ではないことを忘れないでください｡ 

05:15.390 --> 05:19.800
ニューラルネットワークのアーキテクチャは､ さまざまなものを試すことで常に改善することができます｡ 

05:19.800 --> 05:22.710
だから､ ここでニューロンを増やして､ 自由にやってください｡ 

05:22.710 --> 05:28.020
例えば､ 隠れニューロンを50個追加したい場合は､ ここの30とここの30を50､ 50､

05:28.020 --> 05:30.270
50と置き換えるだけでいいのです｡

05:30.480 --> 05:34.740
そして､ 新たなフル・コネクションを作ることで､ さらに隠れたレイヤーを追加することができるのです｡ 

05:34.740 --> 05:37.440
まあ､ それがまさにアーティストの仕事なんですけどね｡ 

05:37.440 --> 05:41.790
それぞれの状況において､ 何がベストなアーキテクチャなのか､ 一般的なルールはないのです｡ 

05:41.790 --> 05:43.620
だからこそ､ 実験が必要なんです｡ 

05:43.620 --> 05:45.780
でも､ もうそれでやってみましょうよ｡ 

05:45.780 --> 05:49.530
いずれはかなり優秀な自動運転車が登場するのは目に見えています｡ 

05:50.010 --> 05:50.520
わかりました｡ 

05:50.520 --> 05:54.570
そして､ 次の授業は体験リプレイについてです｡ 

05:54.570 --> 05:57.420
そして､ 次の3つのチュートリアルでそれを作っていく予定です｡ 

05:57.420 --> 05:58.620
それまではお楽しみに｡ 

05:58.620 --> 05:59.160
I.
