汎関数の勾配(functional gradient)

/ Math

汎関数の勾配(functional gradient)をベクトル微分の一般化として納得する。

ある関数\(f\in\mathcal{F}\)に対して作用する汎関数\(L:\mathcal{F}\to\mathbb{R}\)があるとする。このとき、この汎関数における\(f_0\in\mathcal{F}\)での勾配とはどういったものになるだろうか?そもそも汎関数の勾配とはどういうものなのか?

例1)\(L(f)=\|f-f^*\|^2\)とする(\(f^*\in\mathcal{F}\)は固定されたある関数)。このとき十分小さい\(\epsilon>0\)と任意の関数\(g\in\mathcal{F}\)を用いて

\[ \begin{align}L(f+\epsilon g)&=\|f+\epsilon g- f^*\|^2\\&=\langle f-f^*+\epsilon g,f-f^*+\epsilon g\rangle\\&=\langle f-f^*,f-f^*\rangle+2\langle f-f^*,g\rangle\epsilon+\langle g,g\rangle\epsilon^2\\&=L(f)+\langle \textcolor{red}{2(f-f^*)},g\rangle\epsilon+o(\epsilon)\end{align}\]

となる。自然に\(\nabla L(f)=2(f-f^*)\)となる。この汎関数\(L\)\(f_0\in\mathcal{F}\)における勾配は\(2(f_0-f^*)\)である。

汎関数\(L:\mathcal{F}\to\mathbb{R}\)に対して\(\nabla L(f)\in\mathcal{F}\)になっていることがわかる(\(\nabla L\)でなく\(\partial_fL\)と書くこともある)。言い換えると、汎関数の勾配は定義域とする関数の空間の元になっている。これを納得するために\(\boldsymbol{x}=(x_1,\dots,x_n)\)上の関数\(f(\boldsymbol{x})\)\(\boldsymbol{x}=\boldsymbol{x}_0\)における展開を考えてみる。

\[ \begin{align}f(\boldsymbol{x}_0+\epsilon\boldsymbol{x})&=f(\boldsymbol{x}_0)+\epsilon\sum_{i=1}^n\left.\frac{\partial f(\boldsymbol{x})}{\partial x_i}\right|_{\boldsymbol{x}=\boldsymbol{x}_0}x_i+o(\epsilon)\\&=f(\boldsymbol{0})+\epsilon\left\langle\nabla f(\boldsymbol{0}),\boldsymbol{x}\right\rangle+o(\epsilon)\end{align}\]

ここで\(\nabla f(\boldsymbol{x})\)は次のようなベクトルになっており2行目の第2項はこれと\(\boldsymbol{x}\)の内積で表現されている。

\[ \nabla f(\boldsymbol{0})\equiv\left(\left.\frac{\partial f(\boldsymbol{x})}{\partial x_1}\right|_{\boldsymbol{x}=\boldsymbol{x}_0},\ldots,\left.\frac{\partial f(\boldsymbol{x})}{\partial x_n}\right|_{\boldsymbol{x}=\boldsymbol{x}_0}\right)\]

この場合も関数\(f:\mathbb{R}^n\to\mathbb{R}\)に対して\(\nabla f(\boldsymbol{x})\in\mathbb{R}^n\)となっており関数の勾配は定義域とする空間の元となっている。関数は無限次元のベクトルと見ることもでき、このアナロジーとして汎関数を展開したときの1次の係数(内積の相手)を汎関数の勾配の定義とすることはわりと自然と思える。ほかには超関数の微分でも同じようなアナロジーをつかって一見微分(勾配)が得られなそうなものの微分を定義したりする。

汎関数の勾配と似た言葉として変分という言葉が使われることがあるが、これは1次の係数(内積の相手)ではなく1次の項そのものを指している。つまり最初の例でいう

\[ \delta L=L(f+\epsilon g)-L(f)=2\langle f-f^*,\epsilon g\rangle+o(\epsilon)\]

みたいなことをして両辺\(\epsilon\)で割って\(\epsilon\to 0\)を考え、どんな\(g\in\mathcal{F}\)に対しても\(\delta L\)=0とするには\(f-f^*=0\)が必要だよねというやつをする。