深層学習と確率プログラミングを融合したEdwardについて

深層学習と確率プログラミングを
融合したEdwardについて
小島 諒介(京都大学)
人工知能セミナー
確率プログラミングの世界:論理と確率をつなぐ人工知能
自己紹介
深層学習と確率プログラミングを融合した についてEdward 1
• 名前:小島 諒介
• 略歴:
2014年 東京工業大学 修士課程修了
2017年 東京工業大学 博士(工学)
京都大学 医学研究科 人間健康科学系専攻
ビッグデータ医科学分野 特定助教
• 興味:
人工知能の手法開発と実世界応用(特に時系列データ分析)
• 好きな確率プログラミング言語:
PRISM, Edward, PyMC3, Anglican, ProPPR
PRISM(開発メンバー)
深層学習と確率プログラミング
• 深層学習
– 人間が明確なモデルが与えられないような状況で学習するような問題
に適している.入力・出力のペアからモデルを学習するような状況.
2
入力
出力
ニンジン切ってる
• 確率プログラミング
– 明確にデータの生成過程(モデル)をプログラミング言語を用いて
柔軟に設計できる.規則・法則があるものに適している.
「野菜を切って炒める」 「野菜を炒めて切る」
得意分野が異なる →組み合わせたら面白そう
“Multimodal Scene Understanding Framework and Its Application to Cooking Recognition”
R.Kojima, O.Sugiyama, K.Nakadai, Applied Artificial Intelligence, 30(3) :181--200 2016.
深層学習と確率プログラミングを組み合わせた例
3
深層学習
(画像+音)
深層学習
+PRISM
(画像+音
+レシピ) 答え
各認識器の出力
(動作)
各認識器の出力
(対象)
深層学習と確率プログラミングを組み合わせた例
深層学習と確率プログラミングを融合した についてEdward 4
深層学習と確率プログラミングのシステムが分離している
• システム全体の最適化が難しい
• デバッグ・チューニングが困難
レシピモデル
出力
ニンジン切ってる
玉ねぎ焼いてる
時間 ニンジン切ってる
玉ねぎ切ってる
玉ねぎ切ってる
時間 ニンジン切ってる
玉ねぎ切ってる
深層学習ツール(Theano)
確率プログラミング(PRISM)
統合したツールが欲しい!!
認識ミスをレシピから修正
• Python / Tensorflow 上に実装
された確率プログラミング言語
– Tensorflow 上の他の便利なライブラ
リ(Keras, slim, etc.)を活用可能
– GPUによる高速化の恩恵が受けられる
確率プログラミング言語Edward
Edward
深層学習と確率プログラミングを融合した についてEdward 5
• モデル・推論・評価の3ステップを
設計するための機能を提供
“Edward: A library for probabilistic modeling, inference, and criticism”
Dustin Tran, Alp Kucukelbir, Adji B. Dieng, Maja Rudolph, Dawen Liang,
and David M. Blei. 2016. . arXiv preprint arXiv:1610.09787.
http://edwardlib.org
Tensorflow の基本的な仕組み
import tensorflow as tf
with tf.Session() as sess:
a=tf.Variable(1.0, name="a")
b=tf.Variable(2.0, name="b")
c=tf.Variable(3.0, name="c")
output=a * b + c
深層学習と確率プログラミングを融合した についてEdward 6
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(output))
> 5
計算グラフ
実際の計算は run の
ところで行われる
(CPU, GPU への計算の割り振
りも計算グラフ上で計画する)
Edward の基本的な仕組み
深層学習と確率プログラミングを融合した についてEdward 7
import tensorflow as tf
from edward.models import *
with tf.Session() as sess:
a=tf.Variable(1.0, name="a")
b=tf.Variable(2.0, name="b")
c=Normal(loc=0.0,
scale=1.0, name="c")
output=a * b + c
print(sess.run(output))
> 4.2449 #実行するごとに異なる結果
計算グラフ
Edwardを用いると
Tensorflow の計算グラフ上に「確率変数」が入れることが可能
確率モデリングと推論
𝑝𝑝 𝐱𝐱 = � 𝑝𝑝 𝐱𝐱, 𝐳𝐳 𝑑𝑑𝐳𝐳
推論問題
𝑝𝑝 𝐳𝐳|𝐱𝐱 = 𝑝𝑝(𝐱𝐱, 𝐳𝐳)/𝑝𝑝(𝐱𝐱)
潜在変数:𝐳𝐳
観測変数:𝐱𝐱
潜在変数すべてについての積分
が必要なので計算困難
確率モデリングでは同時分布 𝑝𝑝(𝐱𝐱, 𝐳𝐳) を規定する
(実際にはいくつかの条件付き分布に分解してモデリング)
深層学習と確率プログラミングを融合した についてEdward 8
𝑝𝑝 𝐳𝐳|𝐱𝐱 の代わりに𝑞𝑞 𝐳𝐳 を計算
• MCMC
• 変分推論
Edwardによる確率モデリングと推論
𝑝𝑝 𝐱𝐱 = � 𝑝𝑝 𝐱𝐱, 𝐳𝐳 𝑑𝑑𝐳𝐳
推論問題
𝑝𝑝 𝐳𝐳|𝐱𝐱 = 𝑝𝑝(𝐱𝐱, 𝐳𝐳)/𝑝𝑝(𝐱𝐱)
潜在変数:𝐳𝐳
観測変数:𝐱𝐱
潜在変数すべてについての積分
が必要なので計算困難
同時分布 𝑝𝑝(𝐱𝐱, 𝐳𝐳) を計算グラフで表現
深層学習と確率プログラミングを融合した についてEdward 9
𝑝𝑝 𝐳𝐳|𝐱𝐱 の代わりに利用する𝑞𝑞 𝐳𝐳 を計算グラフで表現
• MCMC
• 変分推論
推論を行うための計算グラフを自動生成
例1 混合ガウス
𝑝𝑝 𝐱𝐱𝑛𝑛 𝝅𝝅, 𝝁𝝁, 𝝈𝝈 = �
𝑘𝑘=1
𝐾𝐾
𝜋𝜋𝑘𝑘 Normal 𝐱𝐱𝑛𝑛|𝝁𝝁𝑘𝑘, 𝝈𝝈𝑘𝑘
深層学習と確率プログラミングを融合した についてEdward 10
𝝅𝝅 = 𝜋𝜋1, 𝜋𝜋2, … , 𝜋𝜋𝑘𝑘, … , 𝜋𝜋𝐾𝐾
𝑎𝑎, 𝑏𝑏, 𝛼𝛼: ハイパーパラメータ
0 ≤ 𝑛𝑛 < 𝑁𝑁
𝑝𝑝 𝝅𝝅 = Dirichlet 𝝅𝝅|𝛼𝛼𝟏𝟏𝐾𝐾
𝑝𝑝 𝝁𝝁𝑘𝑘 = Normal 𝝁𝝁𝑘𝑘|𝟎𝟎, 𝟏𝟏
𝑝𝑝 𝝈𝝈𝑘𝑘
2
= InverseGamma 𝝈𝝈𝑘𝑘
2
|𝑎𝑎, 𝑏𝑏
データセット𝐗𝐗 中の𝑛𝑛番目のデータ𝐱𝐱 𝑛𝑛
𝐷𝐷 = 2, 𝐾𝐾 = 2
(𝐷𝐷次元, 0 ≤ 𝑛𝑛 < 𝑁𝑁 )
例1 混合ガウス:Edward によるモデリング
from edward.models import *
K = 2
N = 100
D = 2
pi = Dirichlet(tf.ones(K))
mu = Normal(tf.zeros(D), tf.ones(D), sample_shape=K)
sigmasq = InverseGamma(tf.ones(D), tf.ones(D),
sample_shape=K)
x = ParamMixture(pi,
{'loc': mu, 'scale_diag': tf.sqrt(sigmasq)},
MultivariateNormalDiag,
sample_shape=N)
深層学習と確率プログラミングを融合した についてEdward 11
𝑝𝑝 𝝅𝝅 = Dirichlet 𝝅𝝅|𝛼𝛼𝟏𝟏𝐾𝐾
𝑝𝑝 𝝁𝝁 = Normal 𝝁𝝁|𝟎𝟎, 𝟏𝟏
𝑝𝑝 𝝈𝝈𝑘𝑘
2
= InverseGamma 𝝈𝝈𝑘𝑘
2
|𝑎𝑎, 𝑏𝑏
𝑝𝑝 𝐱𝐱 𝑛𝑛 𝝅𝝅, 𝝁𝝁, 𝝈𝝈 = �
𝑘𝑘=1
𝐾𝐾
𝜋𝜋𝑘𝑘 Normal 𝐱𝐱 𝑛𝑛|𝝁𝝁𝑘𝑘, 𝝈𝝈𝑘𝑘
例1 混合ガウス:Edward によるモデリング
深層学習と確率プログラミングを融合した についてEdward 12
Edward による混合ガウスモデルの計算グラフ
ParamMixtureの詳細
例1 混合ガウス: Edward による推論
深層学習と確率プログラミングを融合した についてEdward 13
T = 500 # サンプル数
qpi = Empirical(tf.Variable(tf.ones([T, K]) / K))
qmu = Empirical(tf.Variable(tf.zeros([T, K, D])))
qsigmasq = Empirical(tf.Variable(tf.ones([T, K, D])))
qz = Empirical(tf.Variable(tf.zeros([T, N], dtype=tf.int32)))
𝑝𝑝 𝐳𝐳|𝐱𝐱 を近似するための分布𝑞𝑞 𝐳𝐳 を定義
inference = ed.Gibbs(
{pi: qpi, mu: qmu, sigmasq: qsigmasq, z: qz},
data={x: x_train})
近似する分布のペアを与えてGibbsサンプリングのための計算グラフを作成
inference.run()
計算を実行
もう一つの手法:変分推論
𝝓𝝓∗
= argmin𝝓𝝓 𝐾𝐾𝐾𝐾 𝑞𝑞 𝐳𝐳; 𝝓𝝓 | 𝑝𝑝(𝐳𝐳|𝐱𝐱))
𝑝𝑝 𝐳𝐳|𝐱𝐱 に KL-divergence の意味で“近い” 𝑞𝑞 𝐳𝐳; 𝝓𝝓 で近似する
深層学習と確率プログラミングを融合した についてEdward 14
𝐿𝐿 𝝓𝝓 = 𝐸𝐸𝑞𝑞(𝐳𝐳; 𝝓𝝓) log 𝑝𝑝(𝐱𝐱, 𝐳𝐳) − 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑞𝑞(𝐳𝐳; 𝝓𝝓)
𝐾𝐾𝐾𝐾 𝑞𝑞 𝐳𝐳 | 𝑝𝑝(𝐳𝐳|𝐱𝐱)) = 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑝𝑝 𝐳𝐳 𝐱𝐱 − 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑞𝑞(𝐳𝐳; 𝝓𝝓)
𝝓𝝓∗ = argmax 𝝓𝝓 𝐿𝐿 𝝓𝝓
𝛻𝛻𝜙𝜙 𝐿𝐿 𝝓𝝓 = 𝛻𝛻𝜙𝜙 �
�𝐳𝐳
𝑞𝑞(�𝐳𝐳; 𝝓𝝓) log 𝑝𝑝(𝐱𝐱, �𝐳𝐳) − log 𝑞𝑞(�𝐳𝐳; 𝝓𝝓)
Edward ではこの最適化問題をnoisy gradient を用いた勾配
法で解く(Black Box VariationaI Inference)
�𝐳𝐳~𝑞𝑞(�𝐳𝐳; 𝝓𝝓)
以下の問題を解く
𝑞𝑞(�𝐳𝐳; 𝝓𝝓)と𝑝𝑝(𝐱𝐱, �𝐳𝐳)の計算グラフが与えられれば,
Tensorflowの自動微分により勾配が計算可能
実例2 : VAE (Variational Auto Encoder)
𝐳𝐳
𝝁𝝁
𝚺𝚺
深層学習と確率プログラミングを融合した についてEdward 15
N=100
D=2
Mu=tf.zeros([N, D])
sigma=tf.ones([N, D])
z = Normal(loc=mu,scale=sigma)
hidden = Dense(256)(z.value())
x = Bernoulli(logits=hidden)
Kerasによる
ニューラルネット
のコード
モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ)
𝐱𝐱
実例2 : VAE (Variational Auto Encoder)
x_ph = tf.placeholder(tf.float32, [N, 256])
mu = Dense(256)(x_ph)
sigma = Dense(256, activation='softplus')(x_ph)
qz = Normal(loc=mu, scale=sigma)
深層学習と確率プログラミングを融合した についてEdward 16
𝐳𝐳
𝝁𝝁
𝚺𝚺
推論𝑞𝑞(𝐳𝐳|𝐱𝐱)(エンコーダ)
𝑞𝑞(𝐳𝐳|𝐱𝐱ph)
Kerasによる
ニューラルネット
のコード
𝐱𝐱ph 𝐱𝐱
inference = ed.KLqp({z: qz}, data={x: x_ph})
inference.run()
実例2 : VAE (Variational Auto Encoder)
深層学習と確率プログラミングを融合した についてEdward 17
𝐳𝐳
𝝁𝝁
𝚺𝚺
𝑞𝑞(𝐳𝐳|𝐱𝐱ph)
𝐱𝐱ph 𝐱𝐱
変分推論を使って推論を行う
グラフを構築する
z = Normal(loc=mu,scale=sigma)
hidden = Dense(4*4*128,activation=None)(z.value())
hidden=Reshape([4,4,128])(hidden)
hidden=Conv2DTranspose(64,(2,2),strides=(2, 2)) (hidden)
hidden=BatchNormalization() (hidden)
hidden=LeakyReLU(alpha=0.2)(hidden)
……
x = Bernoulli(logits=hidden)
実例2 : VAE (Variational Auto Encoder)
18
Kerasを用いてより複雑なニューラルネットのコードを書く
ことも可能
モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ)
z = Normal(loc=mu,scale=sigma)
hidden = Dense(4*4*128,activation=None)(z.value())
hidden=Reshape([4,4,128])(hidden)
hidden=Conv2DTranspose(64,(2,2),strides=(2, 2)) (hidden)
hidden=BatchNormalization() (hidden)
hidden=LeakyReLU(alpha=0.2)(hidden)
……
x = Bernoulli(logits=hidden)
実例2 : VAE (Variational Auto Encoder)
19
Kerasを用いてより複雑なニューラルネットのコードを書く
ことも可能
モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ)
学習データ
アニメイラストの顔データセット
http://www.nurs.or.jp/~nagadomi/
animeface-character-dataset/
生成したデータ
実例3 : GAN (Generative Adversarial Network)
深層学習と確率プログラミングを融合した についてEdward 20
min
𝜃𝜃
max
𝜙𝜙
𝐸𝐸𝑝𝑝∗(𝐱𝐱) log 𝐷𝐷(𝐱𝐱; 𝝓𝝓) + 𝐸𝐸𝑝𝑝(𝐱𝐱;𝜽𝜽) log 1 − 𝐷𝐷(𝐱𝐱; 𝝓𝝓)
目的関数
inference = ed.GANInference( data={x: x_ph},
discriminator=discriminative_network)
モデルから生成されたデータと学習データを識別する識別器と
生成モデルを競わせることでデータの分布を学習させる手法
実例3 : GAN (Generative Adversarial Network)
深層学習と確率プログラミングを融合した についてEdward 21
min
𝜃𝜃
max
𝜙𝜙
𝐸𝐸𝑝𝑝∗(𝐱𝐱) log 𝐷𝐷(𝐱𝐱; 𝝓𝝓) + 𝐸𝐸𝑝𝑝(𝐱𝐱;𝜽𝜽) log 1 − 𝐷𝐷(𝐱𝐱; 𝝓𝝓)
目的関数
inference = ed.GANInference( data={x: x_ph},
discriminator=discriminative_network)
モデルから生成されたデータと学習データを識別する識別器と
生成モデルを競わせることでデータの分布を学習させる手法
生成したデータ学習データ(MNIST)
Edward (現バージョン)でのノウハウ
• 大きいモデルをいきなり書かくと危険
– サンプルにあるモデルから徐々に変数を追加していくのが吉
• 現状ではデバッグの手段が限られている(Tensorboad は利用可能)
• 計算結果がNanとなってしまうことを回避
• 学習法はモデルに応じて適切に選ぶ必要がある
– ニューラルネット色の濃いモデルなら変分推論,確率モデル
色の濃いモデルならMCMC
– 未実装の機能やいくつかあるが,どんどん実装されている
深層学習と確率プログラミングを融合した についてEdward 22
まとめ
• 確率モデルをTensorflow上で計算・実装できる
Python ライブラリEdwardを紹介
– MCMCによる推論の例:混合ガウスモデル
– 変分推論の例:VAE
– GAN
• 今後,Edwardを用いたアプリケーションが期待される
– ハードウェアによる高速化(GPUによる高速な行列計算)の活用
– 大量・高次元のデータ処理への可能性
深層学習と確率プログラミングを融合した についてEdward 23
1 of 24

Recommended

グラフニューラルネットワーク入門 by
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
51.4K views65 slides
[DL輪読会]Attention is not Explanation (NAACL2019) by
[DL輪読会]Attention is not Explanation (NAACL2019)[DL輪読会]Attention is not Explanation (NAACL2019)
[DL輪読会]Attention is not Explanation (NAACL2019)Deep Learning JP
1.9K views20 slides
グラフデータ分析 入門編 by
グラフデータ分析 入門編グラフデータ分析 入門編
グラフデータ分析 入門編順也 山口
34.9K views65 slides
スペクトラル・クラスタリング by
スペクトラル・クラスタリングスペクトラル・クラスタリング
スペクトラル・クラスタリングAkira Miyazawa
19.7K views26 slides
機械学習モデルのハイパパラメータ最適化 by
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化gree_tech
27.9K views117 slides
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料) by
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)Shota Imai
274.7K views159 slides

More Related Content

What's hot

SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜 by
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII
3.7K views146 slides
畳み込みニューラルネットワークの研究動向 by
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向Yusuke Uchida
139.9K views101 slides
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models by
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion ModelsDeep Learning JP
2.6K views15 slides
自己教師学習(Self-Supervised Learning) by
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)cvpaper. challenge
12.8K views177 slides
Transformerを雰囲気で理解する by
Transformerを雰囲気で理解するTransformerを雰囲気で理解する
Transformerを雰囲気で理解するAtsukiYamaguchi1
4.8K views37 slides
実装レベルで学ぶVQVAE by
実装レベルで学ぶVQVAE実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAEぱんいち すみもと
12.6K views23 slides

What's hot(20)

SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜 by SSII
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII3.7K views
畳み込みニューラルネットワークの研究動向 by Yusuke Uchida
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
Yusuke Uchida139.9K views
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models by Deep Learning JP
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
Deep Learning JP2.6K views
自己教師学習(Self-Supervised Learning) by cvpaper. challenge
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)
cvpaper. challenge12.8K views
Transformerを雰囲気で理解する by AtsukiYamaguchi1
Transformerを雰囲気で理解するTransformerを雰囲気で理解する
Transformerを雰囲気で理解する
AtsukiYamaguchi14.8K views
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介 by Deep Learning JP
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
Deep Learning JP1.4K views
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018) by Hiroharu Kato
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
Hiroharu Kato7.6K views
グラフニューラルネットワークとグラフ組合せ問題 by joisino
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
joisino4.5K views
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング by mlm_kansai
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai67.6K views
最適輸送入門 by joisino
最適輸送入門最適輸送入門
最適輸送入門
joisino11.6K views
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2 by Preferred Networks
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks5.8K views
backbone としての timm 入門 by Takuji Tahara
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
Takuji Tahara7.4K views
深層生成モデルと世界モデル by Masahiro Suzuki
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
Masahiro Suzuki16.6K views
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc) by Deep Learning JP
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
Deep Learning JP3.7K views
【DL輪読会】Contrastive Learning as Goal-Conditioned Reinforcement Learning by Deep Learning JP
【DL輪読会】Contrastive Learning as Goal-Conditioned Reinforcement Learning【DL輪読会】Contrastive Learning as Goal-Conditioned Reinforcement Learning
【DL輪読会】Contrastive Learning as Goal-Conditioned Reinforcement Learning
Deep Learning JP536 views
近年のHierarchical Vision Transformer by Yusuke Uchida
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida13.9K views
PRML学習者から入る深層生成モデル入門 by tmtm otm
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
tmtm otm5.7K views
ドメイン適応の原理と応用 by Yoshitaka Ushiku
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
Yoshitaka Ushiku5.5K views

Viewers also liked

Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E... by
   Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...   Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...Yahoo!デベロッパーネットワーク
21.7K views55 slides
データサイエンティスト協会スキル委員会4thシンポジウム講演資料 by
データサイエンティスト協会スキル委員会4thシンポジウム講演資料データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料The Japan DataScientist Society
10.3K views21 slides
Pythonと機械学習によるWebセキュリティの自動化 by
Pythonと機械学習によるWebセキュリティの自動化Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化Isao Takaesu
19.1K views138 slides
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017) by
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)Yahoo!デベロッパーネットワーク
21.9K views55 slides
Pythonistaデビュー #PyNyumon 2016/5/31 by
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Shinichi Nakagawa
91.7K views34 slides
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版 by
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Netwalker lab kapper
22K views72 slides

Viewers also liked(15)

データサイエンティスト協会スキル委員会4thシンポジウム講演資料 by The Japan DataScientist Society
データサイエンティスト協会スキル委員会4thシンポジウム講演資料データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料
Pythonと機械学習によるWebセキュリティの自動化 by Isao Takaesu
Pythonと機械学習によるWebセキュリティの自動化Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化
Isao Takaesu19.1K views
Pythonistaデビュー #PyNyumon 2016/5/31 by Shinichi Nakagawa
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
Shinichi Nakagawa91.7K views
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版 by Netwalker lab kapper
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Kaggle meetup #3 instacart 2nd place solution by Kazuki Onodera
Kaggle meetup #3 instacart 2nd place solutionKaggle meetup #3 instacart 2nd place solution
Kaggle meetup #3 instacart 2nd place solution
Kazuki Onodera10.7K views
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj by 満徳 関
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
満徳 関54.5K views
リクルートを支える横断データ基盤と機械学習の適用事例 by Tetsutaro Watanabe
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
Tetsutaro Watanabe17.9K views
エンジニアのための経営学 by Michitaka Yumoto
エンジニアのための経営学エンジニアのための経営学
エンジニアのための経営学
Michitaka Yumoto87.3K views
これからはじめるインフラエンジニア by 外道 父
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
外道 父103.6K views
機械学習のためのベイズ最適化入門 by hoxo_m
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
hoxo_m185.7K views

Similar to 深層学習と確率プログラミングを融合したEdwardについて

20170422 数学カフェ Part1 by
20170422 数学カフェ Part120170422 数学カフェ Part1
20170422 数学カフェ Part1Kenta Oono
14.7K views62 slides
東京大学工学部計数工学科応用音響学 D2 Clustering by
東京大学工学部計数工学科応用音響学 D2 Clustering東京大学工学部計数工学科応用音響学 D2 Clustering
東京大学工学部計数工学科応用音響学 D2 ClusteringHiroshi Ono
811 views45 slides
クラシックな機械学習の入門 4. 学習データと予測性能 by
クラシックな機械学習の入門  4.   学習データと予測性能クラシックな機械学習の入門  4.   学習データと予測性能
クラシックな機械学習の入門 4. 学習データと予測性能Hiroshi Nakagawa
8.8K views26 slides
PRML 1.5-1.5.5 決定理論 by
PRML 1.5-1.5.5 決定理論PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論Akihiro Nitta
611 views32 slides
6 Info Theory by
6 Info Theory6 Info Theory
6 Info Theorymelvincabatuan
631 views31 slides
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1 by
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1hirokazutanaka
441 views46 slides

Similar to 深層学習と確率プログラミングを融合したEdwardについて(20)

20170422 数学カフェ Part1 by Kenta Oono
20170422 数学カフェ Part120170422 数学カフェ Part1
20170422 数学カフェ Part1
Kenta Oono14.7K views
東京大学工学部計数工学科応用音響学 D2 Clustering by Hiroshi Ono
東京大学工学部計数工学科応用音響学 D2 Clustering東京大学工学部計数工学科応用音響学 D2 Clustering
東京大学工学部計数工学科応用音響学 D2 Clustering
Hiroshi Ono811 views
クラシックな機械学習の入門 4. 学習データと予測性能 by Hiroshi Nakagawa
クラシックな機械学習の入門  4.   学習データと予測性能クラシックな機械学習の入門  4.   学習データと予測性能
クラシックな機械学習の入門 4. 学習データと予測性能
Hiroshi Nakagawa8.8K views
PRML 1.5-1.5.5 決定理論 by Akihiro Nitta
PRML 1.5-1.5.5 決定理論PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論
Akihiro Nitta611 views
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1 by hirokazutanaka
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
hirokazutanaka441 views
公開鍵暗号(1): RSA暗号 by Joe Suzuki
公開鍵暗号(1): RSA暗号公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号
Joe Suzuki1.1K views
公開鍵暗号1: RSA暗号 by Joe Suzuki
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
Joe Suzuki1.9K views
introduce "Stealing Machine Learning Models via Prediction APIs" by Isao Takaesu
introduce "Stealing Machine Learning Models  via Prediction APIs"introduce "Stealing Machine Learning Models  via Prediction APIs"
introduce "Stealing Machine Learning Models via Prediction APIs"
Isao Takaesu2.2K views
[DL輪読会]GQNと関連研究,世界モデルとの関係について by Deep Learning JP
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
Deep Learning JP8.9K views
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】 by Kazuhide Okamura
遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
Kazuhide Okamura4.7K views
Integrating different data types by regularized unsupervised multiple kernel... by Y-h Taguchi
Integrating different data types by regularized  unsupervised multiple kernel...Integrating different data types by regularized  unsupervised multiple kernel...
Integrating different data types by regularized unsupervised multiple kernel...
Y-h Taguchi621 views
20170806 Discriminative Optimization by Takuya Minagawa
20170806 Discriminative Optimization20170806 Discriminative Optimization
20170806 Discriminative Optimization
Takuya Minagawa6.9K views
[PRML] パターン認識と機械学習(第1章:序論) by Ryosuke Sasaki
[PRML] パターン認識と機械学習(第1章:序論)[PRML] パターン認識と機械学習(第1章:序論)
[PRML] パターン認識と機械学習(第1章:序論)
Ryosuke Sasaki1.6K views
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2 by hirokazutanaka
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
hirokazutanaka393 views
確率的深層学習における中間層の改良と高性能学習法の提案 by __106__
確率的深層学習における中間層の改良と高性能学習法の提案確率的深層学習における中間層の改良と高性能学習法の提案
確率的深層学習における中間層の改良と高性能学習法の提案
__106__141 views
Algorithm 速いアルゴリズムを書くための基礎 by Kenji Otsuka
Algorithm 速いアルゴリズムを書くための基礎Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka5.2K views

Recently uploaded

Najah Matsuo Self Introduction by
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self IntroductionNajahMatsuo
10 views29 slides
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
66 views22 slides
ウォーターフォール開発で生 産性を測る指標 by
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標Kouhei Aoyagi
55 views13 slides
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
208 views36 slides
システム概要.pdf by
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
44 views1 slide
概要.pdf by
概要.pdf概要.pdf
概要.pdfTaira Shimizu
6 views1 slide

Recently uploaded(7)

Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo10 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE166 views
ウォーターフォール開発で生 産性を測る指標 by Kouhei Aoyagi
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標
Kouhei Aoyagi55 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦208 views

深層学習と確率プログラミングを融合したEdwardについて

  • 2. 自己紹介 深層学習と確率プログラミングを融合した についてEdward 1 • 名前:小島 諒介 • 略歴: 2014年 東京工業大学 修士課程修了 2017年 東京工業大学 博士(工学) 京都大学 医学研究科 人間健康科学系専攻 ビッグデータ医科学分野 特定助教 • 興味: 人工知能の手法開発と実世界応用(特に時系列データ分析) • 好きな確率プログラミング言語: PRISM, Edward, PyMC3, Anglican, ProPPR PRISM(開発メンバー)
  • 3. 深層学習と確率プログラミング • 深層学習 – 人間が明確なモデルが与えられないような状況で学習するような問題 に適している.入力・出力のペアからモデルを学習するような状況. 2 入力 出力 ニンジン切ってる • 確率プログラミング – 明確にデータの生成過程(モデル)をプログラミング言語を用いて 柔軟に設計できる.規則・法則があるものに適している. 「野菜を切って炒める」 「野菜を炒めて切る」 得意分野が異なる →組み合わせたら面白そう
  • 4. “Multimodal Scene Understanding Framework and Its Application to Cooking Recognition” R.Kojima, O.Sugiyama, K.Nakadai, Applied Artificial Intelligence, 30(3) :181--200 2016. 深層学習と確率プログラミングを組み合わせた例 3 深層学習 (画像+音) 深層学習 +PRISM (画像+音 +レシピ) 答え 各認識器の出力 (動作) 各認識器の出力 (対象)
  • 5. 深層学習と確率プログラミングを組み合わせた例 深層学習と確率プログラミングを融合した についてEdward 4 深層学習と確率プログラミングのシステムが分離している • システム全体の最適化が難しい • デバッグ・チューニングが困難 レシピモデル 出力 ニンジン切ってる 玉ねぎ焼いてる 時間 ニンジン切ってる 玉ねぎ切ってる 玉ねぎ切ってる 時間 ニンジン切ってる 玉ねぎ切ってる 深層学習ツール(Theano) 確率プログラミング(PRISM) 統合したツールが欲しい!! 認識ミスをレシピから修正
  • 6. • Python / Tensorflow 上に実装 された確率プログラミング言語 – Tensorflow 上の他の便利なライブラ リ(Keras, slim, etc.)を活用可能 – GPUによる高速化の恩恵が受けられる 確率プログラミング言語Edward Edward 深層学習と確率プログラミングを融合した についてEdward 5 • モデル・推論・評価の3ステップを 設計するための機能を提供 “Edward: A library for probabilistic modeling, inference, and criticism” Dustin Tran, Alp Kucukelbir, Adji B. Dieng, Maja Rudolph, Dawen Liang, and David M. Blei. 2016. . arXiv preprint arXiv:1610.09787. http://edwardlib.org
  • 7. Tensorflow の基本的な仕組み import tensorflow as tf with tf.Session() as sess: a=tf.Variable(1.0, name="a") b=tf.Variable(2.0, name="b") c=tf.Variable(3.0, name="c") output=a * b + c 深層学習と確率プログラミングを融合した についてEdward 6 init = tf.global_variables_initializer() sess.run(init) print(sess.run(output)) > 5 計算グラフ 実際の計算は run の ところで行われる (CPU, GPU への計算の割り振 りも計算グラフ上で計画する)
  • 8. Edward の基本的な仕組み 深層学習と確率プログラミングを融合した についてEdward 7 import tensorflow as tf from edward.models import * with tf.Session() as sess: a=tf.Variable(1.0, name="a") b=tf.Variable(2.0, name="b") c=Normal(loc=0.0, scale=1.0, name="c") output=a * b + c print(sess.run(output)) > 4.2449 #実行するごとに異なる結果 計算グラフ Edwardを用いると Tensorflow の計算グラフ上に「確率変数」が入れることが可能
  • 9. 確率モデリングと推論 𝑝𝑝 𝐱𝐱 = � 𝑝𝑝 𝐱𝐱, 𝐳𝐳 𝑑𝑑𝐳𝐳 推論問題 𝑝𝑝 𝐳𝐳|𝐱𝐱 = 𝑝𝑝(𝐱𝐱, 𝐳𝐳)/𝑝𝑝(𝐱𝐱) 潜在変数:𝐳𝐳 観測変数:𝐱𝐱 潜在変数すべてについての積分 が必要なので計算困難 確率モデリングでは同時分布 𝑝𝑝(𝐱𝐱, 𝐳𝐳) を規定する (実際にはいくつかの条件付き分布に分解してモデリング) 深層学習と確率プログラミングを融合した についてEdward 8 𝑝𝑝 𝐳𝐳|𝐱𝐱 の代わりに𝑞𝑞 𝐳𝐳 を計算 • MCMC • 変分推論
  • 10. Edwardによる確率モデリングと推論 𝑝𝑝 𝐱𝐱 = � 𝑝𝑝 𝐱𝐱, 𝐳𝐳 𝑑𝑑𝐳𝐳 推論問題 𝑝𝑝 𝐳𝐳|𝐱𝐱 = 𝑝𝑝(𝐱𝐱, 𝐳𝐳)/𝑝𝑝(𝐱𝐱) 潜在変数:𝐳𝐳 観測変数:𝐱𝐱 潜在変数すべてについての積分 が必要なので計算困難 同時分布 𝑝𝑝(𝐱𝐱, 𝐳𝐳) を計算グラフで表現 深層学習と確率プログラミングを融合した についてEdward 9 𝑝𝑝 𝐳𝐳|𝐱𝐱 の代わりに利用する𝑞𝑞 𝐳𝐳 を計算グラフで表現 • MCMC • 変分推論 推論を行うための計算グラフを自動生成
  • 11. 例1 混合ガウス 𝑝𝑝 𝐱𝐱𝑛𝑛 𝝅𝝅, 𝝁𝝁, 𝝈𝝈 = � 𝑘𝑘=1 𝐾𝐾 𝜋𝜋𝑘𝑘 Normal 𝐱𝐱𝑛𝑛|𝝁𝝁𝑘𝑘, 𝝈𝝈𝑘𝑘 深層学習と確率プログラミングを融合した についてEdward 10 𝝅𝝅 = 𝜋𝜋1, 𝜋𝜋2, … , 𝜋𝜋𝑘𝑘, … , 𝜋𝜋𝐾𝐾 𝑎𝑎, 𝑏𝑏, 𝛼𝛼: ハイパーパラメータ 0 ≤ 𝑛𝑛 < 𝑁𝑁 𝑝𝑝 𝝅𝝅 = Dirichlet 𝝅𝝅|𝛼𝛼𝟏𝟏𝐾𝐾 𝑝𝑝 𝝁𝝁𝑘𝑘 = Normal 𝝁𝝁𝑘𝑘|𝟎𝟎, 𝟏𝟏 𝑝𝑝 𝝈𝝈𝑘𝑘 2 = InverseGamma 𝝈𝝈𝑘𝑘 2 |𝑎𝑎, 𝑏𝑏 データセット𝐗𝐗 中の𝑛𝑛番目のデータ𝐱𝐱 𝑛𝑛 𝐷𝐷 = 2, 𝐾𝐾 = 2 (𝐷𝐷次元, 0 ≤ 𝑛𝑛 < 𝑁𝑁 )
  • 12. 例1 混合ガウス:Edward によるモデリング from edward.models import * K = 2 N = 100 D = 2 pi = Dirichlet(tf.ones(K)) mu = Normal(tf.zeros(D), tf.ones(D), sample_shape=K) sigmasq = InverseGamma(tf.ones(D), tf.ones(D), sample_shape=K) x = ParamMixture(pi, {'loc': mu, 'scale_diag': tf.sqrt(sigmasq)}, MultivariateNormalDiag, sample_shape=N) 深層学習と確率プログラミングを融合した についてEdward 11 𝑝𝑝 𝝅𝝅 = Dirichlet 𝝅𝝅|𝛼𝛼𝟏𝟏𝐾𝐾 𝑝𝑝 𝝁𝝁 = Normal 𝝁𝝁|𝟎𝟎, 𝟏𝟏 𝑝𝑝 𝝈𝝈𝑘𝑘 2 = InverseGamma 𝝈𝝈𝑘𝑘 2 |𝑎𝑎, 𝑏𝑏 𝑝𝑝 𝐱𝐱 𝑛𝑛 𝝅𝝅, 𝝁𝝁, 𝝈𝝈 = � 𝑘𝑘=1 𝐾𝐾 𝜋𝜋𝑘𝑘 Normal 𝐱𝐱 𝑛𝑛|𝝁𝝁𝑘𝑘, 𝝈𝝈𝑘𝑘
  • 13. 例1 混合ガウス:Edward によるモデリング 深層学習と確率プログラミングを融合した についてEdward 12 Edward による混合ガウスモデルの計算グラフ ParamMixtureの詳細
  • 14. 例1 混合ガウス: Edward による推論 深層学習と確率プログラミングを融合した についてEdward 13 T = 500 # サンプル数 qpi = Empirical(tf.Variable(tf.ones([T, K]) / K)) qmu = Empirical(tf.Variable(tf.zeros([T, K, D]))) qsigmasq = Empirical(tf.Variable(tf.ones([T, K, D]))) qz = Empirical(tf.Variable(tf.zeros([T, N], dtype=tf.int32))) 𝑝𝑝 𝐳𝐳|𝐱𝐱 を近似するための分布𝑞𝑞 𝐳𝐳 を定義 inference = ed.Gibbs( {pi: qpi, mu: qmu, sigmasq: qsigmasq, z: qz}, data={x: x_train}) 近似する分布のペアを与えてGibbsサンプリングのための計算グラフを作成 inference.run() 計算を実行
  • 15. もう一つの手法:変分推論 𝝓𝝓∗ = argmin𝝓𝝓 𝐾𝐾𝐾𝐾 𝑞𝑞 𝐳𝐳; 𝝓𝝓 | 𝑝𝑝(𝐳𝐳|𝐱𝐱)) 𝑝𝑝 𝐳𝐳|𝐱𝐱 に KL-divergence の意味で“近い” 𝑞𝑞 𝐳𝐳; 𝝓𝝓 で近似する 深層学習と確率プログラミングを融合した についてEdward 14 𝐿𝐿 𝝓𝝓 = 𝐸𝐸𝑞𝑞(𝐳𝐳; 𝝓𝝓) log 𝑝𝑝(𝐱𝐱, 𝐳𝐳) − 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑞𝑞(𝐳𝐳; 𝝓𝝓) 𝐾𝐾𝐾𝐾 𝑞𝑞 𝐳𝐳 | 𝑝𝑝(𝐳𝐳|𝐱𝐱)) = 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑝𝑝 𝐳𝐳 𝐱𝐱 − 𝐸𝐸𝑞𝑞 𝐳𝐳; 𝝓𝝓 log 𝑞𝑞(𝐳𝐳; 𝝓𝝓) 𝝓𝝓∗ = argmax 𝝓𝝓 𝐿𝐿 𝝓𝝓 𝛻𝛻𝜙𝜙 𝐿𝐿 𝝓𝝓 = 𝛻𝛻𝜙𝜙 � �𝐳𝐳 𝑞𝑞(�𝐳𝐳; 𝝓𝝓) log 𝑝𝑝(𝐱𝐱, �𝐳𝐳) − log 𝑞𝑞(�𝐳𝐳; 𝝓𝝓) Edward ではこの最適化問題をnoisy gradient を用いた勾配 法で解く(Black Box VariationaI Inference) �𝐳𝐳~𝑞𝑞(�𝐳𝐳; 𝝓𝝓) 以下の問題を解く 𝑞𝑞(�𝐳𝐳; 𝝓𝝓)と𝑝𝑝(𝐱𝐱, �𝐳𝐳)の計算グラフが与えられれば, Tensorflowの自動微分により勾配が計算可能
  • 16. 実例2 : VAE (Variational Auto Encoder) 𝐳𝐳 𝝁𝝁 𝚺𝚺 深層学習と確率プログラミングを融合した についてEdward 15 N=100 D=2 Mu=tf.zeros([N, D]) sigma=tf.ones([N, D]) z = Normal(loc=mu,scale=sigma) hidden = Dense(256)(z.value()) x = Bernoulli(logits=hidden) Kerasによる ニューラルネット のコード モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ) 𝐱𝐱
  • 17. 実例2 : VAE (Variational Auto Encoder) x_ph = tf.placeholder(tf.float32, [N, 256]) mu = Dense(256)(x_ph) sigma = Dense(256, activation='softplus')(x_ph) qz = Normal(loc=mu, scale=sigma) 深層学習と確率プログラミングを融合した についてEdward 16 𝐳𝐳 𝝁𝝁 𝚺𝚺 推論𝑞𝑞(𝐳𝐳|𝐱𝐱)(エンコーダ) 𝑞𝑞(𝐳𝐳|𝐱𝐱ph) Kerasによる ニューラルネット のコード 𝐱𝐱ph 𝐱𝐱
  • 18. inference = ed.KLqp({z: qz}, data={x: x_ph}) inference.run() 実例2 : VAE (Variational Auto Encoder) 深層学習と確率プログラミングを融合した についてEdward 17 𝐳𝐳 𝝁𝝁 𝚺𝚺 𝑞𝑞(𝐳𝐳|𝐱𝐱ph) 𝐱𝐱ph 𝐱𝐱 変分推論を使って推論を行う グラフを構築する
  • 19. z = Normal(loc=mu,scale=sigma) hidden = Dense(4*4*128,activation=None)(z.value()) hidden=Reshape([4,4,128])(hidden) hidden=Conv2DTranspose(64,(2,2),strides=(2, 2)) (hidden) hidden=BatchNormalization() (hidden) hidden=LeakyReLU(alpha=0.2)(hidden) …… x = Bernoulli(logits=hidden) 実例2 : VAE (Variational Auto Encoder) 18 Kerasを用いてより複雑なニューラルネットのコードを書く ことも可能 モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ)
  • 20. z = Normal(loc=mu,scale=sigma) hidden = Dense(4*4*128,activation=None)(z.value()) hidden=Reshape([4,4,128])(hidden) hidden=Conv2DTranspose(64,(2,2),strides=(2, 2)) (hidden) hidden=BatchNormalization() (hidden) hidden=LeakyReLU(alpha=0.2)(hidden) …… x = Bernoulli(logits=hidden) 実例2 : VAE (Variational Auto Encoder) 19 Kerasを用いてより複雑なニューラルネットのコードを書く ことも可能 モデル𝑝𝑝(𝐱𝐱, 𝐳𝐳) (デコーダ) 学習データ アニメイラストの顔データセット http://www.nurs.or.jp/~nagadomi/ animeface-character-dataset/ 生成したデータ
  • 21. 実例3 : GAN (Generative Adversarial Network) 深層学習と確率プログラミングを融合した についてEdward 20 min 𝜃𝜃 max 𝜙𝜙 𝐸𝐸𝑝𝑝∗(𝐱𝐱) log 𝐷𝐷(𝐱𝐱; 𝝓𝝓) + 𝐸𝐸𝑝𝑝(𝐱𝐱;𝜽𝜽) log 1 − 𝐷𝐷(𝐱𝐱; 𝝓𝝓) 目的関数 inference = ed.GANInference( data={x: x_ph}, discriminator=discriminative_network) モデルから生成されたデータと学習データを識別する識別器と 生成モデルを競わせることでデータの分布を学習させる手法
  • 22. 実例3 : GAN (Generative Adversarial Network) 深層学習と確率プログラミングを融合した についてEdward 21 min 𝜃𝜃 max 𝜙𝜙 𝐸𝐸𝑝𝑝∗(𝐱𝐱) log 𝐷𝐷(𝐱𝐱; 𝝓𝝓) + 𝐸𝐸𝑝𝑝(𝐱𝐱;𝜽𝜽) log 1 − 𝐷𝐷(𝐱𝐱; 𝝓𝝓) 目的関数 inference = ed.GANInference( data={x: x_ph}, discriminator=discriminative_network) モデルから生成されたデータと学習データを識別する識別器と 生成モデルを競わせることでデータの分布を学習させる手法 生成したデータ学習データ(MNIST)
  • 23. Edward (現バージョン)でのノウハウ • 大きいモデルをいきなり書かくと危険 – サンプルにあるモデルから徐々に変数を追加していくのが吉 • 現状ではデバッグの手段が限られている(Tensorboad は利用可能) • 計算結果がNanとなってしまうことを回避 • 学習法はモデルに応じて適切に選ぶ必要がある – ニューラルネット色の濃いモデルなら変分推論,確率モデル 色の濃いモデルならMCMC – 未実装の機能やいくつかあるが,どんどん実装されている 深層学習と確率プログラミングを融合した についてEdward 22
  • 24. まとめ • 確率モデルをTensorflow上で計算・実装できる Python ライブラリEdwardを紹介 – MCMCによる推論の例:混合ガウスモデル – 変分推論の例:VAE – GAN • 今後,Edwardを用いたアプリケーションが期待される – ハードウェアによる高速化(GPUによる高速な行列計算)の活用 – 大量・高次元のデータ処理への可能性 深層学習と確率プログラミングを融合した についてEdward 23