【修正履歴】
- 08May2024: 「粒子により安定化したSkyrmion」の章の数値計算を正しいものに修正しました。また当該の章の「問題1」の式を修正しました(第1式左辺最後の項の分母をとした)。さらにその次の四角いテキストボックスの中の式を実用的に使いやすい形に書き換え、その下の当該式の説明を修正しました。
Gradient flow
本記事ではgradient flowと呼ばれる微分方程式の解法について説明します。呼び方は他にもあるかもしれませんが、ここではRef.[1]に従いこのように呼びます。
微分方程式と汎関数の極小化
微分方程式と汎関数の極小化は密接に関係します。力学におけるLagrange形式はその典型例です。ある時刻における物体の位置を、作用と呼ばれるの汎関数のに関する極小化で求めます。はLagrangian の積分として
と書かれます(ドットは時間微分)。一般にはは時刻に陽に依存してもいいですが、ここでは陽には依存しないとします。の極値はを変分してゼロになるで与えられます。このときは
を満たします。の右辺の式はEuler-Lagrange方程式 (EL-eq.)と呼ばれます(※脚注)。
空間および時刻に依存する何らかの場の運動や状態も同様に最小作用の原理で書かれます。作用がLagrangian密度なる量の4次元積分で書かれるとします:
とはのことです。このときEL-eq.は
です。静的な場の場合、空間座標のみに依存する関数のエネルギー汎関数の極小化に帰着します(後述)。
Gradient flow
改めて以下の問題を考えます:
に依存する汎関数を極小化し、を決定する
もちろんEL-eq.に相当する微分方程式を求め、それを解いてを決定してもよいです。一方で、微分方程式を解くかわりに、各においてが最も下がる方向にを変形していくことでを求めることもできます。これがgradient flowの方法です。数値計算をするためにを離散化し、これをとすると、はの多変数関数になります。こうすると汎関数微分は多変数関数の偏微分になります。初期のを用意し、これを(gradient descent)の方向に漸次落としていくことでを極小化するを求めます。
最近の流行との対比でいうと、やっていることは機械学習における目的関数の極小化と同じです。
Gradient flowの利点: 境界値問題
微分方程式を直接解くことと比較したとき、gradient flowの方法のメリットはなんでしょうか。
微分方程式は境界条件が与えられて初めて解けます。数値計算では、の2階微分方程式なら2つの境界条件: を用い、差分化した方程式(=漸化式)を使って端から解を構成します。
問題は境界条件が両端で与えられる場合です。物理学では往々にしてとの値が与えられ、傾きがわからないことがあります。このような場合によく使われるのがシューティング法です。この方法では片側の境界条件を適当に与えてそれを変えながら解を構成し、逆側の境界条件を満たす解を探します。例えばを適当に与えて解をが大きいところまで構成し、が与えられた値に近づくようにを調整します。非常にシンプルでわかりやすい方法です。しかし時に、解がの境界条件に非常に鋭敏であり、少し境界の値が違うだけで解が大きく変わってしまう場合があります。この場合たまごを机に立てるのにも似た繊細なチューニング作業が必要になります。また連立微分方程式のように求める解が複数存在する場合、シューティングのパラメータが複数になるため、パラメータ空間中の適切なパラメータの範囲が非常に狭くなり、とてつもないファインチューニングが必要になります。
このような場合に便利なのがgradient flowです。前述したように、この方法では最初に与えられた境界条件を満たす適当な関数を用意します。この初期の場を、系の汎関数を下げる方向に漸次変化させていくことで汎関数の極小解を求めます。との両方を知る必要はありません。初期の関数はもちろん真の解に近いほうがいいですが、特にトポロジカルな保存量がある場合などは、けっこう雑な初期関数でもちゃんと真の解に収束します。のちほどそのような具体例を示します。
Gradient flowのformalism
Gradient flowの方程式は非常にシンプルであり、以下で与えられます:
ここでは仮想時間です。をから発展させ、大きなにおいてのに対する変化が止まれば、それがの極小を与える解です。
以下静的な場の配位を考えます。改めてをと書き直します。この場合汎関数は静的なエネルギーに対応するので、これを改めてで表します。これはラグランジアンの符号を反対にしたもので与えられます:(は空間方向の足)。 の変分を計算すれば
を得ます。右辺イコールゼロはに対するEL-eq.にほかなりません (※符号に注意)。よって配位が運動方程式を満たす場合仮想時間に対するの発展は止まり、正しい解が求まることがわかります。
静的な配位に対してラグランジアンが(:ポテンシャル項)で与えられるとすれば
になります。
以上よりこの場合gradient flowの方程式は以下で与えられます:
ここでは仮想時間の微分をとしました。ポテンシャルが下がる方向にを落としていくので、ポテンシャルの微分の符号は負です。を離散化すれば、それは1回の更新でがどれだけ変化するかを表しています。更新を何度も繰り返しが収束すれば、求める解が得られます。のちほど具体例を示します。
不安定性
gradient flowの計算においてひとつ気をつけるべきことがあります。それは不安定性です。前章の方程式は熱伝導方程式と同様の形をしています。そしてこの系には数値計算で不安定性が生じることが知られています[2]。
前述のgradient flowの方程式に含まれるは、1回の更新でどれだけ配位が変わるかを司るパラメータです。が小さい方が1回の更新による配位の変化が大きいので良いように思うかもしれません。しかしが小さいと不安定性が起きます。空間方向の分割幅に対しを十分大きくしておかないと、初期配位のフーリエモードの高周波成分がどんどん増幅されて数値計算が全くうまくいきません。このような現象が起きるときにはを大きくして計算してください。必然更新回数は多くなります。
ちなみに機械学習でよく使われる最小化のアルゴリズムであるAdamを用いると、単純な最急降下法と比較し、不安定性が抑えられ更新回数が少なくて済むこともあります。
実際の数値計算
以下具体的にgradient flowの方法を説明するため、以下の文献
- John C.Neu, "Vortices in Complex Scalar Fields," Physica D43, 385-406 (1990). [3]
- G.S.Adkins, C.R.Nappi, "STABILIZATION OF CHIRAL SOLITONS VIA VECTOR MESONS," Physics Letters 137B 3,4 (1984). [4]
に現れる非線形微分方程式をgradient flowで計算します。数値計算の話に焦点を当てるため、数学的・物理的な背景は基本的に省くことをご了承ください。
1. 非線形Schrödinger方程式における静的なvortex解
まずは[3]の文献の数値計算を行います。
2-dim.において次の微分方程式を解きます:
これは非線形Schrödinger方程式または非線形熱拡散方程式の静的なバージョンです[3]。
この系には渦の解 −vortex解− が存在します。これを求めるため、以下のansatzをおきます:
ここでは2-dim.の極座標、は任意定数、はvortexのwinding numberです。これを上記の微分方程式に代入すると以下の方程式を得ます:
ここでプライムは微分を表します。境界条件は以下で与えられます:
以下この静的なvortex解を数値的に求めることを考えます。
Gradient flowの方程式
およびに対するgradient flow eqs.は以下のようになります:
を離散化し、方程式を以下のように書き換えておきます:
こうすればgradient flow eq.を解くことは、EoMに係数をかけて元の配位に加えたものを新たな配位とする作業を繰り返すことと等価であることがわかります。
数値計算の結果
実際にEq.(1)の1回巻き()の解を求めてみます。そのためはまず、適切な境界条件 (Boundary Condition, BC) を持つ初期配位を用意してやります。
前記したようにBCはで与えられます。さらに解の漸近形が以下のようになることがわかっています[3]:
これらより初期配位として良さげな関数形のひとつはであることがわかります。実際にRef.[3]のグラフを読み取りでフィットすると
程度がよいことがわかります。ちなみにグラフから数値を読み取る際[5]は便利です。
実際の初期配位は解からずらして
を用いて計算を始めます。
計算に用いたパラメータは以下です:
N=200, dr=0.05, reg=0.001,=0.001, Niter=4000
ここでNは区間の分割数、drはの分割幅、はEq.(2)の式中の係数、regはでの発散を避けるパラメータ、Niterはの計算の繰り返しの回数です。またおよびを各iterationの段階で計算しなければならないため、の両端の「さらに1点先」まで値が必要です。これに関しては両端の値をそのまま「その1点先」に使っています。すなわちNeumann BCを用いています。
これらのパラメータを用いてEq.(2)を繰り返し用い解を求めます。これをグラフにしたのが図1です。
vortex解のiterationへの依存性
黒実線は初期配位 ()、赤実線はEq.(1)の解(Ref.[3])、破線がEq.(2)を繰り返し適用して得られたです。図のキャプションにある"iteration"は各破線に対応する繰り返しの数です。この図から、始め真の解に大きく近づき、その後徐々に解付近に収束していく様子がわかります。iterationが4000でも真の解から少しずれていますが、様々な要因が考えられるためあまり気にしないでください。は前述した不安定性が起こらない程度に小さく取ります。
不安定性にさえ気をつければ、いいかげんな初期配位から始めても正しい解に収束します(図2および図3)。
初期配位をとした場合ののiteration numberに対する変化
。
初期配位をとした場合ののiteration numberに対する変化
図2では初期配位(黒実線)がで1よりかなり小さな値となっています。いまBCはDirichletであり、図の両端からdrだけ離れた点(0-drおよび10+dr)におけるの値を、初期配位を外挿して作成し用いています。よって図2では右端のの値は1よりかなり小さな値で固定されています。それでも正しい解に収束するので、少なくともこの系ではかなり適当な初期配位を用意しても大丈夫なようです。これはの解がトポロジカルに安定な解であることも関係していると思います(Ref.[3])。
しかしながら初期条件に対する安定性は系に大きく依存するでしょうし、また方程式には自明な解も存在するので、初期配位には気を遣う方が賢明だと思います。
2. 粒子により安定化したSkyrmion
実は前章の例ではシューティング法を用いても簡単に解を求めることができます(確かそうだったと思います)。本章ではシューティング法では解を求めることが難しい系[4]を扱います。
Skyrme模型と呼ばれる、核子を記述する有効模型があります。これは非線形シグマ模型と呼ばれる系にSkyrme項を付加した模型です。この系にはSkyrmionと呼ばれるソリトン解が存在し、これは核子とみなすことができます。これに関しては記事にしていますのでそちらをご参照ください[6]。
非線形シグマ模型単独では安定したソリトン解は存在しないことが知られています。そこにSkyrme項を加えることで安定した解が存在します[6]。一方、Skyrme項ではなく、ベクトル粒子との相互作用を加えることで安定化させることもできます[4][7]。ここでは粒子と呼ばれるベクトル中間子を加えることでソリトン解を安定化させます。このソリトンをRef.[7]にならい以下"-stabilized Skyrmion"と呼ぶことにします。
詳細は省きますが、パイオン場の非線形表現(はパイオン場。1,2,3の足はアイソスピンの足。はパウリ行列。はパイオン崩壊定数)に関してはHedgehog ansatz
を用います()。ベクトルメソンである粒子の場に関してはその時間成分のみが存在するとしてとします。自然単位系を採用し、すべての次元を持つ量をパイオン崩壊定数: で測ると、に関して以下の方程式が成立します[4]:
は3次元極座標の動径座標、プライムは動径座標による微分、はそれぞれパイオンおよび粒子の質量とします。すべての単位で測られていることに注意してください。はそれぞれ
です。または、すなわちだいたいです。そしては自由なパラメータとします。
境界条件は、パイオン場に関しては1回巻きの解を求めるので、に関してはとします[4]。
ごちゃごちゃ説明してきましたが、以下物理を忘れ、改めて以下の連立非線形微分方程式を解くことを考えます:-stabilized Skyrmion
の非線形連立微分方程式を数値計算で解く:
ここで、プライムは微分。は自由なパラメータ(※1から10のオーダー)。境界条件は以下:
Ref.[4]ではに対して付近()まで解を構成しています。での傾きの情報がないですが、に関してはからシューティング法を使って解を構成できます。しかしやってみればわかりますが、に関しては付近まで解を構成するのはなかなか難しいです。
そこでgradient flowで解を構成してみます。この系のgradient flowの方程式は以下で与えられます。
の範囲で分割数、分割の1区間の長さで計算しました。またとし、iterationの回数はとしました。また初期のの配位として、ではそれぞれ
を用いました。そしてではの解、ではの解を初期配位として用いています。
vortexの場合と同様、の微分を両端の点で計算するため、両端の「1点先」の点が必要です。これに関しては、のにおける「1点先」はで固定し、あとはNeumann BCを用いています。
図4が計算結果のグラフです。
のに対するグラフ。薄緑の点線及び点破線はそれぞれの計算時のとの初期配位を表す。
オレンジの線、水色の線、赤の線がそれぞれに対応します。また太線(正の値の解)が、細い線(負の値の解)がに対応します。タイトルのは上に出てきたのことです。薄い緑の点線および点破線は、それぞれにおけるとの初期配位です。縦軸のは質量次元1の量であり、の単位で測っています(は次元なし)。また横軸は文献と合わせるための単位でプロットしています。gradient flowを用いるとでも解が求まり、かつRef.[4]と結果が一致します。iterationが20万回と多いのは、不安定性を避けるため1回の更新による配位変化を小さくしているためです。しかしこれだけ計算しても計算時間は短いです(今回使用したコードでは、1つのに対し10秒程度)。
この計算ではにおけるの初期配位の漸近形はある程度良いものを使わないと正しい解に辿り着きません。本計算ではRef.[4]の図から漸近形をフィットして使っています。これはの大きい方の境界でNeumann BCを使っていることが関係していると思います。またはあまりに小さいとやはり正しい解に辿り着きません。当然ではありますが、gradient flowでも計算結果の各種パラメータに対する依存性はきちんと調べて収束性を確認しなければなりません。
ちなみにこの系では、の配位が定まると、の配位はGreen関数
を用いて
で与えられます[4]。これを用いてシューティングやgradient flowを行うとより簡単に解を得ることができると思います。
まとめ
本記事では微分方程式を数値計算で解く際に有用であるgradient flowの方法に関して説明しました。Gradient flowの方法は、例えば境界条件で微分の値がわからないときなどに有用であり、特にシューティング法がうまく機能しないときには威力を発揮します。2つの例 −2-dim.におけるvortex解および-stabilized Skyrmion− に関して具体的に数値計算を行い、両系で比較的簡単に解を構成できることを説明しました。
本記事では静的な場のみを扱い、汎関数として静的なエネルギーを扱いました。一方作用に対してgradient flowを適用すれば、原理的には時間発展も求まるはずです。ただそのような例はあまり見たことがないので、うまく解が求まるかはよく知りません。
「Gradient flowのformalism」の章を見ればわかるのですが、Euler-Lagrange方程式さえわかっていれば、gradient flowの方程式を作ることは簡単です。計算アルゴリズムも非常に単純です。通常の方法で微分方程式が数値的に解けない場合、試してみるとよいかもしれません。
需要があるかわかりませんが、計算に使用したコードをGistに置いておきます[8][9]。プロット用コードも添付してあります。jupyter notebookにコードをコピペして使うと便利かと思います。
おしまい。
【脚注】 これは極値条件なので、実際には極大である可能性もあります。その場合解は不安定であり、安定性の議論が必要になります。