連想記憶の双曲数化(3)

プロジェクションルール

前回、双曲連想記憶の安定性条件 \( w_{ab}=w_{ba},\, u_{aa} \geq | v_{aa} | \) を与えました。実数や複素数の場合と同じように進めますが、安定性条件が異なるので若干の注意が必要です。今回の内容は次の論文に記載されています。
M. Kobayashi: “Noise Robust Projection Rule for Hyperbolic Hopfield Neural Networks”, IEEE Transactions on Neural Networks and Learning Systems, Vol.31, No.1, pp.352-356 (2020)

学習パターンを列ベクトル \(\vec{z}^p=\left( \begin{array}{c}
z_1^p \\
\vdots \\
z_N^p \\
\end{array}\right)\) として並べた行列 \(Z\) を考えます。

\(\begin{eqnarray}
Z &=&
\left( \begin{array}{ccc} \vec{z}^1 & \cdots & \vec{z}^P \\ \end{array}\right)
= \left( \begin{array}{ccc}
z_1^1 & \cdots & z_1^P \\
\vdots & \ddots & \vdots \\
z_N^p & \cdots & z_N^P \\
\end{array}\right)
\end{eqnarray}\)

\(\Lambda=\left( \begin{array}{ccc}
\lambda_{11} & \cdots & \lambda_{1N} \\
\vdots & \ddots & \vdots \\
\lambda_{N1} & \cdots & \lambda_{NN} \\
\end{array}\right) =Z\left( Z^{\mathrm{T}} Z \right)^{-1} Z^{\mathrm{T}} \) とおくと、\(\Lambda Z=Z\) の第 \(p\) 列を取れば \( \Lambda\,\vec{z}^p=\vec{z}^p \) が得られます。\(W=\Lambda\) としても良いですが、自己フィードバックが小さくなるようにスカラー行列を引くと雑音に強くなります。安定性条件を満たす範囲で対角成分を調整します。まず、 \( a\neq b \) に対しては \(w_{ab}=\lambda_{ab}\) です。対角成分については \( \lambda_{ab}=u_{ab}+v_{ab}\, j \) とすれば、\( w_{aa}=|v_{aa}|+v_{aa}\, j \) となります。

さて、\(\left( Z^{\mathrm{T}} Z \right)^{-1}\) の存在に関する議論が双曲数でも適用できるかが気がかりだと思います。複素数と比べて割り算が出来ないくらいの違いなので、かなりの議論が成立します。行列式は和積のみなので問題なく定義され、積の可換性もありますので基本的な性質も成り立ちます。四元数の場合は同じ行列式の定義は可能であっても、積の非可換性により基本的な性質が成り立たないので、同じ定義を適用してもあまり意味はありません。余因子行列も問題なく定義出来ます。正方行列 \(A\) の余因子行列を \(\widetilde{A}\) とすると、\( A\widetilde{A}=\mathrm{det}(A) E \) が成り立ちます。\( \mathrm{det}(A)^{-1} \) が存在すれば逆行列が存在しますが、\( \mathrm{det}(A)\neq 0 \) でも \( \mathrm{det}(A)^{-1} \) が存在しないこともあるという点は理解しておくべきです。しかし、計算機シミュレーションを行う時にはほとんど起こらないでしょう。

掃き出し法における理論上の注意

逆行列を求めるには掃き出し法を採用すると思います。理論上は若干の注意点があります。掃き出し法の例を見ましょう。

\( \begin{eqnarray}
\left( \begin{array}{cc|cc} 1+j & 1-j & 1 & 0 \\ 1-j & 1+j & 0 & 1\end{array} \right)
&\rightarrow& \left( \begin{array}{cc|cc} 2 & 2 & 1 & 1 \\ 1-j & 1+j & 0 & 1 \end{array} \right) \\
&\rightarrow& \left( \begin{array}{cc|cc} 1 & 1 & \frac{1}{2} & \frac{1}{2} \\ 1-j & 1+j & 0 & 1 \end{array} \right) \\
&\rightarrow& \left( \begin{array}{cc|cc} 1 & 1 & \frac{1}{2} & \frac{1}{2} \\ 0 & 2j & \frac{j-1}{2} & \frac{j+1}{2} \end{array} \right) \\
&\rightarrow& \left( \begin{array}{cc|cc} 1 & 1 & \frac{1}{2} & \frac{1}{2} \\ 0 & 1 & \frac{1-j}{4} & \frac{1+j}{4} \end{array} \right) \\
&\rightarrow& \left( \begin{array}{cc|cc} 1 & 0 & \frac{1+j}{4} & \frac{1-j}{4} \\ 0 & 1 & \frac{1-j}{4} & \frac{1+j}{4} \end{array} \right) \\
\end{eqnarray} \)

最初の基本変形では第1列に第2列を足しています。実数や複素数の場合は第1列を \( 1+j \) で割るでしょう。この場合は零因子のため割り算が出来ずに、このような基本変形をしています。掃き出し法のアルゴリズムを単純に移植すると、理論上は逆行列を求められないことがあります。しかし、現実にはこのような事態はほとんど起こらず、私も実装はサボって逆行列は存在しないと判定することにしていますが、実際に存在しないと判定されることはありませんでした。