गाऊसी के बेयसियन मिश्रण के लिए स्टोकेस्टिक वैरिएशन का प्रयोग


9

मैं इस पेपर के बाद स्टोकेस्टिक वैरिएशन के साथ गौसियन मिक्सचर मॉडल को लागू करने की कोशिश कर रहा हूं ।

यहाँ छवि विवरण दर्ज करें

यह गॉसियन मिक्सचर का पैगाम है।

कागज के अनुसार, स्टोकेस्टिक वैरिएशन की पूर्ण एल्गोरिथ्म है: यहाँ छवि विवरण दर्ज करें

और मैं अभी भी जीएमएम के लिए इसे स्केल करने की विधि से बहुत भ्रमित हूं।

सबसे पहले, मैंने सोचा कि स्थानीय परिवर्तनशील पैरामीटर बस है qzऔर अन्य सभी वैश्विक पैरामीटर हैं। कृपया मुझे सही करें अगर मैं गलत था। चरण 6 का क्या अर्थ है as though Xi is replicated by N times? इसे प्राप्त करने के लिए मुझे क्या करना चाहिए?

क्या आप कृपया इसमें मेरी मदद कर सकते हैं? अग्रिम में धन्यवाद!


यह कह रहा है कि पूरे डेटासेट का उपयोग करने के बजाय, एक डेटा पॉइंट का नमूना लें और आपके पास दिखावा करें Nसमान आकार के डेटा पॉइंट। कई मामलों में, यह एक डेटापॉइंट के साथ एक अपेक्षा को गुणा करने के बराबर होगाN
डेयॉन्ग लिम

@DaeyoungLim आपके उत्तर के लिए धन्यवाद! मुझे वह मिला जो अब आपका मतलब है, लेकिन मैं अभी भी उलझन में हूं कि कौन से आंकड़े स्थानीय स्तर पर अपडेट किए जाएं और कौन से विश्व स्तर पर अपडेट किए जाएं। उदाहरण के लिए, यहाँ गौसियन के मिश्रण का कार्यान्वयन है, क्या आप मुझे बता सकते हैं कि इसे किस तरह से बढ़ाया जाए? मैं थोड़ा खोया हुआ हूं। आपका बहुत बहुत धन्यवाद!
user5779223

मैंने पूरे कोड को नहीं पढ़ा है, लेकिन यदि आप एक गाऊसी मिश्रण मॉडल के साथ काम कर रहे हैं, तो मिश्रण घटक संकेतक चर स्थानीय चर होने चाहिए क्योंकि उनमें से प्रत्येक सिर्फ एक अवलोकन के साथ जुड़ा हुआ है। इसलिए मिश्रण घटक अव्यक्त चर जो मल्टीनॉली वितरण (एमएल में श्रेणीगत वितरण के रूप में भी जाना जाता है) का पालन करते हैंzi,i=1,,Nऊपर अपने विवरण में।
डेयॉन्ग लिम

@DaeyoungLim हाँ, मैं समझता हूँ कि आपने अभी तक क्या कहा है। इसलिए परिवर्तनशील वितरण के लिए q (Z) q (\ pi, \ mu, \ lambda), q (Z) स्थानीय परिवर्तनशील होना चाहिए। लेकिन q (Z) से जुड़े बहुत सारे पैरामीटर हैं। दूसरी ओर, q (\ pi, \ mu, \ lambda) से जुड़े कई पैरामीटर भी हैं। और मुझे नहीं पता कि उन्हें उचित रूप से कैसे अपडेट किया जाए।
user5779223

आपको परिवर्तनीय मापदंडों के लिए इष्टतम परिवर्तनशील वितरण प्राप्त करने के लिए माध्य क्षेत्र की धारणा का उपयोग करना चाहिए। यहाँ एक संदर्भ है: maths.usyd.edu.au/u/jormerod/JTOpapers/Ormerod10.pdf
लिम

जवाबों:


2

यह ट्यूटोरियल ( https://chrisdxie.files.wordpress.com/2016/06/in-depth-variational-inference-tutorial.pdf ) आपके अधिकांश प्रश्नों के उत्तर देता है, और संभवतः मूल SVI पेपर की तुलना में समझना आसान होगा यह गाऊसी मिश्रण मॉडल (ज्ञात प्रसरण के साथ) के लिए SVI (और एसेंट VI और गिब्बस सैंपलिंग को लागू करने के विवरण) के सभी विवरणों के माध्यम से विशेष रूप से जाता है।


1

सबसे पहले, कुछ नोट्स जो मुझे SVI पेपर की समझ बनाने में मदद करते हैं:

  • वैश्विक मापदंडों के परिवर्तनीय पैरामीटर के लिए मध्यवर्ती मूल्य की गणना में, हम एक डेटा बिंदु का नमूना लेते हैं और हमारे पूरे डेटा को आकार का दिखावा करते हैं N क्या वह एकल बिंदु था, N बार।
  • ηg वैश्विक चर की पूर्ण सशर्त के लिए प्राकृतिक पैरामीटर है β। नोटेशन का उपयोग तनाव के लिए किया जाता है कि यह देखे गए डेटा सहित वातानुकूलित चर का एक फ़ंक्शन है।

के मिश्रण में k गाऊसी, हमारे वैश्विक पैरामीटर माध्य और सटीक (उलटा विचरण) पैरामीटर हैं μk,τkप्रत्येक के लिए परम। अर्थात्,ηg इस वितरण के लिए प्राकृतिक पैरामीटर है, फॉर्म का एक सामान्य-गामा

μ,τN(μ|γ,τ(2α1)Ga(τ|α,β)

साथ में η0=2α1, η1=γ(2α1) तथा η2=2β+γ2(2α1)। (बर्नार्डो और स्मिथ, बेयसियन थ्योरी ; ध्यान दें कि यह सामान्य रूप से देखे जाने वाले चार-पैरामीटर सामान्य-गामा से भिन्न होता है ।)a,b,m के लिए परिवर्तनीय मापदंडों का संदर्भ लें α,β,μ

की पूर्ण सशर्त μk,τk परम के साथ एक सामान्य-गामा है η˙+Nzn,k, Nzn,kxN, Nzn,kxn2, कहाँ पे η˙पूर्व है। (zn,kवहाँ भी भ्रामक हो सकता है; यह समझ में आता है एक के साथ शुरूexpln(p)) के लिए लागू चाल Np(xn|zn,α,β,γ)=NK(p(xn|αk,βk,γk))zn,k, और पाठक के लिए बीजगणित की उचित मात्रा के साथ समाप्त होता है।)

इसके साथ, हम SVI छद्मकोड के चरण (5) को पूरा कर सकते हैं:

ϕn,kexp(ln(π)+Eqln(p(xn|αk,βk,γk))=exp(ln(π)+Eq[μkτk,τ2x,x2μ2τlnτ2)]

वैश्विक मापदंडों को अपडेट करना आसान है, क्योंकि प्रत्येक पैरामीटर डेटा की गणना या उसके पर्याप्त आंकड़ों में से एक से मेल खाता है:

λ^=η˙+Nϕn1,x,x2

यहां बताया गया है कि बहुत अधिक कृत्रिम, आसानी से वियोज्य डेटा (नीचे कोड) पर प्रशिक्षित होने पर डेटा की सीमांत संभावना कई पुनरावृत्तियों की तरह दिखती है। पहला प्लॉट प्रारंभिक, यादृच्छिक वैरिएबल मापदंडों और के साथ संभावना दर्शाता है0पुनरावृत्तियों; प्रत्येक बाद में दो पुनरावृत्तियों की अगली शक्ति के बाद है। कोड मेंa,b,m के लिए परिवर्तनीय मापदंडों का संदर्भ लें α,β,μ

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 12 12:49:15 2018

@author: SeanEaster
"""

import numpy as np
from matplotlib import pylab as plt
from scipy.stats import t
from scipy.special import digamma 

# These are priors for mu, alpha and beta

def calc_rho(t, delay=16,forgetting=1.):
    return np.power(t + delay, -forgetting)

m_prior, alpha_prior, beta_prior = 0., 1., 1.
eta_0 = 2 * alpha_prior - 1
eta_1 = m_prior * (2 * alpha_prior - 1)
eta_2 = 2 *  beta_prior + np.power(m_prior, 2.) * (2 * alpha_prior - 1)

k = 3

eta_shape = (k,3)
eta_prior = np.ones(eta_shape)
eta_prior[:,0] = eta_0
eta_prior[:,1] = eta_1
eta_prior[:,2] = eta_2

np.random.seed(123) 
size = 1000
dummy_data = np.concatenate((
        np.random.normal(-1., scale=.25, size=size),
        np.random.normal(0.,  scale=.25,size=size),
        np.random.normal(1., scale=.25, size=size)
        ))
N = len(dummy_data)
S = 1

# randomly init global params
alpha = np.random.gamma(3., scale=1./3., size=k)
m = np.random.normal(scale=1, size=k)
beta = np.random.gamma(3., scale=1./3., size=k)

eta = np.zeros(eta_shape)
eta[:,0] = 2 * alpha - 1
eta[:,1] = m * eta[:,0]
eta[:,2] = 2. * beta + np.power(m, 2.) * eta[:,0]


phi = np.random.dirichlet(np.ones(k) / k, size = dummy_data.shape[0])

nrows, ncols = 4, 5
total_plots = nrows * ncols
total_iters = np.power(2, total_plots - 1)
iter_idx = 0

x = np.linspace(dummy_data.min(), dummy_data.max(), num=200)

while iter_idx < total_iters:

    if np.log2(iter_idx + 1) % 1 == 0:

        alpha = 0.5 * (eta[:,0] + 1)
        beta = 0.5 * (eta[:,2] - np.power(eta[:,1], 2.) / eta[:,0])
        m = eta[:,1] / eta[:,0]
        idx = int(np.log2(iter_idx + 1)) + 1

        f = plt.subplot(nrows, ncols, idx)
        s = np.zeros(x.shape)
        for _ in range(k):
            y = t.pdf(x, alpha[_], m[_], 2 * beta[_] / (2 * alpha[_] - 1))
            s += y
            plt.plot(x, y)
        plt.plot(x, s)
        f.axes.get_xaxis().set_visible(False)
        f.axes.get_yaxis().set_visible(False)

    # randomly sample data point, update parameters
    interm_eta = np.zeros(eta_shape)
    for _ in range(S):
        datum = np.random.choice(dummy_data, 1)

        # mean params for ease of calculating expectations
        alpha = 0.5 * ( eta[:,0] + 1)
        beta = 0.5 * (eta[:,2] - np.power(eta[:,1], 2) / eta[:,0])
        m = eta[:,1] / eta[:,0]

        exp_mu = m
        exp_tau = alpha / beta 
        exp_tau_m_sq = 1. / (2 * alpha - 1) + np.power(m, 2.) * alpha / beta
        exp_log_tau = digamma(alpha) - np.log(beta)


        like_term = datum * (exp_mu * exp_tau) - np.power(datum, 2.) * exp_tau / 2 \
            - (0.5 * exp_tau_m_sq - 0.5 * exp_log_tau)
        log_phi = np.log(1. / k) + like_term
        phi = np.exp(log_phi)
        phi = phi / phi.sum()

        interm_eta[:, 0] += phi
        interm_eta[:, 1] += phi * datum
        interm_eta[:, 2] += phi * np.power(datum, 2.)

    interm_eta = interm_eta * N / S
    interm_eta += eta_prior

    rho = calc_rho(iter_idx + 1)

    eta = (1 - rho) * eta + rho * interm_eta

    iter_idx += 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.