この記事では,研究のサーベイをまとめていきたいと思います。ただし,全ての論文が網羅されている訳ではありません。また,分かりやすいように多少意訳した部分もあります。ですので,参考程度におさめていただければ幸いです。間違えている箇所がございましたらご指摘ください。随時更新予定です。
実装
こちらのURLよりGitHubのページにアクセスしてください。
単純なNMFについて
複素NMF(非負値行列因子分解)は、通常のNMFにおけるモデル化の弱点を補う形で考案された手法です。通常のNMFについては、以下の記事をご覧ください。
複素NMFとは?
音源分離において、従来のNMFは混合音のスペクトルを、音源の種類とみなせる基底行列と各音源のアクティベーションとみなせるスパースな係数行列に分解できるという面で優れた手法でした。しかし、NMFという手法の構造上、以下の仮定を前提としていました。
・各時刻の観測スペクトル(振幅・パワー)が構成音のスペクトル(振幅・パワー)の重みつき和によって表される(=スペクトルは加法的である)
・各構成音は周波数成分の振幅比が時不変でパワーのみが時間変化する
これらの仮定は、実際には成り立ちません。なぜならば、まず第一に複素スペクトルから振幅・パワースペクトルへの変換は非線形であり、加法性が成り立たないからです。また、各構成音(例えば「ピアノのド」という音)の周波数成分の振幅比は時変です。ピアノの構成音の周波数が「常に同じ振幅比を保つ」というのは、傾向としてはそう捉えられますが厳密には成り立たない仮定です。
NMFと似たスパース信号表現として、時間領域信号基底の線形結合により任意の信号を表すSC(スパースコーディング)が挙げられます。SCでは、NMFとは異なりスパース性コストを表すペナルティを導入することで強制的に表現をスパース化します。しかし、分解された信号には冗長性が含まれています。つまり、波形の微妙な差異によって異なる基底と判断されてしまうのが欠点です。
つまり、NMFにはモデル自体に欠陥があると考えられます。SCについても、妥当なモデルではないと考えられます。そこで、NMFの利点である「スパースな信号分解」をベースにして、新しい手法として考案されたのが複素NMFになります。
複素NMFは加法性が成り立つ複素スペクトグラム領域でモデルを考えます。ただし、複素NMFには3階のテンソルが含まれるため、NMFやSCなどと同じように行列表現でモデルを表記できません。そのため、根本的に異なるモデル化だといえます。しかし、3階テンソルが2階テンソルとして捉えられるとき(時不変の制約を付けると)複素NMFはSCと本質的に一致します。
実際に、複素NMFを用いることで、従来のNMFを用いたモノラルチャネル音源分離の性能が上がることが示されています。
●「Single-Channel Source Separation Using Complex Matrix Factorization」(B.J.King/L.Atlas,2011,IEEE)
それでは、以下で数式を用いて複素NMFによるスパース信号分解表現を見ていきましょう。
複素NMFモデルの定式化
NMFのモデルに、時変の位相スペクトルをパラメータとして付加したものが複素NMFの定式化になります。
\begin{eqnarray}
Y_{k,m} \simeq F_{k,m} = \sum_{l} H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}
\end{eqnarray}
\begin{eqnarray}
&Y_{k,m}& \in \mathbb{ C }\\
&F_{k,m}& \in \mathbb{ C }\\
&H_{k,l}& \in \mathbb{ R }^{K \times L}_{+}\\
&U_{l,m}& \in \mathbb{ R }^{L \times M}_{+}\\
&e^{j\phi_{k,l,m}}& \in \mathbb{ C }
\end{eqnarray}
Y:観測スペクトログラム(の要素)
F:モデル化されたスペクトログラム(の要素)
H:基底行列(の要素)
U:係数行列(の要素)
$e^{j\phi_{k,l,m}}$:位相スペクトログラム(の要素)
となっています。更新式は、NMF同様$Y_{k,m}$と$F_{k,m}$の乖離度を目的関数とした補助関数法を用いて導出します。乖離度の指標は、ユークリッド距離もしくはIダイバージェンスが用いられます。ただし、NMFとは異なりモデルが本質的にSCと同じであるとみなせるため、スパース化制約項を付けなくてはいけません。
\mathcal{D}_{EU}(\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi}) = \sum_{k,m} |Y_{k,m} – F_{k,m}|^2 + 2\lambda \sum_{l,m} (U_{l,m})^p
\end{eqnarray}
【目的関数について】
・観測スペクトログラムとモデル化スペクトログラムの誤差は複素ガウス分布に従う白色雑音
・$H,\phi,\sigma^2$の事前確率は一様分布
・$U$の事前確率は優ガウス的な一般化正規分布
という仮定を置くことで、式(7)は理論的に妥当となります。また$p$は一般化正規分布($U$の事前確率)のパラメータで$0 \lt p \leq 2$のとき優ガウス的になります。
【スパース制約化項について】
$\lambda \gt 0$とします。また、2がついているのは補助関数を設計した時にきれいな形にするためです。
以上の流れをまとめます。
★複数の仮定を置くことで式(7)の目的関数は統計理論的に妥当なモデルになる
★式(7)を最小化目的関数として
\begin{eqnarray}
&・&H_{k,l} \gt 0\\
&・&U_{l,m} \gt 0\\
&・&\lambda \gt 0\\
&・&0 \lt p \leq 2
\end{eqnarray}
の条件の下で補助関数法を用いて反復的に近似解を求める
さて、以下では式(7)の補助関数を見つけていきましょう。補助関数法については、以下の記事をご覧ください。
補助関数の導出
まず、式(7)の第一項目について考えていきましょう。二次関数は凸関数ですので、Jensenの不等式が利用できます。
「Jensenの不等式」
任意の凸関数g,I個の実数$x_1, \ldots, x_I$,$\sum_{i}^{} \lambda_i = 1$を満たす正の重み関数$\lambda_1, \ldots, \lambda_I$の下で、以下の不等式が成り立つ。
\begin{eqnarray}
g(\sum_{ i }^{} \lambda_i z_i) \leq \sum_{i}^{}\lambda_i g(z_i)
\end{eqnarray}
(ただし、等号成立は$z_1 = z_2 = \ldots, =z_I$のとき)
以下では、Jensenの不等式を利用するために
\begin{eqnarray}
&&\sum_{l} X_{k,l,m} = Y_{k,m}\\
&&0 \leq \beta_{k,l,m} \leq 1\\
&&\sum_{l} \beta_{k,l,m} = 1
\end{eqnarray}
となる$X_{k,l,m}, \beta_{k,l,m}$を導入します。これらを用いて、第一項目にJensenの不等式を利用します。
(Y_{k,m} – F_{k,m})^2
&=& (Y_{k,m} – \sum_{l} H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^2\\
&=& \{ \sum_{l}(X_{k,l,m} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}) \}^2\\
&=& \{ \sum_{l} \beta_{k,l,m} (\frac{X_{k,l,m} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}}{\beta_{k,l,m}}) \}^2\\
&\leq& \sum_{l} \beta_{k,l,m} (\frac{X_{k,l,m} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}}{\beta_{k,l,m}})^2\\
&=& \frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^2
\end{eqnarray}
等号は
X_{k,l,m} = H_{k,l}U_{l,m}e^{j\phi_{k,l,m}} + \beta_{k,l,m}(Y_{k,m} – F_{k,m})
\end{eqnarray}
のときに成り立ちます。続いて、第二項目について考えていきます。$p$次関数という扱いが難しい関数のため、Jensenの不等式を利用するという方針ではなく、「補助関数の要件を満たすような不等式を作る」という方針でいきます。ここは複素NMFの導出の中で、最も巧妙かつ天下り的な箇所なので、あまり深く考えすぎないようにしてください。
具体的には、$0 \lt p \leq 2$という条件をうまく用います。そのためには、新しい補助変数を導入する必要があります。(1つの不等式につき1つの補助変数が必要)
\begin{eqnarray}
V_{l,m} \geq 0
\end{eqnarray}
となるような$V_{l,m}$を用いて、$V_{l,m} = U_{l,m}$のときに最小値$U_{l,m}^p$を取るような関数を作ることができれば補助関数の要件を満たします。
そこで、導関数が$U_{l,m} = V_{l,m}$のときにのみ0になり(厳密には$U_{l,m} = 0$でも0になる)、最小値0を取るような$U_{l,m}$の関数を作ることができれば、その関数から不等式を作ることができます。実際に作ってみます。
f(U) &=& pV^{p-2}_{l,m} U_{l,m}^2 + (2 – p)V_{l,m}^p – 2U_{k,m}^p\\
f'(U) &=& 2pV^{p-2}_{l,m} U_{l,m} – 2pU^{p-1}_{k,m}\\
&=& 2pU_{l,m}(V^{p-2}_{l,m} – U^{p-2}_{l,m})
\end{eqnarray}
$0 \lt p \leq 2$に注意すると、$U_{k,m}$の関数$f$は$U_{k,m} = V_{k,m}$のときに最小値0を取ります。この関数を用いると、不等式が完成します。
&&0 \leq f(U) \\
&&0 \leq pV^{p-2}_{l,m} U_{l,m}^2 + (2 – p)V_{l,m}^p – 2U_{k,m}^p\\
&&\Leftrightarrow 2U_{k,m}^p \leq pV^{p-2}_{l,m} U_{l,m}^2 + (2 – p)V_{l,m}^p
\end{eqnarray}
ただし、等号成立条件は$U_{k,m} = V_{k,m}$です。
以上、2種類の不等式を用いると、補助関数$\mathcal{G}_{EU}$が完成します。
\mathcal{D}_{EU}(\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi})
&=& \sum_{k,m} (Y_{k,m} – F_{k,m})^2 + 2\lambda \sum_{l,m} (U_{l,m})^p \\
&\leq& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^2 + \lambda \sum_{l,m}(pV^{p-2}_{l,m} U_{l,m}^2 + (2 – p)V_{l,m}^p)\\
&\equiv& \mathcal{G}_{EU}(\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi},\boldsymbol{X},\boldsymbol{V})
\end{eqnarray}
たしかに
&&\mathcal{D}_{EU}(\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi}) \leq \mathcal{G}_{EU}(\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi},\boldsymbol{X},\boldsymbol{V})
\end{eqnarray}
であり
X_{k,l,m} &=& H_{k,l}U_{l,m}e^{j\phi_{k,l,m}} + \beta_{k,l,m}(Y_{k,m} – F_{k,m})\\
V_{l,m} &=& U_{l,m}
\end{eqnarray}
のとき等号が成立するので、補助関数の要件を満たします。
更新式の導出
以下では、複素NMFの更新式を導出したいと思います。補助関数法の考え方から、まずは補助関数を最小化する補助変数を求めます。次に、最小化された補助関数を最小化する初期パラメータを求めます。それでは、順にやっていきましょう。
不等式の導出の過程から、補助関数を最小化する補助変数は式(33)式(34)で与えられます。次に、補助関数を$\boldsymbol{H},\boldsymbol{U},\boldsymbol{\phi}$についてそれぞれ偏微分して更新式を求めていきます。
ただし、分解のスケールの任意性を除くため
\begin{eqnarray}
\sum_{l} H_{k,l} = 1
\end{eqnarray}
と$l$に関して和が1になるように$H_{k,l}$に制約を付けることにします。
しかし、以下では簡単のために補助関数を最小化する$H_{k,l}$を求めてから、式(35)を満たすように正規化することにします。まず、補助関数で$H_{k,l}$に関する項のみ取り出します。
\mathcal{G}_{EU}
&\overset{H}{=}& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^2\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}) (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^\ast\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}) (X^\ast_{k,m,n} – H_{k,l}U_{l,m}e^{ – j\phi_{k,l,m}})\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,l,m}X^\ast_{k,l,m} – X_{k,l,m}H_{k,l}U_{l,m}e^{ – j\phi_{k,l,m}} – X^\ast_{k,l,m}H_{k,l}U_{l,m}e^{j\phi_{k,l,m}} + H^2_{k,l}U^2_{l,m})
\end{eqnarray}
ただし、$X^\ast$は$X$の共役複素数を表します。この補助関数を$H_{k,l}$に関して偏微分します。
\frac{ \partial \mathcal{G}_{EU} }{ \partial H_{k,l} }
&=& \sum_{m}\frac{1}{\beta_{k,m,n}} ( – X_{k,l,m}U_{l,m}e^{ – j\phi_{k,l,m}} – X^\ast_{k,l,m}U_{l,m}e^{j\phi_{k,l,m}} + 2H_{k,l}U^2_{l,m})\\
&=& 0
\end{eqnarray}
実際に、式(41)を満たす$H_{k,l}$は補助関数を最小化します。なぜならば、$\frac{ \partial^2 \mathcal{G}_{EU} }{ \partial H^2_{k,l} } \geq 0$だからです。これを$H_{k,l}$に関して整理しましょう。
\begin{eqnarray}
H_{k,l} =
\frac{\sum_{m} \frac{U_{l,m}Re[X^\ast_{k,l,m}e^{j\phi_{k,l,m}}]}{\beta_{k,l,m}}}{\sum_{m} \frac{U^2_{l,m}}{\beta_{k,l,m}}}
\end{eqnarray}
見事、更新式が導出されました。ただし、$Re[X]$は$X$の実部を表します。また、上でお伝えしたように、実装の際には$H_{k,l}$に関して正規化が必要なことも覚えておきましょう。
同じようにして、$U_{k,l,m}$の更新式も求めましょう。$H_{k,l}$とは違って、偏微分するときにスパース制約化項まで含めなくてはいけないことに注意しましょう。
\mathcal{G}_{EU}
&\overset{U}{=}& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^2 + \lambda \sum_{l,m}pV^{p-2}_{l,m} U_{l,m}^2\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}) (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}})^\ast + \lambda \sum_{l,m}pV^{p-2}_{l,m} U_{l,m}^2\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,m,n} – H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}) (X^\ast_{k,m,n} – H_{k,l}U_{l,m}e^{ – j\phi_{k,l,m}}) + \lambda \sum_{l,m}pV^{p-2}_{l,m} U_{l,m}^2\\
&=& \sum_{k,l,m}\frac{1}{\beta_{k,m,n}} (X_{k,l,m}X^\ast_{k,l,m} – X_{k,l,m}H_{k,l}U_{l,m}e^{ – j\phi_{k,l,m}} – X^\ast_{k,l,m}H_{k,l}U_{l,m}e^{j\phi_{k,l,m}} + H^2_{k,l}U^2_{l,m}) + \lambda \sum_{l,m}pV^{p-2}_{l,m} U_{l,m}^2\\
\end{eqnarray}
この補助関数を$U_{l,m}$に関して偏微分します。
\frac{ \partial \mathcal{G}_{EU} }{ \partial U_{l,m} }
&=& \sum_{k}\frac{1}{\beta_{k,m,n}} ( – X_{k,l,m}H_{k,l}e^{ – j\phi_{k,l,m}} – X^\ast_{k,l,m}H_{k,l}e^{j\phi_{k,l,m}} + 2H^2_{k,l}U_{l,m}) + 2\sum_{l,m}pV^{p-2}_{l,m} U_{l,m} \\
&=& 0
\end{eqnarray}
実際に、式(48)を満たす$U_{l,m}$は補助関数を最小化します。なぜならば、$\frac{ \partial^2 \mathcal{G}_{EU} }{ \partial U^2_{l,m} } \geq 0$だからです。これを$U_{l,m}$に関して整理しましょう。
\begin{eqnarray}
U_{l,m} =
\frac{\sum_{k} \frac{H_{k,l}Re[X^\ast_{k,l,m}e^{j\phi_{k,l,m}}]}{\beta_{k,l,m}}}{\sum_{k} \frac{H^2_{k,l}}{\beta_{k,l,m}} + \lambda pV^{p-2}_{k,l,m}}
\end{eqnarray}
見事、更新式が導出されました。残る更新式は、$\phi$に関してです。まずは、目的関数の中で$\phi$に関する項だけ取り出しましょう。
\mathcal{G}_{EU}
&\overset{\phi}{=}&
\sum_{k,l,m}\frac{1}{\beta_{k,m,n}} ( – X_{k,l,m}H_{k,l}U_{l,m}e^{ – j\phi_{k,l,m}} – X^\ast_{k,l,m}H_{k,l}U_{l,m}e^{j\phi_{k,l,m}}\\
&=& – \sum_{k,l,m}\frac{H_{k,l}U_{l,m}}{\beta_{k,m,n}} \{ (X_{k,l,m} + X^\ast_{k,l,m})\cos\phi – j(X_{k,l,m} – X^\ast_{k,l,m})\sin\phi \}\\
&=& – 2 \sum_{k,l,m}\frac{H_{k,l}U_{l,m}}{\beta_{k,m,n}X_{k,l,m}} (\frac{Re[X]}{|X|}\cos\phi – \frac{Im[X]}{|X|}\sin\phi )\\
&=& – 2 \sum_{k,l,m} |A_{k,l,m}| \cos(\phi – a_{k,l,m})
\end{eqnarray}
\begin{eqnarray}
|A| &=& \frac{X_{k,l,m}H_{k,l}U_{l,m}}{\beta_{k,l,m}}\\
\cos a_{k,l,m} &=& \frac{Re[X]}{|X|}\\
\sin a_{k,l,m} &=& \frac{Im[X]}{|X|}
\end{eqnarray}
となります。ただし、$Im[X]$は$X$の虚部を表します。さて、私たちの目的は式(53)を最小化する$\phi$を求めることでした。今回は、今までのように偏微分する必要はなく、$\cos(\phi – a_{k,l,m})$が最小になる$\phi$を求めるだけです。
\cos(\phi – a_{k,l,m})
&=& \cos\phi \cos a_{k,l,m} + \sin\phi \sin a_{k,l,m}\\
&=& 1\\
&\Rightarrow&
\begin{cases}
\cos \phi = \cos a_{k,l,m}\\
\sin \phi = \sin a_{k,l,m}
\end{cases}
\end{eqnarray}
したがって、$\phi$の更新式は以下のようになります。
\begin{eqnarray}
e^{\phi_{k,l,m}}
&=& \cos\phi + j\sin\phi \\
&=& \cos a_{k,l,m} + j\sin a_{k,l,m}\\
&=& \frac{Re[X]}{|X|} + j\frac{Im[X]}{|X|}\\
&=& \frac{X}{|X|}
\end{eqnarray}
となります。さて、全てのモデルパラメータの更新式が出そろいましたが、効率の良い順番でモデルパラメータを更新していきましょう。具体的には、補助変数の更新の後に、$\phi$を更新してしまってから、$H$と$U$を更新するようにします。ですので、$\phi$の更新式を$H$と$U$の更新式に代入します。
\begin{eqnarray}
H_{k,l}
&=& \frac{\sum_{m} \frac{U_{l,m}Re[\frac{|X|^2}{|X|}]}{\beta_{k,l,m}}}{\sum_{m} \frac{U^2_{l,m}}{\beta_{k,l,m}}}\\
&=& \frac{\sum_{m} \frac{U_{l,m}|X|}{\beta_{k,l,m}}}{\sum_{m} \frac{U^2_{l,m}}{\beta_{k,l,m}}}\\
\end{eqnarray}
\begin{eqnarray}
U_{l,m}
&=& \frac{\sum_{k} \frac{H_{k,l}Re[\frac{|X|^2}{|X|}]}{\beta_{k,l,m}}}{\sum_{k} \frac{H^2_{k,l}}{\beta_{k,l,m}} + \lambda pV^{p-2}_{k,l,m}}\\
&=& \frac{\sum_{k} \frac{H_{k,l}|X|}{\beta_{k,l,m}}}{\sum_{k} \frac{H^2_{k,l}}{\beta_{k,l,m}} + \lambda pV^{p-2}_{k,l,m}}
\end{eqnarray}
以上で、複素NMFの更新式の導出は終了です。以下にアルゴリズムをまとめておきます。
【複素NMFの更新アルゴリズム】
1. $H,U,\phi$の初期値設定
2. $X$の更新
X_{k,l,m} = H_{k,l}U_{l,m}e^{j\phi_{k,l,m}} + \beta_{k,l,m}(Y_{k,m} – F_{k,m})
\end{eqnarray*}
3. $\phi$の更新
$e^{\phi_{k,l,m}} = \frac{X}{|X|}$
4. $H$の更新
$H_{k,l} = \frac{\sum_{m} \frac{U_{l,m}|X|}{\beta_{k,l,m}}}{\sum_{m} \frac{U^2_{l,m}}{\beta_{k,l,m}}}$
5. $H$の正規化
$\sum_{l} H_{k,l} = 1$
6. $U$の更新
$U_{l,m} = \frac{\sum_{k} \frac{H_{k,l}|X|}{\beta_{k,l,m}}}{\sum_{k} \frac{H^2_{k,l}}{\beta_{k,l,m}} + \lambda pV^{p-2}_{k,l,m}}$
7. 2.に戻る
複素NMFの発展
●KLダイバージェンス基準の複素NMF
●位相制約付き複素NMF
●無矛盾制約付き複素NMF
などが挙げられます。詳しくは,以下の論文を参考にしてください。
●「Complex NMF with the generalized Kullback-Leibler divergence」(Kameoka/Kagami/Yukawa,2017,IEEE)
●「Phase constrained complex NMF: Separating overlapping partials in mixtures of harmonic musical sources」(J.Bronson/P.Depalle,2014,IEEE)
●「Complex NMF under spectrogram consistency constraints」(J.L.Roux et al.,2009,ASJ Autumn Meeting)
●「複素NMF:新しいスパース信号分解表現と基底学習系アルゴリズム」(亀岡 et al.,2008,日本音響学会講演論文集)
●「Complex NMF: A new sparse representation for acoustic signals」(Kameoka et al.,2009,IEEE)
●「Complex NMF with the generalized Kullback-Leibler divergence」(Kameoka/Kagami/Yukawa,2017,IEEE)
●「非負値行列因子分解とその音響信号処理への応用」(亀岡,2015,日本統計学会誌)
●「Phase constrained complex NMF: Separating overlapping partials in mixtures of harmonic musical sources」(J.Bronson/P.Depalle,2014,IEEE)
●「Complex NMF under spectrogram consistency constraints」(J.L.Roux et al.,2009,ASJ Autumn Meeting)
●「スパースコーディングの研究動向」(笠井,2014,情報処理学会研究報告)