TensorFlow : Edward Tutorials : ニューラルデータのための潜在空間モデル (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/21/2018
* 本ページは、Edward サイトの Tutorials : Latent Space Models for Neural Data を翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
ニューラルデータのための潜在空間モデル
多くの科学分野はネットワーク・データの研究を伴います、ソーシャル・ネットワーク、統計物理学のネットワーク、生物学ネットワーク、そして情報ネットワークを含みます (Goldenberg, Zheng, Fienberg, & Airoldi, 2010; Newman, 2010)。
ネットワークのノードについて (それらの) 連結性 (= connectivity) パターンから何を学習できるでしょうか?潜在空間モデルを使用してこれを学習し始めることができます (Hoff, Raftery, & Handcock, 2002)。潜在空間モデルはノードを潜在空間のネットワークに埋め込みます、そこでは 2 つのノード間のエッジを形成する尤度は潜在空間のそれらの距離に依存します。
神経科学 (= neuroscience) からのネットワークデータを解析します。Jupyter notebook による対話的バージョンは こちら で利用可能です。
データ
データは Mark Newman のレポジトリ に由来します。
それは線形動物の C. エレガンス のニューラルネットワークを表わす重み付けられ、方向付けられたネットワークで、White, Southgate, Thomson, & Brenner (1986) による実験データを使用して Watts & Strogatz (1998) により編纂されました。
ニューラルネットワークはおよそ $300$ ニューロンから成ります。ニューロン間の各接続は接続の強さを捉えた重み (正の整数) に関連しています。
最初に、データをロードします。
from observations import celegans x_train = celegans("~/data")
モデル
ニューロンについてそれらの連結パターンから何を学習できるでしょうか?潜在空間モデル (Hoff et al., 2002) を使用して、それらの間の類似性を捕捉するために各ニューロンについて潜在埋め込みを学習します。
各ニューロン $n$ はネットワークのノードで潜在位置 $z_n\in\mathbb{R}^K$ に関係します。潜在位置の各々にガウス事前分布を置きます。
ノード $i$ と $j$ の間のエッジの対数オッズ (訳注: ロジット) はノード (群) の潜在表現間のユークリッド距離 $|z_i- z_j|$ に比例します。ここで、Poisson 尤度でエッジの重み $Y_{ij}$ をモデル化します。
レートは潜在空間の距離の逆数です。生成プロセスは次のようなものです :
- 各ノード $n=1,\ldots,N$ に対して、
\[
\begin{aligned}
z_n \sim N(0,I)\end{aligned}
\] - 各エッジ $(i,j)\in\{1,\ldots,N\}\times\{1,\ldots,N\}$ に対して、
\[
\begin{aligned}
Y_{ij} \sim \text{Poisson}\Bigg(\frac{1}{|z_i – z_j|}\Bigg)\end{aligned}
\]
Edward では、モデルを次のように書きます。
from edward.models import Normal, Poisson N = x_train.shape[0] # number of data points K = 3 # latent dimensionality z = Normal(loc=tf.zeros([N, K]), scale=tf.ones([N, K])) # Calculate N x N distance matrix. # 1. Create a vector, [||z_1||^2, ||z_2||^2, ..., ||z_N||^2], and tile # it to create N identical rows. xp = tf.tile(tf.reduce_sum(tf.pow(z, 2), 1, keep_dims=True), [1, N]) # 2. Create a N x N matrix where entry (i, j) is ||z_i||^2 + ||z_j||^2 # - 2 z_i^T z_j. xp = xp + tf.transpose(xp) - 2 * tf.matmul(z, z, transpose_b=True) # 3. Invert the pairwise distances and make rate along diagonals to # be close to zero. xp = 1.0 / tf.sqrt(xp + tf.diag(tf.zeros(N) + 1e3)) x = Poisson(rate=xp)
推論
最大事後確率 (MAP, Maximum a posteriori) 推定は Edward では単純です。2 行が必要です: inference をインスタンス化してそれを実行します。
inference = ed.MAP([z], data={x: x_train})
Edward における MAP 推定 についてのこの拡張チュートリアルを見てください。
代わりに変分推論を実行することもできます。これは変分モデルを指定して KLqp をインスタンス化する必要があります。
qz = Normal(loc=tf.get_variable("qz/loc", [N * K]), scale=tf.nn.softplus(tf.get_variable("qz/scale", [N * K]))) inference = ed.KLqp({z: qz}, data={x: x_train})
Edward における変分推論 についてのこの拡張チュートリアルを見てください。
最後に、次の行は 2500 反復の間推論手続きを実行します。
inference.run(n_iter=2500)
References
- Goldenberg, A., Zheng, A. X., Fienberg, S. E., & Airoldi, E. M. (2010). A survey of statistical network models. Foundations and Trends in Machine Learning.
- Hoff, P. D., Raftery, A. E., & Handcock, M. S. (2002). Latent space approaches to social network analysis. Journal of the American Statistical Association, 97(460), 1090–1098.
- Newman, M. (2010). Networks: An introduction. Oxford University Press.
- Watts, D. J., & Strogatz, S. H. (1998). Collective dynamics of ‘small-world’networks. Nature, 393(6684), 440–442.
- White, J. G., Southgate, E., Thomson, J. N., & Brenner, S. (1986). The structure of the nervous system of the nematode caenorhabditis elegans. Philos Trans R Soc Lond B Biol Sci, 314(1165), 1–340.
以上