畳み込みの仕組み | Convolution

3Blue1BrownJapan
25 Jan 202422:17

Summary

TLDRこのビデオでは、数のリストや関数の組み合わせ方として、畳み込みという少し話題に上がることの少ない方法に焦点を当てています。畳み込みは画像処理や確率分布、微分方程式の解析など、多様な分野で応用される重要な概念です。具体的な例を通して、畳み込みの基本的な考え方や計算方法、さらには高速フーリエ変換(FFT)を利用した効率的な計算アプローチまでを解説しています。視聴者は、畳み込みがどのようにして多式の掛け算や確率分布の足し合わせ、画像処理におけるぼかし効果などに応用されるのかを学びます。また、この概念がなぜ数学やコンピュータサイエンスで広く利用されるのかについての理解も深められるでしょう。

Takeaways

  • 😀 2つのリストや関数を組み合わせて新しいリストや関数を作る方法を考える
  • 😊 ダイスを投げて出目のペアの確率を求める問題では畳み込みの考え方が使える
  • 🧐 畳み込みは2つのリストの各要素を組み合わせて新しいリストを作る操作
  • 😯 FFTを使うと畳み込みを高速に計算できる(計算量がN^2からNlogNに)
  • 😲 畳み込みは画像処理や確率など様々な分野で現れる汎用的な操作
  • 🤔 多項式の掛け算をするときにも畳み込みの考え方を使える
  • 🤯 FFTで2つの大きな数の掛け算も高速にできる可能性がある
  • 😀 小学生が習う大きな数の掛け算も各桁での畳み込みといえる
  • 👍 適切に選んだ入力の繰り返しパターンを使うと計算が楽になる
  • 💡 畳み込みの定義から逆方向の高速アルゴリズムまで数学的に導出できる

Q & A

  • 畳み込みとは数学的にどのように定義されているのでしょうか?

    -純粋な数学の文脈では、2つの関数や数列の畳み込みは、一方の関数や数列を反転させた上で、移動平均的に掛け合わせ足し合わせていく操作として定義されます。コンピュータ上の実装では反転することなく計算していることもありますが、この定義が自然に導出される背景があります。

  • なぜ画像処理で畳み込みがよく使われるのでしょうか?

    -画像をフィルタリングする際に、画像の各ピクセルの周囲の値を考慮することが多く、このとき窓関数的な小さな配列を画像と畳み込みを取る操作が発生します。ぼかしやエッジ検出など、様々な画像処理効果を畳み込みで実現できます。

  • 畳み込みを高速に計算するアルゴリズムとは何でしょうか?

    -畳み込みを直接計算すると計算量が二乗オーダーとなりますが、フーリエ変換を利用することで線形オーダーのアルゴリズムを構築できます。これが高速フーリエ変換(FFT)です。畳み込み定理に基づいて導出されます。

  • 畳み込みはなぜニューラルネットに現れるのでしょうか?

    -畳み込みは、画像認識などの分野で有効なニューラルネットワークの構造の一つです。そこではカーネルがニューラルネットが学習によって最適化されるため、特定のタスクに適したフィルタリング効果を持たせる事ができます。

  • 2つの多項式を掛け算することと畳み込みにはどのような関係がありますか?

    -2つの多項式を掛け算することは、それぞれの係数の畳み込みと同値です。つまり、多項式の係数を配列として表現すれば、配列同士の畳み込み演算を行うことができます。これに基づいて畳み込みの効率的な計算法が構築されています。

  • 移動平均との関係はどのようなものでしょうか?

    -1を足して1となる短い配列と長い配列の畳み込みを取れば、その出力は元の長い配列の滑らかなバージョン、つまり移動平均となります。画像処理でのぼかしもこの仕組みを利用しています。

  • 確率分布の足し算と畳み込みにはどのような関係がありますか?

    -2つの確率変数の確率分布関数を足し算することは、その確率質量関数同士の畳み込みを取ることと等価です。ダイスなどの例で、各出目の確率を配列にしておき、畳み込みを取れば、和の確率分布が得られます。

  • 畳み込みの長さはなぜ元の2つの長さより大きくなるのでしょうか?

    -純粋に数学的な操作としては、移動平均的な窓関数を動かすイメージの畳み込みではなく、あくまで2つの関数の合成演算と捉えられます。その性質上、出力は入力より大きくなることが起こり得ます。具体的な計算機上の実装では切り取るなどの操作が入ります。

  • 畳み込みを計算する効率的なアルゴリズムの概要を教えてください。

    -まず入力の数列それぞれに対して高速フーリエ変換(FFT)で周波数空間に変換します。これらを係数のようにしてから成分ごとに掛け合わせます。最後に逆フーリエ変換して時間空間に戻せば、畳み込みが得られます。これにより計算量が二乗オーダーから線形オーダーに改善されます。

  • 小学校で整数の掛け算を習うアルゴリズムと畳み込みにはどのような関係がありますか?

    -小学校で習う整数の桁ごとの掛け算と桁ごとの足し算をする計算は、各桁での畳み込み演算を行っていると見る事ができます。これに基づいて大きな整数に対しても線形オーダーで実行可能な掛け算アルゴリズムが理論的に存在する事が分かります。

Outlines

00:00

😊 畳み込みの基本的な概念と確率への適用

2つの数のリストや関数を組み合わせて新しいものを作る方法として、単純な足し算や掛け算に加えて「畳み込み」がある。これは画像処理や確率分布の組み合わせなどに広く用いられる。2つのダイスの出目の確率分布を組み合わせる例で畳み込みの概念を説明。

05:03

😃 畳み込みによる新しい数のリストの生成

畳み込みは2つの数のリストから新しいリストを生成する操作でもある。移動平均の計算などに利用できる。画像処理の例として、画像と特定のカーネル(値のグリッド)の畳み込みにより、ぼかしやエッジ検出などの効果が得られる。

10:05

🤔 カーネルの選択による畳み込みの多機能性

畳み込みで用いるカーネルの値を変えることで、多様な画像処理を実現できる。Gaussianカーネルでは画像がぼけた印象に、エッジ検出のカーネルではエッジが際立つ。ニューラルネットで最適なカーネルを学習することも可能。

15:05

📈 多項式の掛け算と畳み込みの関係性

2つの多項式の掛け算は、それぞれの係数を畳み込みすることと同じ。これは多項式を展開して項を集める過程と一致する。計算量的に畳み込みの方が大変だが、FFTを用いれば高速にできる。

20:06

😆 FFTによる畳み込みの高速化

FFT(高速フーリエ変換)を用いると、畳み込みをNlogNの計算量で実行でき、劇的に高速化される。これにより、多項式の掛け算や確率分布の組み合わせなど、実用的な大規模な畳み込みが可能になる。

Mindmap

Keywords

💡畳み込み

畳み込みは、2つの関数や数列を組み合わせて新しい関数や数列を作る数学的操作です。このビデオでは、確率分布の足し算や画像処理の例を通して、畳み込みの概念と定義が説明されています。

💡確率分布

確率分布とは、確率変数がとりうる値ごとに、その発生確率が定められている関数です。このビデオでは、サイコロの出目による確率分布同士の畳み込みが、新しい確率分布を作る例として出てきます。

💡画像処理

画像処理とは、コンピューターを使ってデジタル画像に様々な処理を施す技術です。このビデオで画像のぼかしなど、画像処理の効果がカーネルと呼ばれる小さい配列と元の画像の畳み込みによって実現している例が紹介されています。

💡カーネル

カーネルとは、画像処理や畳み込みニューラルネットワークにおいて、画像や他のデータに滑らかに重ね合わせて処理を行うための小さな配列(関数)のことです。このビデオでは、カーネルの違いによって、ぼかしやエッジ検出など、異なる画像処理を行えることが説明されています。

💡FFT(高速フーリエ変換)

FFT(高速フーリエ変換)は、デジタル信号処理において、信号の周波数スペクトルを高速に得るためのアルゴリズムです。このビデオでは、FFTを使うことで、計算量の大きな畳み込みを効率的に実行できることが説明されています。

💡掛け算

このビデオでは、2つの関数の掛け算がそれぞれの係数の畳み込みと等価であることが説明されています。さらに、FFTを使えば、大きな多項式の掛け算を効率的に計算できることも示されています。

💡移動平均

移動平均は、時系列データにおいて、その時点を中心とした近傍のデータの平均値を求めていく手法です。このビデオでは、移動平均が長いデータと短い平均化用のデータの畳み込みとして表現できる例が出てきます。

💡線形方程式

このビデオでは、畳み込みが分からない関数の値の断片的な情報から、その関数を表す(線形の)方程式を解くことに相当することが説明されています。

💡ぼかし

ぼかしは、画像処理における基本的な技法の一つです。このビデオでは、ガウス分布のカーネルを使ったぼかし処理が、画像とカーネルの畳み込みとして表現されている例が紹介されています。

💡エッジ検出

エッジ検出は、画像処理において、画像中のコントラストの大きな変化を検出することです。このビデオでは、適切なカーネルを使うことで、畳み込みによってエッジ検出が実現できることが示されています。

Highlights

数のリストや関数の組み合わせの分脈では全く新しいものです

確率で最も単純な例の1つで皆さんも人生のどこかで考えたことがあるでしょう2つのダイスを投げて異なる目の輪が出る確率

この過程が畳み込みの基本的な考え方の1つになります

これは至るところに出てきます画像処理にはいつも出てくるし確率の角となる部分に関係していたり微分方程式を解くのによく使われたり

コードまで踏み込んでいて興味のある方は概要欄からご覧ください

全体としてこの過程では左から右に進むにつれピクセルの値の変化を検出しますなのである意味画像の縦の線を検出していくことになります

2つの関数を掛け算することはごとの操作になりますがまずそれぞれの関数が多公式だとして係数を取ってきてそれからこの2つの係数のリストの畳み込みを計算するのと同じことになります

FFTコボルを使うと同じものを別の方法で計算してたった均4.3mm秒で計算できましたなので3桁違いの改善ですね

こんな感じのペアの掛け算の表を作って斜めに足していったそれぞれが出力に対応しています

小学校で習った普通の方法ですねこれがそれぞれの桁の畳み込みになっていることを説明してみましょう

つまりnの2乗のオーダではなくNLNで済むような方法です

畳み込みは基本的にただの掛け算よりずっと複雑に感じられることです

裏口から忍び込むように畳み込みをするんですね

ある数学の操作や概念が一見無関係な領域にたくさん出てくると面白いということのとても良い例だと思います

Transcripts

play00:00

2つの数のリストあるいは2つの異なる

play00:02

関数を与えられたとしましょうこれらの

play00:04

リストを組み合わせて新しい数のリストを

play00:07

作ったり2つの関数を組み合わせて新しい

play00:10

関数を作ったりする方法をできる限り

play00:12

たくさん考えてみてください1つ単純な

play00:15

やり方は1つ1つの項を足し合わせること

play00:18

ですよ

play00:18

ね同様に関数についても対応する出力を

play00:22

全部足し合わせることができますそして

play00:24

同様に2つのリストを項ごとに掛け算する

play00:27

こともできてこれも関数でもすることが

play00:29

できできますねしかしこれら2つと同じ

play00:32

くらい基本的でなのにずっと話されること

play00:34

の少ない組み合わせ方があるんです

play00:36

畳み込みです2つの例とは違ってこれは

play00:39

単に数にできる操作に由来するものでは

play00:42

ありません数のリストや関数の組み合わせ

play00:44

の分脈では全く新しいもの

play00:48

ですしかしこれは至るところに出てきます

play00:51

画像処理にはいつも出てくるし確率の角と

play00:54

なる部分に関係していたり微分方程式を

play00:57

解くのによく使われたりそれからこの名前

play00:59

でなくとも見たことがある多式の掛け算で

play01:02

も出てきます資格化して説明する

play01:04

チャンネルでは特に良いトピックですねと

play01:07

いうのも公式的な定義を文脈なしに

play01:10

いきなり見せられるとちょっと怖い感じが

play01:12

しますからしかし時間をかけてこれが何を

play01:14

言っているのかを紐解きそしてその前に

play01:17

なぜこんなものが欲しいのか

play01:18

モチベーションを得ることにしましょう

play01:20

とっても美しい操作ですからねそしてこの

play01:22

内容の資格化から学ぶことも多い

play01:25

でしょう2つの関数の畳み込みでは様々な

play01:28

資格化の方法が考えられますがそのうち1

play01:31

つからはなぜ正規分布が確率でその役割を

play01:34

果たすのかについて発見があるかもしれ

play01:36

ません関数の形とかに関連してるのですが

play01:39

ちょっと先走ってますね今回の動画では

play01:42

まず理3的な場合に注目して特に意外で

play01:45

とてもかこいこの計算のアルゴリズムの話

play01:48

をしそれから次のパートで連続的な場合に

play01:51

ついて話したいと思い

play01:54

[音楽]

play01:56

ます今回とても画像処理の話から始めたい

play01:59

のですががというのも資格的で1番面白い

play02:01

ですからねただやや扱いにくさがあって

play02:04

畳み込みの代表にしづらいので代わりに

play02:06

確率からお話ししたいと思います特に最も

play02:09

単純な例の1つで皆さんも人生のどこかで

play02:12

考えたことがあるでしょう2つのダイスを

play02:14

投げて異なる目の輪が出る確率を考えると

play02:17

いうことをしたいと思いますはい皆さんは

play02:19

こうおっしゃるでしょう余裕だね2つの

play02:22

ダイスにはそれぞれ6つの異なる出目が

play02:24

あり全部で36の異なる結果のペアが得

play02:27

られますそしてこれを全部見てくとある輪

play02:30

になるペアがいくつあるか数えられますね

play02:33

このように行子上にペアを並べると嬉しい

play02:35

ことに同じ輪になるペアは斜めに揃って

play02:38

見えます

play02:39

ねなのである輪がどれだけ出やすいかは

play02:42

単にこの斜めに沿ってペアがいくつあるか

play02:44

数えれば分かりますねはいよくできました

play02:48

という感じですがしかし同じ問題を資格化

play02:51

する他の方法を思いつきますかある輪を

play02:54

持つ異なるペア全部を資格化する方法です

play02:57

もしかしたら皆さんの1人が手を上げて

play02:59

あるよと言うかもしれませんこれらの出目

play03:01

を2列で並べて2つ目をひっくり返すん

play03:04

ですねこうすると輪が7になる異なるペア

play03:07

全てが縦に揃いますねそして下の列を1番

play03:11

左までずらすと足して2になるペアがただ

play03:14

1つ現れますここから右に1つ分ずらすと

play03:18

足して3になる異なるペアが2つ現れます

play03:21

ねそして一般にひっくり返した後下の列を

play03:24

何個分ずらしたかによってある輪になる

play03:27

ペアが全部分かるということになります

play03:34

そしてこれだけだとあんまり面白くない

play03:36

ですねただこれらのカテゴリにそれぞれ

play03:38

いくつペアがあるか数えているだけです

play03:40

からこれはそれぞれの出目が出る確率が

play03:43

同様に確からしいという暗黙の過程に

play03:46

基づいていますがもしこれが一様でないと

play03:48

したらどうでしょう変なダイスの青い方は

play03:52

それぞれの出目が出る確率が決まっていて

play03:55

赤の方も別の数のリストがあったらどう

play03:57

でしょうこの場合例えば2が出る確率を

play04:00

知りたかったら青の台数の1が出る確率と

play04:03

赤の台数の1が出る確率を掛け算します

play04:07

そして3が出る確率についてはありえる2

play04:09

つの異なるペアについて再び対応する確率

play04:12

を掛け合わせてそれからその積を

play04:14

足し合わせ

play04:16

ます同様に4が出る確率は3つの異なる

play04:19

デメのペアについて掛け算をして結果を

play04:22

足し合わせますそしてこの上の確率をA1

play04:26

A2A3という風に名付けて下をB1b2

play04:30

B3という風にし

play04:32

ましょう一般にこの2つの異なる数の列を

play04:36

取って2つ目をひっくり返して異なる数分

play04:38

ざらしてペアの掛け算を足し合わせていく

play04:41

この過程が畳み込みの基本的な考え方の1

play04:44

つになり

play04:46

[音楽]

play04:50

ますさてもう少し正確に説明すると今この

play04:54

過程で2から12までの輪それぞれを見る

play04:56

確率を計算しましたこれをするには値のの

play04:59

リストの1つ目Aともう1つのリストBを

play05:02

混ぜていました言い換えるとこれら2つの

play05:05

畳み込みで新たな数のリストを得られると

play05:08

言えます新たな11個の値からなる数の

play05:10

リストでそれぞれの値はペアの席を

play05:13

足し合わせたような見た目をしています

play05:15

もし先ほどの例がを好きなら同じ操作を

play05:17

まず全てのペアの席の表を作ってそれから

play05:20

斜めに足し合わせていくと考えることも

play05:22

できますこれも2つの数のリストを

play05:25

混ぜ合わせて新たな11の数のリストを

play05:27

作る方法になっていますねただ視点が

play05:29

異なるだけで窓をスライドさせるのと同じ

play05:32

操作ですちょっと書き方も見てみましょう

play05:35

小さなアステリスクで表されるAとBの

play05:37

畳み込みは新たなリストになっています

play05:40

そのN番目の要素は添字のペアIとJに

play05:43

ついてその輪がNに等しいものを全て

play05:46

足し合わせたものになっています少し

play05:47

分かりづらかったかもしれませんが例えば

play05:50

もしNが6なら計算するペアは1と52と

play05:53

43と34と25と1ということになり

play05:57

ます足して6になる全てのペアですねただ

play05:59

ただ正直どう書いても良くてこの過程の

play06:01

書き表し方よりも資格的な要素の方が重要

play06:04

でしょうここで練習のためにとても単純な

play06:07

例題を考えましょう123と456という

play06:11

2つのリストの畳み込みを考えてみ

play06:13

ましょう先ほどのように2つのリストの

play06:15

うち2つ目をひっくり返して1番左まで

play06:18

ずらして始めましょうこうすると1と4が

play06:21

揃うのでこれを掛け算すると出力の最初の

play06:24

要素が得られますね下のリストを1つ右に

play06:27

ずらすと揃うペアをは15と24になり

play06:31

ますこれらをかけて足すと13が得られ

play06:33

ます出力の次の数ですねもう1つずらして

play06:37

1下6+25+3-4を計算すると28に

play06:42

なりますえさらにもう1つずらして2下6

play06:45

+3下5で27を得て最後に3下6で18

play06:50

になりますねもし良かったらお好きな

play06:52

プログラミング言語とライブラリーを持っ

play06:54

てきて計算していただけると結果が確かめ

play06:57

られると思います123と456の

play07:00

畳み込みを取ると実際これが得られる結果

play07:02

になっていますねこれが自然でちょうど

play07:04

欲しい操作になっている例2つの確率分布

play07:07

を足す場合を見てきましたもう1つよく

play07:09

ある例が移動平均です長い数のリストが

play07:12

あってもう1つ全部足すと1になる短い数

play07:15

のリストがあるとしましょうここでは

play07:18

1/5の値が5つある小さなリストがあり

play07:21

ますねそしてこの窓をスライドさせる

play07:23

畳み込みのプロセスを行うとどうなるか見

play07:25

てみ

play07:26

[音楽]

play07:28

ましょう小さなリストが大きなリストと

play07:31

完全に重なった時畳み込みの各項には

play07:34

どんな意味があるでしょう

play07:35

かそれぞれの計算では大きなリストの

play07:39

データを取ってきてそれぞれに1/5を

play07:41

かけて足していますつまりこの小さな窓の

play07:45

中でデータの平均を取っていることになり

play07:47

ます全体としてこの過程で元のデータを

play07:50

滑らかにしたようなバージョンが得られ

play07:52

ますこれは少し調整して異なる数のリスト

play07:55

を使うこともできます値が足して1になる

play07:57

限り移動平均として解釈できるでしょう

play08:00

ここで示した例ではこの移動平均は中央の

play08:03

値により重みがあるようになっていてこれ

play08:06

でもまたデータの滑らかなバージョンを得

play08:08

られ

play08:10

ますこれの2次元バージョンをすると画像

play08:13

をぼかす面白いアルゴリズムが得られます

play08:16

ここでお見せするアニメーションは元の

play08:18

英語版の中の人がMITのジュリアラボと

play08:21

の講義用に作ったものを改変したもので

play08:24

画像処理についての単元も含まれています

play08:26

そちらではもう少しコードまで踏み込んで

play08:28

いて興味のある方は概要欄からご覧

play08:31

くださいぼかしの例に戻るとここでは3下

play08:34

3の値のグリッドがあってこれが元の画像

play08:37

の上を滑っていきズームインするとこれら

play08:40

の値それぞれは1/9になっていますね

play08:42

そして毎回の計算で何をしているかと言う

play08:44

とこれらの値をちょうど重なっている

play08:47

ピクセルと掛け算してるんですねもちろん

play08:49

コンピューターの中では色も赤緑青の3つ

play08:52

の値のベクトルとして考えますからこれら

play08:56

の値を全て1/9倍して足し合わせるとと

play08:59

それぞれの色についての平均の値が出て右

play09:02

の画像で対応するピクセルはこれを集めた

play09:05

ものになっていますこれを画像の全ての

play09:08

ピクセルについて行うとそれぞれの

play09:10

ピクセルがある意味周りに染み出すような

play09:13

形で元の画像をぼかしたバージョンが得

play09:15

られ

play09:16

ます言い換えると右の画像は元の画像と

play09:20

小さな値のグリッドの畳み込みだと言え

play09:22

ますより厳密にはこの値のグリッドを

play09:25

180°回転させたバージョンの畳み込み

play09:28

だと言うべきですね対象なので関係ない

play09:31

ですが純粋な数学の分脈から導かれる

play09:34

畳み込みの定義は2つ目の配列を

play09:36

ひっくり返すことと関連していたことを

play09:38

思い出し

play09:40

ましょうこれを少し調整して異なる値の

play09:43

グリッドを使うともっと綺麗なぼかしの

play09:45

効果を得ることができますここでは5下5

play09:48

のグリッドを使っていますが先ほどと大き

play09:50

さだけでなく値も異なっていますズーム

play09:53

インすると真ん中の値が端より大きくなっ

play09:55

ていますねこれはガウス分布として知ら

play09:58

れるベルカーブから持ってきた値

play10:01

ですこうするとこれらの値全てを対応する

play10:05

ピクセルと掛け合わせた時端よりも中心の

play10:08

ピクセルに集中することになり

play10:10

ます先ほどと同様に右側で対応する

play10:14

ピクセルはこの輪になっていますこれを

play10:17

全てのピクセルについて行うとレンズの

play10:19

焦点をずらした時により近いようなぼかし

play10:22

の効果が得られ

play10:24

ますこのアイデアでできることは決して

play10:27

ぼかしだけではありません例えばこの

play10:30

グリッドを見てみましょう左にせの値が右

play10:34

に負の値があってそれぞれ青と赤に色付け

play10:37

されてい

play10:38

ます少し時間を取って処理後の画像が

play10:41

どんな感じになるか予想してみて

play10:45

ください今回は画像をカラーではなく

play10:48

モノクロで考えたいと思いますなので

play10:50

それぞれのピクセルは3つでなく1つの値

play10:53

で表されますそして今度の畳み込みでは負

play10:56

の値も考えられますね例えばこの点で

play11:00

ズームインするとグリッドの左半分は値が

play11:03

0で表される黒いピクセルに完全に重なっ

play11:06

ています一方右の負の値の3マスは値が1

play11:09

で表される白いピクセルに重なっています

play11:12

なのでそれぞれ掛け算して足し合わせると

play11:14

計算結果はとても小さい負の値になります

play11:16

ね右の画像は負の値を赤正の値を青で

play11:20

色付けしていますもう1つ注目したいのは

play11:24

全部同じ色の部分では値が0になってい

play11:26

ますグリッドの中の値のが0ですからね

play11:31

これは先ほどまでのグリッドの中の辺りの

play11:33

輪が1で移動平均つまりぼかしとして解釈

play11:36

できたレートは大きく異なります全体とし

play11:40

てこの過程は左から右に進むにつれ

play11:42

ピクセルの値の変化を検出しますなので

play11:46

ある意味画像の縦の線を検出していくこと

play11:49

になり

play11:51

ますそして同様にグリッドを回転させて上

play11:54

から下に値が変わるようにすると今度は横

play11:57

の線を検出するようになりますパイ

play12:00

クリーチャーの目が悪魔的な感じになって

play12:02

しまいまし

play12:03

[音楽]

play12:04

たこの小さなグリッドはカーネルと呼ばれ

play12:08

ますここで美しいのは異なるカーネルを

play12:10

選ぶだけで異なる画像処理の効果が得

play12:13

られるところですよねぼかし境界検出だけ

play12:15

でなくシャープにすることもできます

play12:17

畳み込みニューラルネットワークを聞いた

play12:19

ことがあるかもしれませんそちらでは

play12:21

データを元にどんなカーネルが良いかを

play12:23

見つけますこれはニューラルネットワーク

play12:25

が何を検出したいかによって決められます

play12:27

ねもう1つ力の長さについても触れた方が

play12:30

良いかもしれません例えば移動平均のよう

play12:32

な例では両方の窓が完全に重なっている

play12:35

部分の甲だけを考えたいですよねあるいは

play12:38

画像処理の例では出力が元の画像と同じ

play12:41

サイズになっていて欲しいですよねただ

play12:43

純粋な数学の操作としての畳み込みは基本

play12:46

的に元の2つのリストより長いリストを

play12:49

作ります少なくとも一方が長さ1の場合を

play12:52

除きますなのでコンピューターの特定の

play12:54

領域では一部を切り抜くことになり

play12:57

ます

play13:00

さらにもう1つコンピューターに関連して

play13:02

話しておく価値があるのがこの計算の前に

play13:05

カーネルをひっくり返すのはよくかなり変

play13:07

だとか別にいらないと感じられるかもしれ

play13:09

ませんしかし繰り返しになりますがこれは

play13:12

純粋な数学の文脈に由来するもので確率の

play13:15

例で見たようにとっても自然なことなん

play13:17

ですそしてちょっともう1つプログラマー

play13:20

も気にすべき純粋な数学の例をお見せし

play13:22

たいと思いますこれは畳み込みをずっと

play13:25

早く計算するアルゴリズムにもつがってい

play13:27

ますからねPythonで2つの異なる

play13:30

比較的大きな配列を作りたいと思います

play13:33

それぞれ10万のランダムな要素を持って

play13:35

いますここでナパというライブラリーの

play13:38

実行時間を見てみ

play13:40

ましょうこの場合何回か繰り返し計算して

play13:43

平均を取っているようでこの

play13:45

コンピューターでは平均4.87秒という

play13:47

ことになりました対象的に栽培

play13:50

ライブラリーの別の関数FFTコボルを

play13:53

使うと同じものを別の方法で計算して

play13:58

たった均4.3mm秒で計算できましたな

play14:01

ので3桁違いの改善ですねこれは名前が

play14:04

違っても両方同じ畳み込みを計算してい

play14:07

ますただ片方がずっと賢い方法で計算し

play14:09

てるんです

play14:14

ね確率の例を思い出しましょう畳み込みの

play14:18

別の考え方としてペアの席の表を作って

play14:21

斜めに足し合わせるという話をしまし

play14:25

たこれはもちろん確率に限った話ではあり

play14:28

ません数のリスト2つの畳み込みはいつで

play14:31

もこのように考えることができますこんな

play14:33

感じのペアの掛け算の表を作って斜めに

play14:36

足していったそれぞれが出力に対応してい

play14:39

ますこれが特に自然な見方になっているの

play14:42

が2つの多式を掛け算する時です例えば

play14:46

ここにある表をちょっと書き換えて上の数

play14:49

play14:49

12X3x2乗そしてもう1つの方を

play14:54

45x6x2にしてみましょうさてこれら

play14:57

全てのペアの席をを作ることにどんな意味

play14:59

があるでしょう

play15:01

かこれは2つの多式の席を完全に展開して

play15:05

いるのと同じことになりますねそして斜め

play15:08

に足し算をしていくのは同じ時数の項を

play15:11

集めることに対応しています多項式を展開

play15:14

して整理するのが畳み込みと全く同じ

play15:17

プロセスになっているのはそれ自体

play15:19

すっきりしていると思うんですが実はここ

play15:21

から結構すごいことができるんです

play15:23

ちょっと考えてみてください2つの異なる

play15:26

関数を掛け算することはこれはごとの操作

play15:29

になりますがまずそれぞれの関数が多公式

play15:32

だとして係数を取ってきてそれからこの2

play15:36

つの係数のリストの畳み込みを計算するの

play15:38

と同じことになります面白いのは畳み込み

play15:42

は基本的にただの掛け算よりずっと複雑に

play15:44

感じられること

play15:46

ですこれは単に概念的に難しいというだけ

play15:49

でなく計算的にもペアの掛け算をするより

play15:52

も畳み込みをする方がより多くのステップ

play15:54

がかかり

play15:56

ます例えば2つのとても大きい多式を考え

play16:00

ましょうそれぞれ係数が100個あります

play16:03

そしてこの席を全部展開すると100下

play16:06

100のペアの席の表を埋めることになり

play16:08

ますから1万の異なる席を計算することに

play16:11

なりますそれから斜めに値を集めて足して

play16:14

いくのはさらに大体1万くらいの計算を

play16:16

用し

play16:17

ます言い換えるとこのアルゴリズムの

play16:20

オーダーはN2乗ですつまりサイズがnの

play16:24

2つのリストについて必要な計算の量はn

play16:27

の2乗に比例して増えていきます一方で2

play16:30

つの多式を出力の点で考えたら例えばいく

play16:34

つかの点での値を集めてきたらこれらを

play16:37

掛け算するのはサンプルの数の回数だけの

play16:40

計算で済みますそして多式の係数を求める

play16:43

には有限のサンプルだけあれば大丈夫です

play16:48

ね例えば2つの出力があればある一次関数

play16:52

を特定できますね3つの出力があれば2次

play16:55

関数を特定することができて一般にNコの

play16:59

出力があればNコの係数を持つ多式を特定

play17:02

することができ

play17:04

ます線形方程式の言葉で言い換えてみ

play17:08

ましょうある係数の分からない多式があっ

play17:11

たとしますこの例ではこれが計算しようと

play17:14

している席だったとしましょうそしてこの

play17:17

多式にいろんな入力0123とかを入れて

play17:20

いったらどうなるかだけお伝えしたとし

play17:24

ます十分な数これを伝えてつまり分から

play17:27

ないの数と同じだけの方程式があればあと

play17:31

たまたまこれがラッキーなことに線形方程

play17:33

式系だとしたらこれで係数を求めることが

play17:35

できるはずですなのでざっくり

play17:38

アルゴリズムの大枠を話すと2つの数の

play17:40

リストの畳み込みを計算する時これを多項

play17:43

式の係数のように扱って十分たくさんの点

play17:46

でこれらの多式を評価して部屋の掛け算を

play17:49

してそれから軽を解いて係数を求めます

play17:53

裏口から忍び込むように畳み込みをするん

play17:56

ですねそして皆さんの中ににはこう思う人

play17:59

もいるかもしれませ

play18:00

んバカなプランだとというのも1つの多式

play18:05

についてサンプルを計算するだけでまずn

play18:07

の2乗のオーダーの計算が必要でまた線形

play18:10

方程式系を解くのも最初から畳み込みを

play18:13

するくらい計算的に難しいんじゃないかと

play18:16

そして確かに掛け算と畳み込みの関係が

play18:19

あるけれど難しいところは全部この視点の

play18:21

移動じゃないかというかもしれませ

play18:24

んでもトリックがあるんですね皆さんの中

play18:27

で営変換やFFTをご存知の方は予想が

play18:31

つくかもしれませんもしご存知でない方は

play18:33

これから言うことは少々トピかもしれませ

play18:35

んただ数学の道筋でこれが予想外になら

play18:38

ないようなたどり方もあると知って

play18:40

いただけると良いでしょうまアイディアは

play18:42

ここで選択の自由があることです適当な

play18:45

入力例えば0123みたいなものの代わり

play18:48

に特別に選んだ複素数で多式を評価するん

play18:52

ですね特に単位円上で均等に並んだ1の

play18:55

累乗コを使いますこうするとより楽な経営

play18:58

が得られ

play19:00

ます要は類似していくと繰り返しの

play19:03

パターンを持つような数を選ぶことで作ら

play19:05

れる系に同じ数が何度も繰り返して異なる

play19:08

項に登場するようにするわけですそして

play19:11

この繰り返しを賢く使うと計算でずっと楽

play19:14

をすることができるんです

play19:15

ねこの出力の集合には特別な名前がついて

play19:19

いて係数の利3風リエ変換と呼ばれます

play19:23

これらのトピックについてもジュリア

play19:25

MITの講義がありますので是非ご覧

play19:27

くださいそれから高速風流変換について

play19:30

リーブルというチャンネルがとってもいい

play19:32

動画を出しているので見てみてください

play19:35

あとベリタcumというチャンネルでも

play19:36

FFTのとても良い動画が上がっています

play19:40

この高速なアルゴリズムこそが今私たちに

play19:42

とって重要なところですそしてこの

play19:44

繰り返しのおかげで係数からこれらの出力

play19:47

を出す方法があるんですねN2乗の

play19:49

オーダーの代わりにN下logNでより

play19:52

大きなリストになるとずっとずっと早い

play19:54

計算をすることができるようになります

play19:57

そして重要なことにFFTは片道だけじゃ

play20:00

ないんですね出力から係数に行くことも

play20:02

できますというわけでアルゴリズムの全体

play20:05

像をもう1度見てみましょうか2つの長い

play20:09

数のリストがあって畳み込みを計算したい

play20:11

時まずそれぞれの高速風流変換を計算し

play20:15

ますこれらを他行式の係数のように扱って

play20:18

特別な点の集合で評価したようなものとし

play20:21

て考えると良い

play20:23

でしょうそれから得られた2つの結果を

play20:26

計算してこのペアの席は早く計算できます

play20:29

ねそれから逆高速振り変換をして探して

play20:33

いった畳み込みを裏口から計算できるわけ

play20:36

ですしかし今度はNlogNの横断の計算

play20:39

で済みますこれは結構すごいと思います

play20:42

この畳み込みが出てくるかなり具体的な

play20:45

文脈他方式の掛け算は畳み込みが出てくる

play20:48

他の全ての物事に関わるアルゴリズムに

play20:50

つながっています確率分布を足したり

play20:53

大きな画像を処理したり何でもですある

play20:56

数学の操作や概念が一見無関係な領域に

play20:59

たくさん出てくると面白いということの

play21:01

とても良い例だと思い

play21:03

ますちょっとした宿題が欲しい方はこんな

play21:06

面白いことを考えてみましょう2つの

play21:08

異なる数を掛け算する時小学校でみんな

play21:11

習った普通の方法ですねこれがそれぞれの

play21:14

桁の畳み込みになっていることを説明して

play21:16

みましょうま繰り上がりのようにおまけの

play21:19

ステップもついていますが基本的には

play21:21

畳み込みですそして高速なアルゴリズムが

play21:24

あるということは2つの非常に大きな整数

play21:27

を掛け算すると

play21:28

これを小学校で学んだやり方よりも早く

play21:30

計算する方法があるということになります

play21:33

つまりnの2乗のオーダではなくNLNで

play21:36

済むような方法ですそもそも不可能に感じ

play21:39

られますよねま実際役に立つ前にこの2つ

play21:42

の数が馬鹿げた大きさにならないといけ

play21:44

ないんですがでもそういったアルゴリズム

play21:47

が存在するのは結構面白いと思います

play21:50

畳み込みシリーズの次回は確率分布に注目

play21:53

して連続な場合を見ていきたいと思い

play21:57

ます

play22:00

[音楽]

Rate This

5.0 / 5 (0 votes)

Do you need a summary in English?