HELLO CYBERNETICS

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

点と点の距離を測る方法を凸関数から見る

 

 

follow us in feedly

 

はじめに

今回は機械学習でよく表れる距離の最小化(あるいはKLダイバージェンスなどの最小化)について少し詳しく調べて書いてみます。特にKLダイバージェンスは確率分布の隔たり具合(あるいは離れ具合)を測るために用いられると、何となく理解している方は私を含め沢山いらっしゃると思います。

 

なぜにKLダイバージェンスが確率分布を測るのに適しているのかは、ザッと概要的ではありますが以下の記事で触れました。

 

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

 

今回はもうちょっと数学的に詳しくこの話を見ていきたいと思います。

 

 

注意事項

この手の話を真面目に論じるには統計多様体を数学的に扱うために微分幾何学が必要だそうですが、私自身数学の高度な教育は受けていませんし、腰を据えてしっかり取り組んだ経験もありません。

 

従って、この記事には何か誤解が含まれている可能性も十分にあります。仮に詳しい方からご意見や指摘をいただけるのなら幸いだなという気持ちです。

 

点と点の離れ具合を測る

ユークリッド距離は極めて限定的

点と点の離れ具合を測るのに最も馴染み深いのは以下のユークリッド距離ではないでしょうか。

 

r = \sqrt {x_1^2 + x_2^2}

 

何となく二点間の距離を測ってくださいと言われたら、すぐにコレが思い浮かびます。しかし、日常の中でもこの測り方はおかしいのではないかと思える場面に出くわします。

 

例えば、「会社からの距離が20km以内に無い場合は、通勤のための特別手当を出します」という文言があったとしましょう(以外にもこの距離での区切り方はよくみかける)。これを見れば、20km以内にあるか否かは極めて重要な問題でしょう。

 

19kmだった人は泣き、21kmだった人は喜ぶことでしょう。どこかで区切りを設けることは必要です(もちろん線形に支給額を決めることもあるかもしれないが)。しかし仮に以下のような人が居たとしたらとっても気の毒に感じます。

 

会社からの直線距離は10km以内だが、道中に大きな山と川があり、これらを迂回してくるために40kmもの道のりを通ってこなければならない場合です。直線距離で測るのはおかしい。できれば実距離で判断してほしいと思うはずです。

 

このような問題は距離を測る際に、どのような線をつなぎ合わせていったかに由来します。今回の場合は、実際に人間が通ることのできる経路に沿った距離が重要だということになります。

 

f:id:s0sem0y:20180225002605p:plain

 

測るための座標

ここで点と点の距離を測るということをもう少し真面目に考えてみましょう。曲がりくねった道の距離を測るためには、それ相応に計算が必要になります。2点が決まったとて、直線距離のようにすぐに求まりそうにもありません。

 

しかしここで曲がりくねった道のごく一部をを見てみましょう。

 

f:id:s0sem0y:20180225003334p:plain

 

ある特定の部分だけを見てみるとほとんど直線です。曲がりくねった道も局所的に見れば直線的に移動していると考えて差し支えなさそうです。そうであれば、局所的に直線だと考えて後で繋ぎあわせてしまっても良さそうです。

 

ユークリッド距離とは、点と点が常にまっすぐ繋がっているものと想定した場合に妥当な測り方と言えそうです。

 

先ほどのように実際の経路がグネグネに曲がっているとすれば、そのような経路を反映した測り方が必要になります。

 

 

普通、地図では東西南北が示されており、特に北と東さえ把握していればどの方向にどれだけ進んだかが認識できます。これは言わば北と東を座標に使っているということです。直線距離というのも北に何km、東に何km進んだかが分かればすぐに計算できます。

 

もしもここで距離の単位として「km」ではなく「m」を使ったとしても、そのことさえ把握していれば問題ありません。一方で、座標として北と東の代わりに西と南を使ってもいいですし、北東と南東を使っても問題ないはずです、もちろんそのことさえ把握していれば。

 

 

分布と分布の離れ具合を測る

ユークリッド距離では測れない

さて、機械学習では確率分布と確率分布がどれだけ近いかを知りたい場合があります。例えばデータxが確率分布p(x)から生起しているとした場合に、学習で求めたq(x)が本物の分布にどれだけ近いかを評価したい場合などです。

 

確率分布と確率分布を測るにはどうしたら良いでしょうか、例えば正規分布なら

 

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

 

という式で表されるわけですが、その形状は\mu,\sigmaによって決定づけられます。そのため、大抵は\mu,\sigmaをパラメータに持つ正規分布を\cal N(\mu, \sigma^2)などと表します。

 

仮に2つの正規分布\cal N(\mu_1, \sigma_1^2)\cal N(\mu_2, \sigma_2^2)の離れ具合を測る関数D[N(\mu_1, \sigma_1^2),N(\mu_2, \sigma_2^2)]があるとしましょう。もしも\mu_1=\mu_2かつ\sigma_1=\sigma_2の場合には、全く同じ正規分布なわけですから、

 

D[N(\mu_1, \sigma_1^2),N(\mu_2, \sigma_2^2)]=0

 

となっていて然るべきです。

もしも(\mu, \sigma)で表される2次元空間に、(\mu_1, \sigma_1)(\mu_2, \sigma_2)をプロットして、

 

d = \sqrt{(\mu_1-\mu_2)^2 + (\sigma_1-\sigma_2)^2}

 

とユークリッド距離を図ってみることにしたらどうでしょうか。確かにパラメータが完全に一致していれば、値は0となります。しかし、これらのパラメータをプロットした点が次第に離れていった時、確率分布の離れ具合を上手く表現できると言えるでしょうか。

 

この測り方だと、\muのずれ具合と\sigmaのずれ具合は対等に扱われることになります。しかし、正規分布の平均と分散は明らかに別の意味を持っており、対等に評価して良いものだとは到底思えません。

 

これはパラメータをプロットできるような空間に対して、如何にして真っ当な計量を与えるかという問題になります。

 

 

KLダイバージェンス

KLダイバージェンスとは、確率分布と確率分布の離れ具合を真っ当に評価できる計量です。確率分布p(x)からq(x)へのKLダイバージェンスは以下で表されます。

 

\displaystyle {\cal KL} [p:q ] = \int p(x)\log \frac{p(x)}{q(x)}dx

 

今「p(x)からq(x)への」という表現をしました。これは確率分布を入れ替えた「q(x)からp(x)へのKLダイバージェンスと一致しないからです。方向性を考えなければいけません。ユークリッド距離の場合は点と点を入れ替えても距離は同じでした。KLダイバージェンスではそうはいかないようです。

 

仮にp(x) =\cal N(\mu_1, \sigma_1^2)q(x) =\cal N(\mu_2, \sigma_2^2)としてみましょう。代入すれば以下のようになります。

 

\displaystyle {\cal KL} [p:q ] = \int \frac{1}{\sqrt{2\pi \sigma^2}} \exp\left\{- \frac{(x-\mu_1)^2}{2\sigma_1^2}\right\} \log \frac{\frac{1}{\sqrt{2\pi \sigma^2}} \exp\left\{- \frac{(x-\mu_1)^2}{2\sigma_1^2}\right\}}{\frac{1}{\sqrt{2\pi \sigma^2}} \exp\left\{- \frac{(x-\mu_2)^2}{2\sigma_2^2}\right\}}dx

 

今回は正規分布を代入しましたが、正規分布とポアソン分布などをそれぞれ代入しても構いません。異なる種類の確率分布同士を比較することもできます。

 

ユークリッド距離の時に比べたらえらく複雑に見えるのではないのでしょうか。こんなものが本当に上手い計量を与えると言えるのでしょうか(言えるのですが、空間に上手い計量を与えることは難しい)。

 

 

空間に計量を与える

二次関数を考えてユークリッド距離を導く

計量を与えるということは、何かしらの隔たり具合を評価するということです。まず、形式的にユークリッド距離というものがどのように導かれ、どのように妥当だと言えるのかを見ることにしましょう。

 

今、f(\theta)\thetaの二次関数だとしましょう。例えば以下のような形をしているとします。

 

f(\theta) = (\theta - 2)^2 + 3

 

f:id:s0sem0y:20180306103148p:plain



 

仮に\theta=3の点ではf(3)=4となっています。\theta=4の場所では\theta=7となっています。さて、ここで\theta=3\theta=4という点の隔たり具合はどれくらいだと評価すると良いでしょうか。

 

f(3)f(4)の差が3なので、隔たりは3と評価するのが良いのでしょうか?実はそうではありません。天下り的ですが、実は以下のように評価することができます。

 

\theta=3の点では、接線が以下の式で表されます。

 

y = 2\theta - 2

 

(接線の方程式は y = f'(3)(\theta - 3) + f(3)で求まります)

 

f:id:s0sem0y:20180306104344p:plain



 

もしも\theta=3を基準に、\thetaを右にずらして行った場合、順調に(線形に)値が増加すれば、\theta=46という値を取るはずでした。

 

しかし今回与えたf(\theta)=(\theta - 2)^2 + 3のもとでは、\theta=47という値になっています。そこで、\thetaの変化に対して線形に変動した時に到達するはずだった値(今回の場合6)と、現実に到達している値(今回の場合7)の差を\theta=3から見た隔たり具合として定義することにします。

 

要所を拡大すれば、以下の黒線の部分が「隔たり具合」の定義になります。

 

f:id:s0sem0y:20180306105009p:plain



 

すると、\theta=3\theta=5の隔たり具合は4となりますし、\theta=3\theta=9との隔たり具合は36になります。

 

\theta=3からの隔たり具合は二次関数から接線の値を引いて得られるわけですから、これをそのままプロットしたしてしまうことにしましょう。そのときのプロットは以下になります。3を中心にこれもまた二次関数になっており、しかもy=(\theta-3)^2という形になっています。

 

f:id:s0sem0y:20180306110042p:plain



 

ここで重要な性質が\theta=5を基準にして隔たりを測ることで見えてきます。同じように\theta=5で接線を引き、

 

f:id:s0sem0y:20180306110305p:plain



 

これに対して、青線から緑線を引く(つまり\theta=5からの隔たり具合)を見ると以下のプロットが得られます。

 

f:id:s0sem0y:20180306110413p:plain



 

隔たり具合は5を中心とした二次関数y=(\theta-5)^2の形をしているのです。どこから隔たりを測ろうとも、基準\thetaから\theta'の隔たり具合は(\theta-\theta' ^2という形式で表されるのです!

 

これは\theta = (\theta_1, \theta_2)という2次元に対してスカラーf(\theta) = \theta_1^2 + \theta_2^2という二次関数を考え、同様の議論をすることで、\theta\theta'の隔たりを

 

\displaystyle \sum_i (\theta_i - \theta_i')^2

 

と表すことができます。これはユークリッド距離の二乗になっており、今二次関数からユークリッド距離に相当する計量が導かれたのを見たのです。

 

 

そうであれば、計量を考える上で他のスカラー関数を考えて、同じように接線(あるいは接平面)を構築し、スカラー関数と接平面との差を取ってやれば異なる計量が得られるはずです。

 

 

 

一般的にスカラー関数から計量を獲得する

一般的には\thetaなるパラメータに対して、適当なスカラー関数f(\theta)を与え、基準としたい点\theta_{base}の接平面

 

\displaystyle y(\theta) = \frac{d f(\theta)}{d\theta_{base} } (\theta - \theta_{base}) + f(\theta_{base})

 

を計算し、そして隔たり具合を

 

D(\theta : \theta_{base}) = f(\theta) - y(\theta)

 

と与えれば良いことになります。より詳細には以下(代入しただけ)。

 

\displaystyle D(\theta : \theta_{base}) = f(\theta) - \left( \frac{d f(\theta)}{d\theta_{base} } (\theta - \theta_{base}) + f(\theta_{base})\right)

 

しかし、本当はスカラー関数f(\theta)は何でも良いわけではありません。凸関数であることが条件です。もしもこれが凸関数じゃない場合、例えばf(\theta)=\theta^3という単純な例を考えてみても、\theta = 1を基準にした計量が

 

 

f:id:s0sem0y:20180306112627p:plain

 

f:id:s0sem0y:20180306112636p:plain

 

とかなりへんてこりんになってしまいます。\theta=1で隔たり0なのは良いとして、\theta=-2との隔たりも0だなんてめちゃくちゃですね。こういうことにならないためには、離れれば離れるほど接平面から遠ざかるように凸関数である必要があるわけです。

 

 

KLダイバージェンス

確率分布pを引数に取る凸関数として

 

\displaystyle f(p) = \sum_i p_i\log (p_i)

 

を選べばKLダイバージェンスが導かれるようです。これはエントロピーの符号を反転させた凸関数となっています。

 

 

 

 

きっと他にもいろいろな凸関数を考えることができるでしょう。

 

KLダイバージェンスがいい感じの計量になっているということはもうちょっと先に進まないとわからないようです。点と点の距離を測るための方法では、ユークリッド距離というものがずっと身に沁みついていますが、それはほんの一部に過ぎません。

 

本当は空間に対して妥当な計量というのはもっと綿密に考えなければならないようで、その導出の一例を見ました。