本記事は、distillのブログ記事How to Use t-SNE Effectivelyの著者の許諾を得て翻訳しました。

t-SNEは、高次元のデータを可視化する手法としては、非常に便利ですが、時々不可解な挙動をしたり、誤解を招くような可視化をすることがあります。 シンプルなデータを可視化して動作の仕組みを理解することで、t-SNEのより効果的な使い方を学ぶことができます。

t-SNEは、高次元のデータを調査するための手法として、2008年にvan der MaatenとHintonによって発表 [1] された人気の手法です。 この技術は、数百または数千次元のデータですら無理やり2次元の「マップ」に落とし込むという、ほとんど魔法のような能力を備えているために、機械学習の分野で幅広く普及しています。 このような印象を持っている方が多いのですが、こういった捉え方をしていると誤解を招くこともあります。 この記事の目的は、よくある共通の誤解を解くためでもあります。

t-SNEで可視化できることと、できないことを説明するために、一連のシンプルな例を通して学んでいきましょう。 t-SNEの技術は本当に便利ですが、あなたがその図を解釈する方法を分かっていることが前提となります。

深入りする前に:ここでt-SNEを初めて学習する方は、その背後にある数学について知っておくべきことがあります。 この技術の目的は、高次元の空間の点集合から、信頼のおける低次元空間(典型的には2次元平面)での表現方法を発見することです。 このアルゴリズムは非線形であり、目に見えない内在するデータに適合し、様々な領域で様々な変換を実行します。 こうした違いのせいで、私たちは困惑させられることがあります。

t-SNEの第2の特徴は「perplexity」という調整可能なパラメータです。このパラメータは、おおざっぱに言うと、データの局所的な特性と全体的な特性のどちらをより考慮するか、そのバランスを表しています。 このパラメータは、ある意味では、各点の近傍点の数を推測している指標と言えます。 perplexityの値は、t-SNEが出力するグラフに混乱させる影響を与えます。 元の論文では、「SNEのパフォーマンスはperplexityの変化の影響を受けにくく、一般的には5〜50程度です」と記述されています。 しかし、実態はこの記述とは異なっています。 複数のperplexityでプロットを出力し、分析することで、t-SNEから最大限の情報を得られる場合があります。

混乱する要因はこれが終わりではありません。例えば、t-SNEアルゴリズムは連続した実行で常に同様の出力を生成するとは限りません。また、最適化プロセスに関連した追加のハイパーパラメータがあります。

1.ハイパーパラメータは本当に重要です

t-SNEにとっての「Hello, world」から始めましょう:2つの大きく離れたクラスタのデータセットを可視化してみます。 できるだけ問題をシンプルにするために、左の図に示すように、2D平面のクラスタを考えてみます。 (分かりやすくするために、2つのクラスタは色分けされています)。 右側の図は、5つの異なるperplexityでのt-SNEプロットを示しています。

perplexityの値は、5~50の間が適切だとvan der MaatenとHintonは提唱しています。 その範囲では、クラスタが分割されている図となっていますが、形はまったく違うものになっています。 その範囲を超えると、少しおかしな図となっています。 perplexityが2の場合は、局所的な変動が優位になります。 また、perplexityを100にすると、クラスタが一緒になってしまい、混乱を招く図となっています。 つまり、アルゴリズムがプロパティを操作できるようにするためには、実のところperplexityは点の数よりも小さくした方がいいのです。 そうしないと、t-SNEは意図しない挙動をすることがあります。

上図の各プロットは、学習率(epsilonと呼ばれることもあります)が10で、5,000回のイテレーションを回し、5,000ステップの時点ではすでに安定点に達していました。値を変更すると、どれほど違った結果になると思いますか?経験上、安定した構成に達するまでイテレーションを回すことが最も重要になります。

上図の画像は、perplexityを30にした場合の、5つの異なる実行結果です。最初の4つは、安定点に達する前に停止した状態です。 10、20、60、120ステップの後では、1次元のようで、点のようですらあるクラスタ画像の配置を見ることができます。奇妙な「縮んだ」形のt-SNEプロットを目にすることがあれば、それはおそらく処理を止めるのが早すぎたのでしょう。 残念ながら、安定した結果の出るステップ数というのは分かりません。 異なるデータセットであれば、収束するのに異なるイテレーション回数が必要になります。

もう一つの自然と浮かび上がる質問は、同様のハイパーパラメータを使用した場合での異なる実行結果は、同様の結果になるのかということに関するものです。 今回のシンプルな2つのクラスタの例と、今回取り上げる他のほとんどの例においては、複数の実行結果でも同様のグローバルな形状を出力します。 しかし、同様のハイパーパラメータでの複数回の実行で、著しく異なる図を出力するデータセットがあります。 この例を後に取り上げます。

以降は、特に明記しない限り、5,000回のイテレーション回数の結果を示します。 本記事での比較的小さなデータセットの例では、一般的に十分収束します。 しかし、すべてのケースにおいて大きな違いを生むように思えるので、さまざまなperplexityの値を例にして見ていきましょう。

2. t-SNEプロット上では、クラスタのサイズは関係ない

ここまでは順調に進みました。しかし、もし2つのクラスタの標準偏差やサイズが異なっていたとしたらどうでしょうか?(ここでのサイズとは、点の数ではなくバウンディングボックスの大きさのことです。) 以下の図は、平面上に混合正規分布をt-SNEでプロットしたものです。片方のクラスタは、もう一方の10倍の分散値になっています。

驚くべきことに、t-SNEでプロットされた図では、2つのクラスタは同様のサイズに見えます。 どうしたことでしょうか? t-SNEアルゴリズムは、データセット内の領域の密度変化を「距離」として考慮しています。 つまり、アルゴリズムは自然と密なクラスタを広げ、疎なクラスタを縮めることで、クラスタのサイズを一様にするのです。 誤解のないように言うと、これはどんな次元削減 (圧縮) 技術も距離を歪めるというありきたりの事実とは異なった結果です。(何しろこの例では、すべてのデータが初めから2次元だったのですから。) むしろ、密度の均等化は設計のレベルでなされており、t-SNEの特徴として予測することができます。

けれども、大事なことは、t-SNEプロットで相対的なクラスタのサイズはわからないということです。

3. クラスタ間の距離には、何の意味もないかもしれない

クラスタ間の距離は何を意味しているのでしょうか? 次の図では、50の点からなる3つの正規分布を示しています。 そのうち一つのペアは、もう一つのペアの5倍離れた距離にあります。

perplexityが50のときには、その図は全体的な幾何学的な位置をよく表現できています。 それよりも小さなperplexityでは、クラスタ間は等距離に見えます。 perplexityが100のときには、全体的な位置は良好に見えますが、そのうちの一つのクラスタは不当に小さく見えます。 perplexityが50のときに良好な図が出力されたので、全体的な距離関係を把握したい場合には、いつでもperplexityを50に設定しておけば、期待する出力が得られるのでしょうか?

悲しいことに、そうではありません。 もし、各クラスタの点数を増やしたとすると、その分を埋め合わせるためにperplexityの値も大きくする必要があります。 以下の図は、各50点の代わりに、200点を持つ3つのガウスクラスタとなっています。 すべてのperplexityの値の結果が、正しい距離関係になっていません。 t-SNEが誤解を招く要因として、従来通りの視覚的な直感が通用しないということがあります。次に示す図は完全にランダムなデータで、100次元の標準正規分布から得られた500点です。左の画像はその最初の2軸への写像です。

全体的な位置関係を把握するために、perplexityをファインチューニングする必要があることは悪い知らせです。 現実の世界のデータは、おそらく複数のクラスタが様々な数の要素を持っているはずです。 たった1つのperplexityでは、クラスタ間の距離関係を正しく捉えることができないかもしれないのです。 そして、悲しいことにperplexityは全体の距離関係を表すパラメータです。 この問題を修正することは、きっと将来的に興味深い研究分野になることでしょう。

このことから分かることは、よく分離されているクラスタ間の距離には、何の意味もないかもしれないということです。

4. ランダムノイズはいつでもランダムに見えるというわけではない

よくある落とし穴の例として、本当に単なるランダムなデータの中にあなたがパターンを見出そうとしてしまうことがあります。 あなたが見ているデータがノイズかどうかを判断するスキルは重要ですが、正しく直感的にそう判断できるスキルを築くには時間が掛かります。

perplexityが2のプロットは、印象的なクラスタを示しているように思われます。 もしあなたがデータの中から構造を見出そうとして、perplexityを調整していたとしたら、適切なパラメータを発見して可視化に成功したかのように考えるかもしれません。

もちろん、私たちは点群がランダムに生成されていることを知っているので、統計的に興味深いクラスタが形成されていないことを分かっています。 クラスタを形成しているように見える塊には、特に意味はありません。 以前の例を見返すと、低いperplexityの値は、このような分布をよく形成します。 このような塊をランダムノイズとして認識出来る能力は、t-SNEプロットを読む上で重要なことです。

しかし、他にも興味深いことがあり、これがt-SNEにとって利点とよべるものかもしれません。 一見すると、perplexityが30のプロットは正規分布のようには全く見えません。 つまり、点群の異なった領域間ではわずかな密度の違いしかなく、点は一様に分布しているのではと疑わしく思えるほどです。 実際、これらの特徴は、高次元の正規分布について役に立つことを伝えています。 つまり高次元の正規分布は、球面状では一様分布にとても近く、点と点の間にはおおよそ等しい距離を置いて、一様に分布しているのです。 この観点から見ると、t-SNEプロットはどんな線形投影よりも正確です。

5. 時々、なんらかの形が見えることがあります

データが完全に対象的な分布をしていることは、かなり珍しいことです。 1つの軸に沿って対象的な、50次元の正規分布の座標\(i\)の標準偏差が\(\frac{1}{i}\)である例を見てみましょう。 つまり、長い楕円形の点群を見ているということです。

十分に大きなperplexityでは、細長い形をしていることは簡単に読み取ることができます。 一方で、低いperplexityでは、無意味な「凝縮」された形が目立っています。 より極端な形状も見て取れますが、これもまた、perplexityの値が適切な場合に限ります。 例えば、こちらが2D平面で、ノイズ入りで75点の並行な線で構成された2つのクラスタになります。

ある範囲でのperplexityでは、その長いクラスタはかなり正確に見えて安心します。

最良のデータではありますが、微妙な表示になることもあります:t-SNEダイアグラム上では、外側に若干曲がっています。 どうしてこのような表示がされるのかというと、t-SNEは密なデータの範囲を広げようとするのです。 線分の中心付近では、あまり空白の範囲が存在していないため、アルゴリズムはその領域を拡大します。

6. トポロジーの形状を読み解くためには、2つ以上のプロットが必要な場合があります

場合によっては、t-SNEプロットからトポロジーの形成を読み取ることはできますが、読み解くためには、たいてい複数のperplexityで検証する必要があります。 最もシンプルなトポロジカルなデータの特徴の例として、包含したような場合があります。 以下の図は、50次元の空間での75点の2グループです。 両グループとも、原点で点対称の正規分布からサンプリングされていますが、一方のグループはもう一方のグループよりも50倍大きく分散しています。 小さな分布の方は、実際大きな分布に包含された状態になっています。

perplexityが30の図では、基本的にトポロジーを正しく表示しますが、徐々に小さなグループの点群を大げさに小さく表示し始めます。 perplexityが50の時点では、新たな現象を見て取れます:外側のグループは円になり、外側の点は内側の点からすべて等距離にあるかのように表現しようとします。 もし、この画像を単体で見たら、外側の点は一次元構造をしているように誤解するでしょう。

もっと複雑な形状をしたトポロジーの例ではどうでしょうか? こういった例を見ることは、現実のデータ分析者の仕事というよりは、数学者が扱う問題かもしれませんが、このような興味深い低次元の構造は、時折現実世界でも見られます。

3次元でのリンク構造や結び目のような点の例を見てみましょう。 再度、複数のperplexityで検証することが構造の理解には必要となります。 低い値のperplexityは、完全に分離された2つのループを描きます。 一方、値の高いperplexityの場合は、どこかで結合しているように感じられます。

三葉結び目の構造をしたデータは、複数回の実行結果がどのようにt-SNEの結果に影響を及ぼすかという興味深い事例です。以下の図は、perplexityの値が2の場合に5回実行した例です。

このアルゴリズムを実行すると、5回の結果のうち2回は最終的に円の形に落ち着いていて、この2回では少なくともオリジナルのデータが本来持っているトポロジーの特徴が保存されています。しかし、残りの3回は最終的にそれぞれ異なる解になり、不自然な切れ目のある解が導かれています。図中の各点につけた色を見ると、1回目と3回目の実行結果は似ているように見えますがお互い全く異なったものであることが分かるでしょう。

5回のperplexityが50の実行の例では、視覚的には(対称的という意味で)同一の結果を出力しています。

まとめ

t-SNEがこれほど人気になった理由があります。このアルゴリズムは驚異的なほど柔軟なのです。 そして、他のアルゴリズムでは不可能な構造をプロットから把握できることがよくあります。

残念ながら、まさにその柔軟性こそが、私たちを勘違いさせる要因にもなっています。 ユーザーは目にすることはできませんが、このアルゴリズムによってあらゆる調整が行われ、きれいに可視化が実行されます。しかし、私たちには直接見ることができない、隠れた「魔法」を怖がりこの技術全体を敬遠しないようにしてください。

どのようにt-SNEが動作するかをシンプルな例を元にして学ぶことで、直感的に何が起きているのかを把握するスキルを鍛えることができるということは良い知らせでしょう。

参考

[1] Visualizing data using t-SNE