Processing math: 100%
スポンサーリンク

ヤコビ行列?勾配(grad)?

微分法

本記事の内容

本記事は、ヤコビ行列、勾配について解説する記事です。

本記事を読むにあたり、偏微分と全微分について知っている必要があるため、以下の記事も合わせてご覧ください。

↓偏微分の記事

↓全微分の記事

1変数の微分と多変数の微分(偏微分)との違い

1変数の微分と多変数の微分との違いは、勿論変数の数なのですが、それ故微分係数の風貌が変わります。

微分係数は、その点における接線の傾きなので、その瞬間の変化量を表しています。
1変数実数値関数の場合の微分係数は勿論実数値です。
1変数ベクトル値関数の場合の微分係数はベクトルですが、ベクトル値の各関数の微分係数を並べたベクトルです。
確かに、1変数の場合でも微分係数は実数値だったりベクトル値だったりするわけですが、結局の所1変数実数値関数の微分係数を求めるという点においては違いはありません。
それ故、微分係数はなんだかんだ接線の傾きを表しています。

一方で、多変数の場合はそもそも複数の変数で微分するわけですので、偏微分係数は複数あります。
例えば、2変数であればfx(a)fy(a)のように。
さらに、多変数の場合は全微分というものもあるので、全微分係数まで含めるとさらに種類が多くなります。

先程、1変数の場合の微分係数は接線の傾きを表してるよ、という話でしたが、多変数の場合は接平面の傾き(みたいなもの)になります。
接線は、接線方向のベクトル1つが分かれば、そのベクトルを定数倍することで得られる直線がそのまま接線になります。
しかし、接平面の場合はそうも行きません。
2変数の場合はx方向の変化量のベクトル(xの偏微分係数)とy方向の変化量のベクトル(yの偏微分係数)が張る平面が接平面になります。

つまり何が言いたいか、というと1変数の場合の微分係数は接線の方程式の傾きを表しており、多変数の場合は各変数の偏微分係数を並べたベクトルにより張られる平面によって接平面が得られる、ということになります。

結局は「多変数はベクトルで考えるんだ」ということです。
それに伴い出現する新たなコンセプトがヤコビ行列と勾配です。

まずは、全微分とヤコビ行列を軽く復習します。

全微分可能性、全微分係数、導関数

ΩRnの開集合、f:ΩRmM(m,n;R)(m,n)型の実行列の集合とする。すなわち、 M(m,n;R)={A=(aij)|aijR (1im, 1jn)} とする。
  1. aΩで全微分可能
  2. aΩとする。fa(全)微分可能((totally) differentiable at a)であるとは、 (AM(m,n;R)) s.t. limh01h(f(a+h)f(a)Ah)=0 が成り立つことをいう。このとき、Afaにおける(全)微分係数((totally) derivative of f at a, the (total) differential of f at a)とよび、f(a)で表す。
  3. Ωで全微分可能
  4. fΩ(全)微分可能であるとは、xΩで全微分可能であることをいう。このとき Ωxf(x)M(m,n;R)f導関数と呼び、fで表す。

全微分とは、上記の事でした。
そして、上記の行列Aが実はヤコビ行列になるのでした。
ヤコビ行列というのは以下でした。

ヤコビ行列(ヤコビアン)

ΩRnの開集合、aΩf:ΩRmaで全微分可能とし、 f=(f1f2fm),x=(x1x2xn)と書いたとする。このとき、行列 f(a)=(fixj(a))=(f1x1(a)f1x2(a)f1xn(a)f2x1(a)f2x2(a)f2xn(a)fmx1(a)fmx2(a)fmxn(a))faにおけるヤコビ行列またはヤコビアン(the Jacobian matrix of f at a)と呼ぶ。

つまり、ここで何が言いたいのか、というと、

多変数ベクトル値関数の全微分係数は行列です。

ということです。
与えられた関数が多変数ベクトル値関数の場合、その全微分係数と言われたらば「ああ、この係数ってのは行列なのね」と直ちに思ってほしい、ということです。

ちなみに、前回サラッと紹介した全微分の「df=うんぬん」という式(というより記号)は”微分形式”と呼ばれるもので、実は数学的に意味がある式です。

勾配(gradient)

勾配はなんてことありません。
言ってしまえば、勾配はヤコビ行列の一部です。

勾配って結局なんですか?

先程、勾配はヤコビ行列の一部だ、と述べましたが本当にそれだけなんです。
更に言ってしまえば「多変数実数値関数の場合のヤコビ行列」ということです。

勾配ベクトル(gradient)

ΩRnの開集合、aΩf:ΩRに対して x=(x1x2xn) と書いたとする。このとき (fx1 fx2  fxn) を転置したn次元縦ベクトルをgradf(a)またはf(a)で表し、faにおける勾配ベクトル(gradient)と呼ぶ。すなわち gradf(a)=f(a)=(fx1fx2fxn) である。記号は単独でもナブラ(nabla)と呼ばれ、 =(x1x2xn) という意味で、関数fに対して勾配ベクトルを対応させる写像としても用いられる。

これはまさにヤコビ行列A=(fixj(a))m=1の場合を転置したベクトルに相当します。
勾配ベクトルはいわゆるベクトル解析で頻繁に出現します。

勾配ベクトルのイメージ

勾配ベクトルはもう殆どベクトル解析の範疇ですので、あまり込み入った説明はしませんが、やはりイメージは重要です。

結論から言うと、勾配ベクトルのイメージは(個人的に)2つあると思います。
それが

  1. 接平面の傾き
  2. 勾配ベクトルgradfの向き=fの値が最も激しく変化する向き

です。

1.について(接平面の傾き)

1.については線型代数を学んでいると一撃で見て分かる方法があります。
(※イメージですので、2変数の場合を述べます。)

f(x,y)の勾配ベクトルgradf
gradf=(fxfy)
でした。
これをR2の正規直交基底e1=(10)e2=(01)を用いて表すと、
gradf=fx(10)+fy(01)
となります。
正規直交基底e1e2は座標軸の役割があるということでしたので、まさにgradfは平面を作ることができます。
そしてその座標は(fx,fy,)ですので、f各方向の変化量です。
従って、接平面の傾きに対応しています。

もっというと、ベクトル(fx0)(0fy)
の線型結合の集合
{c1(fx0)+c2(0fy)|c1,c2R}
が接平面となるわけです。

2.について(勾配ベクトルgradfの向き=fの値が最も激しく変化する向き)

こちらのほうがイメージが湧きやすいかもしれません。
図と共に説明します。

f(x,y,z)という関数を考えます。
このとき、3次元空間上のあるr=(x,y,z)という点においての勾配ベクトルgradf(r)
gradf(r)=(fxfy)
です。
このとき、Δr=(Δx,Δy,Δz)R3としたとき、rからほんのちょっとだけ動かした点r+Δr=(x+Δx,y+Δy,z+Δz)に対してもfの値が定まっているとして、このr+Δrについて考えてみます。

そして、gradfΔrのなす角をθ (θ[0,2π))とします。
このとき、r+Δrでのff(r+Δr)f(r)の差を計算してみます。

f(r+Δr)f(r)=f(x+Δx,y+Δy,z+Δz)f(x,y,z)=f(x,y,z)+fxΔx+fyΔy+fzΔzf(x,y,z)=fxΔx+fyΔy+fzΔz
となります。
ただし、赤字の部分の等式
f(x+Δx,y+Δy,z+Δz)=f(x,y,z)+fxΔx+fyΔy+fzΔz
については、多変数の場合のテイラー展開を用いました。
まだ学習していないので、「ふーん。そーなんだー。」と思ってください。

さて、
f(r+Δr)f(r)=fxΔx+fyΔy+fzΔz
が分かりました。
これは内積を使って表すことができます。
すなわち、
fxΔx+fyΔy+fzΔz=((fxfyfz),(ΔxΔyΔz))=(gradf,Δr)=gradfΔrcosθ
となります。式gradfΔrcosθにおいて、gradfΔrθに依存しません。
すなわち、固定の値で、動くのはあくまでθです。
ということは、式
f(r+Δr)f(r)=gradfΔrcosθ
を最大にするようなθθ[0,2π)θ=0のときです。
つまり、何が言いたいかと言うと、

f(r+Δr)f(r)=gradfΔrcosθを最大化するのはθ=0のときである。

ということです。
ここで、θは何者だったかと言うと、gradfΔrのなす角でした。
θ=0のときにf(r+Δr)f(r)の値を最大化するので、まさにgradfの方向が最も変化が激しい方向ということになります。

実際に計算してみましょう!

簡単ではありますが、実際に計算してみます。

例1.(2変数2次関数) f(x,y)=x2+2xy+y2+x+y+1が全微分可能かどうかを調べて、fのヤコビ行列とgradfを求めてみます。

fxfyは共に多項式関数なので連続です。
従って、fC1級ですから全微分可能です。

ただし、ここで次の事実を使いました。

定理2.

ΩRnの開集合、f:ΩRmはすべての変数xjに対してΩで偏微分可能で、偏導関数fxj:ΩRmは連続だとする。このとき、fΩで全微分可能である。

この定理2.の証明は【解析学の基礎シリーズ】偏微分編 その3を御覧ください。

さて、全微分可能であることが分かりましたので、fのヤコビ行列f(x,y)を求めてみます。
ヤコビ行列と言っても実数値関数ですので今回は横ベクトルになります。

f(x,y)=(fx fy)=(2x+2y+1 2y+2x+1)

また、gradf=f(x,y)だったわけですので、
gradf(x,y)=(fxfy)=(2x+2y+12y+2x+1)
となります。

gradf(a,b)(a,b)からのfの値の変化が最も激しい方向を指すのでした。
そこで(a.b)=(0,0)として図で確かめてみましょう。

gradf(0,0)=(11)
です。
従って、点(0,0)(1 1)の方向に動かしたときにfの値が最も変化します。

ただし、A=(0,0,1), B=(0,0,0), C=(1,1,0), D=(1,1,7)です。

確かに、めちゃめちゃ変化してますね。

例2. f(x1,x2,x3)=(f1(x1,x2,x3)f2(x1,x2,x3))=(x1+2x2+3x3+74x1+5x2+6x3+8)
としたとき、fのヤコビ行列を求めてみます。
fixjは定数関数ですので、R3で連続です。
従って、fR3C1級ですので全微分可能で、ヤコビ行列f(x1,x2,x3)=(fixj)
(fixj)=(f1x1f1x2f1x3f2x1f2x2f2x3)=(123456)
となります。

ちなみに、f1の勾配ベクトルgradf1
gradf1=(f1x1f1x2f1x3)=(123)
で、
f2の勾配ベクトルgradf2
gradf1=(f2x1f2x2f2x3)=(456)
です。
ベクトル値関数fにおいて、f1(1 2 3)方向に点を動かすと最もf1の値が変化し、f2(4 5 6)方向に点を動かすと最もf2の値が変化する、というわけです。
ベクトル値関数の場合は特に勾配はあまり気にしません。

今回は全微分に関連するヤコビ行列と勾配ベクトル(gradient)について解説しました。
あるベクトル値関数が全微分可能であるとき、全微分係数がヤコビ行列となります。
ベクトル値関数ではなく多変数実数値関数の場合はヤコビ行列の第1行目を転置したベクトルが勾配ベクトルとなります。
そして、勾配ベクトルは勾配ベクトルの方向に点を移動させたときに関数の値が最も変化する方向を指しています。

次回は多変数の合成関数の微分と逆関数の微分について解説します。

乞うご期待!質問、コメント等お待ちしております!

コメントをする

タイトルとURLをコピーしました