本記事について
-
本記事は二重数と自動微分の関係性と応用について ざっくりとした理解をまとめます.
-
応用先に逆伝播を用いないで神経回路学習機を学習させる枠組みなどがあります.
-
また, wikipedia の内容を参照します
- dual number アクセス日 2023/03/23
- Automatic differentiation アクセス日 2023/03/23
二重数について
-
二乗して$0$になるような 抽象代数 と呼ばれる分野で登場する値: $$\epsilon^2=0,\epsilon\neq 0.$$
-
こちらの$\epsilon$は 実数$\mathbb{R}$上の多項式環$\mathbb{R}[X]$の、不定元$X$の二乗$X^2$によって生成される主イデアル $\langle X^2 \rangle$による剰余環 $$\mathbb{R}[X]/\langle X^2 \rangle$$によって定義される.
-
行列を用いて $a,b\in\mathbb{R}$に対して$a+\epsilon b$は以下のように表せる.
\begin{pmatrix}
a & b \\
0 & a \\
\end{pmatrix}
実解析関数と二重数
実解析関数 $f:\mathbb{R}^d\rightarrow \mathbb{R}$に対してテーラー展開を考えると,$x,y\in\mathbb{R^d}$に対して次が成立する:
$$
f(x+\epsilon y)=f(x)+\epsilon y^{\rm T}\left.\frac{\partial f(t)}{\partial t}\right|_{t=y}
$$
-
ここで,右辺は微分があり複雑であるが左辺は, 三角関数や対数関数, 指数関数や 積・商などの公式を導くことができるため 右辺を直接計算することなく これを計算することができる.
- 公式: Automatic differentiation (wiki) アクセス日 2023/03/23
-
これと同様の数学背景を用いて、Googleが提供する機械学習ライブラリの JAXにおけるヤコビ行列とベクトルの積の計算においても実装されている.
- JVPs in math (JAXの公式document) アクセス日 2024/10/19
- https://github.com/jax-ml/jax/discussions/10157#discussioncomment-2513008 アクセス日 2024/10/19
応用先
上記より 関数 $f$ が どれだけ深い神経回路学習機であって,どれだけ複雑であっても,解析関数である限り,二重数を用いることで伝幡のみで微分の情報を抽出することが可能であることがわかった.
しかし, 微分情報を直接取り出せないため 神経回路学習機の学習アルゴリズムに直接用いることができないことに注意する.
ただし, 論文(1)では $v$を平均$\mathbf{0}$分散$I$に従う確率変数とすると
\left(v^{\rm T}\left.\frac{\partial f(t)}{\partial t}\right|_{t=w} \right)v \in\mathbb{R^d}
は
\left.\frac{\partial f(t)}{\partial t}\right|_{t=w}
の不偏推定量であることを導き, 独立同分布に従うように$v$を発生させることで,その有用性を確かめた.
あとがき
- 数学的に細かいことは追っていませんが, 二重数という不思議な値には 実用的な応用先があるとわかりました.