関数はベクトルです
(thenumb.at)- 関数を無限次元ベクトルのように扱うと、線形代数の言葉で画像・幾何処理、曲線フィッティング、機械学習のような問題を説明できる
- 実関数空間は、関数同士の値を足し、出力値をスカラー倍することでベクトル空間の公理を満たし、多項式は (1,x,x^2,\dots) のような基底で表現できる
- 微分は線形結合を保存するので線形作用素となり、多項式基底では係数ベクトルに作用する無限行列のように見なせる
- 内積を積分で定義すれば、関数空間でも長さ・直交・正規直交基底を扱え、自己随伴作用素はスペクトル定理と結びつく
- Laplacian を対角化する視点は、Fourier series、2D画像圧縮、spherical harmonics、メッシュ Laplacian ベースの幾何処理における基底変換と圧縮をひとつの枠組みで説明する
関数をベクトルとして見る方法
- ベクトルは通常、実数のリストから始まるが、ベクトル空間には複素数のリスト、グラフのサイクル、魔方陣のような別の対象も入りうる
- (N) 次元ベクトルは長さ (N) のリストであると同時に、インデックスから値への写像として解釈できる
- 自然数のように可算無限な定義域では、無限に長いリストで関数を表せる
- 例: (\mathbf{v}_i=i) は、(x\in\mathbb{N}) 上の (f(x)=x) を表せる
- 実数のような非可算無限の定義域では、各要素に整数インデックスを付けられないため、リスト表現は不可能になる
- このときベクトルは任意の関数に近いものになる
- 関数解析学は、関数を無限次元ベクトルとして表す厳密な定義を扱う
- 目的は無限次元の結果を厳密に証明することよりも、有限次元線形代数との類比から直観を得ることにある
関数空間がベクトル空間になる仕組み
- 実関数空間では、スカラー体は (\mathbb{R})、ベクトルの集合は (\mathbb{R}\to\mathbb{R}) の関数、零ベクトルはすべての入力に対して 0 を返す関数である
- 関数の加法は、同じ入力で2つの関数の値を足し合わせる
- ((f+g)[x]=f[x]+g[x])
- ベクトルの要素ごとの加法を、関数のインデックスという観点に一般化した形である
- スカラー倍は、関数の出力を倍率調整する
- ((\alpha f)[x]=\alpha f[x])
- 各インデックスの値をスケールするベクトル演算に対応する
- この定義により、加法の交換法則・結合法則、零ベクトル、加法逆元、スカラー倍の単位元・結合法則・分配法則を証明できる
- 関数の標準基底は、各インデックス (\alpha) でのみ 1、他では 0 となる基底関数 (\mathbf{e}_\alpha) と考えられる
- 実数全体には非可算個の基底関数があるため単純な和では書きにくいが、特定の入力 (x) では (\mathbf{e}_x) だけが残るという直観を与える
線形作用素と微分
- 行列は線形結合を保存する線形変換をエンコードしており、列ベクトルは新しい基底を定義するものとして解釈できる
- 関数もベクトルと見なせば、行列に対応する無限次元の対象を考えられ、これを線形作用素 (\mathcal{L}) と書く
- 実際には、非可算無限次元の作用素をすべて行列として書くことはできない
- それでも各「列」が関数空間の新しい基底関数を表すという構造は有用である
- 微分は線形性を満たす
- (\frac{\partial}{\partial x}(\alpha f[x]+\beta g[x])=\alpha\frac{\partial f}{\partial x}+\beta\frac{\partial g}{\partial x})
- 多項式空間 (\mathcal{P}) では、(1,x,x^2,x^3,\dots) が可算無限基底になる
- (p[x]=a+bx+cx^2+dx^3+\cdots) は、係数ベクトル ([a,b,c,d,\dots]^T) として書ける
- 微分は係数ベクトルを ([b,2c,3d,\dots]^T) に変える無限行列として表現される
- 解析関数は 0 周りの Taylor series で表されるため、多項式基底の線形結合として表せる
- Taylor expansion は、べき基底への基底変換に対応する
対角化と固有関数
- 有限次元では、行列 (\mathbf{A}) は十分な数の線形独立な固有ベクトルと実固有値を持てば対角化できる
- (\mathbf{A}=\mathbf{U\Lambda U^{-1}})
- 固有基底へ移し、固有値でスケーリングし、標準基底に戻す過程である
- 関数空間でも、線形作用素 (\mathcal{L}) について (\mathcal{L}f=\psi f) を満たす固有関数を考えられる
- 微分作用素の固有関数は (p_0e^{\psi x}) の形になる
- 係数条件 (p_i=\frac{\psi^i}{i!}p_0) から指数関数の級数が現れる
- ただし、実解析関数全体の空間で微分を指数関数基底によって対角化することはできない
- (f[x]=x) を指数関数たちの線形結合で表せると仮定すると、2回微分した式で矛盾が生じる
- (n) 階導関数が 0 になる非定数関数や、sine・cosine のような周期関数にも同様の問題がある
- 複素関数空間へ拡張すると、より多くの作用素を対角化できる
- 微分は (\mathbb{C}\to\mathbb{C}) の関数空間で Laplace transform によって対角化できる
- Laplace transform は微分方程式の解法に有用だが、逆変換が容易ではないため、ここではこれ以上扱わない
関数の内積とスペクトル定理
- ユークリッド内積は、一方のベクトルがもう一方のベクトルの方向にどれだけ測られるかを表し、自分自身との内積は長さの二乗を与える
- 関数空間では、有限和をその連続版である積分に置き換えて内積を定義する
- 実関数: (\langle f,g\rangle=\int_a^b f[x]g[x],dx)
- 複素関数: (\langle f,g\rangle=\int_a^b f[x]\overline{g[x]},dx)
- すべての関数が積分可能とは限らないため、内積空間は区間 ([a,b]) で二乗可積分な関数に制限する
- ([a,b]) は ([-\infty,\infty]) でもよい
- 複素関数の内積は、共役対称性、第1引数に関する線形性、正定値性を満たさなければならない
- 正定値性を厳密に扱うため、0 である点が「ほとんど至る所」である関数たちの同値類を用いる
- スペクトル定理は関数空間にも一般化され、自己随伴作用素は実固有値と正規直交固有基底を持つ
- 有限次元では対称行列は正規直交固有基底を持ち、その逆も成り立つ
- 無限次元では厳密な条件や証明はより複雑になる
Laplacian の対角化
- 1次元関数における Laplacian は2階導関数である
- (\Delta f=\frac{\partial^2 f}{\partial x^2})
- 2回の部分積分を使うと、Laplacian が自己随伴に近い性質を持つことが確認できる
- 境界項 ((f^\prime[x]g[x]-f[x]g^\prime[x])|_a^b) が 0 でなければならない
- そのため、定義域を周期 (b-a) を持つ周期関数に制限する
- 単純化のため、区間は ([0,1]) とする
- Laplacian の周期固有関数は (e^{2\pi \xi i x}) で、(\xi) は整数である
- Euler の公式により、sine・cosine の見方と複素指数関数の見方が対応する
- 固有値は (-(2\pi\xi)^2) である
- これらの固有関数は ([0,1]) 上で互いに直交し、ノルムは 1 である
- (\xi_1-\xi_2) が 0 でない整数なら、内積は 0 になる
- 同じ関数同士の内積は 1 になる
- Laplacian の正規直交固有基底へ変換することは、Fourier 係数を計算することと同じである
- (\hat{f}[\xi]=\int_0^1 f[x]e^{-2\pi\xi i x},dx)
- 逆変換は (f[x]=\sum_{\xi=-\infty}^{\infty}\hat{f}[\xi]e^{2\pi\xi i x})
- Laplacian 全体は実関数を実関数へ写すが、中間表現は複素数値を取りうる
Fourier series と信号処理への応用
- Fourier transform は、Laplacian の固有基底へ移す基底変換である
- (\hat{f}[\xi]) は、関数 (f) が整数周波数 (\xi) の波としてどの程度表現されるかを測る
- この表現は関数を周波数領域へ移す
- 正規直交基底なので、Fourier series は係数を再び波と結び付けるだけで容易に逆変換できる
- ある閾値以上の Fourier 係数を捨てると、関数の滑らかな再構成を作れる
- この手法はローパスフィルタ(low-pass filter) と呼ばれる
- 少数の Fourier 係数だけ保存して関数を近似再構成できるため、計算上圧縮に有用である
画像圧縮と球面調和関数
- Laplacian を定義できる場所では、対応する Fourier transform を見つけられる
- 2次元では、Laplacian は2階偏微分の和である
- (\Delta f[x,y]=\frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2})
- ([0,1]\times[0,1]) では、固有関数は (e^{2\pi i(nx+my)}) の形で、(n,m) は整数である
- 1D 関数を 1D の波の集まりに分解するように、2D 画像は 2D の波の集まりに分解される
- 2D Fourier transform の一変種は、JPEG を含む多くの画像圧縮アルゴリズムの中核にある
- 単位球面でも Laplacian を定義でき、その正規直交固有基底がspherical harmonicsである
- (Y_\ell^m[\theta,\phi]=N_\ell^mP_\ell^m[\cos[\theta]]e^{im\phi})
- (\ell\ge0), (m\in[-\ell,\ell])
- ゲームエンジンでは、diffuse environment map や global illumination probe の圧縮によく使われる
- spherical harmonics は電子軌道としても見なせ、量子力学は主に線形作用素の固有関数を扱う
幾何処理とさらなる探求
- 関数をベクトルとして表現する方法は、画像圧縮だけでなく現代的な幾何処理アルゴリズムの基盤にもなっている
- discrete differential geometry は、3D geometry processing アルゴリズムを作る際にこの視点を用いる
- コンピュータグラフィックスでは、メッシュ上の関数はテクスチャ、アンラップ、変位、シミュレーションパラメータを表しうる
- メッシュの各 vertex に値を結び付けることで、関数をベクトルとしてエンコードできる
- メッシュ Laplacian は有限次元の行列なので、数値線形代数で固有関数を求められる
- 連続領域における sine・cosine を新しいドメインへ一般化した関数のように振る舞う
- メッシュの固有基底は、メッシュ上の関数の変換や圧縮に有用である
- vertex 位置を関数として解釈すれば、geometry 自体を滑らかにしたり鋭くしたりすることもできる
- さらに探求するトピックとして、geometry、simulation、light transport、machine learning、splines がある
- Geometry: Distances, Parallel Transport, Flattening, Non-manifold Meshes, Polygonal Meshes
- Simulation: Finite Element Method, Monte Carlo PDEs, Minimal Surfaces, Fluid Cohomology
- Light Transport: Radiosity, Operator Formulation, Low-Rank Approximation, Inverse Rendering
- Machine Learning: DiffusionNet, MeshCNN, Kinematics, Fourier Features, Inverse Geometry
- Splines: C2 Interpolation, Quadratic Approximation, Simplification
1件のコメント
Hacker Newsのコメント
この記事には2回アップボートしたいくらいで、これまで見た関数解析の基本概念の入門としては最高です
さらに数学的に深く踏み込んだ良い概説としては、https://arxiv.org/abs/1904.02539 もあります
このWebサイトが触れていない優れた応用として、Koopman作用素があります。制御理論では、自律ドローン、自動車、ロボットアームのような実システムの多くは扱いにくい非線形ダイナミクスで記述されますが、Koopman作用素は非線形システムに対して大域的に有用な線形近似を与えます
つまり、非線形システムをかなり高い精度で線形システムのように扱えるため、計算の観点から制御と推定が大幅に単純化されます。このような線形化はデータから学習することもできます
Steve BruntonのKoopman理論の資料 https://youtube.com/playlist?list=PLMrJAkhIeNNSVXUvppZTYNHKQ...、https://arxiv.org/abs/2102.12086 は良く、ソフトロボット制御のような応用もあります https://arxiv.org/abs/1902.02827
当時は研究費探しに疲れ、また一人で硬い本を読むことになって学界に嫌気が差して離れました
優れたYouTube教育者たちは大きな未来の機会を生み出しており、最終的には誰もがその恩恵を受けるでしょう。制御理論は複数の分野の間の接点を見せてくれるので、パターンや構造をどこにでも見いだすのが好きな人にとっては大きな楽しみになり得ます。Steveが最近、社会モデルのための制御理論の動画も投稿していたと記憶しています
関数を無限次元の抽象ベクトル空間の元として扱えるという発見は数学史上の転換点であり、これが関数解析という下位分野の誕生につながりました
この見方の転換の意味は、3次元ユークリッド空間のような有限次元空間の研究から得られた幾何学的直観を、特定の微分方程式の解の存在といった関数に関わる難問へ適用できるようにした点にあります
この変化の歴史は19世紀末から20世紀初頭にさかのぼり、非常に興味深いものです。当時、数学の公理的基礎づけの作業は、数学的対象の構造を簡潔な公理の一覧で捉え、体系化する流れを生み出していました
たとえば抽象ベクトル空間の概念もこのように生まれ、ユークリッド空間だけでなく無限次元の関数空間まで包含するようになりました
この見方の転換を初期の形ながらすでに示している資料として、Vito Volterraの1889年の回想録があります https://projecteuclid.org/journals/acta-mathematica/volume-1...
Maurice Fréchetの1906年の博士論文 https://zenodo.org/record/1428464/files/article.pdf は、この新しいパラダイムを結晶化し現代的な形で提示したもので、20世紀前半の主要な参考文献となった最も影響力のある仕事の一つと見なせます
もちろん当時の数多くの研究のうちの二つにすぎず、その後の発展を見るならStefan Banachの1932年の本も外せません http://kielich.amu.edu.pl/Stefan_Banach/pdf/teoria-operacji-...
だから核心は、これらのベクトル空間が実際には位相的であるという点にあると思います
この見方はいつもとても気に入っていました。Vito VolterraがMadridで行った微分方程式と積分微分方程式の講義を楽しく読んでいるところですが、彼は同時に関数解析の形成にも貢献しました
ここで汎関数は双対ベクトルに対応する概念です。Volterraは有限個の変数から無限個、さらには非可算個の変数へ移る類比の方法を繰り返し活用しています
同じアイデアを繰り返しすぎているのではないかと本人が恐縮している箇所まであるほどです。教える立場の人なら、一緒に一度目を通す価値があります
https://searchworks.stanford.edu/view/526111
このようなインデックス関数をベクトル空間の超限基底として使う例は見たことがない。その関数は基底関数の有限列の極限点というより、ほとんどが 0 の項からなる奇妙な超限和のように見える
すべての関数に対してフーリエ変換が可能だとは思えない。対角化の方法では有用な結果が得られないことを、簡単に反証できそうだ
Hilbert 空間でさえ、通常は整数でしか添字付けされない。そのような基底は連続性や微分可能性の条件をまったく与えない
私が見た関数解析はどれも、何らかの連続性条件と可算基底を使っていた。それ以外の点では、関数を見る非常に有用な視点であり、量子力学の形式を理解するための出発点に近いとは思う
入門レベルで教えられる量子力学でもよくある問題だ。ただ、この記事も入門量子力学の講義のように、関数解析の概念を動機づけることに重点を置いているようで、厳密でなくても説明用としては役に立つ
この部分空間のすべての関数はフーリエ変換を持つ
この記事はおそらく正当な理由から、関数解析で普通かなり難しい選択である「どのベクトル空間を使うのか」を完全に無視している
ここでのように関数を点ごとに定義したベクトル空間は、ほとんど常に最も役に立たない選択だ。ただし、テーマの全体像を教えるためのものだったなら、それ自体にはかなり価値がある
「すべての関数にフーリエ変換が可能なはずがない」という点について言えば、そのような空間では有用な距離の概念すら得にくい
これは関数の実際の定義に関わっている。関数とは、最初の集合のすべての要素が、2 番目の集合のちょうど 1 つの要素へ写る集合間の写像である
ベクトルを使う方式の問題は、ベクトルが集合ほど一般的ではないため、ベクトルで表現できない関数が存在することだ
たとえばベクトルは、未定義の値や数値ではない要素を扱うのに使えない
定義上、始集合のすべての値が終集合の何かに対応していなければならないので、その意味での未定義値はない
関数空間を常にベクトル空間と見なせない理由は、関数同士の加法の概念やスカラー倍の概念がない場合があり、仮にあっても関数が満たす加法構造とうまく合わない場合があるからだ
これは終域がベクトル演算に必要な構造を持つ場合にだけ正しい。関数はベクトルより一般的である
本当に素晴らしそうで、後でもっと詳しく読んでみたい。一般的な物理学の学位課程なら、おそらくほとんど扱う内容だろう
それでも良い映画や本のように、概念そのものが興味深いので一度以上見返す価値がある
プログラマーの立場から見ると、こうした手法の一部はかなりハックのように見える。最初はごく合理的な整数インデックスから始めて、インデックスを一般化できると気づき、本来の意図よりはるかに多くの情報をインデックスに押し込む
本当に驚くのは、こうした愚かで濫用に見えるアイデアが、後にはいつも洞察に富んだ有用な何かにつながる点だ。少し魔法のようだ
Pyro と NumPyro の確率的プログラミング言語で使うために Eli Bingham と一緒に作った Funsor ライブラリを紹介したい
「関数はテンソルである」という視点を取り入れ、主に確率分布の対数密度関数を対象とする、NumPy のような関数用ライブラリを作ろうとした
論文: "Functional Tensors for Probabilistic Programming" (2019) https://arxiv.org/abs/1910.10775
コード: https://github.com/pyro-ppl/funsor
この記事は向きが逆なので、悪い直感を与えると思う。関数がベクトル空間をなすようにするのは入力ではなく出力である
ある集合 X から体 F への関数は、X に順序がなくてもベクトル空間をなすことができる
追える範囲では非常に興味深い視点だが、残念ながらあまりついていけない
このような形式論理が、ベクトルを説明する関数を導く助けになるのか気になる
ビッグデータ解析、たとえばニューラルネットワークの学習における最大の非効率とボトルネックは、依然として期待ベクトルに似た出力を近似する関数を見つける方法に帰着するように思う
それが記号回帰であれ、多数の変換層であれ同じだ。入力と出力の間の関係を何らかの形で抽出または圧縮せずに、関数としてのベクトルだけに対して演算できるなら「魔法」のようだろう
これは本質的に MP3 と JPEG 圧縮の基本アイデアだ。もちろん空間と時間のトレードオフなので、元のベクトルの近似を得るには、まず逆フーリエ変換を適用しなければならない
この記事は抽象ベクトル空間、その性質であるベクトル加法やスカラー倍などを扱い、特に関数がその定義を満たして関数のベクトル空間、つまり関数空間を作るという点を述べている
たとえば 2 つの関数 f, g とスカラー b があれば、次のように扱える
f + g = g + f
b(f + g) = bf + bg
また (-f) が存在して f + (-f) = 0 となり、ここで 0 は零関数であり、関数空間にはこの零関数も存在しなければならない