electricpockyの日記

電気の人です。生まれ変わったらピカチュウになりたい。嘘です。

中心差分近似によるヘッセ行列の計算方法

1.はじめに

最適化演算をニュートン法を適用して解く場合、目的関数の2階微分で構成されたヘッセ行列を使って解の更新ベクトルを算出する必要がある。本記事では、このヘッセ行列の各要素を差分近似の一つである中心差分近似を使って求める方法を記載してみる。

 

2.中心差分による実装のメリット

ニュートン法等のヘッセ行列を使った最適化演算のプログラムを実装する際、ヘッセ行列の計算を差分近似で実装すれば、目的関数に関係なく各行列要素を求めることが可能。

波動方程式ポアソン方程式といった偏微分方程式変分法で解いている資料は数多くあるが、変分法の対象として扱われている簡易なパターンだけを考えれば、これらの方程式は∂x^2や∂t^2といった形であり、ヘッセ行列で必要とされる∂x1∂x2のような複数の変数による微分への考慮は不要である。

このような背景から、中心差分近似を使ったヘッセ行列の計算の実装方法を形に残しておこうと思った次第です。

 

3.中心差分による実装方法

まず、前進差分、後退差分、中心差分の基礎的な解説は、先人が数多くの媒体で解説しているので割愛します。

あくまでプログラム実装に使える記事とするべく、結論(算出式)を先出しし、算出式の導出は次点に設ける構成にしてみました。

 

f:id:electricpocky:20210131014514j:plain

f:id:electricpocky:20210131014526j:plain

f:id:electricpocky:20210131014539j:plain

f:id:electricpocky:20210131014551j:plain

f:id:electricpocky:20210131014609j:plain

f:id:electricpocky:20210131014619j:plain

4.注意事項

 この内容はプログラムの実装や直感的な理解を目的に記載しているので、一部数学的な厳密さを欠いた記載となっております。そのため、数学的な議論もふまえた厳密な理解を目指す人や、ヘッセ行列を用いた新たなアルゴリズムを検討している人は、ちゃんとした文献を読んで勉強してください。また、本記事の内容に起因して発生した損害については一切責任を負いかねます。