【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

冪零行列と二重数

冪零行列から微分に応用できる二重数を構成します。

『行列と代数系』シリーズの記事です。

  1. 実二次正方行列の初歩
  2. 実二次正方行列と代数系
    1. 冪零行列と二重数 ← この記事
    2. 三種類の二元数
    3. 分解型四元数と同型対応
    4. 分解型四元数と幾何代数
    5. 行列表現と外積と行列式
    6. 分解型複素数と固有値

目次

微分

$X$ を $X ^ 2=O$ となる冪零行列とします。前回見たように $I+X$ は正則行列ですが、二次以上の $X$ が消えるため冪乗が簡単に求められます。なお、${} _ nC _ 2$ は二項係数です。

(I+X)^n=I+nX+\underbrace{{}_nC_2X^2+⋯+X^n}_O=I+nX

これに少し手を加えて、$I$ に係数 $x$ を付けてみます。

(xI+X)^n=x^nI+nx^{n-1}X+\underbrace{{}_nC_2x^{n-2}X^2+⋯+X^n}_O=x^nI+nx^{n-1}X

面白いことに、係数の $x ^ n$ と $nx ^ {n-1}$ は微分の関係になっています。

(x^n)'=nx^{n-1}

通常の微分の計算と比べます。

\begin{aligned} \lim_{ε→0}\frac{(x+ε)^n-x^n}ε &=\lim_{ε→0}\frac{\cancel{x^n}+nx^{n-1}ε+\overbrace{{}_nC_2x^{n-2}ε^2+⋯+ε^n}^{0}-\cancel{x^n}}ε \\ &=nx^{n-1}+\lim_{ε→0}({}_nC_2x^{n-2}ε+⋯+ε^{n-1}) \\ &=nx^{n-1} \end{aligned}

1行目の右辺で分子にある $ε$ の二次以上の項が消えています。これが冪零行列で消える項に対応するため、同じ結果が得られます。

二重数

行列の形で計算すると面倒なため、$X$ に対応する新たな虚数単位 $ε$ を導入して実数を拡張します。これを二重数(双対数)と呼びます。

考え方としては複素数とほぼ同じです。複素数が $a+bi$ の形で記述されるように、二重数は $a+bε$ の形で記述されます。違いは $i ^ 2=-1$ に対して $ε ^ 2=0$ という点です。2乗で $0$ になる性質は二次以上の微小量を無視することに対応するため、$ε$ は無限小の類似物だと解釈できます。

行列と二重数で同じ計算を比較します。

\begin{aligned} (xI+X)^n&=x^nI+nx^{n-1}X \\ (x+ε)^n&=x^n+nx^{n-1}ε \end{aligned}

$f(x)=x ^ n$ とおけば次の形で表されます。

f(x+ε)=f(x)+f'(x)ε

これは $x$ を微小に動かしたときの変化を一次式で近似した式です。形式的に見れば、関数に引数 $x+ε$ を渡すことで $ε$ の係数として関数の微分を得ます。

具体例を示します。

\begin{aligned} f(x)&=x^2+2x+5 \\ f(x+ε) &=(x+ε)^2+2(x+ε)+5 \\ &=x^2+2xε+\underbrace{ε^2}_0+2x+2ε+5 \\ &=\underbrace{x^2+2x+5}_{f(x)}+\underbrace{(2x+2)}_{f'(x)}ε \end{aligned}

二重数によって積の微分ライプニッツ則)や合成関数の微分も求まります。見やすくするため関数の引数は $(x)$ のみ省略します。赤字は対応する公式です。

\begin{aligned} f(x+ε)g(x+ε) &=(f+f'ε)(g+g'ε) \\ &=fg+(f'g+fg')ε \\ &~~\textcolor{red}{(fg)'=f'g+fg'} \\ f(g(x+ε)) &=f(g+g'ε) \\ &=f(g)+f'(g)g'ε \\ &~\textcolor{red}{\{f(g)\}'=f'(g)g'} \end{aligned}

※ $g'ε$ の動きが分かりにくければ、$δ=g'ε$ と置き換えて $ε$ と同様に扱ってください。

f(g(x+ε))=f(g+g'ε)=f(g+δ)=f(g)+f'(g)δ=f(g)+f'(g)g'ε

今回は二重数についての説明が目的ではないためこの辺で切り上げます。興味がある方は素晴らしい記事があるため参照してください。

なお、二重数による微分自動微分と呼ばれる技術の一種です。機械学習で使われる誤差逆伝播法(バックプロパゲーション)も自動微分の一種です。

行列表現と表現行列

$X$ は冪零行列だとしか言及していないため、具体的な成分は与えていません。なるべく簡単な行列で定義すれば便利です。今回は次の行列を採用します。

X=\begin{pmatrix}0&0\\1&0\end{pmatrix} ,\ X^2=\begin{pmatrix}0&0\\1&0\end{pmatrix}^2=O

※ どれか1つに決まっているわけではないので、資料によっては定義が異なります。

これにより二重数と行列を対応付けることができます。

f+f'ε ~↦~ f\underbrace{\begin{pmatrix}1&0\\0&1\end{pmatrix}}_1 +f'\underbrace{\begin{pmatrix}0&0\\1&0\end{pmatrix}}_ε =\underbrace{\begin{pmatrix}f&0\\f'&f\end{pmatrix}}_{f+f'ε}

このように行列以外のものに行列を対応付けることを行列表現(行列による表現)と呼びます。今回は二重数の行列表現を行いました。

また、$\begin{pmatrix}f&0\\f'&f\end{pmatrix}$ のように具体的に対応付けた行列を表現行列(表現した行列)と呼びます。これは $f+f'ε$ の表現行列です。

※ ややこしいですが、あまり厳密な使い分けは気にせず、そういう言い方をするということだけ留意すれば良いでしょう。

なお、二重数の表現行列は左半分を見ると対応が分かりやすいです。

\textcolor{red}{f}+\textcolor{red}{f'}ε ~↦~ \begin{pmatrix}\textcolor{red}{f}&0\\\textcolor{red}{f'}&f\end{pmatrix}

※ 右上の $0$ は $ε ^ 2=0$ に対応して、右下は単位行列に付随した成分です。

ところで最初の記事で書いた内容は一次変数変換の行列表現だと言えます。

他のものを行列で表現する所まで来ると、一次変数変換との対応から離れて行列を計算の道具として使うようになります。そのためあまり意味はありませんが、参考までに一次変数変換との対応を書いておきます。

\qquad\begin{cases} x=fx'+0y' \\ y=f'x'+fy' \end{cases} \\ \begin{aligned} &~~\begin{pmatrix}f&0\\f'&f\end{pmatrix} \\ f(x+ε)&=f+f'ε \end{aligned}
\qquad~~\left\{\begin{aligned} x=f~(gx''+0y'')+0(g'x''+gy'')&=fgx''+0y'' \\ y=f'(gx''+0y'')+f(g'x''+gy'')&=(f'g+fg')x''+fgy'' \end{aligned}\right. \\ \begin{aligned} \begin{pmatrix}f&0\\f'&f\end{pmatrix} \begin{pmatrix}g&0\\g'&g\end{pmatrix} &=\begin{pmatrix}fg&0\\f'g+fg'&fg\end{pmatrix} \\ f(x+ε)g(x+ε)=(f+f'ε)(g+g'ε)&=fg+(f'g+fg')ε \\ &~~~(fg)'=f'g+fg' \end{aligned}

参考

Twitterで関連する情報を集めました。

twitter.com


◀前の記事 ▲記事一覧 次の記事▶