線形代数

0.章の概要

線形代数は、ディープラーニングの基盤となる重要な分野です。ニューラルネットワークは、多次元データを効率よく処理するために、行列演算を駆使しています。特に、行列の積はネットワークの各層を通じてデータを変換し、入力から出力への変換を効果的に行うための核心的な手法です。また、誤差逆伝播法や高次元データの圧縮なども、線形変換の原理に基づいています。

この章を通じて、線形代数の基本をしっかり理解することは、ディープラーニングのモデルを最適化し、より効果的に運用するために不可欠です。最新のシラバスでは試験範囲から除外されましたが、実務においては重要な知識です。しっかりとこの分野を学び、ディープラーニングの理解を深めましょう。

1.行列演習

学習キーワード:行列のランク、テンソル、アダマール積

概要

「行列演習」は、行列演算やその応用を通じてディープラーニングモデルを効率的に構築・最適化するための手法です。モデル内のデータは多次元行列(テンソル)で表現され、行列の計算や変換が学習の基盤となります。特に、行列分解やランクの活用により、データの構造や特徴を抽出し、効率的なパラメータ調整が可能になります。


行列のランク

行列のランクは、行列が持つ「独立した行や列」の数を示します。ランクが高い行列は、情報が多く含まれており、データの冗長性が少ないことを意味します。逆に、行列のランクが低い場合は、データの一部が他の部分で説明可能であるため冗長性が高くなります。

具体的には、行列のランクは、その行列が張るベクトル空間の次元数として理解することができます。簡単に言うと、行列内でお互いに重ならない情報の量です。

ランクの決め方
  • 行や列の中で、線形独立でないもの(他の行や列の組み合わせで表せるもの)がある場合、それらの線形独立な行や列の数がランクを決定します
  • 例えば、2行目が1行目の定数倍であれば、それらは独立していないため、ランクは1になります。
  • 他の方法として、行列を簡約化して(階段行列などに変形して)、ランクを明確に判断することもできます。

行列のランクの具体例:

\( A_1 = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix} \)

この行列 \( A_1 \) は2行3列ですが、行や列の独立性があるため、ランクは2です。

\( A_2 = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \end{pmatrix} \)

この行列 \( A_2 \) は2行3列ですが、2行目は1行目の倍数であり、行の独立性がないため、ランクは1です。

\( A_3 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \end{pmatrix} \)

この行列 \( A_3 \) は4行3列で、3つの独立した行が存在します。従って、ランクは3です。ゼロ行ベクトルは他の行と独立ではなく、ランクには影響しません。

難しく考えず行列のランクとは「行列が持つ独立した行または列の数」であると理解すれば十分でしょう。


テンソル

テンソルはN次元の配列として表現され、スカラーは0次元、ベクトルは1次元、行列は2次元のテンソルに対応します。ディープラーニングでは、入力データやモデルの重みがテンソルとして表現され、複数次元の情報を効率よく処理できるようになります。

例として、4次元テンソルを以下に示します:

\( T = \begin{pmatrix} \begin{pmatrix} \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, & \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} \end{pmatrix}, & \begin{pmatrix} \begin{pmatrix} 9 & 10 \\ 11 & 12 \end{pmatrix}, & \begin{pmatrix} 13 & 14 \\ 15 & 16 \end{pmatrix} \end{pmatrix} \end{pmatrix} \)

この4次元テンソル \(T\) の構造を具体的に見てみましょう:

  • \(T\): 4次元テンソル。2つのバッチに、それぞれ2つの2次元行列を含む多次元配列です。
  • \(T[i]\): テンソル \(T\) の \(i\) 番目のバッチ。例えば、\(T[0]\)は次のように表されます:
    \( T[0] = \begin{pmatrix} \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, & \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} \end{pmatrix} \)

テンソルを用いることで、画像、音声、テキストなどの多次元データを効率的に扱うことができ、特に深層学習モデルのトレーニングや推論において重要な役割を果たします。


アダマール積

アダマール積(要素ごとの積)は、同じサイズの行列やテンソルの対応する要素同士を掛け合わせる演算です。これは、ディープラーニングの誤差逆伝播のステップで利用され、勾配の計算に重要な役割を果たします。(詳しくは「3.深層学習の基礎」で説明しますが、要素ごとの積を使うことで、勾配の更新が各要素に対して個別に適用されます。)

\( A \circ B = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \circ \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} = \begin{pmatrix} a_{11} b_{11} & a_{12} b_{12} \\ a_{21} b_{21} & a_{22} b_{22} \end{pmatrix} \)
  • A, B: 同じサイズの2つの行列。
  • A ∘ B: 行列AとBの対応する要素ごとの積(アダマール積)。
  • aij, bij: 行列AおよびBのi行j列目の要素。

2.固有値分解・特異値分解

学習キーワード:固有値、固有ベクトル、対角化、特異値、特異ベクトル

概要

固有値分解と特異値分解は、行列の特性を理解し、データ解析や機械学習での効率的な計算を実現するための基本的な手法です。これらの分解を用いることで、データの構造を捉え、次元削減やデータ圧縮を行うことができます。固有値分解は、正方行列に対してのみ適用可能な手法であり、行列の特性を理解するために重要です。一方、特異値分解は任意の行列に適用でき、データ解析や次元削減において広く利用されます。


固有値分解(Eigenvalue Decomposition)

固有値分解は、行列を特定の形式に分解する手法で、データ解析や機械学習など多くの分野で重要な役割を果たします。具体的には、行列 \(A\) を以下の形に分解する手法です:

\(A = V \Lambda V^{-1} \)

ここで、\(V\) は固有ベクトルの行列、\(Λ\) は対角行列で、対角成分に固有値が並びます。固有値分解を行う手順は以下の通りです。


固有値分解の手順
  1. 行列\(A\)を定義する:

    分解したい行列 \(A\) を定義します。

    行列 \(A\) には、次の関係が成り立つ固有値 \(λ\) と固有ベクトル \(v\) が存在します:

    \(A v = λ v\)
  2. 特性方程式\( \text{det}(A - \lambda E) = 0 \)をたてる:

    1.の式を変形すると、

    \((A-λ)v = 0\)

    ここで単位行列\(E\)をかけても変わらないので、以下の特性方程式を解くことで固有値 \(λ\) を求めることができます。

    \( \text{det}(A - \lambda E) = 0 \)
  3. 固有値\(λ\)を計算する:

    特性方程式を解いて固有値 \( \lambda_1, \lambda_2, \ldots, \lambda_n \) を求めます。

  4. \( (A - \lambda_i E)v_i = 0 \)を解き、固有ベクトル\( v_i \)を求める:

    各固有値 \( \lambda_i \) に対して次の連立方程式を解き、固有ベクトル \( v_i \) を求めます:

    \( (A - \lambda_i E)v_i = 0 \)
  5. 固有ベクトル行列\(V\)と固有値行列\( \Lambda \)の形成:

    各固有ベクトルを列ベクトルとして行列 \(V\) を形成します。

    固有値を対角成分に持つ行列 \( \Lambda \) を形成します。

  6. \( A = V \Lambda V^{-1} \) の形で表す:

    最終的に固有値分解の結果を次の形で表します。

    \( A = V \Lambda V^{-1} \)


固有値分解の具体例
  1. 行列\(A\)を定義する:
    \( A = \begin{pmatrix} 4 & 1 \\ 2 & 3 \end{pmatrix} \)
  2. 特性方程式\( \text{det}(A - \lambda E) = 0 \)をたてる:
    \( \text{det}(A - \lambda E) = \text{det}\left(\begin{pmatrix} 4 - \lambda & 1 \\ 2 & 3 - \lambda \end{pmatrix}\right) = (4 - \lambda)(3 - \lambda) - (2 \cdot 1) = 0 \)

    これを展開すると:

    \( \lambda^2 - 7\lambda + 10 = 0 \)

  3. 固有値\(λ\)を計算する:

    上記の二次方程式を解くと、固有値は次のようになります:

    \( \lambda_1 = 5, \quad \lambda_2 = 2 \)
  4. \( (A - \lambda_i E)v_i = 0 \)を解き、固有ベクトル\( v_i \)を求める:
    • 固有値 \( \lambda_1 = 5 \) に対して:
      \( (A - 5E)v_1 = 0 \) ⟹ \( \begin{pmatrix} -1 & 1 \\ 2 & -2 \end{pmatrix} \begin{pmatrix} x_1 \\ y_1 \end{pmatrix} = 0 \)

      この連立方程式から、固有ベクトル \( v_1 = k\begin{pmatrix} 1 \\ 1 \end{pmatrix} \)(任意定数 \( k \))が得られます。

    • 固有値 \( \lambda_2 = 2 \) に対して:
      \( (A - 2E)v_2 = 0 \) ⟹ \( \begin{pmatrix} 2 & 1 \\ 2 & 1 \end{pmatrix} \begin{pmatrix} x_2 \\ y_2 \end{pmatrix} = 0 \)

      この連立方程式から、固有ベクトル \( v_2 = k\begin{pmatrix} -1 \\ 2 \end{pmatrix} \)(任意定数 \( k \))が得られます。

  5. 固有ベクトル行列\(V\)と固有値行列\( \Lambda \)の形成:
    \( V = \begin{pmatrix} 1 & -1 \\ 1 & 2 \end{pmatrix}, \quad \Lambda = \begin{pmatrix} 5 & 0 \\ 0 & 2 \end{pmatrix} \)
  6. \( A = V \Lambda V^{-1} \) の形で表す:

    最終的に、固有値分解の結果は次のようになります。

    \( A = V \Lambda V^{-1} \)

    具体的に計算すると:

    \[ V \Lambda = \begin{pmatrix} 1 & -1 \\ 1 & 2 \end{pmatrix} \begin{pmatrix} 5 & 0 \\ 0 & 2 \end{pmatrix} = \begin{pmatrix} 5 & -2 \\ 5 & 4 \end{pmatrix} \]
    \[ V^{-1} = \frac{1}{3}\begin{pmatrix} 2 & 1 \\ -1 & 1 \end{pmatrix} \]
    \[ A = V \Lambda V^{-1} = \begin{pmatrix} 5 & -2 \\ 5 & 4 \end{pmatrix} \cdot \frac{1}{3}\begin{pmatrix} 2 & 1 \\ -1 & 1 \end{pmatrix} = \begin{pmatrix} 4 & 1 \\ 2 & 3 \end{pmatrix} \]

    したがって、元の行列 \( A \) は固有値分解によって正しく表現されました。


特異値分解(Singular Value Decomposition )

特異値分解(SVD)は、行列の特異値や特異ベクトルを求めることで、行列の構造や性質を明らかにする強力な手法です。この技術は、データ分析、機械学習、画像圧縮など、さまざまな分野で重要な役割を果たしています。具体的には、行列 A を以下のように分解します:

\( A = UΣV^T \)

ここで、UA の左特異ベクトルを含む行列、Σ は特異値を対角成分とする対角行列、VA の右特異ベクトルを含む行列です。


特異値分解の手順
  1. \( A A^T \) と \( A^T A \) を計算しておく:

    行列 \( A \) を用意し、転置行列との積 \( A A^T \) と \( A^T A \) を計算します。

    \( A A^T = A \times A^T \)
    \( A^T A = A^T \times A \)
  2. \( A A^T - \lambda E = 0 \) より固有値 \( \lambda \) を求める:

    次に、行列 \( A A^T \) の固有値を次の特性方程式から求めます。

    \( \text{det}(A A^T - \lambda E) = 0 \)
  3. \( A A^T u = \lambda u \) に固有値 \( \lambda \) を代入し、左特異ベクトル \( u \) を求める:

    固有値 \( \lambda \) に対して左特異ベクトル \( u \) を次の方程式から求めます。

    \( A A^T u = \lambda u \)
  4. \( A^T A - \lambda E = 0 \) より固有値 \( \lambda \) を求める:

    同様に、\( A^T A \) の固有値 \( \lambda \) を次の方程式から求めます。

    \( \text{det}(A^T A - \lambda E) = 0 \)
  5. \( A^T A v = \lambda v \) に固有値 \( \lambda \) を代入し、右特異ベクトル \( v \) を求める:

    右特異ベクトル \( v \) は次の方程式で求めます。

    \( A^T A v = \lambda v \)
  6. 特異値を計算する:

    特異値は、行列 \( A \) の対応する固有値の平方根から計算されます。

    \( \sigma = \sqrt{\lambda} \)
  7. \( A = U \Sigma V^T \) の形で表す:

    最終的に特異値分解の結果を次の形で表します。

    \( A = U \Sigma V^T \)

特異値分解の具体例

※ここでは、式簡易化のために適宜四捨五入しています。そのため正確に計算した場合と結果値が若干異なりますのでご了承下さい。

  1. \( A A^T \) と \( A^T A \) を計算しておく:

    まず、行列 \( A \) を定義し、転置行列との積 \( A A^T \) と \( A^T A \) を計算します。

    \( A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix} \)
    \( A A^T = \begin{pmatrix} 5 & 11 & 17 \\ 11 & 25 & 39 \\ 17 & 39 & 61 \end{pmatrix} \)
    \( A^T A = \begin{pmatrix} 35 & 44 \\ 44 & 56 \end{pmatrix} \)
  2. \( A A^T - \lambda E = 0 \) より固有値 \( \lambda \) を求める:

    次に、行列 \( A A^T \) の固有値を次の固有値方程式から求めます。

    \( \text{det}(A A^T - \lambda E) = 0 \)

    固有値は以下のように計算されます:

    \( \lambda_1 \approx 90.65, \quad \lambda_2 \approx 0.35 \)
  3. \( A A^T u = \lambda u \) に固有値 \( \lambda \) を代入し、左特異ベクトル \( u \) を求める:

    固有値 \( \lambda_1 \approx 90.65 \) に対して左特異ベクトル \( u_1 \) を次の方程式で求めます。

    \( A A^T u_1 = 90.65 u_1 \)

    計算結果:

    \( u_1 = \begin{pmatrix} -0.386 \\ -0.922 \\ -0.171 \end{pmatrix} \)

    同様に、固有値 \( \lambda_2 \approx 0.35 \) に対して左特異ベクトル \( u_2 \) を計算します。

    \( A A^T u_2 = 0.35 u_2 \)

    計算結果:

    \( u_2 = \begin{pmatrix} 0.922 \\ -0.386 \\ 0.024 \end{pmatrix} \)
  4. \( A^T A - \lambda E = 0 \) より固有値 \( \lambda \) を求める:

    同様に、\( A^T A \) の固有値 \( \lambda \) は以下のように求められます:

    \( \lambda_1 \approx 90.65, \quad \lambda_2 \approx 0.35 \)
  5. \( A^T A v = \lambda v \) に固有値 \( \lambda \) を代入し、右特異ベクトル \( v \) を求める:

    固有値 \( \lambda_1 \approx 90.65 \) に対して右特異ベクトル \( v_1 \) を次の方程式で求めます。

    \( A^T A v_1 = 90.65 v_1 \)

    計算結果:

    \( v_1 = \begin{pmatrix} -0.707 \\ -0.707 \end{pmatrix} \)

    同様に、固有値 \( \lambda_2 \approx 0.35 \) に対して右特異ベクトル \( v_2 \) を計算します。

    \( A^T A v_2 = 0.35 v_2 \)

    計算結果:

    \( v_2 = \begin{pmatrix} 0.707 \\ -0.707 \end{pmatrix} \)
  6. 特異値を計算する:
    \( \sigma_1 = \sqrt{\lambda_1} \approx 9.52, \quad \sigma_2 = \sqrt{\lambda_2} \approx 0.59 \)
  7. \( A = U \Sigma V^T \) の形で表す:

    最終的に、特異値分解の結果は次のようになります。

    \( A = U \Sigma V^T \)
    \( U = \begin{pmatrix} -0.386 & 0.922 \\ -0.922 & -0.386 \\ -0.171 & 0.024 \end{pmatrix}, \quad \Sigma = \begin{pmatrix} 9.52 & 0 \\ 0 & 0.59 \end{pmatrix}, \quad V^T = \begin{pmatrix} -0.707 & 0.707 \\ -0.707 & -0.707 \end{pmatrix} \)

このように、特異値分解を用いることで、行列 \( A \) を 3 つの要素 \( U \), \( \Sigma \), \( V^T \) に分解することができました。これにより、元の行列の性質や次元削減、データ圧縮など、さまざまな応用に利用するための強力な手法が得られます。


関連用語の補足
  • 対角化:対角化は、行列 \( A \) を以下のように表現することを指します:

    \( A = PDP^{-1} \)

    ここで、\( P \)\( A \) の固有ベクトルからなる行列、\( D \) は固有値を対角成分とする対角行列です。

  • 単位行列:対角成分が1、非対角成分が0である行列のことで、単位行列にどのような行列Aをかけても行列Aのままになります。
  • 転置行列:元の行列の \(𝑖\) 行 \(𝑗\) 列の要素が、\(𝑗\) 行 \(𝑖\) 列の要素になったもの
  • 逆行列:元の行列にかけると単位行列になるもの
  • 単位ベクトル:大きさが1のベクトル。ベクトル \(𝑥\) をその大きさ \(|𝑥|\) で割ったもの

キーワードまとめ

行列のランク、テンソル、アダマール積、固有値、固有ベクトル、対角化、特異値、特異ベクトル