Exponential Family Embeddingsを読んだ

労の場の「論文読み会」で年明けに読むことになっている論文を読みました。

[1608.00778] Exponential Family Embeddings

NIPS2016から何本か読もうということになって、この論文が唯一2票入ったので最初に読むことになった次第です。

概要

この論文は、指数分布族の分布に従う任意のデータ列に対して分散表現を得る手法を説明したものです。

かの有名なword2vecは単語というカテゴリカルなデータ列に対する分散表現を得るツールです。これを拡張し、ガウス分布などの連続分布に従う実数データからも分散表現を得たいよ、というものです。

手法

i番目のデータの分散表現をρ[i]というK x Dの行列で、そのコンテキスト(word2vecで言うところの周辺単語)に対する分散表現をα[i]というK x Dの行列で表現するようです。Kは分散表現の次元、Dはデータの次元です。

ここでi番目のデータ、と言いましたがword2vecの場合、どの位置に出現する単語であっても同じ単語には同じ分散表現が対応しているので、任意のiに対してρ[i] = ρ、α[i] = αとなります。

論文が扱うExponential Family Embeddingsは、データのコンテキストとして何を使うか(周辺の単語、など)、どの分布を使うか(ベルヌーイ分布、など)、分散表現の構造をどうするか(ρ = ρ[i]など)の3つの要素で構成されています。


word2vecの場合データは単語なので、単語を1 of K(って言ってもここでは単語がD次元なので1 of Dですが。ややこしい)で表現する、と考えるようです。データが1 of K形式のベクトルなのでαに右からかけると、αのうちの対応する列が切り出される、というイメージです。

で、指数分布族の分布は自然パラメータというパラメータで分布の形が決まる(詳細はPRML2章などを参照)ので、この自然パラメータがどういう形になるのかを決めてやって、あとは適当なオンライン学習の手法(論文ではadagradを使っていました)で分布を尤度最大化すればよい、という流れです。

自然パラメータは以下の式(論文の式(2))を使うようです。ここで {\boldsymbol{x}_{c_i}} はデータxのコンテキストです。{f_i} は扱う問題ごとに応じて適切に決まる関数(論文参照)です。

{ \displaystyle \eta_i(\boldsymbol{x}_{c_i}) = f_i \biggl( \rho[i]^{\mathrm{T}} \sum_{j \in c_i} \alpha[j]x_j \biggl) }

実験

評価実験は、ゼブラフィッシュのニューロン(ディープを連想してよくない)に対するガウス分布、購買データ・レーティングデータに対するポワソン分布に対して行われていました。

ニューロンの実験では、既存手法(probablistic factor analysis)と比較して平均ニ乗誤差が小さくなっていました。また、分散表現を得るのに使うコンテキストの大きさが大きい場合に良い結果になるようでした。分散表現の次元は大きくしてもそんなに変わらない感じでした。

購買・レーティングデータでも、既存手法(hierarchical Poisson factorization, Poisson principal component analysis)と比較して対数尤度が大きくなっていました。こちらの実験では、ゼロ頻度のデータをサンプリングして使うことで重みを小さくする方法(downweights)も試していて、購買データの場合は(ゼロ頻度のデータが多いためか)これをやった場合により良い結果になるようでした。また、購買データでは分散表現の次元数を増やすと結果が良くなるのに対して、レーティングデータではそうはなっていませんでした。