FastICAの概要について述べてみる

FastICAとはICA(独立成分分析)を行うためのアルゴリズムの一種。詳しいアルゴリズムの詳細は原著を見れば分かるのだがここではアルゴリズムについて簡単な説明を行いたいと思う。

独立成分分析(ICA)とは

FastICAの説明に入る前にまずはICAの説明をする必要がある。ICAは日本語で「独立成分分析」と呼ばれ、一言で言ってしまえば独立成分への分解である。

確率論において確率変数$X_1,\cdots,X_n$が独立とは、$X_1,\cdots,X_n$がそれぞれ$f_1,\cdots,f_n$なる確率分布に従う際、$X_1,\cdots,X_n$の同時確率分布$f$が \[ f(x_1, \cdots, x_n) = f_1(x_1)f_2(x_2)\cdots f_n(x_n) \] として書けることである。ICAでは与えられたデータ$D = (d_1,\cdots,d_n)^t \in \mathbb{R}^{n\times m}$がそれぞれ独立な確率変数$Y_1,\cdots,Y_n$を線型結合によって混合されたものであるとして考える。すなわち、$A\in \mathbb{R}^{n\times n}$を混合行列、$\mathscr{Y}=(y_1,\cdots,y_n)^t\in \mathbb{R}^{n\times m}$で、$y_i$は確率変数$Y_i$に従う値を$m$個並べたベクトルとすれば、 \[ D = A\mathscr{Y} \] である。ICAでは上式において$D$と「$\mathscr{Y}$の独立性」から$\mathscr{Y}$と$A$の具体的な値を推定する問題であると捉えられるだろう。

グラフで理解する独立成分分析などは非常にわかりやすく説明しているので一度見てみると良いだろう。)

非ガウス性について

しかしながら実データにおいて背後に存在する確率変数$Y_1,\cdots,Y_n$がなんであるかは通常分からない。密度推定によってこれを推測するという手もあるが、そこそこの計算量でうまい密度関数を得るのは容易ではないだろう。そこでFastICAは独立に対してある種必要条件的な解き方をする。

十分な数の独立な確率変数の和をとったとき、中心極限定理はその分布が正規分布となることを教えてくれる。つまり、$Y_1,\cdots,Y_n$が独立なのであれば、それらの線型結合で表された$d_i$は正規分布に従う値から成るベクトルであると考えて良いだろう。逆に言えば正規分布から遠ければ遠いほど一つの確率変数の値から成るベクトルであったはずだというふうに考えられる。これが、ICAにおいてしばしば独立性の指標とされる非ガウス性を最大化するということである。

キュムラントとは

非ガウス性を最大化すると述べたが非ガウス性とは一体何であろうか。その指標の一つとしてキュムラントというものがある。確率変数$X$における$n$次のキュムラント$\kappa_n$は以下のように表せる。

\[ \kappa_n = \left. \frac{d^n}{d\xi^n}\log E[e^{X\xi}] \right|_{\xi=0} \]

大切なのはこれが非ガウス性の指標として使えるということである。実際、$X$が正規分布に従うとき、$n\geq 3$において$\kappa_n =0$が成立する。FastICAではこのうち、4次のキュムラントを用いることが多いようである。

ちなみに、確率変数$X$に対する$n$次のモーメントを$M_n=E[x^n]$とし、$M_1=E[X]=0$(平均0)とすれば、$\kappa_4=M_4−3M_2^2$となる。

不動点法

キュムラントの最大化/最小化はどのようにして行うのか。勾配法を利用する方法もあるが、FastICAでは不動点法がよく用いられる。あまり聞き慣れない手法かもしれないがそこまで難しくはない。

そもそも不動点とは写像$f$に対し、$f(x)=x$を満たすような点$x$を指す。このような点を求めるためのアルゴリズムが不動点法である。求め方は至ってシンプルで \[ f(x_{n+1})=x_n \] として更新するだけである。(一応、収束のための条件として$f$が縮小写像であることが挙げられる。)

※ ちなみにニュートン法などはこの不動点法を背景としてもっていたりします。

FastICA

以下の3段階からなる。

  1. 中心化 $\cdots$ $D=(d_1,\cdots,d_n)^t$のそれぞの系列の平均を0となるように正規化
  2. 白色化 $\cdots$ PCAを行う(無相関になるような線形変換を施す)
  3. 不動点法による非ガウス性($\kappa_4$など)の最大化

具体的なアルゴリズムの詳細はこちらなどが参考になるだろう。

Built with Hugo
Theme Stack designed by Jimmy