SO(3)とSE(3)についてのメモ書き (その2)

SternGerlach

ホームに戻る

このページについて

3次元の回転を表すリー群\(\mathrm{SO}(3)\)と、リー代数\(\mathfrak{so}(3)\)に関する、自分用のメモ書きです。

\(\mathrm{SO}(3)\)の微分

リー代数\(\boldsymbol{\phi} \in \mathfrak{so}(3)\)と、それに対応する回転行列\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge) \in \mathrm{SO}(3)\)を考える。 \(\mathbf{C}\)\(\boldsymbol{\phi}\)に関する偏微分は、幾つかの方法で計算できる。

\(\boldsymbol{\phi}\)の各要素を\(\phi_i\) (\(0 \le i \le 2\))とする。 \(\mathbf{C}\)\(3 \times 3\)行列であるため、\(\phi_i\)に関する偏微分\(\cfrac{\partial \mathbf{C}}{\partial \phi_i}\)\(3 \times 3\)行列となる。 この偏微分は、\(\phi_i\)に微小な摂動\(\Delta \phi_i\)を加えたときに、\(\mathbf{C}\)がどのくらい変化するのかを表している。

あるいは、3次実ベクトル\(\mathbf{p}\)について、\(\mathbf{C} \mathbf{p}\)\(\boldsymbol{\phi}\)に関する偏微分\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)を考えることもできる。 \(\mathbf{C} \mathbf{p}\)は3次ベクトル、\(\boldsymbol{\phi}\)も3次ベクトルであるから、この偏微分は\(3 \times 3\)行列になる。

下準備: \(\mathbf{SO}(3)\)に摂動を加える

BCH (Baker-Campbell-Hausdorff) の公式を使うと、2つのリー代数\(\boldsymbol{\phi}_1, \boldsymbol{\phi}_2 \in \mathfrak{so}(3)\)について、以下の近似式が得られる。

\[ \ln(\exp(\boldsymbol{\phi}_1^\wedge) \exp(\boldsymbol{\phi}_2^\wedge))^\vee \approx \left\{ \begin{array}{cc} \mathbf{J}_l(\boldsymbol{\phi}_2)^{-1} \boldsymbol{\phi}_1 + \boldsymbol{\phi}_2 & \text{$\boldsymbol{\phi}_1$が小さいとき} \\ \mathbf{J}_r(\boldsymbol{\phi}_1)^{-1} \boldsymbol{\phi}_2 + \boldsymbol{\phi}_1 & \text{$\boldsymbol{\phi}_2$が小さいとき} \end{array} \right. \]

2つの回転行列\(\exp(\boldsymbol{\phi}_1^\wedge)\)\(\exp(\boldsymbol{\phi}_2^\wedge)\)を合成して、新たな回転行列\(\exp(\boldsymbol{\phi}_1^\wedge) \exp(\boldsymbol{\phi}_2^\wedge)\)を作成する。 この新たな回転に対応するリー代数\(\ln(\exp(\boldsymbol{\phi}_1^\wedge) \exp(\boldsymbol{\phi}_2^\wedge))^\vee\)は、もし\(\boldsymbol{\phi}_1\)が小さい回転を表していれば上側、\(\boldsymbol{\phi}_2\)が小さい回転を表していれば下側のように近似される。

ヤコビ行列\(\mathbf{J}_l(\boldsymbol{\phi})\)\(\mathbf{J}_r(\boldsymbol{\phi})\)は次のように定義される。 ただし、\(\boldsymbol{\phi} = \phi \mathbf{a}\)\(\phi = | \boldsymbol{\phi} |\)\(\mathbf{a} = \boldsymbol{\phi} / \phi\)である。 \(\phi\)\(\boldsymbol{\phi}\)のノルム、\(\mathbf{a}\)はノルム1に正規化されたベクトルである(前回のメモを参照)。

\[ \begin{eqnarray} \mathbf{J}_l(\boldsymbol{\phi}) &=& \frac{\sin \phi}{\phi} \mathbf{I} + \left( 1 - \frac{\sin \phi}{\phi} \right) \mathbf{a} \mathbf{a}^\top + \frac{1 - \cos \phi}{\phi} \mathbf{a}^\wedge \\ \mathbf{J}_r(\boldsymbol{\phi}) &=& \frac{\sin \phi}{\phi} \mathbf{I} + \left( 1 - \frac{\sin \phi}{\phi} \right) \mathbf{a} \mathbf{a}^\top - \frac{1 - \cos \phi}{\phi} \mathbf{a}^\wedge \end{eqnarray} \]

2つのヤコビ行列\(\mathbf{J}_l\)\(\mathbf{J}_r\)の間には、次の関係が成り立つ。

\[ \mathbf{J}_r(\boldsymbol{\phi}) = \mathbf{J}_l(-\boldsymbol{\phi}) \]

逆行列\(\mathbf{J}_l^{-1}\)\(\mathbf{J}_r^{-1}\)は、次のように表される。 \(\cot \theta = \cfrac{1}{\tan \theta} = \cfrac{\cos \theta}{\sin \theta}\)である。

\[ \begin{eqnarray} \mathbf{J}_l(\boldsymbol{\phi})^{-1} &=& \frac{\phi}{2} \cot \frac{\phi}{2} \mathbf{I} + \left( 1 - \frac{\phi}{2} \cot \frac{\phi}{2} \right) \mathbf{a} \mathbf{a}^\top - \frac{\phi}{2} \mathbf{a}^\wedge \\ \mathbf{J}_r(\boldsymbol{\phi})^{-1} &=& \frac{\phi}{2} \cot \frac{\phi}{2} \mathbf{I} + \left( 1 - \frac{\phi}{2} \cot \frac{\phi}{2} \right) \mathbf{a} \mathbf{a}^\top + \frac{\phi}{2} \mathbf{a}^\wedge \end{eqnarray} \]

上式を基に、\(\boldsymbol{\phi}\)に摂動\(\Delta \boldsymbol{\phi}\)を加えたとき、回転行列\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)がどのように変化するのかを考える。 回転\(\mathbf{C}\)に対して、左側から摂動\(\exp(\Delta \boldsymbol{\phi}^\wedge)\)を加えると、新たな回転は次のようになる。

\[ \ln(\exp(\Delta \boldsymbol{\phi}^\wedge) \exp(\boldsymbol{\phi}^\wedge))^\vee \approx \mathbf{J}_l(\boldsymbol{\phi})^{-1} \Delta \boldsymbol{\phi} + \boldsymbol{\phi} \]

続いて、回転\(\mathbf{C}\)に対して、右側から摂動\(\exp(\Delta \boldsymbol{\phi}^\wedge)\)を加えると、新たな回転は次のようになる。

\[ \ln(\exp(\boldsymbol{\phi}^\wedge) \exp(\Delta \boldsymbol{\phi}^\wedge))^\vee \approx \mathbf{J}_r(\boldsymbol{\phi})^{-1} \Delta \boldsymbol{\phi} + \boldsymbol{\phi} \]

次のようにも書ける。

\[ \exp(\Delta \boldsymbol{\phi}^\wedge) \exp(\boldsymbol{\phi}^\wedge) \approx \exp((\mathbf{J}_l(\boldsymbol{\phi})^{-1} \Delta \boldsymbol{\phi} + \boldsymbol{\phi})^\wedge) \]

\[ \exp(\boldsymbol{\phi}^\wedge) \exp(\Delta \boldsymbol{\phi}^\wedge) \approx \exp((\mathbf{J}_r(\boldsymbol{\phi})^{-1} \Delta \boldsymbol{\phi} + \boldsymbol{\phi})^\wedge) \]

偏微分の計算 (その1)

\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)\(\phi_i\)に関する偏微分は、次のように表せる。

\[ \frac{\partial \mathbf{C}}{\partial \phi_i} = \frac{\partial \exp(\boldsymbol{\phi}^\wedge)}{\partial \phi_i} = \lim_{h \to 0} \frac{\exp((\boldsymbol{\phi} + h \mathbf{1}_i)^\wedge) - \exp(\boldsymbol{\phi}^\wedge)}{h} \]

\(\mathbf{1}_i\)\(\boldsymbol{\phi}\)と同様に3次ベクトルであり、\(i\)番目の要素が\(1\)で、他は全て\(0\)である。 従って\(\boldsymbol{\phi} + h \mathbf{1}_i\)は、\(\boldsymbol{\phi}\)\(i\)番目の要素に、微小な変動\(h\)を加えたものである。

以上より、\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)\(\phi_i\)に関する偏微分は、次のようになる。 3次ベクトル\(\mathbf{1}_i\)は、\(i\)番目の要素が\(1\)で、他は全て\(0\)である。

\[ \frac{\partial \mathbf{C}}{\partial \phi_i} = \left\{ \begin{array}{cc} (\mathbf{J}_l(\boldsymbol{\phi}) \mathbf{1}_i)^\wedge \mathbf{C} & \text{$\mathbf{J}_l$を使うとき} \\ \mathbf{C} (\mathbf{J}_r(\boldsymbol{\phi}) \mathbf{1}_i)^\wedge & \text{$\mathbf{J}_r$を使うとき} \end{array} \right. \]

上式を使うと、ある3次実ベクトル\(\mathbf{p} \in \mathbb{R}^3\)について、\(\mathbf{C} \mathbf{p}\)\(\boldsymbol{\phi}\)による偏微分\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)が求められる。 偏微分\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)は、回転行列\(\mathbf{C}\)を微小に変動させたとき、回転の結果\(\mathbf{C} \mathbf{p}\)がどのぐらい動くのかを表している。

\(\mathbf{C} \mathbf{p}\)\(\phi_i\)に関する偏微分は、右端に\(\mathbf{p}\)を足せば、次のようになる。

\[ \frac{\partial (\mathbf{C} \mathbf{p})}{\partial \phi_i} = \left\{ \begin{array}{cc} (\mathbf{J}_l(\boldsymbol{\phi}) \mathbf{1}_i)^\wedge \mathbf{C} \mathbf{p} & \text{$\mathbf{J}_l$を使うとき} \\ \mathbf{C} (\mathbf{J}_r(\boldsymbol{\phi}) \mathbf{1}_i)^\wedge \mathbf{p} & \text{$\mathbf{J}_r$を使うとき} \end{array} \right. \]

\(\mathbf{a}^\wedge \mathbf{b}\)は、2つのベクトルの外積\(\mathbf{a} \times \mathbf{b}\)を表すから、外積と同様に\(\mathbf{a}^\wedge \mathbf{b} = -\mathbf{b}^\wedge \mathbf{a}\)が成り立つ。 この関係を使うと、上式は次のように書ける。

\[ \frac{\partial (\mathbf{C} \mathbf{p})}{\partial \phi_i} = \left\{ \begin{array}{cc} - (\mathbf{C} \mathbf{p})^\wedge \mathbf{J}_l(\boldsymbol{\phi}) \mathbf{1}_i & \text{$\mathbf{J}_l$を使うとき} \\ -\mathbf{C} \mathbf{p}^\wedge \mathbf{J}_r(\boldsymbol{\phi}) \mathbf{1}_i & \text{$\mathbf{J}_r$を使うとき} \end{array} \right. \]

\((\mathbf{C} \mathbf{p})^\wedge = \mathbf{C} \mathbf{p}^\wedge \mathbf{C}^\top\)の関係が成り立つから、\((\mathbf{C} \mathbf{p})^\wedge\)\(\mathbf{C} \mathbf{p}^\wedge\)は別物である。

\((\mathbf{C} \mathbf{p})^\wedge \mathbf{J}_l(\boldsymbol{\phi}) \mathbf{1}_i\)は、\(3 \times 3\)行列\((\mathbf{C} \mathbf{p})^\wedge \mathbf{J}_l(\boldsymbol{\phi})\)\(i\)列目のベクトルである。 同様に、\(\mathbf{C} \mathbf{p}^\wedge \mathbf{J}_r(\boldsymbol{\phi}) \mathbf{1}_i\)は、\(3 \times 3\)行列\(\mathbf{C} \mathbf{p}^\wedge \mathbf{J}_r(\boldsymbol{\phi})\)\(i\)列目のベクトルである。

以上より、全ての\(i\)について、上記の3次ベクトルを列方向に並べれば、\(3 \times 3\)行列の偏微分\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)が得られる。

\[ \frac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}} = \left\{ \begin{array}{cc} - (\mathbf{C} \mathbf{p})^\wedge \mathbf{J}_l(\boldsymbol{\phi}) & \text{$\mathbf{J}_l$を使うとき} \\ -\mathbf{C} \mathbf{p}^\wedge \mathbf{J}_r(\boldsymbol{\phi}) & \text{$\mathbf{J}_r$を使うとき} \end{array} \right. \]

偏微分の計算 (その2)

上記の偏微分\(\cfrac{\partial \mathbf{C}}{\partial \phi_i}\)、あるいは\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)を求めるためには、ヤコビ行列\(\mathbf{J}_l\)あるいは\(\mathbf{J}_r\)の計算が必要である。 しかも、このヤコビ行列を計算するためには、\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)\(\boldsymbol{\phi} = \ln(\mathbf{C})^\vee\)に一旦変換しなければならない(前回のメモを参照)。

そこで、上記とは別のアプローチで、偏微分\(\cfrac{\partial \mathbf{C}}{\partial \phi_i}\)、あるいは\(\cfrac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}}\)を求めてみる。

先ほどは、\(\phi_i\)の方向に\(\boldsymbol{\phi}\)を摂動したときの回転行列を、\(\exp((\boldsymbol{\phi} + h \mathbf{1}_i)^\wedge)\)で表現したが、ここでは\(\exp((h \mathbf{1}_i)^\wedge) \mathbf{C}\)、あるいは\(\mathbf{C} \exp((h \mathbf{1}_i)^\wedge)\)と表すことにする。 前者は左側から、後者は右側から\(h \mathbf{1}_i\)に対応する微小な回転行列\(\exp((h \mathbf{1}_i)^\wedge)\)を適用する。 先ほどと異なるのは、次のような点である。

以上より、\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)\(\phi_i\)に関する偏微分は、次のようになる。

\[ \frac{\partial \mathbf{C}}{\partial \phi_i} = \left\{ \begin{array}{cc} (\mathbf{1}_i)^\wedge \mathbf{C} & \text{左側から適用するとき} \\ \mathbf{C} (\mathbf{1}_i)^\wedge & \text{右側から適用するとき} \end{array} \right. \]

また、\(\mathbf{C} \mathbf{p}\)\(\boldsymbol{\phi}\)に関する偏微分は、次のようになる。

\[ \frac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}} = \left\{ \begin{array}{cc} - \left( \mathbf{C} \mathbf{p} \right)^\wedge & \text{左側から適用するとき} \\ - \mathbf{C} \mathbf{p}^\wedge & \text{右側から適用するとき} \end{array} \right. \]

先程のアプローチと比較すると、ヤコビ行列\(\mathbf{J}_l\)\(\mathbf{J}_r\)が消えているので、計算が楽になる。

合成関数の微分

回転行列\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)の関数\(L(\mathbf{C})\)を考える。 スカラー関数\(L(\mathbf{C})\)\(\phi_i\)による微分は、次のようになる。 \(C_{ij}\)は、\(\mathbf{C}\)\((i, j)\)要素である。 ここでは、2つ目のアプローチによる微分を使う。

\[ \begin{eqnarray} \frac{\partial L(\mathbf{C})}{\partial \phi_i} &=& \sum_{j = 0}^2 \sum_{k = 0}^2 \frac{\partial C_{jk}}{\partial \phi_i} \frac{\partial L(\mathbf{C})}{\partial C_{jk}} \\ &=& \sum_{j = 0}^2 \sum_{k = 0}^2 \left( \frac{\partial \mathbf{C}}{\partial \phi_i} \right)_{jk} \left( \frac{\partial L(\mathbf{C})}{\partial \mathbf{C}} \right)_{jk} \\ &=& \left\{ \begin{array}{cc} \sum_{j = 0}^2 \sum_{k = 0}^2 \left( (\mathbf{1}_i)^\wedge \mathbf{C} \right)_{jk} \left( \frac{\partial L(\mathbf{C})}{\partial \mathbf{C}} \right)_{jk} & \text{左側から適用するとき} \\ \sum_{j = 0}^2 \sum_{k = 0}^2 \left( \mathbf{C} (\mathbf{1}_i)^\wedge \right)_{jk} \left( \frac{\partial L(\mathbf{C})}{\partial \mathbf{C}} \right)_{jk} & \text{右側から適用するとき} \end{array} \right. \end{eqnarray} \]

\(L(\mathbf{C})\)は、例えば、ニューラルネットにおける誤差関数となる。 このとき、リー代数\(\boldsymbol{\phi}\)を入力にとって、回転行列\(\mathbf{C} = \exp(\boldsymbol{\phi}^\wedge)\)を出力するレイヤー(ここでは\(\mathrm{SO}(3)\)レイヤーとする)が、ニューラルネットのなかに組み込まれているとする。 誤差逆伝播法を実施するとき、\(\mathrm{SO}(3)\)レイヤーは後ろの層から、出力に関する残差関数の勾配\(\cfrac{\partial L(\mathbf{C})}{\partial \mathbf{C}}\)を受け取って、入力に関する勾配\(\cfrac{\partial L(\mathbf{C})}{\partial \boldsymbol{\phi}}\)の各要素を上記のように計算し、前の層に引き渡すことができる。 \(\mathrm{SO}(3)\)レイヤーは、順伝播のときの計算結果\(\mathbf{C}\)をどこかに保持しておく必要がある。

あるいは、\(\mathbf{u} = \mathbf{C} \mathbf{p}\)の関数\(L(\mathbf{u})\)を考える。 スカラー関数\(L(\mathbf{u})\)\(\boldsymbol{\phi}\)に関する微分は、連鎖律から次のようになる。 ここでも、2つ目のアプローチによる微分を使っている。

\[ \frac{\partial L(\mathbf{u})}{\partial \boldsymbol{\phi}} = \frac{\partial L(\mathbf{u})}{\partial \mathbf{u}} \frac{\partial (\mathbf{C} \mathbf{p})}{\partial \boldsymbol{\phi}} \\ = \left\{ \begin{array}{cc} - \frac{\partial L(\mathbf{u})}{\partial \mathbf{u}} \left( \mathbf{C} \mathbf{p} \right)^\wedge & \text{左側から適用するとき} \\ - \frac{\partial L(\mathbf{u})}{\partial \mathbf{u}} \mathbf{C} \mathbf{p}^\wedge & \text{右側から適用するとき} \end{array} \right. \]

参考文献