t-SNE
今回はt-SNEについて簡単にまとめました.
(※ 詳細を知りたい場合は原論文をご覧ください.)
今回読んだ論文はこれです.
https://lvdmaaten.github.io/publications/papers/JMLR_2008.pdf
本発表の目次です.
次元削減とは
SNEの概要
t-SNEの概要
t-SNEの適用例
t-SNE(t-Distributed Stochastic Neighbor Embedding) は次元削減の一手法です.
特に高次元データの可視化によく用いられていてkaggleで人気です.
次元削減とは高次元のデータ集合 を
低次元のデータ集合
X = { , , …, }x1 x2 xn
に変換することを意味します.Y = { , , …, }y1 y2 yn
その際,高次元のデータ集合の特徴をできる限り保持できるようにします.
以下の手法は書籍でよく見る有名な次元削減手法です.
主成分分析
多次元尺度法
Isomap
カーネル主成分分析
t-SNEはこれらの手法とは全く異なるアルゴリズムで次元削減を実現します.
t-SNEはSNE(Stochastic Neighbor Embedding)という手法に改良を加えた手法です.
SNEは2002年にHintonとRoweisによって提案されました.
t-SNEを説明する前に,まずはSNEについて簡単に説明します.
SNEの概要
SNEの特徴は二点間の類似度を条件付き確率で表現するところにあります.
(※ これは先ほど紹介した有名な手法にはない考え方です.)
=pj|i
exp(−|| − | /2 )xi xj |
2
σ2
i
exp(−|| − | /2 )∑k≠i
xi xk |
2
σ2
i
SNEは からxi の近さを条件付き確率xj で表します.pj|i
は平均pj|i に従うガウス分布においてxi が抽出される確率密度とします.
数式で表すと以下のとおりです.
xj
ここで, は平均σ2
i
のガウス分布の分散であり,
今は異なる二点間の類似度にのみ興味があるので
xi
とします.
(※ ここで,一般に
= 0pi|i
であることに注意しましょう.
そのため,距離でも類似度でもなく「近さ」という表現を用いています.)
≠pj|i pi|j
= , = 0qj|i
exp(−|| − | )yi yj |
2
exp(−|| − | )∑k≠i
yi yk |
2
qi|i
次に,次元削減後の点 からyi の近さも同様に定義します.
ただし,ガウス分布の分散をデータ点に関わらず
yj
とするところが異なります.
数式で表せば以下の通りです.
1
2√
もし,次元削減後も元のデータ構造を完全に再現できていれば,
となるはずです.(これが理想)=pj|i qj|i
したがって,SNEでは とpj|i の誤差がなるべく
小さくなるような次元削減を目指します.
qj|i
そこで,分布間の近さを測る指標があると便利です.SNEでは
カルバック・ライブラー・ダイバージェンス(Kullback-Leibler-divergence)を用います.
(※ カルバック・ライブラー情報量やカルバック・ライブラー擬距離と呼ばれることもあります.)
これは対称性(距離の公理)を満たさないため正確な意味で距離とは言えませんが,
分布間の差異を表すことに利用されることがあります.
KL(P||Q) = P(i) log
∑
i
P(i)
Q(i)
を離散確率分布とする時P, Q のP に対するカルバック・ライブラー情報量は
以下のように定義されます.(
Q
をΣ と置き換えれば連続確率分布にも拡張できます.)∫
(※ 詳細は情報理論(Information theory)についての書籍を参照してください.
は常にKL(P||Q) 以上で,0 とP の分布が似ているほど小さな値をとります.Q
カルバック・ライブラー情報量を用いれば とpj|j の近さを
表現することができそうです.
qj|i
C = KL( || ) = log
∑
i
Pi Qi
∑
i
∑
j
pj|i
pj|i
qj|i
そこで,SNEでは以下の目的関数の最小化を目指します.
ここで, はデータ点Pi と他の全てのデータ点から得られる条件付き確率分布です.
そして,
xi
はデータ点Qi と他の全てのデータ点から得られる条件付き確率分布です.yi
= 2 ( − + − )( − )
δC
δyi
∑
j
pj|i qj|i pi|j qi|j yi yj
SNEは目的関数 の最小解を勾配法により求めます.C = log∑i
∑j
pj|i
pj|i
q
j|i
この目的関数の勾配は以下のようになります.
収束した後の がSNEの出力です.Y = { , , …, }y1 y2 yn
t-SNEの概要
先ほども言った通りt-SNEはSNEに改良を加えた手法です.
C = KL(P||Q) = log
∑
i
∑
j
pji
pji
qji
まず,目的関数が異なります.t-SNEの目的関数は以下の通りです.
※ SNEでは でした.C = log∑i
∑j
pj|i
pj|i
qj|i
= , = , = 0pij
+pi|j pj|i
2N
pj|i
exp(−|| − | /2 )xi xj |
2
σ2
i
exp(−|| − | /2 )∑k≠i
xi xk |
2
σ2
i
pi|i
そこで,t-SNEでは点 と点xi の近さを同時分布xj で以下のように定めます.pij
の式はSNEと変わりありませんが,pj|i により,
二点間の近さ
=pij
+pi|j
pj|i
2N
に対称性が生まれます.pij
=qij
(1 + || − |yi yj |
2
)
−1
(1 + || − |∑k≠l
yk yl |
2
)
−1
また,点 と点yi の近さを同時分布yj で以下のように定めます.qij
ここで, とyi の近さを表現するために,ガウス分布ではなく
自由度1のt分布を用いることがt-SNEの名前の由来です.
yj
= 4 ( − )( − )(1 + || − |
σC
σyi
∑
j
pij qij yi yj yi yj |
2
)
−1
t-SNEでは,この とpij を用いて,
目的関数
qij
の最小化を行います.C = log∑i
∑j
pji
pji
q
ji
これも解析的には最小解を求めることができないので,勾配法を使います.
ちなみに,勾配は以下のようになります.
t-SNEの適用例
まずはt-SNEをMNISTデータセットに適用した結果を紹介します.
MNISTは手書き数字 が書かれた pixelの画像データセットです.0 − 9 28 × 28
画像は,(左上)t-SNE (右上)Sammon mapping (左下)Isomap (右下)LLEの出力結果です.
t-SNEは784次元のデータをうまく2次元に集約することができています.
次にCOIL-20データセットに適用した例を紹介します.
COIL-20は20種類の物体を5度ずつ角度を変えて撮影した画像データセットです.
画像は,(左上)t-SNE (右上)Sammon mapping (左下)Isomap (右下)LLEの出力結果です.
物体ごとの特徴が0°から360°までで一つの円を作っている様子が確認できます.
おわりに
今日はt-SNEの概要を説明しました.
t-SNEはpythonやRにもパッケージが用意されているので,
次元圧縮をする際には是非使用するか検討してみてください.
ただし,使用の際の注意点もあります.
t-SNEは2次元もしくは3次元の次元圧縮には有効ですが,
それ以上の次元には計算コストの都合上現実的ではありません.
(※ 4次元以上の場合は別の手法を使いましょう.)
以上です.

t-SNE