〔特異値分解と機械学習〕
ここまで特異値分解の解き方を丁寧に説明してきました。しかし、なぜE資格のシラバスに特異値分解が登場してくるのでしょうか。それはもちろん機械学習にとって行列をうま~く分解できたほうが何かと都合が良いからです。機械学習は応用分野ですからね。使われる手法には必ず意味があるのです。ということでここからは特異値分解と機械学習の関りについてお伝えしていきます。
◆低ランク近似(次元削減)◆
行列
A(m<n)を特異値分解すると、
A=UΣVT=(u1u2…um)σ10⋮00σ2⋮0……⋱…00⋮σm00⋮0……⋱…00⋮0v1v2⋮vn=u1σ1v1T+⋯+umσmvmT=σ1u1v1T+⋯+σmumvmT
であり、まとめて
A=i=1∑nσiuiviT
と表記することができます。このとき、途中の
k番目までの和を取ってできる行列
Ak=i=1∑kσiuiviT,k=1,2,…,m
は、行列
Aの持つ本質的な特徴(情報)を要約した行列であり、これが
低ランク近似です。
また、低ランクで近似することを次元削減とも呼びます。
▽モチベーション▽
低ランク近似が出来ると何が嬉しいのでしょうか。
◎計算資源削減◎
行列
Aの持つ本質的な特徴(情報)を保持しつつ計算量を減らすことができ、大量のデータを扱う機械学習に必要な膨大な計算時間や電力消費などの計算資源を軽減してくれるという点で低ランク近似は重宝されます。
◎可視化◎
行列
Aの持つ本質的な特徴(情報)を人間が確認するには、人間が認識できる3次元以下の情報に落とし込まなければいけません。そこで使われるのが低ランク近似です。
▽イメージ▽
低ランク近似を、幾何的なアプローチと画像データを使った具体的事例からのアプローチの両側から見てみましょう。
まず、幾何的に、低ランク近似では何が起きているのか見てみましょう。
◎幾何的イメージ◎
結論、低ランク近似
Akは小さな特異値を含む順に
m−k次元削減することで行列
Aの本質的な特徴を失わずにモチベーションを満たす手法です。
その理由を順を追って説明して参ります。
最初に
A=UΣVTの中身を
A=a11a21a31a12a22a32a13a23a33a14a24a34,U=u11u21u31u12u22u32u13u23u33,Σ=σ11000σ22000σ33000,VT=v11v12v13v14v21v22v23v24v31v32v33v34v41v42v43v44
と定義します。ここで、特異値は
σ11>
σ11>
σ11です。この定義から、特異値分解は
A=UΣVT=a11a21a31a12a22a32a13a23a33a14a24a34=u11u21u31u12u22u32u13u23u33×σ11000σ22000σ33000×v11v12v13v14v21v22v23v24v31v32v33v34v41v42v43v44
です。
右辺を計算すると、
UΣVT=σ11u11v11+σ22u12v12+σ33u13v13σ11u21v11+σ22u22v12+σ33u23v13σ11u31v11+σ22u32v12+σ33u33v13σ11u11v21+σ22u12v22+σ33u13v23σ11u21v21+σ22u22v22+σ33u23v23σ11u31v21+σ22u32v22+σ33u33v23σ11u11v31+σ22u12v32+σ33u13v33σ11u21v31+σ22u23v32+σ33u23v33σ11u31v31+σ22u32v32+σ33u33v33σ11u11v41+σ22u12v42+σ33u13v43σ11u21v41+σ22u22v42+σ33u23v43σ11u31v41+σ22u32v42+σ33u33v43
と表すことができて、行列
Aの各要素に対応していることが分かります。このことから、各要素には必ず特異値
σ11、
σ11 、
σ11が含まれていることも分かります。よって特異値は各要素に与えている
影響力と言うことができます。
ここで新たに影響力という概念が登場しましたが、何にどう影響を与えているでしょうか。低ランク近似の過程と共に視覚的に見ていきましょう。
a1=a11a21a31,a2=a12a22a32,a3=a13a23a33,a4=a14a24a34
から成る列ベクトル
A=(a1a2a3a4)
とします。
u1=u11u21u31,u2=u12u22u32,u3=u13u23u33
から成る列ベクトル
U=(u1u2u3)
UΣVT=(σ11u1v11+σ22u2v12+σ33u3v13σ11u1v21+σ22u2v22+σ33u3v23σ11u1v31+σ22u2v32+σ33u3v33σ11u1v41+σ22u2v42+σ33u3v43)
とします。
ここまでの変形より、
A=UΣVTは
A=(a1a2a3a4)=(σ11u1v11+σ22u2v12+σ33u3v13σ11u1v21+σ22u2v22+σ33u3v23σ11u1v31+σ22u2v32+σ33u3v33σ11u1v41+σ22u2v42+σ33u3v43)
と表せ、よって
a1=σ11u1v11+σ22u2v12+σ33u3v13a2=σ11u1v21+σ22u2v22+σ33u3v23a3=σ11u1v31+σ22u2v32+σ33u3v33a4=σ11u1v41+σ22u2v42+σ33u3v43
となります。
特異値分解の定義から
Uは直交行列で、
uは大きさ1の単位ベクトルかつ互いに直交した正規直交行列なので、幾何的に以下の図の様に表せます。
正規直交基底の
uに特異値を掛けた三次元実ベクトル空間なのでそれぞれの軸の長さは異なり大きさは
σ11u1>
σ11u2>
σ11u3の順になっています。この空間上に行列
Aの列ベクトル
aをプロットすると各
aiの大きさの関係を見ることができます。例えば、行を
m個のデータ集合、列を
n個の特徴量とした場合の行列
Aの列ベクトル
aは、各特徴量が持つ本質的な特徴(情報)であり保持するべき大切な情報です。
ここで、計算資源節約のために次元削減してみましょう。ただし、保持すべき大切な情報は失わないように削減する次元を上手に選択する必要があります。
まずは、最も小さく影響力の低い特異値を含む次元
σ11u3を削減してみましょう。すると、以下の図の様に
σ11u1、
σ11u2から成る二次元実ベクトル平面上に各
aiがプロットされる形に変換されます。
次元を削減する前と見比べてみてどうでしょうか。
a1と
a2が低く
a4と
a3が高いとか、
a2と一番近くにあるのは
a4みたいな関係が保持されているのが分かると思います。一方、以下の図の様に最も大きく影響力の高い特異値を含む次元
σ11u1を削減して
σ11u3、
σ11u2から成る二次元実ベクトル平面上に各
aiがプロットされる形に変換するとどうでしょう。
a2と一番近くにあるのが
a4であるという関係性が失われてしまっているのが分かるかと思います。
これらの図は一例ですが、小さい特異値を含む次元は削減しても全体の本質的な特徴は失いづらく、大きい特異値を含む次元を削減すると全体の特徴が保持しづらいことはどんな行列でも共通しています。これは、大きい特異値が全体の本質的な特徴に大きく影響していることを表しており、特異値が影響力と言われる理由だと考えられます。この特異値をどこまで残してどこまで削減するかは、ハイパーパラメータとして人間が設定する必要があります。
よって、低ランク近似
Akは小さな特異値を含む順に
m−k次元削減することで行列
Aの本質的な特徴を失わずにモチベーションを満たす手法です。
◎具体的イメージ◎
結論、
この画像を低ランク近似すると、
k=20番目までぐらいの画像を足し合わせると行列
Aの本質的な特徴(ここでは画像が何を表しているか)を保持できることが分かりました。故に
m−k個の次元は削減しても問題ないことになります。大きく計算資源が節約出来ましたね。
もう少し丁寧に説明していきます。
今回低ランク近似に用いた画像は私のアイコンにもなっている画像で、ピクセル数は縦横
2268×3024で画像のチャンネルを1つにする都合上グレースケール化しています。
この画像を特異値分解すると特異値は
2268個得られます。幾何的イメージに照らし合わせると、各ピクセル(要素)に必ず
2268個の特異値が含まれており、それぞれ各ピクセルに影響を与えています。これらの特異値のうち行列
Aの本質的な特徴(ここでは画像が何を表しているか)を保持できる最低限のランクになる
kを探していきますどうやって探すのかは以下の様にイメージしてください。
特異値分解は画像を各特異値から成る
m枚の画像に分解することを指し、一番大きい特異値を持つ画像から順に
k番目まで足していったものがランク
kの低ランク近似
Akであり、上記の
kの推移図の様に出力を見ながらハイパーパラメータ
kの最適な値を探します。今回の例では
k=20辺りがおおよそ最適だと言えますね。
このように画像を低ランク近似するのは視覚的にも分かりやすく具体例としては優秀です。
以下のPythonコードから簡単に低ランク近似した画像を保存できるますので是非遊んでみてください。
※Web上の実行環境でローカル環境の画像を入力する方法が分からないので、コピペして各自のローカル環境で遊んでみてください。
Magicode上でローカル画像を読み込む方法がわかる方がいたら是非コメントで教えてください。