SE(3)不変とタンパク質立体構造予測②:SO(3)の既約分解

前回

cake-by-the-river.hatenablog.jp



今回から2回に分けて、前回紹介した不変性・同変性を実際のタンパク質立体構造予測に適用していく上で必要な知識を紹介します。前回と比べて数学的な内容がだいぶ難しくなるので、分からない部分などあればコメント等で対応します。

群の表現

前回、群  G に対する関数(写像 f の不変性と同変性を導入しました。では、入力空間での操作  T_g 、および対応する出力空間での操作  S_g としてどのようなものを選び、どう写像  f を構築すればよいでしょうか。この2回でこの2つの問題を解決できるように頑張っていきます。


少なくとも、 T_g, S_g は群  G の各要素  g について対応付けられている必要があり、 X, Y というベクトル空間において群  G を反映した構造をとる必要があります。この性質は群準同型と呼ばれます。つまり、群の積と同様に

 S_gh = S_g S_h

を満たします。

この性質を満たすもので、線形変換、つまり行列の形式を取るものとして代表的なものが、群の表現です。

一般に、回転や平行移動、拡大縮小など、ベクトル空間上の多くの可逆な操作は正則行列で表せ(正則性は逆向きの操作を保証するため必要)、Lie群の具体的な要素はそのような正則行列の集まりによって表すことができます。特定の種類の操作に限定したものは、これらの行列に対する更なる制約を指し、回転の場合は直交行列の一部が対応します。このように、群の要素を表せる行列は、群の表現 (group representation) と呼ばれています。


群の表現は、行列積の性質から群準同型を満たせます。したがって、入力と出力の二つのベクトル空間において、考えたい操作に対する群の表現  T_g, S_g を利用し、その同変性を保つように写像  f を構築することが私たちの目標となります。

なお、群の表現は必ずしも1つではなく、多くの場合、無限に存在します。また、ベクトルの次元に応じて行列の次元も変化します。例えば、4次元ベクトルが対象であれば、4×4の行列が群の表現となります。このとき、群の表現が変換する(作用する)対象のベクトル空間は表現空間と呼ばれます。これらは後ほど詳しく考えます。


SO(3)とSE(3)

改めて、回転操作に対応するLie群を考えましょう。3次元ベクトルを回転させる操作は 3×3 の回転行列によって表現でき(つまり、回転行列は群の表現の一種です)、回転行列は直交行列かつ行列式が 1 であるものからなります。行列式が 1 という条件は、空間の拡大や縮小を行わないことを意味しており(ヤコビアンをイメージしてください)、この2つの条件を合わせたLie群は、3次元の特殊直交群 (special orthogonal group)、あるいは SO(3) と呼ばれます。


余談ですが、実は SO(3) は行列以外でも表すことができます。複素数を拡張し虚数単位を3つにした四元数 (quaternion) と呼ばれる数は、SO(3)に対応する剛体の回転操作を表せることが知られています。実際、AlphaFold2はこの四元数も扱えるようにしています(下記リンクにあります)。四元数はコンピュータビジョンなど多くの工学的分野で活用されています。

github.com


さて、タンパク質の立体構造を扱う際は、タンパク質の向きを決める回転と同時に、平行移動も考える必要があります。この回転+平行移動(鏡面反転は扱いません)を扱うLie群は、3次元の特殊ユークリッド (special euclidean group)、あるいは SE(3) と呼ばれます。この群の場合、単純な3×3行列では表現しきれません。3次元で表そうとするならば、Affine変換の形式をとることになります。すなわち、回転行列  R と平行移動を表すベクトル  b を用いて

 y = Rx + b

として表します。しかし、4次元目に定数を加え、行列に制限を加えることで、実は行列としても表現できます。

 \left(\begin{array}{c} x' \\ y' \\ z' \\ 1 \end{array} \right) = \left(
\begin{array}{cc}
R_{11} & R_{12} & R_{13} & b_x \\
R_{21} & R_{22} & R_{23} & b_y \\
R_{31} & R_{32} & R_{33} & b_z \\
0 & 0 & 0 & 1
\end{array}\right)
\left(\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right)

実際にはこの行列表現は用いないですが、行列として表現できることを押さえておきます。

SO(3)の既約分解と軌道量子数

SO(3)の表現の例

SO(3)は回転行列で表せましたが、ベクトル空間(表現空間)の次元は必ずしも3次元とは限りません。そこで、あらゆる次元のベクトルを入力とした際のSO(3)の表現を考えましょう。

3次元ベクトルのSO(3)表現として最も代表的なものは回転行列であり、想像することも簡単です。この場合、3次元ベクトルはそれぞれの要素が x, y, z 座標と同様に回転行列の影響を受けることになります。

もう一つ簡単な例として、1次元(スカラー)の入力を考えます。例えば、各原子の原子番号スカラーとして表せます。こうした情報はもちろん回転で変わるはずがないので、これを表す群の表現は、シンプルに

 S = \left(\begin{array}{cc}
1
\end{array}\right)

です(つまり恒等写像)。これは、自明な表現とも呼ばれています。

ちょっと難しい例:複数原子

では、少し難しい例を考えましょう。タンパク質中のペプチド結合を構成する重原子の位置関係を情報として考えます。一つ目の残基のCα原子(C1とします)を原点とし、続くC, O, N, 二つ目の残基の Cα 原子(C2とします)のXYZ座標を並べると、12次元となります。これらは、C1原子を中心として回転させても相対的な位置関係は変わらないはずです。

各原子のXYZをそれぞれ並べたベクトルは

 x = (C_x, C_y, C_z, O_x, O_y, O_z, N_x, N_y, N_z, C2_x, C2_y, C2_z)^\mathrm{T}

です。これら全体の相対位置を変化させることなく回転させるならば、12次元のSO(3)の群の表現  S_g が必要となります。しかし、少し想像してみれば、実際には各原子自体をそれぞれ回転させたものをくっつければそれで十分だと分かります。つまり、ある回転を表す3×3の回転行列  R_g を用いて

 S_g = \left(\begin{array}{cc}
R_g &  &  & O \\
 & R_g &  &  \\
 &  & R_g &  \\
O &  &  & R_g
\end{array}\right)

と表せば、これが今回の場合に対応する群の表現として十分です。このように、ブロック対角行列の形で表せる場合、より簡単に直和という形式で

 S_g = R_g \oplus R_g \oplus R_g \oplus R_g

と書けます。つまるところ、この場合は、3次元の群の表現(回転行列)を4つ直和したもので事足りてしまいました。

複数原子の一括回転は各原子の回転行列の直和で表現できる
もうちょっと難しい例:応力テンソル

拍子抜けなので、もっと難しい例を考えましょう。タンパク質を構成するアミノ酸は、あらゆる方面からあらゆる方向の力を受けています。例えばαヘリックスのような二次構造は、隣り合う残基とのペプチド結合による力だけでなく、螺旋階段の上下にいる残基と水素結合などの相互作用をうけます。これらは物体内部の局所的な、また前後左右上下の各方面に依存した力を受けていることになります。


こうした物体内部の局所的な力のかかり具合を定量化する方法に、応力テンソルというものがあります。ここでいう応力とは、今考えたい座標点に非常に小さな立方体を用意し、その左右(x軸方向)・上下(y軸方向)・前後(z軸方向)の3面方向それぞれに生じる力を3×3の行列(正確には2階のテンソル)で並べたものです。

 \sigma = \left(\begin{array}{cc}
\sigma_{xx} & \sigma_{xy} & \sigma_{xz} \\
\sigma_{yx} & \sigma_{yy} & \sigma_{yz} \\
\sigma_{zx} & \sigma_{zy} & \sigma_{zz}
\end{array}\right)

応力テンソルWikipediaより引用。

各行はそれぞれ対応する面、各列はその面での力をXYZで記述しています。例えば、 \sigma_{xx}, \sigma_{yy}, \sigma_{zz} は考えている面と力の方向が一致している(面に対して力が垂直である)要素なので、垂直応力と呼ばれており、それ以外はせん断応力と呼ばれています。立方体の各面に直接かかる力が垂直応力であるため、その合計  \sigma_{xx} + \sigma_{yy} + \sigma_{zz} は立方体にかかる圧力(もしくは張力)と比例します(圧力の定義は物体表面に垂直にかかる力だからです)。


さて、今考えたいのはこの応力テンソルと呼ばれる量がSO(3)の回転でどのように変化するべきか、です。そのためには、導入したばかりの応力テンソルの色々な性質を知る必要があります。

証明はしませんが(角運動量保存の法則により)、応力テンソルは対称なテンソルであることが示されています。つまり、独立な成分は対角成分の3つと上三角部分の3つの計6個です。逆に言えば、あらゆる応力テンソルは6次元空間上の点として扱えます(6次元のベクトル空間)。この点がSO(3)の回転によりどう移動しうるか考えます。


応力テンソルのうち、トレース(行列の対角成分の和)  \sigma_{xx} + \sigma_{yy} + \sigma_{zz} は圧力に対応していました。圧力は原子番号等と同じく、物体の回転に関係しません。したがって、あらゆる回転を施してもトレースの値は等しく、対応する表現は1次元の自明な表現であると分かります。言い換えると、応力テンソルを表す6次元空間上の点は、少なくとも  \sigma_{xx} + \sigma_{yy} + \sigma_{zz} = 定数 という方程式(制約条件)を満たす部分空間の中を動くはずです。

この部分空間は、自由度が1つ落ちた5次元空間となります。実は、この5次元空間の中をさらに分解すること、例えばトレースのような回転不変な量を見つけることはできないことが示されています。そのため、この5次元空間に対応する(得体の知れない)SO(3)の表現が何かしらの形で存在していることになります。そして、トレースに対応する自明な表現とこの5次元の表現を直和により組み合わせれば、応力テンソルに対応した6次元のSO(3)の表現が構成できます。形式的に表現するなら、

 6 = 1 \oplus 5

と書けます。もちろんこの5次元表現が何なのかは気になりますが、ここでの本題はこのように直和で記述できることを知ることなので、一旦は飛ばしてしまいましょう。

表現の既約分解

さて、ここまでの例を基に、一般のSO(3)の表現に関する理論を紹介します。上の例では、表現空間として12次元や6次元などあらゆる次元を考えましたが、それらのSO(3)の表現は、1次元(自明な表現)、3次元(回転行列)および5次元の表現に分解できていました。同様に、高次元の表現空間における群の表現は、その中で群の操作に対し不変な要素ごとに考えることで、より低次元の表現の直和に分解できます。このような分解を、既約分解と呼びます。そして、既約分解が可能な表現は可約表現、不可能な表現(つまり、これ以上小さくならない表現)は既約表現と呼ばれています。


これまでに登場したSO(3)の既約表現は、1次元、3次元、5次元と  2 l+1 \left( l=0,1,2,... \right) 次元の形式をとっていました。衝撃のネタバラシのようになってしまいますが、SO(3)の既約表現は全てこの奇数の形式で表せることが示されています。この  l は、軌道量子数(方位量子数)と呼ばれています。また、この時  \left(2l+1\right)\times\left(2l+1\right) の行列で表される既約表現は、WignerのD行列とも呼ばれており、 D^{l}_{m,m'} のように表記されます。


前回、群の表現は無限に存在すると述べましたが、あらゆるSO(3)の表現は最終的にこの既約表現の直和の式に変形させることが可能です。


例えば、回転行列は行を入れ替えても(回転する軸が入れ替わるだけで)依然としてSO(3)の表現となれますが、行を再び入れ替えれば元に戻すことができます。より複雑に座標軸を変化させたとしても、座標軸自体を捻じ曲げない限り(すなわち、座標軸を回転させるだけであれば)元の回転行列に戻せます。むしろ、座標軸を捻じ曲げるような変形をしてしまった時点で、明らかに回転操作の域を出るので、SO(3) ではなくなってしまいます。

これは、SO(3)の表現  \rho(g) が何かしらの直交行列  P を用いて

 \rho'(g) = P^T \rho(g) P

のように別の表現へと移せることを示しています。というより、そうでなければ SO(3) ではなくなる、というべきでしょうか。そして、右辺に現れる新しい表現をいくつかの既約表現  \rho_1(g), \rho_2(g), ... の直和にする、すなわち

 \rho'(g) = P^T \left(\begin{array}{cc}
\rho_1(g) &  & O \\
& \rho_2(g) & \\
O & & \ddots
\end{array}\right) P

とするように式を書くことが可能だということです。


ここはもう少し丁寧に説明しましょう。

 \rho'(g) = P^T \rho(g) P

という式の両辺は、全て行列で構成されています。直交行列は、その定義から「逆行列が転置と等しい」ため、

 \rho'(g) = P^{-1} \rho(g) P

とも書けます。これは一般に相似変換と呼ばれているものです。そしてこれは、機械学習を学んだことのある方にとって馴染みのあるPCA、あるいは対角化と同じ処理です。

PCAは、散らばったデータのうち最もばらついた方向を抽出する操作でした。データのばらつきを表現するのは分散や共分散であり、高次元のデータであれば、共分散行列と呼ばれる対称行列を用いて表せます。このとき、最もデータがばらつき、最もそのデータの特徴を表現している方向(主成分方向)は、かならずしも座標軸と一致しません。そこで、そのような方向を見つける処理として、共分散行列の対角化を行います。

 S' = P^{-1} S P

PCAと相似変換。行列積は右から演算されるため、まずPで座標が変換され、Sで主成分座標により記述、P^-1で元の座標に戻す操作を行っていることになる。

対角化は、対角成分のみの行列とする操作でしたが、SO(3)の既約表現の相似変換は、これをブロック対角行列に緩和した処理だと言えます。直和行列の形式では、ブロック単位で見れば対角成分しか存在しません。そのため、PCAを基に考えれば、各ブロック行列(既約表現)はそれぞれが独立した「主成分」を構成しており、PCAのように直交行列を用いて元に戻すことが可能である、ということになります。PCAは(対角化が対称行列なら必ず可能なため)全ての共分散行列で実行可能でしたが、それと対応するように、SO(3)の全ての表現も相似変換によって既約分解が可能である、ということです。


したがって、SO(3)の表現を考える際は、軌道量子数に応じて得られる既約表現だけ注目していれば、その直和や線形変換で全ての場合を網羅できます。そこで、これ以降は特に既約表現に着目して話を進めることとします。


今回は、回転を表すLie群と、その表現について説明しました。次回は、この表現を用いて不変性・同変性を保つ関数を構成する方法を考えていきます。

cake-by-the-river.hatenablog.jp