গাউসের বায়েশিয়ান মিশ্রণে স্টোকাস্টিক ভেরিয়েশনাল ইনফেরেন্স প্রয়োগ করা


9

আমি এই কাগজটি অনুসরণ করে স্টোকাস্টিক ভেরিয়েশনাল ইনফারেন্স সহ গসিয়ান মিশ্রণ মডেলটি বাস্তবায়নের চেষ্টা করছি ।

এখানে চিত্র বর্ণনা লিখুন

এটি গাউসিয়ান মিশ্রণের পিজিএম।

কাগজ অনুসারে, স্টোকাস্টিক ভেরিয়েশনাল ইনফেরেন্সের সম্পূর্ণ অ্যালগরিদম হ'ল: এখানে চিত্র বর্ণনা লিখুন

এবং GMM তে এটি স্কেল করার পদ্ধতিটি সম্পর্কে আমি এখনও খুব বিভ্রান্ত।

প্রথমত, আমি ভেবেছিলাম স্থানীয় প্যারামিটারটি কেবল এবং অন্যরা সমস্ত গ্লোবাল প্যারামিটার। আমি ভুল হলে আমাকে সংশোধন করুন। The ধাপটির অর্থ কী ? এটি অর্জনের জন্য আমার কী করা উচিত?qzas though Xi is replicated by N times

আপনি কি আমাকে এই সাহায্য করতে পারেন? আগাম ধন্যবাদ!


এটি বলছে যে পুরো ডেটাसेट ব্যবহার করার পরিবর্তে, একটি ডেটাপয়েন্টটি নমুনা করুন এবং ভান করুন যে আপনার কাছে একই আকারের ডেটাপয়েন্ট রয়েছে। অনেক ক্ষেত্রে, এটি দ্বারা একটি ডেটাপয়েন্টের সাথে একটি প্রত্যাশা গুণনের সমতুল্য । NN
দায়েউং লিম

@ দায়েউংলিম আপনার জবাবের জন্য ধন্যবাদ! আপনি এখন যা বলতে চাইছেন তা আমি পেয়েছি তবে আমি এখনও বিভ্রান্ত হয়েছি যে কোন পরিসংখ্যান স্থানীয়ভাবে আপডেট করা উচিত এবং কোনটি বিশ্বব্যাপী আপডেট করা উচিত। উদাহরণস্বরূপ, এখানে গাউসির মিশ্রণের একটি বাস্তবায়ন রয়েছে, আপনি কি আমাকে বলতে পারেন কীভাবে এটি এসভিতে স্কেল করা যায়? আমি খানিকটা হারিয়েছি। অনেক ধন্যবাদ!
ব্যবহারকারী5779223

আমি পুরো কোডটি পড়িনি তবে আপনি যদি কোনও গাউসিয়ান মিশ্রণ মডেলটির সাথে কাজ করছেন তবে মিশ্রণ উপাদান সূচক ভেরিয়েবলগুলি স্থানীয় ভেরিয়েবল হওয়া উচিত কারণ এগুলির প্রত্যেকটি একটি মাত্র পর্যবেক্ষণের সাথে যুক্ত। সুতরাং মিশ্রণ উপাদান সুপ্ত ভেরিয়েবলগুলি যা মাল্টিনুল্লি বিতরণ অনুসরণ করে (এটি এমএলে শ্রেণিবদ্ধ বিতরণ হিসাবেও পরিচিত)উপরের আপনার বর্ণনায়zi,i=1,,N
দায়েউং লিম

@ দায়েউংলিম হ্যাঁ, আপনি এতক্ষণ কী বলেছেন তা আমি বুঝতে পেরেছি। সুতরাং ভেরিয়েশনাল ডিস্ট্রিবিউশনের জন্য q (Z) q (\ pi, \ mu, mb lambda), q (Z) এর স্থানীয় ভেরিয়েবল হওয়া উচিত। তবে কিউ (জেড) এর সাথে যুক্ত প্রচুর পরামিতি রয়েছে। অন্যদিকে, q (i পাই, \ মিউ, mb ল্যাম্বদা) এর সাথে যুক্ত অনেকগুলি পরামিতি রয়েছে। এবং কীভাবে এগুলিকে যথাযথভাবে আপডেট করতে হয় তা আমি জানি না।
ব্যবহারকারী5779223

বৈকল্পিক পরামিতিগুলির জন্য সর্বোত্তম বৈকল্পিক বিতরণ পেতে আপনার গড়-ক্ষেত্র অনুমানটি ব্যবহার করা উচিত। এখানে একটি রেফারেন্স দেওয়া আছে: maths.usyd.edu.au/u/jormerod/JTOpapers/Ormerod10.pdf
দাইয়ং লিম

উত্তর:


2

এই টিউটোরিয়াল ( https://chrisdxie.files.wordpress.com/2016/06/in-depth-variational-inferences-tutorial.pdf ) আপনার বেশিরভাগ প্রশ্নের উত্তর দেয় এবং সম্ভবত মূল এসভিআই কাগজের চেয়ে বোঝা সহজ হবে এটি গাউসীয় মিশ্রণ মডেলের (জ্ঞাত বৈকল্পিকতা সহ) SVI বাস্তবায়নের সমস্ত বিবরণ (এবং আরোহী ষষ্ঠ এবং গিবস স্যাম্পলিং সমন্বয়) এর মাধ্যমে বিশেষভাবে যায়।


1

প্রথমত, কয়েকটি নোট যা আমাকে এসভিআই কাগজটি অনুধাবন করতে সহায়তা করে:

  • বিশ্বব্যাপী পরামিতি, আমরা নমুনা একটি ডেটা বিন্দু ভেরিয়েশনাল পরামিতি জন্য অন্তর্বর্তী মান গণনা করার সময়ে এবং আকার আমাদের সমগ্র ডেটা সেট সাজা ইন যে একক বিন্দু ছিল বার।NN
  • ηg হ'ল বৈশ্বিক পরিবর্তনশীল এর সম্পূর্ণ শর্ত প্রাকৃতিক প্যারামিটার । স্বরলিপিটি পর্যবেক্ষণ করা ডেটা সহ কন্ডিশনড ভেরিয়েবলগুলির একটি ক্রিয়াকলাপের চাপের জন্য ব্যবহৃত হয়। β

গাউসিয়ানদের মিশ্রণে , আমাদের গ্লোবাল প্যারামিটারগুলি প্রতিটির জন্য গড় এবং নির্ভুলতা (বিপরীত পরিবর্তন) পরামিতি প্যারামিগুলি । এটি হ'ল, হ'ল এই বিতরণের প্রাকৃতিক প্যারামিটার, ফর্মের একটি সাধারণ-গামাkμk,τkηg

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

সঙ্গে , এবং । (বের্নার্ডো এবং স্মিথ, Bayesian তত্ত্ব ; নোট এই চার পরামিতি সাধারন-গামা থেকে সামান্য আপনি করব পরিবর্তিত হয় সাধারণভাবে দেখতে ।) আমরা ব্যবহার করব ভেরিয়েশনাল পরামিতি করার জন্য উল্লেখ করতেη0=2α1η1=γ(2α1)η2=2β+γ2(2α1)a,b,mα,β,μ

কে- এর সম্পূর্ণ শর্তসাপেক্ষ , , একটি সাধারণ-গামা , যেখানে আগে is (সেখানে থাকা এছাড়াও বিভ্রান্ত হতে পারে; এটি ট্রিক দ্বারা প্রয়োগ করা , এবং পাঠকের কাছে যথেষ্ট পরিমাণ বীজগণিতের সমাপ্তি)μk,τkη˙+Nzn,kNzn,kxNNzn,kxn2η˙zn,kexpln(p))Np(xn|zn,α,β,γ)=NK(p(xn|αk,βk,γk))zn,k

এটির সাহায্যে আমরা এসবিআই সিউডোকোডের পদক্ষেপ (5) সম্পূর্ণ করতে পারি:

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

গ্লোবাল প্যারামিটারগুলি আপডেট করা সহজ, যেহেতু প্রতিটি পরামিতি ডেটা বা তার পর্যাপ্ত পরিসংখ্যানগুলির একটিতে গণনার সাথে মিল রাখে:

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

খুব কৃত্রিম, সহজে পৃথকযোগ্য ডেটা (নীচের কোড) এর উপর প্রশিক্ষণ প্রাপ্ত হয়ে ডেটার প্রান্তিক সম্ভাবনাটি অনেকগুলি পুনরাবৃত্তির উপর দেখতে কেমন লাগে তা এখানে। প্রথম প্লটটি প্রাথমিক, এলোমেলো পরিবর্তনীয় পরামিতি এবং পুনরাবৃত্তির সাথে সম্ভাবনা দেখায় ; প্রতিটি পরবর্তীটি দুটি পুনরাবৃত্তির পরবর্তী পাওয়ারের পরে হয়। কোডটিতে, জন্য বিভিন্ন প্যারামিটারগুলি উল্লেখ করে ।0a,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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.