ヤコビアンとヘッセ行列 — 多変数の微分を図で
ヤコビアンは「その場の拡大鏡」、ヘッセ行列は「その場の曲がり具合」。局所線形化から、固有値による地形の分類、ニュートン法が理論上は速いのに使われない理由、そして10億次元でも計算できるヘッセ行列ベクトル積までを一本につなぎます。
地球は丸いのに、足元は平らに見える
地球は球です。それでも家の前の道は平らに見えますし、平らだと思って歩いて何も困りません。曲がっているものでも、十分に狭い範囲だけ切り取れば直線で代用できる。微分がやっていることは、煎じ詰めればこれだけです。
1変数なら、点 のまわりの近似はこう書けます。
「入力を だけずらすと、出力は 倍された のぶんだけ動く」。つまり微分はその場の倍率です。この見方を丁寧に組み立てたのがAIのための微分で、本記事はその続きにあたります。
問題は、実際に扱う関数の入口と出口が1つの数ではないことです。入力は何億個のパラメータ、出力は数万次元のロジット。倍率が1個では足りません。入力の一つ一つと出力の一つ一つの組み合わせぶんだけ倍率が要る。その表がヤコビアンです。そしてもう一度微分すると、今度は「倍率そのものがどう変わっていくか」の表が出てきます。それがヘッセ行列です。
入力も出力も複数なら、微分は「表」になる
個の数を受け取って 個の数を返す関数 を考えます。ヤコビアンは、偏微分を総当たりで並べた の行列です。
言い換えると、式(1)は「入力の 番目のつまみを少し回したとき、出力の 番目がどれだけ動くか」を全組み合わせぶん並べた表です。(ラウンド・ディー)は「他のつまみは固定したまま、この1本だけを回したときの倍率」を意味します。
読み方のコツは行が出力、列が入力と覚えることです。 行目を横に読めば、それは出力 ひとつぶんの勾配(各入力に対する傾きを並べたもの)になっています。出力が1個しかない場合、 は1行だけの行列、つまり勾配そのもの。勾配はヤコビアンの特別な場合です。
大きさの感覚も先に持っておくと役に立ちます。入力4096次元・出力4096次元の線形層ひとつでも、そのヤコビアンは1600万個の要素を持つ表です。層を10枚重ねればそれが10枚。だから実務ではこの表を一度も作らないのが原則で、必要なのはいつも「表そのもの」ではなく「表にベクトルを掛けた結果」です。この事情はあとで効いてきます。
具体例を1つ。極座標 から直交座標への変換 のヤコビアンは
です。1列目は「 を伸ばすと点がどちらへ動くか」(原点から外向き)、2列目は「 を回すと点がどちらへ動くか」(円の接線向き、しかも半径 に比例して速く動く)。表の各列が、そのつまみを回したときの移動方向のベクトルになっているのが見て取れます。
ヤコビアンは「その場の拡大鏡」
ヤコビアンの正体は、点 のまわりだけで通用する線形の代役です。
式(2)は「 の近くでは、この曲がりくねった関数は行列 を掛けるだけの単純な関数と見分けがつかない」と言っています。 は小さなズレのベクトル、 は行列とベクトルの積です。局所線形化という言葉はこの式を指します。
行列を掛けるというのは、幾何的には「引き伸ばして、潰して、回す」ことです。だから点 のまわりの小さな円は、 を通すと楕円になります。どちらの向きに伸び、どちらの向きに潰れるかを決めているのがヤコビアンです。
「近く」がどこまでかは関数によります。 を大きくすれば近似はいずれ外れ、そのズレの大きさを支配しているのが次に出てくる2階微分です。ちなみにReLUだけで組んだネットは区分的に線形なので、同じ「折れ目の内側」にいるかぎり式(2)は近似ではなく厳密に成り立ちます。折れ目をまたいだ瞬間に が別の行列に切り替わる、という不連続な振る舞いをするわけです。
面積(3次元以上なら体積)の倍率も、この表から1つの数として出てきます。行列式 です。 が0なら、その場で次元が潰れている=情報が失われている。極座標の例では で、原点()でだけ潰れます。地図で北極点の周りがおかしくなるのと同じ事情です。この体積の倍率は確率分布の変数変換にそのまま効いてきて、生成モデルの一種であるnormalizing flowが毎ステップ を計算しているのはこのためです。
コメント
コメントにはログインが必要です