※本記事は過去にQiitaで投稿したものを再編集したものです。
本記事をクリックして下さってありがとうございます!
今回は、応用数学より線形代数の特異値分解について取り扱いたいと思います。
特異値分解は、E資格の勉強でまず初めに立ちふさがる関門だと思います。計算自体も面倒だし、解けても何が嬉しいのかいまひとつわかりません。そんな特異値分解についてしっかり計算手順と使い道と解釈を教えてくれる記事があればとても嬉しいですよね。それがこの記事です。
特異値分解の全ての疑問にカシウスの槍をぶっ刺して回っていきますので記事を読み終えた頃には特異値分解に悩まされてきた過去の全てにさようならできると思います。 もちろん文系出身の方にもわかるようになるべく丁寧に詳しく解説していきますので是非最後までご覧ください。
また、特異値分解では計算手順の中で固有値について理解していると分かりやすくなる場面があります。理解度を深めたい方は前回の記事【ハックしないE資格対策記ー02ー】~固有値分解って結局何なの?圏を突破しよう~と合わせてどうぞ。
▼ハックしない"って何?
ハック/-Hack-は…
〔物事をうまくやるための〕こつ、アイデア [^1]
と言う意味を持っています。
この意味合いで、世の中には生活術や仕事術としての「○○ハック」という言葉が広がっていますよね。 塾や予備校で学ぶ受験対策術も「お受験ハック」です。”傾向と対策”など、大学入試の際に私もお世話になりました。 しかし、本シリーズではそういった対策術だけを記事にすることはありません。 ”E資格合格のための5つのコツ”とか”○○時間で合格できるE資格”とか”覚えておきたいコスパ最強10の公式”などは期待しないでください。 ディープラーニングについて頭の中に体系を作り上げていただける様に、記事の内容もコツコツと必要な知識を述べ、体系的に整理して使えるような形を目指して作っていきます。
それが【ハックしないE資格対策記】です。
▼なぜハックしないのか
何故なら、資格試験の合格はゴールではなくあくまで客観的な知識と技術の基準として存在するものであり、合格後に知識と能力を活かせるかの方が遥かに大切だからです。
ここで一般社団法人日本ディープラーニング協会の公式ホームページからE資格の目的に関する記述を引用します。
ご挨拶
人工知能の分野は、良くも悪くも、「人工知能の定義がない」ということに由来する特徴があります。さまざまな技術を取り込む寛容性がある一方で、なんでもかんでも人工知能と言ってしまうことができ、過剰期待を生みやすい性質もあります。だからこそ、人工知能の分野においては、ある一定の知識レベル・技術レベルの基準を作るということが大変重要と考えます。本協会では、初期の重要な活動としてディープラーニングに関する資格試験を実施したいと考えています。ユーザ企業やエンジニアが、一定の知識レベルを担保することで、地に足の着いた議論や事業開発ができるものと考えています。[^2]
E資格概要
ディープラーニングの理論を理解し、適切な手法を選択して実装する能力や知識を有しているかを認定する。[^3]
E資格が目的としていることは引用の通りで、要するにディープラーニングについての能力と知識レベルを客観的な基準で認定して、一定のレベルを担保した上で議論や事業開発が出来るようにすために実施されているのです。
この資格が、合格後にディープラーニングを議論や事業に活かしてもらうためにあると分かった上でもう一度考えてみると、やはりハックせずにコツコツとディープラーニングについての体系を組み立てて長期的に役立つ方向に向かった方が良いなと思いませんか。
概要を読んで良いコンセプトだと感じて下さった方は是非これからのシリーズを見届けていってもらえると嬉しいです。 また、訂正、アドバイス、追加の参考資料の提案などなど、この記事をより良いものにするコメントをして下さるセカンドクリエイターの皆様をお待ちしております。
また、コメントで盛り上げて頂けるとモチベーションに繋がりますのでよろしくお願い致します!
特異値分解の計算手順をサクッと確認したい方はこの章を参考にして下さい。
特異値、特異ベクトルとは何ぞ?という方は次章以降じっくり読んで理解した上でこの章で確認していただくことをおすすめします。
である行列をに分解する際の各行列の形と大きさを確認する
:特異値(固有値の非負の平方根)を対角成分に持つの対角行列
:左特異ベクトル(の固有値から求めた固有ベクトル)を並べたの直交行列
:右特異ベクトル(の固有値から求めた固有ベクトル)を並べた転置直交行列
転置行列を求める
の固有値を個求める
サラスの公式か余因子展開を使って固有方程式をについて解く
の固有値の非負の平方根を大きい順に並べてを完成させる
の固有値から正規化した固有ベクトルを求め、を完成させる
同次連立一次方程式を行基本変形を使って解く
の固有値を個求める
次元対角行列を解いて個の固有値を求める
の固有値から正規化した固有ベクトルを求め、を転置させて完成させる
同次連立一次方程式を行基本変形を使って解く。
個分は、を解くことで固有ベクトルを求める。
1で確認した形と大きさに当てはまっているか確認する
特異値分解の完成!!
完成したと行列が一致するか確認する
特異値分解をするにあたって最初に気を付けるべきことが行列の形と大きさです。
固有値分解では、次元正方行列の場合にはの形と大きさは単純に次元正方行列だと考えればよかったのですが、特異値分解は少し複雑です。
特異値分解の行列の形と大きさの基本のイメージは以下の通りです。
が行列の行数、が行列の列数、は固有値の数です。これら3つの数値によって特異値分解の基本形は3種類に分けられます。③に関しては固有値分解と同じであり、特異値分解が固有値分解も包括しており、固有値分解の一般形であることが分かります。
また、実際にとを計算する際にはとをそれぞれ固有値分解した際の固有ベクトルを利用するという手順があるためにとは正方行列である必要があり、辻褄合わせ要員の固有ベクトルが登場します。この固有ベクトルは特異値0に対応した固有ベクトルですが、あくまで固有値計算時の辻褄合わせ要員なので0成分で形と大きさを拡張したを掛けて実質的な影響を排除します。
イメージは以下の通りで、基本形の①と②に対応してそれぞれ形が異なります。
特異値分解の行列の形と大きさについて理解できたので次から中身についてみていきましょう。
行列が特異値と左特異ベクトルと右特異ベクトルを持つとき、
ただし、
の対角行列、
U=(u_{1}u_{2}…u_{m})
の直交行列、
V^{T}=\begin{pmatrix}v_{1}\v_{2}\\vdots\v_{n}\end{pmatrix}
の直交行列の転置行列に変形することを特異値分解という。[^4]
この定義はを前提としており〔行列の形と大きさ〕における②’の形を取っています。実際、であることが多いので引用しました。0成分の部分の形と大きさはとの数字によって計算が可能です。
(左特異ベクトル)
の異なる固有値に対応する固有ベクトルを列方向に並べた直交行列
が直交行列であるために、各固有ベクトルをノルムが1の単位ベクトルに正規化する理由
は、転置用列の性質により実対称行列であり、実対称行列の性質により異なる固有値に対する固有ベクトルは直交するため、 は互いに直交しています。互いに直交しているので、ベクトルの直交性からであることが分かり、あとはであればはそれぞれ正規直行基底であり、正規直行基底の集合であるは正規直交系となる。よって、直交行列の性質から正規直交系は直交行列となります。
正規直交系であるということは、各固有ベクトルがそれぞれ正規直行基底であるということであり、つまり各固有ベクトルのノルムが1となっている必要があります。
(右特異ベクトル)
の異なる固有値に対応する固有ベクトルを列方向に並べた直交行列
特異値分解では、固有値分解と異なり固有ベクトルを単位ベクトルに正規化する必要があります。
その理由について、分かりやすく説明していきます。
まず、特異値分解の定義として左特異ベクトルと右特異ベクトルを直交行列としている理由について説明します。それは、特異値を求めるのに固有値分解の手法を応用するために都合の良い特異値・特異ベクトルの定義を導き出すためです。詳しくは、〔特異値・特異ベクトル〕の◆定義式のイメージ◆の内容を確認してください。
その上で、直交行列であるために各固有ベクトルをノルムが1となる単位ベクトルに正規化する理由を証明します。
についての証明はにそのまま当てはまるので、について証明していきます。
は、転置行列の性質により実対称行列であり、対称行列の性質により異なる固有値に対する固有ベクトルは直交するため、 は互いに直交しています。互いに直交しているので、ベクトルの直交性からであることが分かり、あとはを満たせばはそれぞれ正規直行基底であり、正規直行基底の集合であるは正規直交系となります。よって、直交行列の性質から正規直交系は直交行列になります。
が成り立つには、各固有ベクトルがそれぞれ正規直行基底である必要があり、そのためには各固有ベクトルのノルムが1となる単位ベクトルに正規化すればよいです。
よって、が直交行列であるために各固有ベクトルをノルムが1の単位ベクトルに正規化します。
理由が証明できました。次の項では実際に単位ベクトルに正規化する方法を説明します。
単位ベクトルは、ベクトルのノルムが1となればよいので、以下の様に計算できる。
の1つの固有ベクトル
のノルムは通常
ですが、その解をその解で割ることで
となり、
で計算できる。つまり、固有値ベクトルの単位ベクトルは
となります。これだと一般化され過ぎて良く分からないので、
だとしたときの単位ベクトルを求めます。
以上により、
と求まります。
以上が単位ベクトルの求め方です。
次章では、さらに特異値・特異ベクトルとは何なのか深堀りしていきます。
任意の零行列ではない行列に対して、
(ただし、、、はともに零ベクトルではない)
を満たすような正の数を特異値、次元ベクトルを左特異ベクトル、 次元ベクトルを右特異ベクトルと呼びます。 [^5]
特異値・特異ベクトルの定義式が
である理由は、特異値分解の定義から導き出すことができます。順を追って図示しながら説明します。
まず、特異値分解の定義から
に変形することができます。そして、とが直交行列であることから
であります。
この性質(b)によって式(a)の両辺に右側からを掛けると、
となり、特異値・特異ベクトルの定義式の1行目が求まりました。
に関して特異値分解の定義から式(a)の様に
変形することができます。その上で直交行列の性質によって、(b)の両辺に右側からを掛けると、
となり、特異値・特異ベクトルの定義式の2行目が求まりました。
ここで、実例を用いて式(a)に関して更に理解を深めましょう。
取り扱う行列は
です。この行列を特異値分解して(a)の様に変形し、左辺第一項のみを取り出した
を計算すると
となります。図示してみると以下の通りになります。
この式(d)の両辺に を掛けると
であり、左辺を計算すると
となり、右辺を計算すると
となります。つまり、
になります。これで更に特異値・特異ベクトルの定義式の理解が深まりました。
定義式を変形すると特異値と固有値の関係が見えてきて、固有値分解の手法を使って計算可能であることが分かります。それでは説明していきます。
まず、定義式の一行目の両辺にを右から、定義式の二行目の両辺にを左から掛けます。
すると定義式は以下の通りに変化します。
簡潔にはこうです。
この形、何かに似ていると思いませんか?
そうです、固有値・固有ベクトルの定義
です。つまり、
だということです。特異値がの固有値の非負の平方根なのは、この式から導かれたものだったのです。これにより、特異値分解だけの複雑な計算方法を覚えることなく、慣れ親しんだ固有値分解の手法をそのまま使ってもよいことになるのです。
ここで、もう一つのアプローチ方法を示したいと思います。人によってはこちらの方が分かりやすいかもしれません。それでは説明していきます。
まず、固有値分解の定義と転置行列の性質から、
が得られます。そうすると、は
で表せ、直交行列の性質からなので、
と式変形でき、
であることが分かります。
次に、は
で表せ、直交行列の性質からなので、
と式変形でき、
であることが分かります。
つまり、
です。結果的に、特異値・特異ベクトルの定義式から導き出した
と同義ですが、行列の形と大きさが簡単に求められるのでこちらの方が便利かもしれないです。
これまで学んできたことを使って実際に計算してみましょう。
今回取り扱う行列はの以下の行列です。
手順を確認しながら進めていきましょう。
である行列をに分解する際の各行列の形と大きさを確認する
:固有値が重解でない限りなので、形と大きさは②’を想定して
:固有値が重解でない限りなので、形と大きさは②’を想定して
:固有値が重解でない限りなので、形と大きさは②’を想定して
転置行列を求める
の固有値を個求める
まずは実対称行列を求めます。
次に、固有方程式にを代入してについて解きます。
サラスの公式を使い行列式を解くと
となり、よって固有値はです。
この後、各固有値を使ってそれぞれの固有ベクトルを求めるためと置きます。
の固有値の非負の平方根を大きい順に並べてを完成させる
まず、〔特異値分解とは〕の◆定義◆より、今回の例では
であることが分かります。
そして、◆固有値分解の定義式から求める特異値と固有値の関係◆より、
なので、の固有値を
とすると、
と表せて
となります。
この結果から固有値の非負の平方根 を大きい順に並べて
が完成します。
の固有値から正規化した固有ベクトルを求め、を完成させる
同次連立一次方程式
の自明でない解を求めます。
まず、の場合について計算します。
ここではを一つ目の固有ベクトルとしてと表記し、 とします。
ここでにを代入すると
が求まり、
なので
となります。係数行列を行基本変形によって階段行列に変形し
が求まるので、を掛けて
となるので、とについて一次方程式を解くと
であり、解は自明ではない解であるため任意定数を用いて
です。つまり、
です。
特異値分解では、を直交行列にするために固有ベクトルを大きさ1の単位ベクトルに直してあげる必要がありますので、ノルムを用いて
以上により
と求まりました。
では、次にの場合について計算します。
の場合と同様の計算を行った結果、
と求まりました。
よって、
が完成します。
の固有値を個求める
が次元正方行列を満たすために固有ベクトルが個ある必要があるため、 の固有値も個必要です。今回の例では固有値が3つ必要です。しかし、手順3で求めた固有値は2つです。ですので、残り1つの固有値を何かで補う必要があります。そこで登場するのが固有値 です。
を代入してみると
になります。何故固有値を用いるのかは、◆固有値分解の定義式から求める特異値と固有値の関係◆より、
を使って説明できます。
の固有値にを加えたの固有値を
とすると、
と表せて
となります。よって、固有値となります。
の固有値から正規化した固有ベクトルを求め、を転置させて完成させる
と同じく同次連立一次方程式
の自明でない解を求め…なくてもを計算できる方法があるのでご紹介します。
それは、
です。
これは、であることから、定義式
を変形して
としたものである。これで、で求めた固有値と固有ベクトルを使っての固有ベクトルを個まで求めることができます。
実際に計算してみると、は
であり、は