WEBVTT

00:00.270 --> 00:04.380
こんにちは､ 脳を作る最後の工程へようこそ｡ 

00:04.380 --> 00:06.300
左にする機能は1つです｡ 

00:06.300 --> 00:16.080
これは､ 3つの畳み込み層と完全接続層を含むニューラルネットワークの全層に信号を伝搬させる前進関数である｡

00:16.080 --> 00:27.360
この関数は､ 自動運転車と全く同じように前進する関数ですが､ 今回は完全連結層の前に畳み込み層で信号を伝搬させなければならない点が異なります｡

00:27.360 --> 00:32.910
そして､ 良いニュースは､ 我々はすでに前のステップでニューロン数関数でそれを行ったので､

00:32.910 --> 00:37.110
畳み込み層に信号を伝搬させるコードがすでにあることです｡

00:37.110 --> 00:38.790
というわけで､ あっという間です｡ 

00:38.790 --> 00:45.360
ここでやったことと､ 自動運転車のためにやったことを組み合わせれば､ 私たちの脳の前進機能ができあがるのです｡

00:45.540 --> 00:46.680
では､ こうしてみましょう｡ 

00:46.680 --> 00:54.810
この関数は､ 前述した self と x を引数にとり､

00:54.900 --> 01:03.840
信号がニューラルネットに伝搬されると X

01:03.840 --> 01:10.110
が更新される｡

01:10.440 --> 01:14.100
では､ Colinと､ 関数の中に入ってみましょう｡ 

01:14.100 --> 01:20.340
つまり､ 先ほど申し上げたように､ 3つの畳み込み層に信号を伝播させるためのコードはすでにできているのです｡ 

01:20.340 --> 01:23.370
それがまさにこの3行のコードです｡ 

01:23.370 --> 01:28.920
だから､ コピーしてここに貼り付けているのですが､ これがなかなか｡ 

01:28.920 --> 01:35.580
すでに3つの畳み込み層で信号の伝搬が完了しているので､ あとは畳み込み層から隠れ層へ､

01:35.580 --> 01:45.120
そして最終的にはニューラルネットワークの一番最後にある出力層へ信号を伝搬させるだけです｡

01:45.120 --> 01:50.880
そして､ そのためには､ まず､ ここで得た3番目の畳み込み層を平坦化する必要があります｡ 

01:50.880 --> 01:58.260
最初はXが入力画像で､ ここでXが第一畳み込み層になり､ ここでXが第二畳み込み層になり､

01:58.260 --> 02:03.720
ここでXが第三畳み込み層になると覚えておいてください｡

02:03.720 --> 02:07.620
つまり､ 今の段階では､ xが3番目の畳み込み層ということになります｡ 

02:07.620 --> 02:14.010
そして､ 今度は平坦化層を得るために､ この第3畳み込み層xを平坦化する必要がある｡ 

02:14.010 --> 02:18.090
そのために､ ここでやったのとよく似たことをやるんです｡ 

02:18.090 --> 02:20.730
ただ､ 今回はニューロンの数は必要ない｡ 

02:20.730 --> 02:24.870
3番目の畳み込み層のチャンネルを平らにすればいいのです｡ 

02:24.870 --> 02:27.990
ですから､ これはもっとシンプルなものですが､ 非常によく似ています｡ 

02:28.140 --> 02:35.400
そして､ これをうまくやるには､ Xが平坦化レイヤーになるため､ もう一度Xを取ることになります｡ 

02:35.640 --> 02:38.610
つまり､ xを更新しているだけなので､ xは等しい｡ 

02:38.610 --> 02:40.350
そして､ 再びxを取る｡ 

02:40.350 --> 02:44.340
しかし､ このxは3番目の畳み込み層である旧xである｡ 

02:44.340 --> 02:52.290
そこで､ 3番目の畳み込み層､ ドット､ そして2つの引数を適用したビュー関数を取ります｡

02:52.290 --> 02:55.590
1つ目は､ xドットサイズ0｡ 

02:55.860 --> 03:01.740
そこで､ ここでもサイズ関数を用いて､ 第3畳み込み層の全チャンネルの全ピクセルを取り出し､

03:01.740 --> 03:03.900
それを次々と並べていく｡

03:03.900 --> 03:11.190
そして､ この巨大なベクトルがこのXとなり､ このXが完全連結ネットワークの入力となる｡

03:11.190 --> 03:15.960
しかし､ ここで加えるべきはコンマとマイナス1だけではありません｡ 

03:15.960 --> 03:19.140
その仕掛けは､ PyTorchのチュートリアルに載っています｡ 

03:19.140 --> 03:24.990
このように､ 複数のチャンネルで構成される畳み込みレイヤーを､ サイズ関数を使って平坦化することができるのです｡ 

03:24.990 --> 03:29.790
もちろん､ この仕組みの詳細が知りたければ､ pytorchのチュートリアルに行けばいいんですけどね｡ 

03:29.790 --> 03:31.200
リンクを提供します｡ 

03:31.560 --> 03:43.590
さて､ 平坦化層ができたので､ この平坦化層は､ 単純な線形伝送を行う古典的な完全連結ネットワークの入力になるわけですね｡

03:43.590 --> 03:48.210
それで､ 今度はコンボリューション関数を使って信号を渡すのではありません｡ 

03:48.210 --> 03:53.820
線形クラスで線形伝送を行い､ 線形性を崩すために､ 画像を扱うので､

03:53.820 --> 04:03.060
画像には非線形関係があり､ この非線形関係を学習できるように整流関数を使います｡

04:03.300 --> 04:04.410
では､ こうしてみましょう｡ 

04:04.410 --> 04:06.000
実はこれ､ 次のステップなんです｡ 

04:06.000 --> 04:09.120
そして今､ それはまさに自動運転車のためにやったようなことなのです｡ 

04:09.120 --> 04:11.970
またアップデートしたいからXを取る｡ 

04:11.970 --> 04:14.580
今､ 隠れ層を手に入れたいのです｡ 

04:14.820 --> 04:18.930
そこでまず､ 私たちが行うことは､ 完全な接続を取ることです｡ 

04:18.930 --> 04:20.940
FC1完全接続のため｡ 

04:20.940 --> 04:25.290
FC1は､ 平坦化層と隠れ層をつなぐものです｡ 

04:25.290 --> 04:32.730
そこで､ FC1を使って､ 今あるX（フラットニング層）に適用する必要があります｡

04:32.730 --> 04:39.440
FC oneはinit関数の変数なので､ selfはFC one xを行い､

04:39.450 --> 04:45.420
平坦化層から隠れ層へ線形に信号を渡しますから｡

04:45.420 --> 04:49.890
しかし､ 今度はこのニューロンを活性化させると同時に､ 直線性を崩す必要があるのです｡ 

04:49.890 --> 04:53.220
そして､ それがまさにRectifier活性化関数で行われるのです｡ 

04:53.220 --> 04:58.050
さて､ 次は機能モジュールです｡ 

04:58.050 --> 04:59.610
そして､ この機能モジュールから

05:00.220 --> 05:07.690
もちろん､ 整流された関数がその値であり､ 括弧の中にselfというFC1が入ります｡ 

05:08.050 --> 05:08.380
わかりました｡ 

05:08.380 --> 05:17.140
つまり､ このコードの行では､ まず平坦化層から完全連結ネットワークの隠れ層に信号を伝搬させるのです｡

05:17.320 --> 05:24.490
そして､ この整流器活性化関数で線形性を破って､ この隠れ層のニューロンを活性化させるのです｡

05:24.490 --> 05:27.700
そして､ 隠れ層はここでXとなります｡ 

05:28.240 --> 05:28.960
完璧です｡ 

05:28.960 --> 05:31.030
そして､ これで一段落です｡ 

05:31.030 --> 05:38.590
もちろん､ 最終的に出力ニューロンがある隠れ層から出力層へ信号を伝播させるためである｡

05:38.590 --> 05:40.930
そして､ これをうまくやるには､ それはとてもシンプルなことです｡ 

05:40.930 --> 05:43.450
それはまさに､ 自動運転車のためにやったようなものです｡ 

05:43.450 --> 05:46.330
2回目の完全接続を行う｡ 

05:46.330 --> 05:53.440
FC 2 そして､ もちろん､ 今まさにxである隠れ層のニューロンにも適用します｡ 

05:53.440 --> 05:55.780
ということで､ xが隠れ層のニューロンです｡ 

05:55.810 --> 06:02.620
この古いxとここでのxは､ もちろんQ値を含む出力層の出力ニューロンになる｡ 

06:02.980 --> 06:10.030
そして最後に､ Q値でXとなる出力ニューロンを返すだけである｡ 

06:10.030 --> 06:11.080
とても完璧です｡ 

06:11.080 --> 06:12.130
おめでとうございます｡ 

06:12.130 --> 06:13.660
脳を作ったところです｡ 

06:13.660 --> 06:17.620
目と残りの細胞で目の脳を作っただけです｡ 

06:17.620 --> 06:18.970
だから､ おめでとうございます｡ 

06:18.970 --> 06:26.440
あとは､ 脳ですべての信号が処理された後､ どのようにアクションを演じるかを定義している本体を作ることになります｡

06:26.440 --> 06:28.210
それが､ 私たちの第二の大きな一歩です｡ 

06:28.210 --> 06:30.130
次のチュートリアルでやってみましょう｡ 

06:30.130 --> 06:31.420
そしてそれまで､ お楽しみに｡ 

06:31.420 --> 06:31.870
I.
