WEBVTT

00:00.480 --> 00:03.150
こんにちは､ 今日もディープラーニングの講座にようこそ｡ 

00:03.150 --> 00:10.800
今回はMaxプーリングについてですが､ これから非常にエキサイティングなスライドが待っていますし､ チュートリアルの最後には特別なサプライズもあります｡

00:10.800 --> 00:12.260
では､ さっそく始めましょう｡ 

00:12.270 --> 00:15.780
まず､ プーリングとは何か､ なぜ必要なのかという疑問があります｡ 

00:15.810 --> 00:18.540
では､ その答えとして､ この画像をご覧ください｡ 

00:18.540 --> 00:20.640
この3枚の画像には､ チーターが写っています｡ 

00:20.640 --> 00:23.580
実は､ 最初の画像と全く同じチーターなのです｡ 

00:23.580 --> 00:26.130
画像が正しく配置されている｡ 

00:26.220 --> 00:27.900
チーターがまっすぐこちらを見ている｡ 

00:27.900 --> 00:32.490
2枚目の画像では少し回転しており､ 3枚目の画像では少しつぶれています｡ 

00:32.490 --> 00:41.190
ここで重要なのは､ ニューラルネットワークが､ これらの画像のすべてに写っているチーターを認識できるようにすることです｡

00:41.190 --> 00:43.170
実はこれ､ 1匹のチーターなんです｡ 

00:43.170 --> 00:45.030
もし､ たくさんの種類のチーターがいたらどうしますか？

00:45.030 --> 00:45.960
ここにチーターがいます｡ 

00:45.960 --> 00:47.160
ここにチーターがいます｡ 

00:47.160 --> 00:48.480
こちらもチーターです｡ 

00:48.510 --> 00:51.420
ここにチーターがいる､ ここにチーターがいる､ ここにチーターがいる｡ 

00:51.420 --> 00:55.860
そして､ ニューラルネットワークに､ これらのチーターをすべてチーターとして認識させたいのです｡ 

00:55.980 --> 01:01.710
しかも､ 全員が違う方向を見ているのに､ どうしてそんなことができるのでしょうか？

01:01.710 --> 01:04.050
全部違うところに写っているんですよ｡ 

01:04.050 --> 01:06.990
顔の位置がバラバラになっているようなんです｡ 

01:06.990 --> 01:10.560
誰かが右手に､ 誰かが左隅に､ 誰かが真ん中に｡ 

01:10.860 --> 01:12.390
どれもちょっとずつ違うんです｡ 

01:12.480 --> 01:16.110
質感がちょっと違うし､ 照明もちょっと違う｡ 

01:16.110 --> 01:17.340
小さな違いがたくさんあるんです｡ 

01:17.340 --> 01:23.130
それで､ ニューラルネットワークがまさにある特徴を探すと､

01:23.130 --> 01:31.740
例えば､ チーターの特徴として､ 目から行く顔にある涙や､ 涙に見える影､ 質感､

01:31.740 --> 01:36.090
目から下に行く模様があります｡

01:36.090 --> 01:37.740
鼻の大きさにありますね｡ 

01:37.740 --> 01:38.430
涙のように見える｡ 

01:38.430 --> 01:40.680
それがチーターの特徴です｡ 

01:40.680 --> 01:48.600
しかし､ あるチーターから学んだその特徴を､ 正確な場所､ 正確な形､ 質感で探しているとしたら､

01:48.600 --> 01:53.190
他のチーターを見つけることはできないでしょう｡

01:53.190 --> 02:16.560
つまり､ 特徴が画像のどこにあるかは気にしないのです｡

02:16.560 --> 02:23.340
しかし､ 特徴が少し傾いていても､ 特徴の質感が少し違っても､ 特徴が少し近づいても､

02:23.340 --> 02:30.150
特徴が相対的に少し離れても､ 気にする必要はありません｡

02:30.150 --> 02:37.200
ですから､ 特徴そのものが少し歪んでいても､ ニューラルネットワークがその特徴を見つけられるような柔軟性が必要で､

02:37.200 --> 02:42.120
それがプーリングなのです｡

02:42.510 --> 02:44.880
では､ プーリングの仕組みを見てみましょう｡ 

02:44.880 --> 02:46.080
これが私たちのフィーチャーマップです｡ 

02:46.080 --> 02:52.470
つまり､ すでに畳み込みを行っており､ その部分は完成しているので､ 今度は畳み込みレイヤーを使って作業することになります｡

02:52.500 --> 02:53.820
今度はプーリングを適用します｡ 

02:53.820 --> 02:54.600
では､ その仕組みはどうなっているのでしょうか｡ 

02:54.600 --> 02:56.280
これからマックスプーリングが適用されます｡ 

02:56.550 --> 03:03.360
プーリングには､ 平均プーリング､ 最大プーリング､ いくつかのプーリングがあり､ このチュートリアルの最後にそれについてコメントします｡

03:03.360 --> 03:05.010
でも､ 今はマックスプーリングを適用しているだけです｡ 

03:05.010 --> 03:12.240
このように2×2ピクセルのボックスを取るわけですが､ やはり2×2である必要はないのです｡ 

03:12.270 --> 03:13.470
箱の大きさは自由に選べます｡ 

03:13.470 --> 03:18.360
そしてまた､ トライアルの最後のほうでコメントしますが､ 左上に置いて､

03:18.360 --> 03:21.840
そのボックスの中で最大値を見つけるのです｡

03:21.840 --> 03:26.100
そして､ その値だけを記録し､ 他の3つは無視するのです｡ 

03:26.100 --> 03:31.530
つまり､ 4つの値がありますが､ 3つは無視して､ 最大値である1つだけを残します｡

03:31.530 --> 03:36.000
そして､ 自分の箱をストライド分右に移動させ､ もう一度ストライドを選択します｡ 

03:36.000 --> 03:41.010
そこで､ ここではストライドを2にしていますが､ これは通常選択するものです｡ 

03:41.010 --> 03:42.780
1本分のストライドを､ 選択することができるのです｡ 

03:42.780 --> 03:44.310
だから､ 箱が重なっているんです｡ 

03:44.310 --> 03:48.090
好きな種類の歩幅を選ぶことができ､ 必要であれば3歩でも可能です｡ 

03:48.600 --> 03:52.290
しかし､ ここでは2ストライドを選択しており､ それが一般的に使われているものです｡ 

03:52.290 --> 03:53.850
そして､ それを繰り返す､ 繰り返す｡ 

03:53.850 --> 03:55.770
ここで最大値を記録するのです｡ 

03:55.770 --> 03:59.880
もし､ 越えても問題ないのであれば､ 今やっていることを続けていけばいいのです｡ 

03:59.880 --> 04:07.230
つまり､ 最大値はここ､ ゼロはここ､ 最大値は4はここ､ 最大値は2はここ､ 最大値は10102､

04:07.230 --> 04:10.740
そして1と記録していくのです｡

04:11.190 --> 04:13.920
というわけで､ ご覧の通り､ いくつかのことが起こりました｡ 

04:13.920 --> 04:18.360
まず､ やはり機能を残すことができましたね｡ 

04:18.930 --> 04:23.670
畳み込み層の仕組みがわかっているからこそ､ それらが表す最大の数値がわかる｡ 

04:23.670 --> 04:31.410
特徴量マップの最大値や少し大きな数値は､ 実際にその特徴量に最も近い類似性を見つけた場所を表していることが分かります｡

04:31.410 --> 04:38.190
しかし､ これらの機能をプールすることで､ まず情報の75%を取り除くことになります｡ 

04:38.190 --> 04:51.240
4ピクセルのうち3ピクセルを無視しているので､ 25％しか維持できていないのです｡

04:51.240 --> 04:59.880
また､ ピクセルの最大値を取っているので､ そのピクセルの値､ または､ そのピクセルの値の最大値を取っています｡ 

05:00.480 --> 05:04.080
そのため､ 歪みを考慮しています｡ 

05:04.080 --> 05:11.880
だから､ 例えば､ チーターの涙が目に入るような2枚の画像は

05:12.060 --> 05:15.480
1枚の画像の中に､ 左側に1ビット､ または1ビット回転した画像があります｡ 

05:15.480 --> 05:16.080
そしてもうひとつ｡ 

05:16.080 --> 05:21.330
このように､ あるものを基準にして､ もう1つを左に回転させると､

05:21.330 --> 05:26.490
プールされた機能はまったく同じになります｡

05:26.490 --> 05:30.360
だから､ 私たちが詐欺師について話しているかどうか､ ここで見ることができます､ 乾杯｡ 

05:30.360 --> 05:34.110
じゃあ､ これが4で､ ここがここだったとしましょう｡ 

05:34.110 --> 05:35.970
それから､ 少し回転していた場合｡ 

05:35.970 --> 05:42.690
例えば､ 4つのフィーチャーマップがここにあるとして､ プーリングしても､ 同じようにプーリングされたフィーチャーマップが得られます｡

05:42.960 --> 05:46.140
それが原理原則のようなものです｡ 

05:46.410 --> 05:51.930
非常に大雑把な説明で､ 直感的な説明ですが､ プーリングのポイントは､

05:51.930 --> 06:02.130
特徴を維持しつつ､ 空間やテクスチャなどの歪みを考慮できることです｡

06:02.130 --> 06:05.730
そして､ それらに加えて､ サイズを小さくしています｡ 

06:05.730 --> 06:07.290
つまり､ もうひとつの利点があるのです｡ 

06:07.290 --> 06:12.900
つまり､ 特徴を維持したまま､ 空間不変量を導入し､

06:12.900 --> 06:19.470
サイズを75％削減することができたのです｡

06:19.470 --> 06:25.050
さらに､ プーリングのもう一つの利点は､ パラメータの数を減らすことです｡ 

06:25.050 --> 06:27.750
そこで､ 再び75％削減することにしました｡ 

06:27.750 --> 06:35.160
ニューラルネットワークの最終層に入るパラメータの数を減らすことで､ オーバーフィッティングを防いでいるのです｡

06:35.160 --> 06:41.100
情報を削除しているのは､ プーリングの非常に重要なメリットです｡ 

06:41.100 --> 06:42.510
そして､ それは良いことだと思います｡ 

06:42.510 --> 06:52.620
そうすれば､ モデルがその情報に過剰にフィットすることがなくなるからです｡ なぜなら､ その情報は特に関連性がないからです｡

06:52.620 --> 06:57.060
冒頭でお話したように､ 私たち人間にとっても､ 目に入ってくるさまざまなノイズよりも､

06:57.060 --> 07:02.370
特徴を正確に見ることが大切です｡

07:02.550 --> 07:04.440
まあ､ ニューラルネットワークも同じことなんですけどね｡ 

07:04.440 --> 07:12.090
このように､ 重要でない不要な情報を無視することで､ オーバーフィッティングの防止に役立っているのです｡ 

07:12.240 --> 07:12.990
だから､ 彼らは行くのだろう｡ 

07:12.990 --> 07:14.520
それがプーリングです｡ 

07:14.520 --> 07:18.720
そして､ ここでの疑問はもちろん､ 「なぜ？

07:18.720 --> 07:19.800
なぜMax Poolingなのか､ ですね｡ 

07:19.800 --> 07:25.020
プーリングにはいろいろな種類があり､ なぜアストライドなのか､ なぜ2×2ピクセルのサイズなのか､ などなど､

07:25.020 --> 07:26.520
いろいろあります｡

07:26.520 --> 07:40.890
そこで､ ボン大学のドミニク・シェラーによる「物体認識のための畳み込みアーキテクチャにおけるプール操作の評価」という素敵な研究論文を紹介したいと思います｡

07:40.890 --> 07:47.460
この論文の素晴らしいところは､ とてもシンプルでわかりやすいところです｡ 

07:47.460 --> 07:51.480
では､ これまで研究論文を読んだことがない人は､ どんなことに挑戦してみたいのでしょうか｡ 

07:51.480 --> 07:53.760
これは素晴らしいところです｡ 

07:53.760 --> 07:56.790
わずか10ページと短く､ とても読みやすい｡ 

07:56.790 --> 08:05.880
さらに､ 畳み込みとプーリングについて説明したことで､ この論文で語られていることすべてにすっかり慣れてしまうというおまけつきです｡

08:05.880 --> 08:09.360
そしてあなたは､ これは実際にあなたの知識を強化するための素晴らしい方法です｡ 

08:09.360 --> 08:11.550
だから､ この論文はぜひチェックしてほしい｡ 

08:11.700 --> 08:17.520
20分ほどかけて読みますので､ 関連作品と呼ばれるパート2は飛ばしても大丈夫です｡ 

08:17.520 --> 08:19.800
ちょっと遠回しに感じたり､ 疎外感を感じたりしたら｡ 

08:19.800 --> 08:20.970
そこだけは読まないでください｡ 

08:20.970 --> 08:23.610
そのまま第1部～第3部まで行ってください｡ 

08:23.610 --> 08:33.150
この論文では､ サブサンプリングという概念について述べていますが､ サブサンプリングとは基本的に平均値のプーリングです｡

08:33.150 --> 08:37.320
だから､ 私たちが最大限の努力をしたことを忘れないでください｡ 

08:37.320 --> 08:39.870
だから､ 私たちの広場では､ 最大値を取っていたのです｡ 

08:39.870 --> 08:42.990
ミーンプーリングとかサムプーリングという考え方があります｡ 

08:42.990 --> 08:46.740
いくつかのプーリングは､ これらの値を平均プーリングまたは平均プーリングに上げるだけですか？

08:46.740 --> 08:53.850
サブサンプリングは､ 平均値プーリングを一般化したようなもので､ これらの中から平均値を取り出します｡

08:53.850 --> 09:00.780
これらの値の平均を取るという､ より一般的なアプローチです｡ 

09:00.780 --> 09:06.390
詳しくは論文を読んでいただきたいのですが､ それ以外は､ その論文を読むときは､ アベレージプーリングとでも思ってください｡

09:06.720 --> 09:09.690
そこで､ このトピックに関する追加情報を得ることができるのです｡ 

09:09.690 --> 09:12.270
さて､ ここでこれまでのことを振り返ってみましょう｡ 

09:12.270 --> 09:14.070
これが入力画像です｡ 

09:14.610 --> 09:18.870
そして､ 畳み込み演算を適用して､ 畳み込み層を得る｡ 

09:18.870 --> 09:24.090
そして､ 得られたそれぞれのフィーチャーマップに､ プーリングレイヤーを適用したところです｡ 

09:24.090 --> 09:31.920
さて､ 畳み込みとプーリングの2つのステップを終えましたが､ 次はとても楽しい､ ワクワクするようなことをやってみましょう｡

09:31.920 --> 09:34.380
実験することになりました｡ 

09:34.380 --> 09:44.550
これは､ アダム・ハーレイがライアソン大学のコンピュータサイエンスにいた頃に作ったツールのスクリーンショットで､

09:44.550 --> 09:50.910
現在はカーネギーメロン大学で博士号を取得しています｡

09:50.910 --> 09:52.410
では､ 開陳しましょう｡ 

09:52.410 --> 09:54.090
探せるように見てみましょう｡ 

09:54.090 --> 09:55.680
実際にGoogleで検索しても出てきません｡ 

09:55.680 --> 09:57.450
URLを知らなければならない｡ 

09:57.450 --> 09:59.370
それは......見つけるのが難しいんです｡ 

09:59.480 --> 10:01.010
ここにテキストがないので､ Googleを通じて｡ 

10:01.160 --> 10:03.950
SC まあ､ このURLだけなんですけどね｡ 

10:04.130 --> 10:08.270
CS Dot Ryerson Dossierと､ 最後にこのようなものがあります｡ 

10:08.270 --> 10:11.930
そして､ 基本的にはこれと全く同じです｡ 

10:11.930 --> 10:12.620
しかし､ 可視化する｡ 

10:12.620 --> 10:14.330
そこで､ ここでは数字を描く必要があります｡ 

10:14.330 --> 10:21.290
例えば､ 4番を描くと､ このツールは4番をここに置いてくれます｡ 

10:21.290 --> 10:24.080
それが､ 最初のステップのあなたのイメージです｡ 

10:24.080 --> 10:26.990
では､ これがコンボリューションのステップですね？

10:26.990 --> 10:28.130
そして､ これがプーリングのステップです｡ 

10:28.130 --> 10:30.320
あと､ ちなみにプーリングはダウンサンプリングとも言いますね｡ 

10:30.320 --> 10:33.350
つまり､ プーリングとダウンサンプリングは同じものなのです｡ 

10:33.860 --> 10:39.050
つまり､ コンボリューションを適用し､ プーリングを適用して､ 正確にどのように動作しているかがわかると思います｡ 

10:39.050 --> 10:44.780
そのため､ どのようなコンボリューションが適用されているか､ どのようなフィルターが適用されているか､ それらがどのように見えるかを見ることができます｡

10:44.780 --> 10:50.570
どのような特徴に注目しているのかがわかり､ それを応用して､ プーリングして､ サイズを小さくしているのです｡

10:50.570 --> 10:53.300
そして､ ここが重要であることがおわかりいただけると思います｡ 

10:53.300 --> 11:01.700
この画像とプールした画像で､ 同じ特徴があることがおわかりいただけると思います｡

11:01.700 --> 11:04.210
情報量が少ないだけで､ 機能は同じでしょう？

11:04.220 --> 11:05.750
機能はそのままに｡ 

11:05.750 --> 11:07.160
そこが大事なところです｡ 

11:08.150 --> 11:16.790
さらに､ もし私たちの4台が少し横に回転していたとしても､ 非常によく似たプーリング層を拾うことができます｡

11:16.790 --> 11:18.500
その後､ さらに層が厚くなるんです｡ 

11:18.500 --> 11:19.730
まだその話はしていません｡ 

11:19.730 --> 11:30.700
次に､ 実際にはないのですが､ 別の畳み込み層があり､ さらに別のプール層がありますが､ 基本的には同じプロセスを繰り返しているだけです｡

11:30.710 --> 11:36.110
その後､ このコースでさらに詳しく説明するのは､ 完全に接続されたレイヤーなどですが､

11:36.110 --> 11:39.800
これはぜひとも遊んでみてください｡

11:39.800 --> 11:52.730
ですから､ もし私が7を引いたとしたら､ これは7で､ 2番目の可能性は3だと推測していることがわかります｡

11:52.730 --> 11:56.360
だから､ 難しいものを描いて､ それを拾えるかどうか見てみるといい｡ 

11:56.360 --> 12:01.100
例えば､ ゼロのようなものを描いたとして､ それが仕上げのゼロでなかった場合､

12:01.100 --> 12:03.620
今度はそれを拾わないのでしょうか｡

12:03.620 --> 12:06.080
イメージ的にはそれに9を足したような感じです｡ 

12:06.080 --> 12:08.270
そんな風に仕上げるのが好きだったらどうでしょう？

12:08.270 --> 12:14.390
つまり､ 0か9だと思い込んでいるわけです｡ そして､ その0か9を照らしているものが､ あそこに見えるわけです｡

12:14.390 --> 12:16.220
しかし､ その部分については､ さらに下の方でお話します｡ 

12:16.460 --> 12:17.270
もう一回やろう｡ 

12:17.300 --> 12:19.760
8つくらいにしましょうか｡ 

12:19.760 --> 12:25.820
今､ 8を拾ったので､ 8が入るのがわかると思うんですが､ 8は結構難しいんですよ｡ 

12:25.820 --> 12:28.850
そして､ それ以降は分からなくなるような｡ 

12:28.850 --> 12:31.970
停車駅は､ 私たち人間にとって意味があるのでしょうか？

12:31.970 --> 12:38.540
これらの機能を駆使しながら､ 同時に「8」であることを正しく認識しているのです｡

12:38.750 --> 12:40.460
そうですね､ ぜひ試してみてください｡ 

12:40.460 --> 12:43.430
スマイリーフェイスを描いて､ それからどうなるかを見てください｡ 

12:43.940 --> 12:50.860
このツールは0から9までの数字しか学習しないので､ このツールには3にしか見えません｡

12:50.860 --> 12:55.870
だから､ その中から何かを認識しなければならず､ 3を認識するのです｡ 

12:56.830 --> 13:05.830
人生において､ カスタードアップルなど見たこともない種類の果物を見たときと同じです｡

13:05.830 --> 13:12.250
そして､ 実際に見たことがないからイトウのようなものだと思うのでしょう｡ 

13:12.250 --> 13:13.930
何に分類したらいいのかわからないんですね｡ 

13:13.930 --> 13:14.590
こちらも同じです｡ 

13:14.590 --> 13:17.590
だから､ 実際にはスマイルのトレーニングはしていないんです｡ 

13:17.590 --> 13:19.270
だから自分を木だと思い込んでいるのです｡ 

13:19.450 --> 13:20.200
3なんです｡ 

13:20.200 --> 13:20.860
それでは､ どうぞ｡ 

13:20.860 --> 13:22.600
とてもパワフルな､ 強力なツールなのです｡ 

13:22.600 --> 13:25.190
遊んでいただくと参考になると思います｡ 

13:25.190 --> 13:37.390
また､ 実際にピクセルの上にマウスを乗せると､ そのピクセルを拾った特徴検出器の位置が表示されるので､ このピクセルはどこから来たものなのかを確認することができます｡

13:37.390 --> 13:44.410
また､ コースで説明したように､ フィルターが画像を通過していく様子もご覧いただけると思います｡

13:44.410 --> 13:56.950
そして､ ここにプーリングがあるのがわかります｡ プーリングは､ 2×2の小さな正方形のサイズで行われているのがわかりますね｡

13:56.950 --> 14:03.670
そして､ 今日のチュートリアルで説明したように､ ストライドも2つであることがおわかりいただけると思います｡ 

14:03.670 --> 14:09.130
それでは､ 今日のセッションを楽しんでください｡ 

14:09.130 --> 14:10.450
次回､ お会いできるのを楽しみにしています｡ 

14:10.450 --> 14:12.580
そして､ それまではディープラーニングを楽しんでください｡ 
