HELLO CYBERNETICS

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

機械学習のための集合・写像

 

 

follow us in feedly

f:id:s0sem0y:20170629203433j:plain

Tom_Brown 6117

 

集合

集合の基本

 

集合とは、何らかの要素を集めた塊のようなものです。例えば、食べ物という集合の中には米やパン、うどんなどの要素が入ります。

 

通常は集合を大文字で、その要素を小文字で表現することが多いです。

 

a \in A

 

などと表現した場合、要素aが集合Aに属していることを表します。

 

うどん \in 食べ物

 

のようなイメージを持てばいいでしょう。

具体的に集合Aの要素を書き下したい場合は、以下のような表記になります。

 

A = \{ a_1,a_2,a_3 \}

 

ところで、うどんは食べ物の中でも「麺類」という集合にも属していると考えられます。麺類には他にそばやラーメンがありますが、麺類という集合を考えた時には

 

麺類 \subset 食べ物

 

のように表記して、集合が他の集合に含まれていることを表現することも出来ます。

例えば、

 

食べ物 = \{肉、魚、米、ラーメン、うどん、そば、パン  \}

 

麺類=\{ラーメン、うどん、そば \}

 

などとなっている場合には、食べ物の要素の中に麺類の要素も完全に含まれているようなケースが、これに該当します。

 

また、

 

小麦製品 = \{うどん、パン\}

 

麺類=\{ラーメン、うどん、そば\}

 

などとなっている場合に、これらに共通する要素を表す場合は

 

小麦 \cap 麺類 =\{うどん\}

 

両方の集合の要素を全て網羅する場合は

 

小麦 \cup 麺類 =\{ うどん、パン、ラーメン、そば \}

 

などの記号を使います。

 

集合の記号まとめ

 

a \in A aは集合Aの要素である。

 

B \subset A 集合Bは集合Aに含まれる(真部分集合である)。

 

B \subseteq A 集合Bは集合Aに含まれる(部分集合である)。

 

A \cup B 集合Aと集合Bの和集合(全ての要素を網羅した集合)。

 

A \cap B 集合Aと集合Bの積集合(共通する要素を選出した集合)。

 

A = B 集合Aと集合Bは等しい(要素が完全に同じ)。

 

A - B 集合Aに含まれており、集合Bに含まれていない要素の集合(差集合)。

 

他にもありますが、それほどたくさん覚えておく必要はないでしょう。

 

写像

写像の概念

写像は名前が仰々しいですが、集合から集合への変換のことを言います。写像fが集合Aから集合Bへ変換する役割を担っている場合

 

f:A \rightarrow B

 

などと表現します。

 

例えば、集合A = \{太郎,次郎,三郎,健太\}に対して、彼らの年齢を要素にした集合Bへの写像fを考えましょう。具体的に各要素に写像fを使ってみると

 

f:太郎 \mapsto 25

f:次郎 \mapsto 23

f:三郎 \mapsto 21

f:健太 \mapsto 23

 

などと年齢が表示されるイメージです。(写像を要素に対して具体的に使う場合は、棒付き矢印\mapstoが用いられます)

 

これをf:A→Bの形で表記するならば

 

f:\{太郎,次郎,三郎,健太\}→\{21,23,25\}

 

となります。集合から集合の写像を考えた時、基本的に要素の順番というのは順不同となります。左から右へ対応する要素が過不足無く含まれていれば問題ありません。

 

f:id:s0sem0y:20170629171710p:plain

 

 

実際にAの要素が、具体的にBのどの要素に写像されるのかを表記するためにf:太郎 \mapsto 25などという表記があると考えればいいでしょう。集合と写像は非常に抽象的な概念で、ほとんど具体的な制限が掛かっていない論理体系です。従って、近代的な数学の基礎となっています。

 

 

逆写像

f:A\rightarrow Bという写像を考えましたが、これとは逆にg: B : \rightarrow Aという写像を作って、fgを両方作用させることで自分自身に戻すことができるでしょうか(そのようなgは存在するでしょうか)。

実をいうとこれはケースバイケースということになってきます。

 

先ほど見た名前から年齢への写像に関しては、逆写像はありません。

 

説明しませんでしたが、写像の定義は

 

集合Aの各要素に対して、それぞれ集合Bの要素をただ1つ指定する規則fを写像f:A\rightarrow Bと表記する

 

というものです。

 

f:太郎 \mapsto 25

f:次郎 \mapsto 23

f:三郎 \mapsto 21

f:健太 \mapsto 23

 

の場合は、下記の図のように写像が行われることになります。

 

f:id:s0sem0y:20170629172752p:plain

 

被りがありますが、「次郎」と言われたらfは「23」と要素をただ1つ指定できますし、「健太」と言われても「23」とただ1つの要素を指定できます。ですからこれは問題ありません。

 

すなわち、Aの要素を1つ考えたら、Bのどの要素に移すかが直ちに決まらなければならないのです。

 

これがBの要素からAの要素に移ろうと思うと、ただ1つに直ちに決まらなくなります。図を見れば明らかでしょう。

 

f:id:s0sem0y:20170629173205p:plain

 

Bの要素である「23」を指定した場合に、Aの要素をただ1つ指定することは出来ません。「次郎」と「健太」が候補に挙がってしまいます。従って、

 

g:B \rightarrow A

 

なる写像は存在しないのです。

 

ではどんなときに逆写像を考えることができるのでしょうか。

非常に単純な話です。集合A,Bの要素の数が同じであって、要素が1対1に対応している時だけです。どちらか一方の要素が少ない場合は、少ない方から多い方へ線を結ぶときに必ず選択肢が1つに定まらなくなります。

 

今回の場合、集合Aから健太を除いた場合を考えれば、上手く逆写像が得られることになります。

 

 

ここまで説明すると分かるかもしれませんが、「写像」というのは「集合」が準備されて初めて議論できるものです。すなわち、「集合の上に写像が定義される」のです。単に「写像」だけがそこにポンと存在することはありません。

 

 

全単射・単射・全射

  

単射

 

単射f:A \rightarrow Bとは以下の図のような写像です。

 

f:id:s0sem0y:20170629183338p:plain

 

Aの要素を1つ指定すると、Bの要素が1つに定まります(写像の定義)。しかも、Bの要素が決まった時に、被りが一切ありません。単射とは写像先の集合Bで被りが無いことを意味しています。しかし、Bの要素は、選ばれないこともあります。Aから写像されてきた結果、Bにはあまり物の要素が出てきてしまうのです。

 

結果的に逆写像は存在しません。なぜなら、Bの要素を選んだ時にAの要素に映ることが出来ない場合があるためです。(今回の場合b_4が問題となる)

 

全射

 

全射f:A \rightarrow Bとは以下の図のような写像です。

f:id:s0sem0y:20170629183714p:plain

 

Aの要素を1つ指定すると、Bの要素が1つ決まります(写像の定義)。しかし、被りもあります。これは先程、人名から年齢への写像を見た例と同じです。全射とは写像先の集合Bの要素が全て選ばれる機会を持っていることを表しています。

 

先ほど見たように逆写像は存在しません。b_2からAの要素を1つ決めることが出来ないからです。

 

全単射

 

全単射f:A \rightarrow Bとは以下の図のような写像です。

 

 

f:id:s0sem0y:20170629183015p:plain

 

 

Aの要素を1つ指定するとBの要素がただ1つに定まり、かつBの要素全てに選ば得れる機会が存在します。このケースではABの要素の数が同じで、線が一対一に対応しているため、必ず逆写像も存在します(矢印を反転するだけ)。

 

そして逆写像が存在するのは、全単射に限ります。

 

全射でも単射でもない写像

 

全射でも単射でも無い写像も存在します。

 

f:id:s0sem0y:20170629184450p:plain

 

Aの要素を指定すると、Bのどの要素に行けばいいかが決まります。しかし被りもある上に、余り物も存在します。従って全射でも単射でもありませんが、写像としての資格は持っています。

 

このように見ていくと集合A,Bの与え方で写像が定義されることがハッキリと理解できるでしょう。

 

 

写像の具体例:確率

確率変数

「確率変数」という名前でありながら、これも写像の例だと捉えることが出来ます。

 

コインを投げた場合、集合A = \{表,裏  \}の要素のいずれかが発生します。この際に、数値でわかりやすくしておくために、集合B = \{0,1\}というものを準備しておいて、写像をして考えてしまうことが多いのではないでしょうか。

 

X:A \rightarrow B

 

つまり確率変数は具体的な現実の事象を、予め準備しておいた数値の集合へ写像してくれるものだと考えることができます。しかし、大抵の場合は一度確率変数Xに対して数値への写像を行ったあとは、ずっと写像先での集合Bを使って話をすることのほうが多いので、意識されることはほとんどありません。

 

具体的には、X自体を写像先の集合Bと同一視してしまい、

 

X = \{0,1\} (背後には裏、表という事象から写像されたことが隠されている)

 

として、その要素を小文字xで書くことが多いでしょう。(例えばサイコロの目のような直接数字であるようなケースは写像を必要としないこともあるので、実現値を要素に持つ集合Xを最初から考えてしまったほうが便利なケースも多い)

 

 

確率密度関数

ガウス分布

 

上記の話の続きとして、確率密度関数について述べます。確率密度関数pも列記とした写像です。「関数」は全て写像だと考えていいでしょう(というより分野が異なるだけで定義は同じ)。確率密度関数と言えば、最も馴染み深いのは

 

\displaystyle p(x) = \frac{1}{\sqrt{2 \pi \sigma ^2}} \exp \left( -\frac{(x-\mu)^2}{2\sigma^2} \right)

 

このガウス分布かもしれません。xの値を入力すると、値域[0,1]の値を返してきます。この帰ってきた値を、xが発生する確率だと捉えるわけです。もちろんxというのは確率変数Xの要素の1つであり、そしてこのケースではX = [-\infty , \infty]という集合を扱っていることになります。(\mu,\sigmaはガウス分布のパラメータです)

 

ベルヌーイ分布 

 

コイン投げで使うベルヌーイ分布の場合は、

 

\displaystyle p(x) = \alpha^x (1-\alpha)^{1-x}

 

集合X=\{0,1\}から集合{Prob}=[0,1]への写像だと考えることになります(\alphaはベルヌーイ分布のパラメータ)。

 

両分布の写像としての性質

 

両方の確率分布(写像)に共通して言えることですが、これは単射でも全射でもない可能性があります。

まず、集合[0,1]が写像先であり、ガウス分布に関してはProb = 1ということは起こりえません。ベルヌーイ分布も、\alpha=1ならばありえますが、そのようなものを考えるメリットは1つも無いため、全射はありえないということになります。

 

更にベルヌーイ分布に関して\alpha=0.5である場合には、p:0 \mapsto 0.5p:1 \mapsto 0.5でもあるため、単射ではなくなります。ガウス分布の場合は、対称性から、同じ確率が出力される値が必ず存在するので単射はありえません。

 

従って、ここでも写像先の集合Prob のとり方で写像としての性質が変わってきます。

 

ベルヌーイ分布の場合、パラメータ\alphaが既知であれば、Prob = \{\alpha,1-\alpha \}とでき、かつ\alpha \neq 0.5であれば全単射になります。(確率を指定すれば、確率変数の集合の要素を指定できる)

 

 

写像の具体例:線形代数

線形代数の基本

 

線形代数では写像という言葉は頻出です。行列と言うのは、端的に述べれば空間から空間への写像(の一種)であるからです。行列という写像は、空間上の点を要素に持つ集合の上に定義されています。

 

空間上の点を要素にする集合というのは、言い換えればベクトルを要素に持つ集合ということです。2次元空間では(0,0),(0,1),(1,0)などが要素になります(実際には書き下せるものではなく、要素が無限に存在しますが)。

 

一般にn次元空間のことを\mathcal{R}^nと表します。これをn次元空間の点(あるいはベクトル)を要素に持つ集合と見るわけです。例えば以下のような表記を見たことがあるのではないでしょうか。

 

{\bf x} \in \mathcal{R}^3

 

これは、ベクトル\bf xは3次元であるということを意味しますが、細かく言えば「3次元空間という集合の要素である」ということです。

 

行列と写像

行列による写像

mn列の行列Aを考えましょう(これもA \in \mathcal{R}^{m \times n}などと表記したりする)。

 

この行列Aは(基本的には)A: \mathcal{R}^n \rightarrow \mathcal{R}^mという写像になります。すなわちn次元空間からm次元空間への写像になっています。具体的に要素であるベクトルを意識すれば、ベクトルの次元がn \rightarrow mとなることを意味します。(行列を左から掛ける場合の話)

 

例えばA: \mathcal{R}^3 \rightarrow \mathcal{R}^2を考えましょう。するとこの写像は以下の図のように表現することが出来ます。

 

f:id:s0sem0y:20170629192532p:plain

 

3次元空間上の点はそれぞれ2次元の空間上に移されます。

 

逆写像と逆行列

 

逆行列は正方行列(つまり同じ次元から同じ次元への変換)にしか存在しません。それはなぜでしょうか。非常に単純です。逆行列というのは「逆写像」のことであり、次元の異なる空間上では要素の数が異なるからです。

 

要素の数が異なるというだけで逆写像は作れなくなりました。

 

3次元空間を(x_1,x_2,x_3)とするならば、2次元空間は(y_1,y_2,0)みたいなものです。3番目の要素がごっそり抜けているわけです。言わば2次元空間は3次元空間の部分集合なわけです。従って、3次元空間から2次元空間への写像は、恐らく被りを持つので単射にはなりません(しかし全射にはなるでしょう)。この時点で全単射ではないので当然、逆写像を作ることもできなくなります。

 

 

 

擬似逆行列

 

全く同じ集合に戻すような逆写像が見つからなくても、そこそこ似た集合に戻すことならばできるかもしれません。このとき「似ている」ということを測るためにはそのための概念が必要です。通常はユークリッド距離が用いられます。

 

要素\bf xAで写像し\bf yとしたときに、それっぽいB\bf yを写像して、戻ってきた要素\bf x'が、元々の要素\bf xとなるべく近くなるようにBを構成しようと言うことです。

 

赤の矢印で写像した後、緑や黄色の矢印で写像してみて、上手く元の位置に戻ってくる写像を採用するということになります(最小二乗法の形を取る。ただしこれは本当はただの結果論である)。この方法で得られる行列を擬似逆行列と呼び、正方行列以外の行列にも定義することができるようになります。

 

 

f:id:s0sem0y:20170629194242p:plain

 

 

擬似逆行列は機械学習でも登場シーンの多い重要な概念です。

 

 

最後に

機械学習での写像

突き詰めると、機械学習(特に教師あり学習)とは訓練データ集合X = \{\bf x_1,x_2,...,x_N \}に対してラベルデータ集合T = \{\bf t_1, t_2, ...,t_N \}があった場合に、上手いことf:X \rightarrow Tという写像を構築することに相当します。

  

そこで擬似的にf:X \rightarrow Yという写像を適当に作っておいて、YTがなるべく近づくようにfを調整していくのが学習というわけです。

 

確率的なモデルの場合、直接ラベル集合への写像を獲得するのではなく、そのラベルで確率を出力するように写像を構築します(すなわち確率密度関数の形で写像を仮定しておく)。そうしておいて、実際にラベルを出力するのは確率を見た後に、確率最大のラベルを選んだり、あるいはどのラベルの確率も低かった場合は保留するなどの追加措置を取ります。

 

いずれにしても、機械学習は、写像fを仮定し、パラメータ\bf \thetaを準備して、いろいろ調整していくというものです。

 

 

学習における損失関数

損失関数の意義

 

学習においては、

 

訓練データ集合X = \{\bf x_1,x_2,...,x_N \}

 

ラベルデータ集合T = \{\bf t_1, t_2, ...,t_N \}

 

擬似的な写像f:X \rightarrow Y

 

を準備しておいて、Yと[texT]が近づくように写像fを調整しなければなりません。その際、近づいているか否かを測るために用いられるのが損失関数です。損失関数は、YTの距離を測る役割をしており、これによりfを上手く調整する手がかりを得られます。

 

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

 

 

確率分布に対する損失関数

 

機械学習ではTYの距離を近づけてしまうことで、写像を上手く調整するというのが基本的なスタンスです。特に分類問題に置いては、識別関数と呼ばれる直接ラベルを出力するタイプの写像を考える場合に最も効果的です。

 

一方で写像として確率分布を考え、出力はあくまで確率であって、実際の分類はもう一段階踏む(すなわちラベルTと直接距離を測れない)場合は、少し工夫が必要になります。

 

今調整しようとしているのはあくまで写像fの方であって、出力はYはその写像の調整の賜物です。そしてYが直接Tと比較するのが難しいという状況において、上手くfを調整できる損失関数を与えるのはそれなりに複雑な話です。

 

考えなおせば上手いfを見つけるというのは、写像fの集合F = \{f_1,f_2,...\}を考え、このFの中から最も使えるfを選びたいというふうに捉えることもできます。そうであれば写像f_iと真の写像gとの距離を上手く測ることが重要になるわけです。

 

ここでは写像とは確率分布のことです。ならば、真の確率分布と適当な確率分布の類似度を測り、これを損失関数にすれば良いということになります。この手の議論は情報幾何学で行われています。

 

s0sem0y.hatenablog.com

 

 

 

s0sem0y.hatenablog.com

 

 

あるいは確率分布の最尤推定によるフィッティング考えると、自然と損失関数に相当する(負の対数)尤度が得られます。

 

 

機械学習の定式化

機械学習の定式化

入力データ\bf xの集合をXとする。

ラベルデータ\bf tの集合をTとする。

入力データとラベルデータの組\bf (x, t)の集合を(X \times T)とする。

入力データからラベルデータへの写像をf:X \rightarrow Tとする。

写像fの集合をFとする。

f({\bf x})\bf tの剥離を損失関数L(f({\bf x}),{\bf t})とする。

学習アルゴリズムをML:(X \times T) \rightarrow Fとする。

 

損失関数Lを最小化するようなfを、(X \times T)を引数にFの中から見つけ出すのが学習アルゴリズムMLであるというわけです。

 

実際の動き

実際には、集合Xから集合Tへの適当な写像fを初期値として仮定します。この際、当然のことながら

 

f:X \rightarrow T

 

となってはいるものの、実際には入力データ\bf xから正しいラベル\bf tに全ての要素が写ってくれるとは限りません(単にランダムに{\bf t} \in Tが選ばれるに過ぎない)。

 

具体的な入力データ\bf xの写像f({\bf x}) \in Tと、それに対応する\bf tとの剥離を損失関数L(f({\bf x}),{\bf t}) \in R_{\geq 0}で定義し、(X \times T)からLを最小とする写像fFから見つけるのが機械学習アルゴリズムMLです。

 

fは具体的にはf({\bf w,x})の形をしており、\bf wを調整することでfを変えていきます。従って、写像fは実際には\bf wの集合Wからどのような要素を取るかによって決定されます。

 

機械学習の重要なポイント

1.写像fの集合Fをどのように準備するか

これが例えばサポートベクターマシンであったりニューラルネットワークであったりしてきます。基本的にニューラルネットワークもサポートベクターマシンもFを非常に大きく取ります。ニューラルネットワークはユニットを増加させることによって、サポートベクターマシンはカーネル法を用いることによってこれを実現します。

 

2.損失関数Lをどうするか

これはFから良いfを探す際の指針となります。回帰、分類のいずれも複数の損失関数が提案されています。損失関数をどのように設計するかによって、意外と学習の結果は変わるものです。

 

3.学習アルゴリズムMLをどうするか

ニューラルネットワークの場合は勾配法が用いられ、勾配の計算には誤差逆伝搬法(後方自動微分)が用いられます。サポートベクターマシンは損失関数が凸関数になるため、速さを追求したアルゴリズムが求められます。

ニューラルネットワークでは損失関数が凸でないため、勾配法で得られた勾配をあれこれ加工して、上手く最適解に素早く落ち着くような工夫がなされています。

 

4.データ集合(X \times T)をどうやって準備するか

学習アルゴリズムMLML(X \times T) \rightarrow Fであることを忘れてはなりません。すなわち学習データ集合の準備次第で、得られるfが変わるということになるのです。そして実用上ここが非常に重要なポイントになるということは、強調しすぎるということはありません。

 

 

ニューラルネットにおける発展的問題点

学習アルゴリズムは多くの場合は(X \times Y)からWへの写像です。そしてWのどの要素に落ち着くかで、Fからどのfが選ばれるか具体的に決まってきます。

 

ここで嫌な問題が浮上します。実は、(特にニューラルネットでは)WFは一対一に対応しません。これが何を意味するのかというと、Wから\bf wを選ぶこととFからfを選ぶことが上手く対応しているとは言えなくなるのです(具体的には、異なる\bf w_1w_2が全く同じfを示す場合がある)。

 

このような被りは、ユニットの数が増えるほど顕著です。しかし、これはさほど問題ではありません。パラメータをベクトルと見た空間上で見た際には、この被りは対称性を有しており、明らかであるためです。

 

もう1つの問題は(恐らく)多層化することから現れます。対称性とは縁が遠く、パラメータ空間上で連続的にfが一切変化しない領域が生まれます。この領域にパラメータが差し掛かった時点で学習は停滞します(勾配法では勾配が0になると学習が止まる。fが変化しないということは損失関数Lも変化しないということである)。

 

これを解決するためにモーメンタム法やAdamなどが考案され、そこそこ成果を出しているが、実際には本質的な解決であるとは言い難いです。

 

本当に獲得したいfから見れば、\bf wに不要な被りがあるわけで、この被っている部分は1つの要素として見てしまうことができれば話は早いです。つまり、Wの中には不要な\bf wが含まれており、本質的にはW' \subset Wとなる集合(部分集合、あるいは部分空間)を考えれば良いということになります。

 

空間上で、このような不要な\bf wは直線的に存在するわけではありません。この被りを1つの要素と見た場合には、部分空間は線形部分空間ではなくなります。この手の議論は情報幾何学の分野になってきます。

 

数学関連記事

 

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com