Skip to content

第8章:人類共通の辞書 —— 非負値行列分解(NMF)

機械学習における特徴抽出の究極の形の一つが、データ全体を基本パーツの「足し算のみ」で表現する手法です。 画像データ(ピクセルの輝度)やテキスト(単語の出現頻度)など、世の中のデータは「負の値を持たない(非負)」ことが多々あります。本章では、データを非負の「人類共通の辞書」と「係数」に分解する「非負値行列分解(NMF)」の数理と、負の値への逸脱を防ぐエレガントな更新アルゴリズムを導出します。

1. 非負値行列分解(NMF)の定式化

列の巨大なデータ行列 を考えます。これを、少数の 個の基底ベクトルを並べた辞書行列 )と、それぞれの基底をどれくらい使うかを表す係数行列 )の積に近似的に分解します。

目的関数として、元のデータと復元したデータの差の二乗和である「フロベニウスノルム」を最小化します。

ここで最大の特徴は、 のすべての成分が「0以上(非負)」でなければならないという制約 を課すことです。これにより、波の打ち消し合い(引き算)のような複雑な操作が禁止され、純粋な「パーツの足し合わせ」による直感的な表現が獲得されます。

2. 勾配法と「負の値」への突入というジレンマ

この目的関数を最小化するために、パラメータ で偏微分して勾配を求めます。

通常の勾配降下法であれば、学習率 を用いて次のように更新式を立てます。

しかし、ここで重大な問題が発生します。通常の勾配法では式の中に引き算が含まれているため、更新の過程で値がゼロを下回り、負の値に突入してしまう可能性があるのです。これは大前提である非負値制約を破るため、明らかに(好ましくない)挙動です。正値性を保ちながら最適化を進めるにはどうすればよいでしょうか。

3. 乗数更新則(Multiplicative Update)の魔法

引き算による負値への突入を防ぐためのブレイクスルーが、学習率 を固定の定数ではなく、現在の値に依存した「行列の各成分ごとに異なる値」に設定するテクニックです。

の更新において、学習率行列 を次のように巧妙に設定します(割り算は要素ごとの演算とします)。

これを勾配法の更新式に代入し、行列の要素ごとの積(、アダマール積)として整理します。

括弧を展開して足し合わせると、 の項が見事に相殺され、引き算が完全に消滅します。

同様に、 の更新についても学習率を と設定することで、次の美しい更新則が得られます。

この式には割り算と掛け算(そして内部のベクトルの足し算)しか含まれていません。したがって、初期値を0より大きい値に設定しておけば、何度更新を繰り返しても「絶対に負の値にならない」ことが数学的に保証されます。これが、非負値行列分解を実用的なアルゴリズムへと押し上げた Lee & Seung の(乗数更新則(Multiplicative Update Rule))の鮮やかな数理です。

Released under the MIT License.