JA EN
体系微分と最適化の数学
·★ 会員·17分で読めます

変分法 — 「関数を微分する」とはどういうことか

探しているのが「数」ではなく「形」のとき、微分はどう姿を変えるのか。汎関数と第一変分、オイラー=ラグランジュ方程式、最速降下線がサイクロイドになる理由、そして機械学習でいちばん使われる変分問題であるELBOまでを一本につなぎます。

対象textタスクmath

探しものが「数」ではなく「形」のとき

普通の最適化は、数を探す問題です。学習率をいくつにするか。何層積むか。答えは1個の数、あるいは数の並びで書けます。微分してゼロになる場所を探す、という手順がそのまま使えます。

ところが世の中には、答えが数では書けない問題があります。

滑り台を設計するとします。出発点と到着点は決まっている。摩擦はない。ボールがいちばん早く下まで届く滑り台の形は、どんな形でしょうか。直線でしょうか。急な坂を作って一気に加速させ、あとは水平に走らせるべきでしょうか。

ここで探しているのは数ではなく曲線そのもの、つまり関数です。候補は無限にあり、しかも「候補に番号を振って並べる」ことすらできません。それでも私たちは、この問題にも「微分してゼロ」を持ち込みたい。そのために作られた道具が変分法(calculus of variations)です。

歴史的には1696年、ヨハン・ベルヌーイがこの滑り台の問題(最速降下線問題)を公開の挑戦として出したのが出発点です。ニュートンやライプニッツを含む当代一流の数学者たちが個別に解き、その50年ほど後にオイラーとラグランジュが「この手の問題を一般に解く手続き」へ整理しました。いま私たちが変分法と呼んでいるのは、その手続きのことです。

汎関数 — 関数を1個入れると、数が1個出てくる箱

まず言葉を1つだけ用意します。汎関数(functional)です。

普通の関数は、数を入れると数が出ます。f(3)=9f(3) = 9 のように。汎関数は、関数を入れると数が出ます。区別のために丸括弧ではなく角括弧を使って J[y]J[y] と書きます。

例を並べると腑に落ちます。

最後の例に注目してください。機械学習で「損失を最小化する」と言うとき、私たちは本当は関数 ff を動かして汎関数を最小化しているのです。普段はニューラルネットのパラメータ θ\theta を動かすことで間接的にやっているので気づきませんが、問題の正体は変分問題です。

ここで難しさの正体をはっきりさせておきます。パラメータが100万個ある学習でも、探索空間は100万次元の「有限次元」です。ところが「あらゆる関数」を候補にすると、空間は無限次元になります。関数の値は各点ごとに独立に決められるので、自由度は点の数だけ、つまり非可算無限個あるわけです。だから「候補を1つずつ試す」も「全部の偏微分を並べる」も原理的に無理で、まったく別の道具立てが要る——それが変分法が独立した分野として存在する理由です。

変分法が扱うのは、次の形に書ける汎関数です。

J[y]=abL(x,  y(x),  y(x))dxJ[y] = \int_a^b L\bigl(x,\; y(x),\; y'(x)\bigr)\, dx
(1)

記号の意味を1つずつ言います。y(x)y(x) が探している曲線、y(x)y'(x) はその傾き、LL は「その地点の xx と高さと傾きを見て、コストを1つ返す関数」でラグランジアンと呼ばれます。積分は「区間全体にわたってコストを足し合わせる」という意味です。

要するに式(1)は、「道すじの各点で少しずつコストがかかる。全部足したものが、その道すじの総コストだ」と言っているだけです。滑り台なら各区間を通過するのにかかる時間、曲線の長さなら各区間の微小な長さがコストにあたります。

「関数を微分する」とは、形を少し揺らすこと

普通の微分を思い出します。f(x)f'(x) が何を測っていたかというと、「入力を hh だけずらしたら、出力がどれだけ動くか」でした。極小点では、どちらへずらしても1次の変化がゼロになる。だから「微分してゼロ」を探すわけです。詳しくはAIのための微分で扱っています。

変分法もまったく同じ発想でいきます。違うのは、ずらす対象が数ではなくだということです。

いま候補の曲線 y(x)y(x) があるとします。これを少しだけ揺らしてみます。揺らし方を表す関数を η(x)\eta(x)(イータ)と書き、揺らしの強さを ε\varepsilon(イプシロン)と書いて、

yε(x)=y(x)+εη(x)y_\varepsilon(x) = y(x) + \varepsilon\,\eta(x)

という新しい曲線を作ります。言い換えると、元の曲線に「でこぼこの型紙」を薄く重ねる操作です。ε\varepsilon が揺らしの倍率で、これを0に近づければ元の曲線に戻ります。

ここで1つだけ条件を付けます。η(a)=η(b)=0\eta(a) = \eta(b) = 0。つまり両端では揺らさない。滑り台の出発点と到着点は動かせないからです。

すると J[yε]J[y_\varepsilon] は、ε\varepsilon というただ1つの数の関数になります。無限次元だった問題が、揺らし方 η\eta を1つ選ぶごとに、いつもの1変数の微分に化けるのです。この ε=0\varepsilon = 0 での微分係数を第一変分と呼び、δJ\delta J と書きます。

δJ[y;η]=ddεJ[y+εη]ε=0\delta J[y;\eta] = \left.\frac{d}{d\varepsilon} J[y + \varepsilon\eta]\right|_{\varepsilon=0}

つまり、「この曲線をこの型紙で少し揺らしたら、総コストは増えるか減るか」を1つの数で答えたものが第一変分です。

そして極小の条件はこうなります。あらゆる揺らし方 η\eta について δJ=0\delta J = 0。どんなでこぼこを重ねても得も損もしない形、それが答えの候補です。

「あらゆる」が効いているところが肝心です。1種類の揺らし方でゼロになるだけでは足りません。滑り台の真ん中だけを持ち上げる型紙、逆に真ん中だけを凹ませる型紙、前半を上げて後半を下げる型紙——考えつく限りのでこぼこを重ねて、そのすべてで1次の変化が消える。そこまで要求して初めて「これ以上いじりようがない形」だと言えます。逆に言えば、1つでも損得の出る揺らし方が見つかれば、その方向へ形を動かせば必ず改善できるわけです。この「悪い方向が1つも残っていない状態」という言い方は、パラメータを動かす普通の学習で「勾配がゼロ」と言っているのとまったく同じ意味です。舞台が広がっただけで、考え方は1ミリも変わっていません。

FIG 1変数が1個のときの「微分してゼロ」。球が止まるのは傾きが消える場所です。変分法は、この球が転がる舞台が数直線ではなく「あらゆる曲線の集まり」になった版だと思ってください

「あらゆる について」という条件は、そのままでは使えません。 は無限にあるからです。ここからが変分法の技術的な核心で、やることは部分積分1回です。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です