NMFについてまとめ
ことの発端はこれ→NMFを勉強中 - シコウサクゴ()で、知ってる人に教えてもらったりしてやっと理解できたので、まとめ。今日はちゃんと書く・・・つもり。ベースは[1]の論文だが、使っている記号は全然それに則ってないのであしからず。
NMFとは
NMF(Non-negative Matrix Factorization: 非負値行列分解)では、ある非負行列を2つの行列の積に分解する。つまり、
となるような、を決めることである。どの世界でどのように使われているかはよく分からないけど、恐らく画像処理、音声処理、そして自然言語処理で使われているはず。一般に、は特徴的なパターンを表し、はのパターンの出現回数と見ることができる。
コスト関数
どうやって求めるかというと、コスト関数を最小化するいわゆる最適化の方法で求める。コスト関数は、二乗誤差バージョンとダイバージェンスバージョンがあって、二乗誤差バージョンは
の項は観測のみに依存する定数なので最適化に直接関係ないから
と書き変えられる。また、ダイバージェンスバージョンは
である。どちらを使うかはタスクによるとのこと。二乗誤差の場合は誤差平面が対称で、ダイバージェンスは非対称なので、例えば自然言語処理でトピック分類として使う場合はダイバージェンスを使ったほうが直感的に合っていていいらしい。ここでは二乗誤差の場合のみを考えていく。ダイバージェンスはまた今度やるかも。
高速な解法:補助関数法
直接を最小化することはやめて、補助関数を導入する。突然出てきたという変数は、との間でイエンセン(Jensen)の不等式が成り立つように決めている。つまり、
を満たすようにを決める。もし、この2つの条件を満たすようにが決められれば、以下の2つのステップを繰り返すことで誤差を最小にすることができる。
- をについて最小化
- をについて最小化
をについて最小化
について最小化することは、で等式になるようなを求めることと等しい。一般に、イエンセンの不等式で等号が成り立つ場合というのは、
ただし、, で、
なので、の場合では、
だから、
という条件を使って、
となり、の点で最小となる。
をについて最小化
をとで偏微分して0と置いて解いてみると、
以上をひとつにまとめて、NMFアルゴリズムの完成
上の(2)で求めたとのの部分に(1)で求めたを代入してまとめれば更新式の完成。
この更新式のことを[1]では、"multiplicative update rules"と呼んでいる。この更新式をくるくる回して、二乗誤差の値の変化がとても小さくなったら終了。
参考文献
[1] Lee, D. D., & Seung, H. S. (2001). Algorithms for non-negative matrix factorization. Advances in neural information processing systems, 13(1), V-621-V-624.
*1:だいぶ省いた。。。