【論文読解】LargeVis(Visualizing Large-scale and High-dimensional Data)

## 前提の確認
### LargeVisの概要
[LargeVis](https://arxiv.org/abs/1602.00370)はt-SNEと同様に高次元データを低次元データに変換し可視化を行う研究であり、基本的にはt-SNEと同様な課題を取り扱います。

https://qiita.com/Chi_corp_123/items/1c9ee9f71a9675a3ee4d

LargeVisでは基本的に下記のような2ステップに基づいて次元削減が行われます。

```
1. 近似最近傍(approximated k-Nearest Neighbor)法に基づいた重み付きグラフの構築
2. 確率モデルから定義される尤度に基づく次元削減の変換(関数)の学習
```

![LargeVis1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/1269494f-5e6c-4f59-a355-5cb67b15b529.png)
[LargeVis論文](https://arxiv.org/abs/1602.00370v2) Figure 1

1.の重み付きグラフの構築はt-SNEでは明記されないものの、t-SNEの計算では重み付きグラフの構築(t-SNEでは近似ではない点にご注意ください)と同様な処理を行っているので、LargeVisはt-SNEと基本的に同様な考え方を元に構築されていると解釈できます。


### Random Projection Trees(RPT)
LargeVisでは近似最近傍探索(approximated k-Nearest Neighbor Search)を行うにあたって、Random Projection Trees(RPT)という手法で空間分割を行った結果を用います。

![RPT_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/f0aeff4f-0f48-4ad6-9ee1-a1d0e953d132.png)
[RPT論文](https://cseweb.ucsd.edu/~dasgupta/papers/rptree-stoc.pdf) Figure 1

RPTを用いることで上図のようにk-d treesを用いた結果(左)より柔軟な空間分割を行うことが可能になります(右)。以下ではk-d treesアルゴリズムを詳しく確認した上で、RPTにおける修正点について確認します。

![RPT_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/b6f3f21d-94e1-4754-ad4b-39b0c12d8188.png)
![RPT_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/a1cfc1ca-b704-46ac-aebf-57099b8cd559.png)
[RPT論文](https://cseweb.ucsd.edu/~dasgupta/papers/rptree-stoc.pdf) 本文より

まず上記がk-d treesのアルゴリズムです。`MAKETREE(S)`で表されるアルゴリズムは再帰的に書かれており、大まかにはデータセットの$S$を徐々に分割して木を構築していくと解釈すれば良いです。

k-d treesとRPTの相違点は`CHOOSERULE(S)`を変えることで実現され、k-d treesではデータセットの多次元ベクトルの要素を一つ選びその中央値を基準に分割が行われます。

![RPT_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/6744e8bf-3b6e-4793-b9b4-32b4cdbb7b82.png)
[RPT論文](https://cseweb.ucsd.edu/~dasgupta/papers/rptree-stoc.pdf) 本文より

k-d treesでは多次元ベクトルの要素を一つ選び分割を行いましたが、RPTree-Maxではランダムに単位ベクトルの$v \in \mathbb{R}^{D}$を選び、内積の中央値である$\mathrm{median}(\{ z \cdot v | z \in S \})$に基づいて分割を行います。

また、分割にあたってサンプルが必ずしも半分ずつにならないように(中央値を用いると必ず半分ずつの分割となる)、中央値に$\sigma$が加えられています。$\sigma$は$x \in S$と$x$から最も離れた$y \in S$の差である$x-y$のEuclidean distanceに一様分布$U(-1,1)$から生成された乱数などをかけることにより生成されます。

![RPT_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/5322536a-569b-42b0-a71b-536f95bec7b2.png)
[RPT論文](https://cseweb.ucsd.edu/~dasgupta/papers/rptree-stoc.pdf) 本文より

RPTree-MeanではRPTree-Maxと同様にランダムに選んだベクトル$v \in S$と各点の位置ベクトルの内積を元に分割を行う一方で、サンプル集合$S$の直径(the distance between the two furthest points in the set)の$\Delta^{2}(S)$と、下記のように定義される$\Delta_{A}^{2}(S)$の比を元に処理を分岐する点が異なります。

```math
\begin{align}
\Delta_{A}^{2}(S) = \frac{1}{|S|^{2}} \sum_{x,y \in S} ||x-y||^{2}
\end{align}
```

ここで$c$が定数であることから条件式$\Delta^{2}(S) \leq c \cdot \Delta_{A}^{2}(S)$は、「$S$内に外れ値がある場合はelseの処理、外れ値がない場合はthenの処理が選択されやすい」と解釈すると良いです。



## LargeVis論文の詳細
![LargeVis2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/6900f931-c15f-45c4-900d-453579da1b52.png)
[LargeVis論文](https://arxiv.org/abs/1602.00370v2) Algorithm 1

上記が[LargeVis論文](https://arxiv.org/abs/1602.00370v2)に記載されているLargeVisのアルゴリズムです。質の良い木(RPT; Random Projection Trees)を複数構築することでkNNを行うと大量の木が必要になるので、LargeVisのアルゴリズムでは近傍探索(neighbor exploring)が用いられています。

LargeVisにおける近傍探索は「近傍の近傍は近傍である可能性が高い(a neighbor of my neighbor is also likely to be my neighbor)」というアイデアに基づいて実行されています。

アルゴリズムは下記のように理解すると良いと思います。

1. いくつかのRPTを作成する
2. それぞれのサンプル(node)について複数の木から近傍を探索し$\mathrm{knn}(i)$に追加する
3. サンプル$i$に隣接するサンプル$j \in \mathrm{knn}(i)$に隣接するサンプルが$i$に隣接するか調べる