はじめに
名古屋大学情報学研究科で教鞭を執っていた畔上先生の最終講義資料を拝見して、ふと記事のタイトルのような疑問が浮かんだので、この機会にまとめておきます。
通常の関数の感度1(勾配)と汎関数2の感度を比較する際、双対空間3という概念が必要になる根本的な理由は、微分の定義そのものが数値やベクトルではなく線形写像4になるからです。
通常の多変数関数(有限次元)では、この区別を意識しなくても、(幸運なことに)ベクトルと線形写像との間で計算が合ってしまいますが、汎関数(無限次元の関数空間)ではその事情が通用しなくなるため、双対空間を明示的に考える必要が出てきます。
直感的な違い
感度とは、目的関数を設計変数(形状を構成する変数)で微分したものです。微分(全微分・フレシェ微分)とは、
「入力が少し変化したとき、出力がどれくらい変化するか」を表すものです。これは「方向」ではなく、入力の変化に対する「感度(重み係数)」の集まりです。有限次元($\mathbb{R}^n$)の場合、ユークリッド空間では、「縦ベクトル(方向)」と「横ベクトル(感度)」を単に転置するだけで同一視できます($v$ と $v^T$ の区別があまりない)。そのため、双対空間を意識せずとも「微分係数を並べたもの=勾配ベクトル」として扱えてしまいます。
汎関数の場合、つまり関数空間では、「微分の結果(線形汎関数)」と「元の関数(ベクトル)」は全く異なる空間に住んでいます。微分はしばしば積分計算の形(例: $\int f(x) \delta u(x) dx$)で現れます5。これを「関数空間内の方向」として扱うには、 リースの表現定理6を使って、無理やり(?)元の空間に引き戻す必要があります。
数学的なメカニズム
高校数学でも習う微分の正体は「双対空間の元」ある汎関数 $J(u)$ の $u$ における微分(変分) $\delta J$ は、微小変化 $\delta u$ に対して以下の線形性を持ちます(ガトー微分)。
$$\delta J(u)[\delta u] = \lim_{\epsilon \to 0} \frac{J(u + \epsilon \delta u) - J(u)}{\epsilon}$$
関数解析の観点において、この $\delta J(u)$ は$\delta u$ という関数を「実数」に変換する写像です。数学的には、$\delta u$ が属する空間を $V$ とすると、$\delta J(u)$ は $V$ の双対空間 $V^*$ の元になります。
(厳密には、この極限(ガトー微分)が $\delta u$ に関して線形かつ連続であるとき、これをフレシェ微分(全微分)と見なすことで初めて、双対空間 $V^*$ の元であることを保証します。)
数理最適化などで変数を $u_{new} = u_{old} - \alpha \nabla J$ のように更新したい場合、$\nabla J$ は $\delta u$ と同じ空間 $V$ にいなければ足し算ができません。しかし、先ほどの $\delta J(u)$ は $V^*$ にいるため、そのままでは使えません。
ここで内積 $(\cdot, \cdot)_V$ を導入します。リースの表現定理により、「任意の線形汎関数 $\delta J(u)$ に対して、以下を満たす $g \in V$ が一意に存在する」ことが保証されます(ヒルベルト空間の場合)。$$\delta J(u)[\delta u] = (g, \delta u)_V$$この $g$ が、定義された内積における勾配 $\nabla J$ です。
内積の定義による勾配の変化
内積について、有限次元ベクトルなら「標準内積(ドット積)」が暗黙の了解として存在しますが、関数空間では「どの内積を選ぶか」によって勾配の姿が変わります。例えば、ある感度解析の結果、微分が以下の積分形式で得られたとします。$$\delta J = \int_{\Omega} S(x) \delta u(x) dx$$
ここで $S(x)$ は入力としての感度関数です。$L^2$内積を選んだ場合、内積を$(u,v)=\int uv dx$と定義すれば、リースの定理より
$$\int S \delta u dx = (S,\delta u)_{L^2} $$
$$\int S \delta u dx =\int g \delta u dx $$
となり、出力としての勾配 $g(x)$について単純に $S(x)=g(x)$ となります。これが通常の形状最適化などで見る感度分布です。この感度分布を形状更新にそのまま採用すると、波打ち現象のような特異な現象が発生してしまいます。
ここで重要なのは、$g(x) = S(x)$ である必要性を除外した場合に、必ずしも$L^2$内積を選ぶ必要はないという点だと思います。
H1内積を選んだ場合(H1勾配法)
もし設計変数の空間の滑らかさを考慮して$H^1$ 内積(微分の積も含む内積)を選ぶと、やはりリースの定理から
$$\int S(x) \delta u(x) dx={(g, \delta u)_{H^1}}$$
これを具体的に書くと$$ \int S \delta u dx=\int (g \delta u +\alpha \nabla g \cdot \nabla \delta u) dx$$となります。
これを離散化していくと、大抵はなにかしらの線形(または非線形)方程式に帰着します。これを解いて得られる勾配 $g(x)$ は、 $S(x)$ を平滑化した(ぼかした)分布(つまり、厳密には$g(x)\neq S(x)$)になります。
まとめ
(本記事のタイトルだと、汎関数の微分をとるときに初めて双対空間が導入されるような書き方になっていますが、)微分の結果は、本質的に双対空間(入力に対する重み係数の空間)に存在します。
形状の更新をする必要があることから、形状勾配は元の空間に存在する必要があります。有限次元($\mathbb{R}^n$)では標準内積により両者を同一視できますが、汎関数(関数空間、無限次元)では「内積の定義」を経由して双対空間から元の空間へ変換しなければならないため、双対空間の概念と内積の選択が不可欠になります。
形状最適化のみならず、トポロジー最適化でも「感度フィルタリング」を行うのは、数学的には$L^2$内積での勾配(ノイズが多い)ではなく、別の内積(作用素)を用いて双対空間からより滑らかな勾配を取り出しているという操作に対応しているとも解釈できます。
※本記事の作成にあたってGemini3Proを使用していますが、自身で精査・編集しています。
※今後挿絵等を追加していく予定です。
-
感度
設計変数の微小な変化に対して、目的関数(コンプライアンスや体積など)がどれだけ変化するかを表す割合のことです。構造最適化の分野では設計感度とも呼ばれます。 ↩ -
汎関数
「関数」を入力として受け取り、「実数(スカラー)」を出力する写像のことです。通常の関数が数値を入力して数値を返すのに対し、汎関数は関数そのもの(例:変位場 $u(x)$)を引数にとり、系全体のエネルギーや体積といったスカラー値を返します。 ↩ -
双対空間
あるベクトル空間 $V$ 上で定義された、すべての連続線形汎関数(ベクトルをスカラーに変換する線形写像)の集合のことです。元の空間 $V$ と対になる空間として $V^*$ と表記されます。微分の結果はこの空間に属します。 ↩ -
線形写像
ベクトル空間からベクトル空間への写像のうち、和とスカラー倍の演算を保つ(線形性を持つ)もののことです。文脈における「微分」は、微小な変化(ベクトル)を入力すると、その変化による関数の増分(スカラー)を返す線形写像として定義されます。 ↩ -
微分は積分形式で表される
有限次元ベクトル空間での内積計算(成分ごとの積の総和 $\sum$)が、関数空間(無限次元)に拡張されると積分 $\int$ に対応するためです。汎関数の変分(微分)は、領域内の各点での局所的な感度と変化量の積を、領域全体で足し合わせた(積分した)形式になります。 ↩ -
リースの表現定理
ヒルベルト空間において、「任意の連続線形汎関数は、その空間内のあるベクトルとの内積として一意に表現できる」という定理です。この定理のおかげで、双対空間上の抽象的な「微分」を、元の空間上の具体的な「勾配ベクトル(分布関数)」として変換・同一視することが可能になります。 ↩