Magicode logo
Magicode
36 min read

【ハックしないE資格対策記-03-(後編)】~さようなら、全ての付け焼刃特異値分解~

https://cdn.apollon.ai/media/notebox/89996e6c-bae8-40b2-9b43-612df2db46a7.jpeg
この記事は、【ハックしないE資格対策記-03-(前編)】~さようなら、全ての付け焼刃特異値分解~をご覧の後に閲覧することをおすすめします。

〔特異値分解と機械学習〕

ここまで特異値分解の解き方を丁寧に説明してきました。しかし、なぜE資格のシラバスに特異値分解が登場してくるのでしょうか。それはもちろん機械学習にとって行列をうま~く分解できたほうが何かと都合が良いからです。機械学習は応用分野ですからね。使われる手法には必ず意味があるのです。ということでここからは特異値分解と機械学習の関りについてお伝えしていきます。

◆低ランク近似(次元削減)◆

行列A(m<n)A(m<n)を特異値分解すると、
A=UΣVT=(u1u2um)(σ100000σ200000σm00)(v1v2vn)=u1σ1v1T++umσmvmT=σ1u1v1T++σmumvmTA=UΣV^{T} =(u_{1}u_{2}…u_{m}) \left(\begin{array}{cccc|ccc} σ_{1} & 0 & \dots & 0 & 0 & \dots & 0\\ 0 & σ_{2} & \dots & 0 & 0 & \dots & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \dots & σ_{m} & 0 & \dots & 0 \end{array}\right) \begin{pmatrix}v_{1}\\v_{2}\\\vdots\\v_{n}\end{pmatrix}\\ =u_{1}\sigma_{1}v_{1}^{T}+\dots+u_{m}\sigma_{m}v_{m}^{T} =\sigma_{1}u_{1}v_{1}^{T}+\dots+\sigma_{m}u_{m}v_{m}^{T}
であり、まとめて
A=i=1nσiuiviTA=\sum_{i=1}^{n}\sigma_{i}u_{i}{v}_{i}^{T}
と表記することができます。このとき、途中のkk番目までの和を取ってできる行列
Ak=i=1kσiuiviT,k=1,2,,mA_{k}=\sum_{i=1}^{k}\sigma_{i}u_{i}{v}_{i}^{T},\quad k=1,2,\ldots,m
は、行列AAの持つ本質的な特徴(情報)を要約した行列であり、これが低ランク近似です。
また、低ランクで近似することを次元削減とも呼びます。
▽モチベーション▽
低ランク近似が出来ると何が嬉しいのでしょうか。
◎計算資源削減◎
行列AAの持つ本質的な特徴(情報)を保持しつつ計算量を減らすことができ、大量のデータを扱う機械学習に必要な膨大な計算時間や電力消費などの計算資源を軽減してくれるという点で低ランク近似は重宝されます。
◎可視化◎
行列AAの持つ本質的な特徴(情報)を人間が確認するには、人間が認識できる3次元以下の情報に落とし込まなければいけません。そこで使われるのが低ランク近似です。
▽イメージ▽
低ランク近似を、幾何的なアプローチと画像データを使った具体的事例からのアプローチの両側から見てみましょう。
まず、幾何的に、低ランク近似では何が起きているのか見てみましょう。
◎幾何的イメージ◎
結論、低ランク近似AkA_{k}は小さな特異値を含む順にkm-k次元削減することで行列AAの本質的な特徴を失わずにモチベーションを満たす手法です。
その理由を順を追って説明して参ります。
最初にA=UΣVTA=UΣV^{T}の中身を
A=(a11a12a13a14a21a22a23a24a31a32a33a34),U=(u11u12u13u21u22u23u31u32u33),Σ=(σ110000σ220000σ330),VT=(v11v21v31v41v12v22v32v42v13v23v33v43v14v24v34v44)A = \left( \begin{array}{c} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34}\\ \end{array} \right) ,U = \left( \begin{array}{c} u_{11} & u_{12} & u_{13}\\ u_{21} & u_{22} & u_{23} \\ u_{31} & u_{32} & u_{33} \\ \end{array} \right) ,Σ = \left( \begin{array}{c} \color{violet}{σ_{11}} & 0 & 0 & 0 \\ 0 & \color{limeGreen}{σ_{22}} & 0 & 0\\ 0 & 0 & \color{orange}{σ_{33}} & 0\\ \end{array} \right) ,V^T= \left( \begin{array}{c} v_{11} & v_{21} & v_{31} & v_{41}\\ v_{12} & v_{22} & v_{32} & v_{42}\\ v_{13} & v_{23} & v_{33} & v_{43}\\ v_{14} & v_{24} & v_{34} & v_{44}\\ \end{array} \right)
と定義します。ここで、特異値はσ11\color{violet}{σ_{11}}>σ11\color{limeGreen}{σ_{11}}>σ11\color{orange}{σ_{11}}です。この定義から、特異値分解は
A=UΣVT=(a11a12a13a14a21a22a23a24a31a32a33a34)=(u11u12u13u21u22u23u31u32u33)×(σ110000σ220000σ330)×(v11v21v31v41v12v22v32v42v13v23v33v43v14v24v34v44)A = UΣV^T= \left( \begin{array}{c} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34}\\ \end{array} \right)= \left( \begin{array}{c} u_{11} & u_{12} & u_{13}\\ u_{21} & u_{22} & u_{23} \\ u_{31} & u_{32} & u_{33} \\ \end{array} \right) × \left( \begin{array}{c} \color{violet}{σ_{11}} & 0 & 0 & 0 \\ 0 & \color{limeGreen}{σ_{22}} & 0 & 0\\ 0 & 0 & \color{orange}{σ_{33}} & 0\\ \end{array} \right) × \left( \begin{array}{c} v_{11} & v_{21} & v_{31} & v_{41}\\ v_{12} & v_{22} & v_{32} & v_{42}\\ v_{13} & v_{23} & v_{33} & v_{43}\\ v_{14} & v_{24} & v_{34} & v_{44}\\ \end{array} \right)
です。
右辺を計算すると、
UΣVT=(σ11u11v11+σ22u12v12+σ33u13v13σ11u11v21+σ22u12v22+σ33u13v23σ11u11v31+σ22u12v32+σ33u13v33σ11u11v41+σ22u12v42+σ33u13v43σ11u21v11+σ22u22v12+σ33u23v13σ11u21v21+σ22u22v22+σ33u23v23σ11u21v31+σ22u23v32+σ33u23v33σ11u21v41+σ22u22v42+σ33u23v43σ11u31v11+σ22u32v12+σ33u33v13σ11u31v21+σ22u32v22+σ33u33v23σ11u31v31+σ22u32v32+σ33u33v33σ11u31v41+σ22u32v42+σ33u33v43)UΣV^{T}=\\ \begin{pmatrix} \color{violet}σ_{11}\color{black}u_{11}v_{11}+ \color{limeGreen}σ_{22}\color{black}u_{12}v_{12}+ \color{orange}σ_{33}\color{black}u_{13}v_{13} & \color{violet}σ_{11}\color{black}u_{11}v_{21}+ \color{limeGreen}σ_{22}\color{black}u_{12}v_{22}+ \color{orange}σ_{33}\color{black}u_{13}v_{23} & \color{violet}σ_{11}\color{black}u_{11}v_{31}+ \color{limeGreen}σ_{22}\color{black}u_{12}v_{32}+ \color{orange}σ_{33}\color{black}u_{13}v_{33} & \color{violet}σ_{11}\color{black}u_{11}v_{41}+ \color{limeGreen}σ_{22}\color{black}u_{12}v_{42}+ \color{orange}σ_{33}\color{black}u_{13}v_{43}\\ \color{violet}σ_{11}\color{black}u_{21}v_{11}+ \color{limeGreen}σ_{22}\color{black}u_{22}v_{12}+ \color{orange}σ_{33}\color{black}u_{23}v_{13} & \color{violet}σ_{11}\color{black}u_{21}v_{21}+ \color{limeGreen}σ_{22}\color{black}u_{22}v_{22}+ \color{orange}σ_{33}\color{black}u_{23}v_{23} & \color{violet}σ_{11}\color{black}u_{21}v_{31}+ \color{limeGreen}σ_{22}\color{black}u_{23}v_{32}+ \color{orange}σ_{33}\color{black}u_{23}v_{33} & \color{violet}σ_{11}\color{black}u_{21}v_{41}+ \color{limeGreen}σ_{22}\color{black}u_{22}v_{42}+ \color{orange}σ_{33}\color{black}u_{23}v_{43}\\ \color{violet}σ_{11}\color{black}u_{31}v_{11}+ \color{limeGreen}σ_{22}\color{black}u_{32}v_{12}+ \color{orange}σ_{33}\color{black}u_{33}v_{13} & \color{violet}σ_{11}\color{black}u_{31}v_{21}+ \color{limeGreen}σ_{22}\color{black}u_{32}v_{22}+ \color{orange}σ_{33}\color{black}u_{33}v_{23} & \color{violet}σ_{11}\color{black}u_{31}v_{31}+ \color{limeGreen}σ_{22}\color{black}u_{32}v_{32}+ \color{orange}σ_{33}\color{black}u_{33}v_{33} & \color{violet}σ_{11}\color{black}u_{31}v_{41}+ \color{limeGreen}σ_{22}\color{black}u_{32}v_{42}+ \color{orange}σ_{33}\color{black}u_{33}v_{43} \end{pmatrix}
と表すことができて、行列AAの各要素に対応していることが分かります。このことから、各要素には必ず特異値σ11\color{violet}{σ_{11}}σ11\color{limeGreen}{σ_{11}}σ11\color{orange}{σ_{11}}が含まれていることも分かります。よって特異値は各要素に与えている影響力と言うことができます。
ここで新たに影響力という概念が登場しましたが、何にどう影響を与えているでしょうか。低ランク近似の過程と共に視覚的に見ていきましょう。
まず、行列AA
a1=(a11a21a31),a2=(a12a22a32),a3=(a13a23a33),a4=(a14a24a34)\boldsymbol a_{1}= \left( \begin{array}{c} a_{11} \\ a_{21} \\ a_{31} \\ \end{array} \right), \boldsymbol a_{2}= \left( \begin{array}{c} a_{12} \\ a_{22} \\ a_{32} \\ \end{array} \right), \boldsymbol a_{3}= \left( \begin{array}{c} a_{13} \\ a_{23} \\ a_{33} \\ \end{array} \right), \boldsymbol a_{4}= \left( \begin{array}{c} a_{14} \\ a_{24} \\ a_{34} \\ \end{array} \right)
から成る列ベクトル
A=(a1a2a3a4)A= \begin{pmatrix} \boldsymbol a_{1}&\boldsymbol a_{2}&\boldsymbol a_{3}&\boldsymbol a_{4} \end{pmatrix}
とします。
次に、UU
u1=(u11u21u31),u2=(u12u22u32),u3=(u13u23u33)\boldsymbol u_{1}= \left( \begin{array}{c} u_{11} \\ u_{21} \\ u_{31} \\ \end{array} \right), \boldsymbol u_{2}= \left( \begin{array}{c} u_{12} \\ u_{22} \\ u_{32} \\ \end{array} \right), \boldsymbol u_{3}= \left( \begin{array}{c} u_{13} \\ u_{23} \\ u_{33} \\ \end{array} \right)
から成る列ベクトル
U=(u1u2u3)U= \begin{pmatrix} \boldsymbol u_{1}&\boldsymbol u_{2}&\boldsymbol u_{3} \end{pmatrix}
としてUΣVTUΣV^{T}
UΣVT=(σ11u1v11+σ22u2v12+σ33u3v13σ11u1v21+σ22u2v22+σ33u3v23σ11u1v31+σ22u2v32+σ33u3v33σ11u1v41+σ22u2v42+σ33u3v43)UΣV^{T}=\\ \begin{pmatrix} \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{11}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{12}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{13}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{21}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{22}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{23}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{31}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{32}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{33}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{41}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{42}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{43}}\\ \end{pmatrix}
とします。
ここまでの変形より、A=UΣVTA=UΣV^{T}
A=(a1a2a3a4)=(σ11u1v11+σ22u2v12+σ33u3v13σ11u1v21+σ22u2v22+σ33u3v23σ11u1v31+σ22u2v32+σ33u3v33σ11u1v41+σ22u2v42+σ33u3v43)A= \begin{pmatrix} \boldsymbol a_{1}&\boldsymbol a_{2}&\boldsymbol a_{3}&\boldsymbol a_{4} \end{pmatrix}=\\ \begin{pmatrix} \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{11}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{12}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{13}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{21}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{22}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{23}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{31}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{32}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{33}} & \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{41}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{42}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{43}}\\ \end{pmatrix}
と表せ、よって
a1=σ11u1v11+σ22u2v12+σ33u3v13a2=σ11u1v21+σ22u2v22+σ33u3v23a3=σ11u1v31+σ22u2v32+σ33u3v33a4=σ11u1v41+σ22u2v42+σ33u3v43\boldsymbol a_{1}= \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{11}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{12}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{13}}\\ \boldsymbol a_{2}= \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{21}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{22}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{23}}\\ \boldsymbol a_{3}= \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{31}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{32}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{33}}\\ \boldsymbol a_{4}= \color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}v_{41}}+ \color{limeGreen}{σ_{22}}\color{black}{\boldsymbol u_{2}v_{42}}+ \color{orange}{σ_{33}}\color{black}{\boldsymbol u_{3}v_{43}}\\
となります。
特異値分解の定義からUUは直交行列で、u\boldsymbol uは大きさ1の単位ベクトルかつ互いに直交した正規直交行列なので、幾何的に以下の図の様に表せます。
低ランク近似3次元1.drawio.png
正規直交基底のu\boldsymbol uに特異値を掛けた三次元実ベクトル空間なのでそれぞれの軸の長さは異なり大きさはσ11u1\color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}}>σ11u2\color{limeGreen}{σ_{11}}\color{black}{\boldsymbol u_{2}}>σ11u3\color{orange}{σ_{11}}\color{black}{\boldsymbol u_{3}}の順になっています。この空間上に行列AAの列ベクトルa\boldsymbol aをプロットすると各ai\boldsymbol a_{i}の大きさの関係を見ることができます。例えば、行をmm個のデータ集合、列をnn個の特徴量とした場合の行列AAの列ベクトルa\boldsymbol aは、各特徴量が持つ本質的な特徴(情報)であり保持するべき大切な情報です。
ここで、計算資源節約のために次元削減してみましょう。ただし、保持すべき大切な情報は失わないように削減する次元を上手に選択する必要があります。
まずは、最も小さく影響力の低い特異値を含む次元σ11u3\color{orange}{σ_{11}} \color{black}{\boldsymbol u_{3}}を削減してみましょう。すると、以下の図の様にσ11u1\color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}}σ11u2\color{limeGreen}{σ_{11}}\color{black}{\boldsymbol u_{2}}から成る二次元実ベクトル平面上に各ai\boldsymbol a_{i}がプロットされる形に変換されます。
低ランク近似2次元1.drawio.png
次元を削減する前と見比べてみてどうでしょうか。a1\boldsymbol a_{1}a2\boldsymbol a_{2}が低くa4\boldsymbol a_{4}a3\boldsymbol a_{3}が高いとか、a2\boldsymbol a_{2}と一番近くにあるのはa4\boldsymbol a_{4}みたいな関係が保持されているのが分かると思います。一方、以下の図の様に最も大きく影響力の高い特異値を含む次元σ11u1\color{violet}{σ_{11}}\color{black}{\boldsymbol u_{1}}を削減してσ11u3\color{orange}{σ_{11}}\color{black}{\boldsymbol u_{3}}σ11u2\color{limeGreen}{σ_{11}}\color{black}{\boldsymbol u_{2}}から成る二次元実ベクトル平面上に各ai\boldsymbol a_{i}がプロットされる形に変換するとどうでしょう。
低ランク近似2次元2.drawio.png
a2\boldsymbol a_{2}と一番近くにあるのがa4\boldsymbol a_{4}であるという関係性が失われてしまっているのが分かるかと思います。
これらの図は一例ですが、小さい特異値を含む次元は削減しても全体の本質的な特徴は失いづらく、大きい特異値を含む次元を削減すると全体の特徴が保持しづらいことはどんな行列でも共通しています。これは、大きい特異値が全体の本質的な特徴に大きく影響していることを表しており、特異値が影響力と言われる理由だと考えられます。この特異値をどこまで残してどこまで削減するかは、ハイパーパラメータとして人間が設定する必要があります。
よって、低ランク近似AkA_{k}は小さな特異値を含む順にkm-k次元削減することで行列AAの本質的な特徴を失わずにモチベーションを満たす手法です。
◎具体的イメージ◎
結論、
img_gray.jpg
この画像を低ランク近似すると、
低ランク近似画像.drawio.png
k=20k=20番目までぐらいの画像を足し合わせると行列AAの本質的な特徴(ここでは画像が何を表しているか)を保持できることが分かりました。故にmkm-k個の次元は削減しても問題ないことになります。大きく計算資源が節約出来ましたね。
もう少し丁寧に説明していきます。
今回低ランク近似に用いた画像は私のアイコンにもなっている画像で、ピクセル数は縦横2268×30242268×3024で画像のチャンネルを1つにする都合上グレースケール化しています。
この画像を特異値分解すると特異値は22682268個得られます。幾何的イメージに照らし合わせると、各ピクセル(要素)に必ず22682268個の特異値が含まれており、それぞれ各ピクセルに影響を与えています。これらの特異値のうち行列AAの本質的な特徴(ここでは画像が何を表しているか)を保持できる最低限のランクになるkkを探していきますどうやって探すのかは以下の様にイメージしてください。
画像の低ランク近似の幾何的イメージ.drawio.png
特異値分解は画像を各特異値から成るmm枚の画像に分解することを指し、一番大きい特異値を持つ画像から順にkk番目まで足していったものがランクkkの低ランク近似AkA_{k}であり、上記のkkの推移図の様に出力を見ながらハイパーパラメータkkの最適な値を探します。今回の例ではk=20k=20辺りがおおよそ最適だと言えますね。
このように画像を低ランク近似するのは視覚的にも分かりやすく具体例としては優秀です。
以下のPythonコードから簡単に低ランク近似した画像を保存できるますので是非遊んでみてください。
※Web上の実行環境でローカル環境の画像を入力する方法が分からないので、コピペして各自のローカル環境で遊んでみてください。
Magicode上でローカル画像を読み込む方法がわかる方がいたら是非コメントで教えてください。
python
!pip install Pillow

import numpy as np
from scipy import linalg
from PIL import Image
from matplotlib import pyplot as plt

#画像インポート
img_pass = input('低ランク近似したい画像の名前を入力してください。')
img = Image.open(img_pass)

#画像をグレースケール化&Numpy配列化
img_gray = np.array(img.convert("L"))

#低ランク近似関数
def low_rank_approximation(matrixA,k):
    u, s, v = linalg.svd(matrixA)
    u_k = u[:, :k]
    s_k = np.matrix(linalg.diagsvd(s[:k], k,k))
    v_k = v[:k, :]
    return np.asarray(u_k*s_k*v_k)

#低ランク近似画像出力関数
def lra_output(img_gray, k_num, rows=3, colms=5, rsize=50, csize=30, fontsize=50):
  fig = plt.figure(figsize=(rsize, csize))
  X,Y = rows, colms
  for n, i in enumerate(k_num):
    ax = fig.add_subplot(X, Y, n+1)
    ax.set_title(f"k={i}",fontsize=fontsize)
    k = low_rank_approximation(img_gray,i)
    plt.gray()
    plt.imshow(k)
  return fig

#低ランク近似画像保存関数
def lra_save(fig=None):
  if fig:
    fig.savefig('#保存する画像全体のファイル名')
  else: 
    for n, i in enumerate(k_num):
      k = low_rank_approximation(img_gray,i)
      plt.imsave(f"#保存する各画像のファイル名{n}.jpg",k)

#出力or保存したいランクをリスト化
k_num = [1,2,3,4,5,10,20,30,40,50,100,500,1000,2000,2268]
#低ランク近似画像を出力
fig = lra_output(img_gray, k_num)
#低ランク近似画像全体を保存
lra_save(fig)
#各低ランク近似画像を保存
lra_save()
これにて、長きにわたる特異値分解の解説は終了となります。 最後までお付き合いいただいてありがとうございます!そしてお疲れさまでした。

〔特異値分解を解くための重要知識〕

◆随伴行列◆

▽定義▽
随伴行列とは、成分が複素数である行列に対して、全ての成分を複素共役にし、さらに転置行列にしたものです。[^6]
  • 複素数
    実数をaa、純虚数をbibiとした場合、z=a+biz=a+biで表されるzzのことを複素数と言う。複素数zzは、b=0b=0で実数、b0b≠0で虚数になる。つまり、複素数は、実数と虚数を組み合わせた数である。
    なお、複素数をa+bia+biとした場合、aaを実部、bbを虚部と言う。
    例えば、a=3,b=0a=3,b=0の場合z=a+bi=3+0i=3z=a+bi=3+0i=3で実数である。一方a=3,b=5a=3,b=5の場合z=a+bi=3+5iz=a+bi=3+5iで虚数である。
  • 複素共役
    複素数の虚部の符号を反転させたものです。例えば、複素数z=a+biz=a+biの複素共役zzは、z=abi\overline{z}=a−biになる。同様にz=abi\overline{z}=a−biの複素共役はz=a+biz=a+biである。
▽イメージ▽
例えば、
A(3+5i13i47i21+9i)A=\begin{pmatrix} 3+5i & 1-3i & 4 \\ 7i & -2 & 1+9i \\ \end{pmatrix}
の随伴行列は、
A=(3+5i7i13i241+9i)A^{*}=\begin{pmatrix} 3+5i & 7i \\ 1-3i & -2 \\ 4 & 1+9i \\ \end{pmatrix}
となります。
すべての成分において虚部が00であれば、A=ATA^{*}=A^{T}となります。
この記事で取り扱う特異値分解は実数のみを想定したものになるので、随伴行列ではなく転置行列として扱っています。

◆転置行列の性質◆

転置行列の基本的な性質として、
(AT)T=A(ABT)T=(BT)TAT=BAT(A^{T})^{T}=A\\ (AB^{T})^{T}=(B^{T})^{T}A^{T}=BA^{T}
であるため、
(AAT)T=(AT)TAT=AAT(ATA)T=AT(AT)T=ATA(AA^{T})^{T}=(A^{T})^{T}A^{T}=AA^{T}\\ (A^{T}A)^{T}=A^{T}(A^{T})^{T}=A^{T}A
であることが分かります。
つまり、転置しても変わらない事からAATAA^{T}ATAA^{T}Aは対称行列です。

◆対称行列の性質◆

▽性質▽
任意の実対称行列AAについて、異なる固有値に対応する固有ベクトルは直交する。[^7]
▽証明▽
AAの固有値λ1\lambda_{1}に対応する固有ベクトルをxxλ2\lambda_{2}に対応する固有ベクトルをyyとすると、
Ax=λ1xAy=λ2yAx=\lambda_{1}x…①\\ Ay=\lambda_{2}y…②\\
となります。
②の式の随伴行列は
yA=λ1yy^{*}A=\lambda_{1}y^{*}…②'
となります。
ここで、yAxy^{*}Axについて2通りの変形をします。
xxについてのの式①より
yAx=yλ1x=λ1yxy^{*}Ax=y^{*}\lambda_{1}x=\lambda_{1}y^{*}x
yyについての式②’より
yAx=λ2yxy^{*}Ax=\lambda_{2}y^{*}x
よって、
yx(λ1λ2)=0・・・③y^{*}x(\lambda_{1}-\lambda_{2})=0・・・③
異なる固有値λ1λ2\lambda_{1}≠\lambda_{2}である場合、③が成立するために
yx=0・・・④y^{*}x=0・・・④
となります。
よって、ベクトルの直交性によりxxyyは直交しています。
▽イメージ▽
イメージを掴むために例を用います。例題で用いるのはこの行列です。
A(5222)A=\begin{pmatrix} 5 & 2 \\ 2 & 2 \\ \end{pmatrix}
固有値は、固有方程式λ27λ+6=0\lambda^{2}-7\lambda+6=0より、λ1=6,λ2=1\lambda_{1}=6,\lambda_{2}=1です。
固有ベクトルは、λ1=6\lambda_{1}=6については①を解いてx=(2\1 )x=\bigl(\begin{smallmatrix}2 \\\1 \\\ \end{smallmatrix}\bigl) λ2=1\lambda_{2}=1については②を解いてx=(1 2 )x=\bigl(\begin{smallmatrix}1 \\\ -2 \\\ \end{smallmatrix}\bigl) です。
②’について、随伴行列は全ての成分が実数であれば転置行列と同義であるため、
yA=λ1y=(12)(5222)=(5424)=1(12)y^{*}A=\lambda_{1}y^{*}=\begin{pmatrix} 1 & -2 \\ \end{pmatrix} \begin{pmatrix} 5 & 2 \\ 2 & 2 \\ \end{pmatrix}= \begin{pmatrix} 5-4 & 2-4 \\ \end{pmatrix}=1 \begin{pmatrix} 1 & -2 \\ \end{pmatrix}
となります。
④について、
yx=(12)(21)=2×1+1×(2)=0y^{*}x=\begin{pmatrix} 1 & -2 \\ \end{pmatrix} \begin{pmatrix} 2 \\ 1 \\ \end{pmatrix}= 2×1+1×(-2)=0
よりxxyyは直交しています。図示するとこの通りです。
ベクトルの直交性.drawio.png
▽ベクトルの直交性▽
00でないベクトルv1v_{1}v2v_{2}の内積が00であるとき、 すなわち、
(v1,v2)=0(v_{1},v_{2})=0
であるとき、 v1v_{1}v2v_{2}直交するという
同じように、 0 でない n 個のベクトル
v1,v2,・・・,vnv_{1},v_{2},・・・,v_{n}
のそれぞれの間の内積が00になるとき、 すなわち、
(vi,vj)=0(v_{i},v_{j})=0
(ij)(i,j=1,2,,n)(i≠j)(i,j=1,2,…,n)
であるとき、互いに直交するベクトル、 または直交系を成すベクトルであるという。[^8]

◆正規直交基底◆

▽定義▽
nn次元ベクトル空間VVの基底
v1,v2,・・・,vnv_{1},v_{2},・・・,v_{n}
の内積が互いに直交し、 ノルムが 1 のとき、 すなわち、
(vi,vj)={0(ij)1(i=j)δˉij(v_{i},v_{j})=\left\{\begin{array}{}0 & (i≠j) \\1 & (i=j) \end{array}\right.\=\delta_{ij}
を満たすとき、 正規直交基底 (orthonormal basis) という。 ここで δijδij はクロネッカーのデルタである。[^9]
  • 基底
    線形独立なベクトル
    v1,v2,・・・,vn(1)v_{1},v_{2},・・・,v_{n}…(1)
    の線形結合全体の集合をベクトル空間という。
    したがって、 ベクトル空間VVに属する任意のベクトルWWは必ず
    W=α1v1+α2v2++αnvnW=\alpha_{1}v_{1}+\alpha_{2}v_{2}+…+\alpha_{n}v_{n}
    と表される (αiαi は係数)。
    このとき、 (1) をベクトル空間VVの基底 (basis) または基 と呼ぶ。 また、基底の数nnVVの次元といい、dimV=ndimV=nと表される。[^9]
    具体例
    v1=(1 2 ),v=(1 2 )v_{1}=\bigl(\begin{smallmatrix}1\\\ 2\\\ \end{smallmatrix}\bigl) ,v_{}=\bigl(\begin{smallmatrix}1\\\ 2\\\ \end{smallmatrix}\bigl)は、2 次元実ベクトル空間V2V_{2}の基底を成す。 なぜなら、V2V_{2}の適当なベクトルw=(9 12 )w=\bigl(\begin{smallmatrix}9\\\ 12\\\ \end{smallmatrix}\bigl)は、v1v_{1}v2v_{2}の線形結合によって、
    w=(912)=(5+410+2)=5(12)+2(21)=5v1+2v2w=\begin{pmatrix} 9 \\ 12 \\ \end{pmatrix}= \begin{pmatrix} 5 + 4 \\ 10 + 2 \\ \end{pmatrix}=5 \begin{pmatrix} 1 \\ 2 \\ \end{pmatrix}+2 \begin{pmatrix} 2 \\ 1 \\ \end{pmatrix}= 5v_{1}+2v_{2}
    と表せるからです。また、2次元実ベクトル空間V2V_{2}w=(9 12 )w=\bigl(\begin{smallmatrix}9\\\ 12\\\ \end{smallmatrix}\bigl)だけではなく、無数にある任意のベクトルwwv1v_{1}v2v_{2}の線形結合によって定義できます。
    図示するとこの通りです。
    基底.drawio.png
  • 線形独立と線形従属
    ベクトルの集合 {x1,x2,,xn}\{ x_{1},x_{2},⋯,x_{n} \} に対して、
    c1x1+c2x2++cnxn=0c_{1}x_{1}+c_{2}x_{2}+…+c_{n}x_{n}=0
    を満たす係数 ci(i=1,2,,n)ci (i=1,2,⋯,n)
    c1=c2==cn=0c_{1}=c_{2}=…=c_{n}=0
    のみであるとき、 {x1,x2,,xn}\{x_{1},x_{2},⋯,x_{n}\} を (互いに) 線形独立なベクトルという (一次独立ともいう)。 一方で逆に、 ベクトルの集合 {y1,y2,,yn}\{y_{1},y_{2},⋯,y_{n}\}
    d1y1+d2y2++dnyn=0d_{1}y_{1}+d_{2}y_{2}+…+d_{n}y_{n}=0
    を満たすときに、0でない係数が存在するならば、すなわち、
    di0d_{i}≠0
    であるdidiがどれかのiiに存在するならば、{y1,y2,,yn}\{y_{1},y_{2},⋯,y_{n}\}線形従属であるという。[^9]
    線形独立と線形従属のイメージはこの通りです。
線形独立と線形従属.drawio.png
線形従属の定義として、d1y1+d2y2++dnyn=0d_{1}y_{1}+d_{2}y_{2}+…+d_{n}y_{n}=0を満たすとき0でない係数did_{i}が存在する必要がありますが、具体的なイメージはこの通りになります。
線形従属の性質1.drawio.png
d1y1=1(142),d2y2=1(86),d3y3=1(157)d_{1}y_{1}=1\begin{pmatrix}14\\2\end{pmatrix}, d_{2}y_{2}=1\begin{pmatrix}8\\6\end{pmatrix}, d_{3}y_{3}=1\begin{pmatrix}15\\7\end{pmatrix}
であるとき、係数を変えて
d1y1=12(142),d2y2=1(86),d3y3=1(157)d_{1}y_{1}=-\frac{1}{2}\begin{pmatrix}14\\2\end{pmatrix}, d_{2}y_{2}=-1\begin{pmatrix}8\\6\end{pmatrix}, d_{3}y_{3}=1\begin{pmatrix}15\\7\end{pmatrix}
にすると、係数が0でなくてもd1y1+d2y2+d3y3=0d_{1}y_{1}+d_{2}y_{2}+d_{3}y_{3}=0を満たすので{y1,y2,y3}\{y_{1},y_{2},y_{3}\}は線形従属であると分かります。
  • 補足
    線形従属な場合、{y1,y2,,yn}\{y_{1},y_{2},⋯,y_{n}\}のうち少なくともどれか一つのベクトルが、 その他のベクトルの線形結合によって表される。 例えば、di≠0であれば、yiyi=1di(d1y1++di1yi1+di+1yi+1++dnyn)yiはy_{i}=\frac{1}{d_{i}}(d_{1}y_{1}+…+d_{i-1}y_{i-1}+d_{i+1}y_{i+1}+…+d_{n}y_{n})と表される。 一方で、 線形独立な場合には、 このような表現は許されない。
    よって、 ベクトルの集合の少なくともどれか一つのベクトルを他のベクトルの線形結合で表すことできるときに線形従属であるといい、 どの一つを取っても、 他のベクトルの線形結合で表すことができないときに線形独立であるという。[^9]
    引き続き上記の具体例を用いたイメージがこの通りになります。
    線形従属の性質2.drawio.png
    d1y1d_{1}y_{1}の係数を12\frac{1}{2}にすることで、以下のような式が成り立ち、
    d1y1+d2y2=d3y3=12(142)+1(86)=1(157)d_{1}y_{1}+d_{2}y_{2}=d_{3}y_{3} =\frac{1}{2}\begin{pmatrix}14\\2\end{pmatrix} +1\begin{pmatrix}8\\6\end{pmatrix} =1\begin{pmatrix}15\\7\end{pmatrix}
    ベクトルd3y3d_{3}y_{3}はその他のベクトルの線形結合d1y1+d2y2d_{1}y_{1}+d_{2}y_{2}によって表せるので{y1,y2,y3}\{y_{1},y_{2},y_{3}\}は線形従属であると分かります。
  • ノルム(L2L_{2})
    ノルムとは、簡単に説明するとベクトル空間上の距離を表しており、その中でも正規直行基底の定義で用いられているL2L_{2}ノルムは、私たちが直感的に想像する距離を表します。つまり、始点から終点までを直線で繋ぐ距離のことです。
    このL2L_{2}ノルムは、
x2=i=1nxi2=x12+x22++xn2\|x\|_{2}=\sqrt{\sum_{i=1}^n|x_{i}|^{2}}=\sqrt{|x_{1}|^{2}+|x_{2}|^{2}+…+|x_{n}|^{2}}
という式で表せます。何故この式で表せるのかは、三平方の定理を思い出して頂ければ分かります。
実例を見てみましょう。
2次元実ベクトル空間V2V_{2}において、基底を成す
v1=(21),v2=(24)v_{1}=\begin{pmatrix}2\\1\end{pmatrix},v_{2}=\begin{pmatrix}2\\4\end{pmatrix}
の線形結合によって定義されたベクトル
w=(45)w=\begin{pmatrix} 4\\ 5 \end{pmatrix}
があるとします。イメージはこの通りです。
L2ノルムの例.drawio.png
このベクトルの距離はどう測ればよいでしょうか。ここで登場するのが三平方の定理です。
三平方の定理を使って計算してみましょう。
42+52=w2w=414^2+5^2=w^2\therefore w=\sqrt{41}
これでこのベクトルの距離が41\sqrt{41}であることが分かりました。
L2L_{2}ノルムも考え方はこれと同じで、nn次元ベクトル空間VnV_{n}のベクトルの距離まで計算が可能になる様により一般化されたものだと考えてください。
実際にL2L_{2}ノルムの式を使って計算してみると、
x2=42+52=41\|x\|_{2}=\sqrt{|4|^{2}+|5|^{2}}=\sqrt{41}
三平方の定理から導き出した答えと同じであると分かります。
▽イメージ▽
正規直行基底の例1.drawio.png
3次元実ベクトル空間V3V_{3}の基底を成す
v1=(100),v2=(010),v3=(001)v_{1}=\begin{pmatrix}1\\0\\0\end{pmatrix}, v_{2}=\begin{pmatrix}0\\1\\0\end{pmatrix}, v_{3}=\begin{pmatrix}0\\0\\1\end{pmatrix}
は、
(v1,v2)=(100)(010)=0(v2,v1)=0(v2,v3)=(010)(001)=0(v3,v2)=0(v3,v1)=(001)(100)=0(v1,v3)=0(v1,v1)=(100)(100)=1(v2,v2)=(010)(010)=1(v3,v3)=(001)(001)=1(v_{1},v_{2})=\begin{pmatrix}1&0&0\end{pmatrix} \begin{pmatrix}0\\1\\0\end{pmatrix}=0\therefore (v_{2},v_{1})=0\\ (v_{2},v_{3})=\begin{pmatrix}0&1&0\end{pmatrix} \begin{pmatrix}0\\0\\1\end{pmatrix}=0\therefore (v_{3},v_{2})=0\\ (v_{3},v_{1})=\begin{pmatrix}0&0&1\end{pmatrix} \begin{pmatrix}1\\0\\0\end{pmatrix}=0\therefore (v_{1},v_{3})=0\\ (v_{1},v_{1})=\begin{pmatrix}1&0&0\end{pmatrix} \begin{pmatrix}1\\0\\0\end{pmatrix}=1\\ (v_{2},v_{2})=\begin{pmatrix}0&1&0\end{pmatrix} \begin{pmatrix}0\\1\\0\end{pmatrix}=1\\ (v_{3},v_{3})=\begin{pmatrix}0&0&1\end{pmatrix} \begin{pmatrix}0\\0\\1\end{pmatrix}=1
により内積が互いに直交しており、L2L_{2}ノルムは
v1:x2=12+12=1v2:x2=12+12=1v3:x2=12+12=1v_{1}:\|x\|_{2}=\sqrt{|1|^{2}+|1|^{2}}=1\\ v_{2}:\|x\|_{2}=\sqrt{|1|^{2}+|1|^{2}}=1\\ v_{3}:\|x\|_{2}=\sqrt{|1|^{2}+|1|^{2}}=1\\
全て1であり、v1,v2,v3v_{1},v_{2},v_{3}はそれぞれ正規直行基底です。
また、正規直交基底の集合{v1,v2,v3}\{v_{1},v_{2},v_{3}\}のことを正規直行系と言います。
別の基底も用意したのでぜひ自分で正規直行基底であるのか確かめてみてください。
正規直行基底の例2.drawio (1).png

◆直交行列◆

▽定義▽
次の関係
RTR=RRT=IR^{T}R=RR^{T}=I
を満たす正方行列Rを 直交行列という。[^10]
▽性質▽
直交行列の性質の1つとして、列ベクトルが正規直行系であるというものがあります。
行列RRの列ベクトルを
R=[r1,r2,,rn]R=[r_{1},r_{2},…,r_{n}]
と表すとき、 RRが直交行列であることと、 これらが正規直交系を成すこと
(ri,rj)=δij(r_{i},r_{j})=\delta_{ij}
は、 互いに必要十分条件である。 [^10]
証明については、参考文献から確認してみてください。

〔終わりに〕

いかがだったでしょうか?特異値分解について計算手順、機械学習での使い道と解釈は理解できるようになりましたか?
今回は結構な超大作になってしまいました。書き始めたころには2週間以上もかかるなんて思いもしませんでしたが、こだわり癖が発症してこの有様です。タイトルが某汎用人型決戦兵器神話をパロっているのは、勝手に監督の苦悩に重ねていたからかもしれないですね。おこがましすぎますね。はい。でもまあ、おかげで記事のクオリティは満足いくものになったと思いますので、皆さんのお役に立てていれば本望です。
話は変わって、固有値分解から特異値分解まで線形代数の関門について勉強してみて改めて線形代数は頭に幾何的イメージが頭の中に描けるかどうかが全てだなと身を持って深く体感しましたね。イメージを具体的な図に落とし込む作業はなかなか時間のかかるものですが、おかげでしっかりと脳に刻まれています。あとは数学記号と数学用語をスラスラ使えるようになればより厳密な理解が進むといったところでしょうか。皆さんも勉強した内容は脳内にイメージできる形で構造化することをおすすめします。
それから、本記事では特異値と機械学習の関係についても取り上げましたが、これは実は主成分分析とほぼ同じことをしているんですよね。共通点と差異点がまだ不確かなのでそれはまた教師無し学習の記事で触れたいと思います。
とにもかくにも何とか最後まで書き上げられてよかったです。読んでくれてありがとう!!
本記事への感想やご質問、ご指摘などなどお気軽にコメントして頂けると記事の精度がどんどん上がっていきますので是非よろしくお願い致します。それからコメントやスーパーコメントをして頂けると記事投稿のモチベーションが爆上がりするのでそちらも是非!

【コンテンツツリー】◀E資格の関連記事はここから!!

【ハックしないE資格対策記】の各記事をシラバス(2020版)と同じ形式でコンテンツツリーにしています。 気になる記事に一瞬でたどり着けますのでどうぞご活用ください!
〔E資格とは〕
〔応用数学〕
  • 線形代数
  • 確率・統計
    • 一般的な確率分布
      • ベルヌーイ分布
      • マルチヌーイ分布
      • ガウス分布
    • ベイズ則
  • 情報理論
〔機械学習〕
  • 機械学習の基礎
    • 学習アルゴリズム
      • タスクT
      • 性能指標P
      • 経験E
    • 能力・過剰適合・過少適合
    • ハイパーパラメータ
    • 検証集合
      • 学習データ、検証データ、テストデータ
      • ホールドアウト法
      • k-分割交差検証法
    • 最尤推定
      • 条件付き対数尤度と平均二乗誤差
    • 教師あり学習アルゴリズム
      • ロジスティック回帰
      • サポートベクトルマシン
      • 最近傍法、k近傍法
    • 教師無し学習アルゴリズム
      • 主成分分析
      • k平均クラスタリング
    • 確率的勾配降下法
    • 深層学習の発展を促す課題
      • 次元の呪い
  • 実用的な方法論
    • 性能指標
    • ハイパーパラメータの選択
      • 手動でのハイパーパラメータ調整
      • グリッドリサーチ
      • ランダムリサーチ
      • モデルに基づくハイパーパラメータの最適化
〔深層学習〕
  • 順伝播型ネットワーク
    • 線形問題と非線形問題
    • コスト関数
      • 最尤推定による条件付き分布の学習
    • 出力ユニット
      • ガウス出力分布のための線形ユニット
      • ベルヌーイ出力分布のためのシグモイドユニット
      • マルチヌーイ分布のためのソフトマックスユニット
    • 隠れユニット
      • ReRuとその一般化
      • ロジスティックシグモイドとハイパボリックタンジェント
    • アーキテクチャの設計
      • 万能近似定理と深さ
    • 誤差逆伝播およびその他の微分アルゴリズム
      • 計算グラフ
      • 微積分の連鎖率
      • 誤差逆伝播のための連鎖率の再帰的な適応
      • 全結合MLPでの誤差逆伝播法
      • シンボル間の微分
      • 一般的な誤差逆伝播法
  • 深層モデルのための正則化
    • パラメータノルムペナルティー
      • L2パラメータ正則化
      • L1正則化
    • データ集合の拡張
    • ノイズに対する頑健性
      • 出力目標へのノイズ注入
    • 半教師あり学習
    • マルチタスク学習
    • 早期終了
    • スパ――ス表現
    • バギングやその他のアンサンブル手法
    • ドロップアウト
  • 深層モデルのための最適化
    • 学習と純粋な最適化の差異
      • バッチアルゴリズムとミニバッチアルゴリズム
    • 基本的なアルゴリズム
      • 確率的勾配降下法
      • モメンタム
      • ネステロフのモメンタム
    • パラメータの初期化戦略
    • 適応的な学習率を持つアルゴリズム
      • AdaGrad
      • RMSProp
      • Adam
    • 最適化戦略とメタアルゴリズム
      • バッチ正規化
      • Layer正規化
      • Instance正規化
      • 教師あり事前学習
  • 畳み込みネットワーク
    • 畳み込み処理
    • プーリング
    • 構造出力
    • データの種類
    • 効率的な畳み込みアルゴリズム
    • 特徴量の転移
  • 回帰結合型ニューラルネットワークと再帰的ネットワーク
    • 回帰結合型のニューラルネットワーク
      • 教師強制と出力回帰のあるネットワーク
        ‐ 回帰結合型ネットワークにおける勾配計算(BPTT)
        ‐ 有効グラフィカルモデルとしての回帰結合型のネットワーク
        ‐ RNNを使った文脈で条件付けされた系列モデリング
    • 双方向RNN
    • Encoder-Decoder と Sequence-to-Sequence
    • 深層回帰結合型のネットワーク
    • 再帰型ニューラルネットワーク
    • 長期依存性の課題
    • 複数時間スケールのためのLeakyユニットとその他の手法
      • 時間方向にスキップ接続を追加
      • Leakyユニットと異なる時間のスケールのベクトル
      • 接続の削除
    • ゲート付きRNN
      • LSTM
      • GRU
    • 長期依存性の最適化
      • 勾配のクリッピング
    • メモリネットワーク
      • Attention
  • 生成モデル
    • 識別モデルと生成モデル
    • オートエンコーダー
      • VAE
    • GAN
      • DCGAN
      • Conditional GAN
  • 強化モデル
    • 方策勾配法
    • 価値反復法
      • DQN
  • 深層学習の適応方法
    • 画像認識
      • VGG
      • GoogLeNet
      • ResNet
      • MobileNet
      • DenseNet
    • 画像の局在化・検知・セグメンテーション
      • FasterR-CNN
      • YOLO
      • SSD
    • 自然言語処理
      • WordEmbedding
      • Transformer
    • Text to Speech
      • WaveNet
    • スタイル変換
      • pix2pix
    • その他
      • AlphaGo
〔開発・運用環境〕
  • ミドルウェア
    • 深層学習ライブラリ
  • 軽量化・高速化技術
    • 軽量化技術
      • 量子化
      • 蒸留
      • プルーニング
    • 分散処理
      • モデル並列
      • データ並列
    • アクセラレータ
      • GPU

【参考シラバス】

E資格の試験出題範囲(シラバス)2020 ダウンロードはこちらから
E2022#2(2022年8月26日・27日)の試験からシラバスの出題範囲が変わります。 本シリーズは2020のシラバスを参考に記事を作成しますが、出題範囲の変更分も後々追加で書いていきたいとは考えています。 (もしかしたら別シリーズとして新たにスタートするかもしれません。) 新シラバスのダウンロードはこちらから

Discussion

コメントにはログインが必要です。