"機械学習","信号解析","ディープラーニング"の勉強

HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学などをテーマに扱っていきます

線形空間から多様体の基本までを一気通貫

 

 

f:id:s0sem0y:20170712232443j:plain

 

線形空間

3次元空間上の直線

三次元空間上の点は、3次元ベクトル\bf xによって指定することができます。そこで、媒介変数tを用いて、以下のようなベクトルを考えます。

 

{\bf x} = {\bf a} + t{\bf b}

 

するとこれは、点\bf aを通り、\bf bの方向を向いた直線になります。例えばt=0\bf aの点を表し、t = 1\bf a + bの点を表します。そこで、tを好きなように動かせるとすれば、aを起点に\bf bの方向に好きなように動く点が考えられるわけです。

 

このように、直線というのは実質的には1つの媒介変数tによって表現できます。

 

3次元空間上の平面

同じような雰囲気で行けば、媒介変数tに加えてsを考えることで

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

というものを考えることができ、t=s=0\bf x=aを起点に、\bf b,c方向へt,sを調整することで移動できます。これによって、\bf xは平面上を移動できるようになります。

 

平面では実質的に2つの媒介変数t,sによって表現できるということです。

 

ただ、一応、ここで注意しておかなければならないのは、適当な係数kによって

 

{\bf b} = k{\bf c}

 

となっていてはダメだということです。なぜなら仮にこのようにおけるのであれば、

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c} = {\bf a} + tk{\bf c} + s{\bf c} ={\bf a}+ (tk+s){\bf c}

 

となってしまい、実質(tk+s)という媒介変数を使った直線になってしまうためです。結局はc方向にしか移動できなくなってしまうのです。これは要するに、\bf c, bが同じ方向を向いていてはダメだということで、成分を明示すると

 

\left( \begin{array}{c} b_1 \\ b_2 \\ b_3 \end{array} \right) = k\left( \begin{array}{c} c_1 \\ c_2 \\ c_3 \end{array} \right)

 

⇔ b_1:b_2:b_3 = c_1:c_2:c_3

 

はダメですよということになります。

 

線形代数の便利な表記 

以下のような式が成り立つとき

 

{\bf b} = k{\bf c}

 

あるいは

 

\left( \begin{array}{c} b_1 \\ b_2 \\ b_3 \end{array} \right) = k\left( \begin{array}{c} c_1 \\ c_2 \\ c_3 \end{array} \right)

 

これを\bf b,cは線形従属だと言います。逆にこれが成り立たない場合は線形独立であると言います。

 

難しそうな言葉ですが、要するに同じ方向を向いているなら線形従属で向いていないならば線形独立であるというわけです。

 

2つのベクトルが線形従属か否かを表記するための便利な記法があって、それをrankという言葉で用います。例えば、線形独立なベクトル\bf b,cに関しては

 

 rank({\bf b,c}) = 2

 

となります。

 

rankというのは、実質的に異なるとみなせるベクトル(線形独立なベクトル)が何個入っているかを表していると言えます。

 

逆に線形従属なベクトル\bf b,cはどうなるかというと

 

 rank({\bf b,c}) = 1

 

となります。\bf b,cが線形従属なら、実質的には1個しかベクトルが無いのと同じだよね!ということです。この調子で行けば

 

 rank({\bf a,b,c,d,e}) =3

 

みたいな式があったら、それは線形独立なベクトルは3つしか無いということです。残りの2つは、どれかと同じ方向を向いていて、カウントするに値しないというわけです。一旦最もシンプルな例を見ておきましょう。

 

 rank({\bf b}) = 1

 

は、線形独立なベクトルが1個と考えます。ここまでの流れを見れば当たり前に見えるかもしれません。「1個しか含まれていないのだからrank=1に決まっている!」というふうに感じるわけです。

 

実はそれは早計で、これが0になる場合もあります。つまらない例ですが、[tex:\bf b]の成分が全部0だったとしたらrank({\bf b})=0としてしまったほうが良いのです。

 

なぜなら、以下のように直線を考えたと思った場合に

 

{\bf x} = {\bf a} + t{\bf b}

 

\bf b = 0なら、\bf xは直線ではなく\bf aという点にしかならないからです。

 

rank表記を用いた平面の条件

このrankの表記を使えば、

  

rank({\bf b,c}) = 2

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

が平面を表す式になるわけです。

 

 

空間の表現

 

少し初歩的な話をします。

実は今までは暗黙のうちに(1,0,0)^T,(0,1,0)^T,(0,0,1)^Tという3つのベクトルで基底を構築してきました。これは

 

{\bf x} = \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = x_1 \left( \begin{array}{c} 1\\ 0 \\ 0 \end{array} \right) + x_2 \left( \begin{array}{c} 0 \\ 1 \\ 0  \end{array} \right) + x_3 \left( \begin{array}{c} 0\\ 0 \\ 1 \end{array} \right)

 

と表記できます。

 

基底を定めた時の、その係数を成分と呼びます(ここではx_1,x_2,x_3)。

 

基底の選び方なんて本来自由なはずです。そう考えると基底を変更すれば、本来は同じ場所を指定していたとしても、成分が変わるのはなんとなく想像がつくでしょうか。

 

例えば、東に2km、南に3kmという場所を指定するために、南東に●kmと南西に×kmという表現ができると思います。これは東西南北という基底を、45度時計回りに変更してしまったわけです。そうすることで、kmの成分の方は変更を受けています。

 

空間を定めるにはまず基底を決めてあげなければなりません。

 

先程までrankの話をしていたのは、基底となる資格を有するかどうかを調べるためだったんです。

 

だって、基底が同じ方向ばかり向いていたら意味がないですよね。基底と言うのは必ず線形独立でなければならないのです。

 

余談ですが、実は、「線形変換というのは基底を変換する」ことによって定義されます。そしてその具体的な計算は行列によって得られます。たいてい、暗黙のうちに基底は無視しておいて、基底が変更を受けたことで影響を受けた成分の方を私達は見ているわけです

 

 

部分空間

基底の話をしたところで、私達は、部分空間を記述する術を獲得しました。3次元空間上に含まれている2次元の空間(要するに平面)を取り出したければ、

  

rank({\bf b,c}) = 2

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

とすれば良いのです。このとき、\bf b,cをどのような方向に取るかで、平面の方向は変わるのがなんとなく分かるでしょうか。また、同じような平面を記述するための方法もいくつかあるはずです(例えば、\bf b,cの間の角度が違うだけで、表現できる平面は同じであるとか)。

 

更に\bf aによって原点を平行移動することができます。

 

 

f:id:s0sem0y:20170712211447p:plain

 

\bf aは原点を定め、\bf b,cが基底を構築するというわけです。

 

\bf b,cは当然線形独立でなければなりませんが、直交していなくてもいいです。線形独立でありさえすれば平面を表現できます。\bf b,cの角度が違う場合には下記の式において

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

t,sの方がうまく調整すれば良いのです(例えば東と南の基底の代わりに、南東と北北西という中途半端な基底を考えてもいいというわけ)。

 

 

結局のところ、3次元空間というのは

 

{\bf x} = x_1{\bf e_1} + x_2{\bf e_2} + x_3{\bf e_3}

 

みたいに自由に調整できる係数(成分)が3つあって、2次元空間というのは

 

{\bf y} = {\bf e'_1} + y_2{\bf e'_2} + y_3{\bf e'_3}

 

みたいに自由に調整できる係数が2つしかないわけです。

 

\bf e'_1はもともとの3次元空間から見た時には原点を移動しているにすぎなく、それ以上自由には移動できないので、結局e'_1を通る平面を表すことになるわけです。

 

これを3次元空間に対する2次元の線形部分空間と言います。n次元に対する(n-k)次元の線形部分空間を考えるのも、今なら簡単ですよね。

 

 

主成分分析

D次元データ\bf xがあったとき、線形変換\bf y = Axで上手い特徴量を取りたいというのが主成分分析の狙いなわけですが、結局これは、

 

「線形部分空間をいかにして定めることで重要な情報を取り出すのか」

 

という話になります。

 

ここでもD次元データ\bf xというのは暗黙的に基底(1,0,0,...)^T,(0,1,0,...)^T,...みたいなのがD個準備されていて、この基底を\bf e_1,e_2,...と書いておけば、データ\bf x

 

\displaystyle {\bf x} = x_1{\bf e_1} + x_2{\bf e_2} + ... =  \sum_i^D x_i {\bf e_i}

 

となっているわけです。こいつをD個より少ない数d個の別の基底(方向も変わっている)を準備して

 

\displaystyle {\bf y} = y_1{\bf e'_1} + y_2{\bf e'_2} + ... = \sum_i^d x_i {\bf e'_i}

 

としてやりたいというのが狙いになります。

 

基底の取り方を変えれば、当然、成分の表示も変わるわけで、その成分が上手いこと良い特徴になっていれば最高ということです。

 

主成分分析は有名なので、ある程度ご存知だと思われますが、主成分分析で得られる固有ベクトルが要するに新しい基底\bf e'_iで、その固有ベクトルを使って表現された係数の方を主成分y_iというわけです(まあ、だいたいここらへんの成分と基底は同じように見て、基底を主成分という場合もある)。

 

その固有ベクトルに対してやけに変動の大きな成分を取り出せば、何らかの情報を掴んでいるとみなすので、通常は、変動が大きい成分から順に第一主成分、第二主成分と名づけて取り出していき特徴量とします。

 

あとはそんな基底をどうやって獲得するんですか?って話なんですけど、それはここでは話しません。最小二乗法の拡張としても解けますし、同様ですが最尤推定としても解けます。基底を意識するならば、ブラインド信号源分離としての解法が最もビシッと来ます。

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

 

クイズ

主成分分析で得られる固有ベクトルを\bf w_1,w_2,...とした場合

 

rank({\bf w_1,w_2,...})

 

はどうなるでしょうか。考えてみてください。

 

 

 

曲がった部分空間【多様体】

一般的な空間

3次元空間上にある2次元の線形部分空間は

  

rank({\bf b,c}) = 2

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

で表されました。

 

これはベクトルで表現されているわけですから、s,tがいくら動いたところで線形空間のみしか表すことができません(基底が真っ直ぐだから!)。

 

今、この線形空間の最後の式を改めて以下のように書いてみましょう。

 

{\bf x} = {\bf x}(t,s)

 

t,sによって\bf xの位置が決まります」と書いてありますが、その中身を謎に包んでしまいました。

 

これは基底が何かも宣言していませんし、そもそも基底が真っ直ぐなのかも明記していません。まだ何も決めていないのです。

 

より一般的な空間である{\bf x} = {bf x}(t,s)で話を続けましょう。

 

曲がった空間:多様体とは

まず、線形部分空間のことを思い出してください。

 

{\bf x} = {\bf a} + t{\bf b} + s{\bf c}

 

こいつは3次元空間上に浮かんでいる平面です。

本質的には2次元です。いま基底を取り違っているために、3次元になってしまっているだけなのです。このことを忘れないためにも成分表記をしておきましょう。

 

 \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} a_1\\ a_2 \\ a_3 \end{array} \right) + t \left( \begin{array}{c} b_1 \\ b_2 \\ b_3 \end{array} \right) + s \left( \begin{array}{c} c_1\\ c_2 \\ c_3 \end{array} \right)

 

更に全く同じですが行列の表現にもしておきましょう。

 

\displaystyle \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} b_1  c_1 \\ b_2  c_2 \\ b_3  c_3 \end{array} \right) \left( \begin{array}{c} t \\ s \end{array} \right) + \left( \begin{array}{c} a_1\\ a_2 \\ a_3 \end{array} \right)

 

(\bf aは本質的には二次元平面であることと関係ない(原点を決めるだけ)なので、後ろにいってもらいました)これが二次元平面である条件はrank({\bf b,c})=2でしたから、ちょうど上の式で出てきた行列の事になります。

 

さて{\bf x} = {\bf x}(t,s)の話に入ります。これは3次元空間上に浮かんでいる曲面になっていそうです(そうであることを今から見る)。こちらも成分表示で表しておきましょう。

 

\left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} x_1(t,s)\\ x_2(t,s) \\ x_3(t,s) \end{array} \right)

 

ここで成分x_1 = x_1(t,s)に着目しましょう。もしも、ある定数x_1(t,s)の地点から、微分dt,dsだけ移動することにした時、x_1の変化量(全微分)はdx = x_1(t+dt,s+ds) - x_1(t,s)はどうなるでしょうか。

 

dx_1 = \frac{\partial x_1}{\partial t}dt + \frac{\partial x_1}{\partial s}ds

 

これは局所的に線形と見ることで、傾き×変化量で近似しているのです。しかも、それぞれのt,s方向の傾きと、その微分dt,dsを掛けて足し合わせたものになっています。

 

同じ調子で他の成分も合わせてどうなっているのかというと、

 

\displaystyle dx_1 = \frac{\partial x_1}{\partial t}dt + \frac{\partial x_1}{\partial s}ds

 

\displaystyle dx_2 = \frac{\partial x_2}{\partial t}dt + \frac{\partial x_2}{\partial s}ds

 

\displaystyle dx_3 = \frac{\partial x_3}{\partial t}dt + \frac{\partial x_3}{\partial s}ds

 

と、同じようにそれぞれ近似でき、これを行列表現にすると

 

\displaystyle \left( \begin{array}{c} dx_1\\ dx_2 \\ dx_3 \end{array} \right) = \left( \begin{array}{c} \frac{\partial x_1}{\partial t}  \frac{\partial x_1}{\partial s} \\ \frac{\partial x_2}{\partial t}  \frac{\partial x_2}{\partial s} \\ \frac{\partial x_3}{\partial t}  \frac{\partial x_3}{\partial s} \end{array} \right)  \left( \begin{array}{c} dt \\ ds \end{array} \right)

 

となります。先ほどの線形空間の式と見比べてください。

 

\displaystyle \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} b_1  c_1 \\ b_2  c_2 \\ b_3  c_3 \end{array} \right) \left( \begin{array}{c} t \\ s \end{array} \right) + \left( \begin{array}{c} a_1\\ a_2 \\ a_3 \end{array} \right)

 

\bf aは原点を表しているだけです。関係ありません。むしろ微分の式の方が原点を明示的に書いていないだけです(微分する場所自体が原点になる)。

 

本当に大事なのは、線形の時のt,sの代わりにdt,dsを考えてやることによって、線形部分空間と全く同じ表現を獲得したことです。忘れてはいけない条件があります。

 

\displaystyle rank\left( \begin{array}{c} \frac{\partial x_1}{\partial t}  \frac{\partial x_1}{\partial s} \\ \frac{\partial x_2}{\partial t}  \frac{\partial x_2}{\partial s} \\ \frac{\partial x_3}{\partial t}  \frac{\partial x_3}{\partial s} \end{array} \right) = 2

 

でなければなりません。そうすれば平面です。

 

ただしdt,dsは非常に小さいので局所的にですが。それでも、これによって微分する場所t,sを少しずつ変えれば、局所的な線形部分空間を考えられるというわけです。このランクの条件がしっかり成り立っている場合に、これを、3次元空間上の2次元多様体と言います。

 

 

多様体再考

さて、もう一度線形部分空間の式を見てみましょう。

 

線形部分空間

最終的には以下の式で表せました。

 

rank({\bf b,c}) = 2

 

\displaystyle \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} b_1  c_1 \\ b_2  c_2 \\ b_3  c_3 \end{array} \right) \left( \begin{array}{c} t \\ s \end{array} \right) + \left( \begin{array}{c} a_1\\ a_2 \\ a_3 \end{array} \right)

 

忘れてはならないのは、3次元の空間に対しては通常

 

{\bf x} = \left( \begin{array}{c} x_1\\ x_2 \\ x_3 \end{array} \right) = x_1 \left( \begin{array}{c} 1\\ 0 \\ 0 \end{array} \right) + x_2 \left( \begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right) + x_3 \left( \begin{array}{c} 0\\ 0 \\ 1 \end{array} \right)

 

と基底と成分を取るところを、b,cで基底を肩代わりし、s,tを成分とすることで本質的には2次元の線形部分空間を抽出したということです。

 

 

部分多様体

同じように眺めてみましょう。

 

\displaystyle rank\left( \begin{array}{c} \frac{\partial x_1}{\partial t}  \frac{\partial x_1}{\partial s} \\ \frac{\partial x_2}{\partial t}  \frac{\partial x_2}{\partial s} \\ \frac{\partial x_3}{\partial t}  \frac{\partial x_3}{\partial s} \end{array} \right) = 2

 

\displaystyle \left( \begin{array}{c} dx_1\\ dx_2 \\ dx_3 \end{array} \right) = \left( \begin{array}{c} \frac{\partial x_1}{\partial t}  \frac{\partial x_1}{\partial s} \\ \frac{\partial x_2}{\partial t}  \frac{\partial x_2}{\partial s} \\ \frac{\partial x_3}{\partial t}  \frac{\partial x_3}{\partial s} \end{array} \right) \left( \begin{array}{c} dt \\ ds \end{array} \right)

 

と局所的には考えられるわけです。

 

ここでは基底を\frac{\partial {\bf x}}{\partial t} , \frac{\partial {\bf x}} {\partial s}として[tes:dt,ds]を成分と扱うことで線形部分空間のように見たてるわけです。

 

ここで重要なポイントは、基底\frac{\partial {\bf x}}{\partial t} , \frac{\partial {\bf x}} {\partial s}が場所t,sに依存するという点です。線形部分空間では、いつでも同じ方向を向いた基底をとっていました。

 

局所的には線形部分空間とみなしておきながら、局所的に見る場所が変われば基底も変わるというわけです。それを少しずつ繋げていくと、大局的に見れば、曲がった基底を取っていることに相当します。

 

 

基底が消えることもある

基底\frac{\partial {\bf x}}{\partial t} , \frac{\partial {\bf x}} {\partial s}が場所t,sに依存するということは、場所によっては、基底が線形従属になる、すなわち同じ方向を向いてしまう場合も出てきます。あるいは、単純に 0 ベクトルになってしまう場所もあるかもしれません。

 

円錐の表面は部分多様体だが、先端だけは基底が消えます。ここは「特異点」であるというわけです(結局のところ微分が上手く行かない場所は特異点になる。見た目上尖っていればダメだと思えばいい)。

 

f:id:s0sem0y:20170712232443j:plain

 

 

一方で、どうみても特異点になり得ないのに、基底が消えることがあります。

 

例えば以下の球面なら、いかにも二次元の多様体っぽい雰囲気を漂わせています。しかし、これは媒介変数の取り方によって特異点が生まれてしまうのです(言い方を変えれば媒介変数の取り方を変えることで、特異点が場所を変える)。

 

例えば極座標での角度の取り方をいろいろ変えて微分をしてみるといいでしょう。

 

 

f:id:s0sem0y:20170712232720p:plain

 

 

局所的な座標を立てる多様体学習LLE

LLE(Locally Linear Embedding)は、この多様体という概念をダイレクトに使った特徴抽出手法です。

 

データ\bf xが部分多様体を構成すると考え、その基底を局所的に作ります。その基底はK最近傍によって構築され、周囲のデータ点とアフィン結合により相対的位置関係を保持します。

 

その後低次元空間へ局所的な相対的位置関係を維持したデータ点を写像することで、本質的低次元なデータを獲得することを狙います。

 

無論、そもそも何次元に落ちるのか、局所的とはどこまで細かく見るべきなのか、などは未知であるため、ある程度の試行錯誤は必要になるでしょう。詳しくは以下の記事で。

 

 

s0sem0y.hatenablog.com

 

 

数学的な基礎で躓く人

 以下の記事で、中学生の正比例から微積分や線形代数を解説しています。

 

s0sem0y.hatenablog.com