بین مشین ریٹرو اسپیکٹیو ، حصہ 5
آئیے “ہیلو ورلڈ” مثال پر ایک اور نظر ڈالیں اور اس کے بارے میں زیادہ احتیاط سے سوچیں کہ اصل میں کیا ہو رہا ہے:
@random_variable
def fairness():
return Beta(2,2)
@random_variable
def flip(n):
return Bernoulli(fairness())
heads = tensor(1)
tails = tensor(0)
observations = { flip(0) : heads, ... flip(9): tails }
queries = ( fairness() )
num_samples = 10000
results = BMGInference().infer(queries, observations, num_samples)
samples = results(fairness())
یہاں بہت کچھ چل رہا ہے۔ آئیے بے ترتیب متغیرات کی واپسی والی اقدار کو صاف کرکے شروع کریں۔
یہ یقینی طور پر لگتا ہے fairness() پیٹرچ آبجیکٹ کی ایک مثال لوٹاتا ہے – Beta(2,2) – لیکن ماڈل ایسا سلوک کرتا ہے جیسے یہ واپس آیا ہو نمونہ کال میں اس تقسیم سے Bernoulli. کیا ہو رہا ہے؟
کال بھی واپس نہیں آتی ہے۔ یہ لوٹتا ہے a بے ترتیب متغیر شناخت کنندہ، جسے میں RVID کے طور پر مختص کروں گا۔ ایک RVID بنیادی طور پر اصل فنکشن اور تمام دلائل کا ایک ٹپل ہے۔ (اگر آپ کو لگتا ہے کہ یہ یادداشت کی لغت کی کلید کی طرح لگتا ہے تو ، آپ ٹھیک ہیں!)
یہ ایک حد سے زیادہ وضاحت ہے ، لیکن آپ ابھی تصور کرسکتے ہیں کہ یہ اس طرح کام کرتا ہے:
def random_variable(original_function):
def new_function(*args):
return RVID(original_function, args)
# The actual implementation stashes away useful information
# and has logic needed for other Bean Machine inference algorithms
# but for our purposes, pretend it just returns an RVID.
return new_function
def fairness():
return Beta(2,2)
fairness = random_variable(fairness)
ڈیکوریٹر ہمیں جوڑ توڑ کرنے دیتا ہے فنکشن کالز جو بے ترتیب متغیر کی نمائندگی کرتی ہیں جیسا کہ اقدار! اب یہ واضح ہونا چاہئے کہ کیسے
کام ؛ ہم یہاں واقعی کیا کر رہے ہیں
queries = ( RVID(fairness, ()) )
اس سے یہ واضح ہوجاتا ہے کہ یہ کیسے ہے کہ ہم بے ترتیب متغیرات کو کالوں کو منفرد اقدار کے طور پر سلوک کرتے ہیں۔ اشارہ کے بارے میں کیا خیال ہے؟
آر وی آئی ڈی کو پیدا کرنے کے لئے بے ترتیب متغیرات کی وجہ سے سجاوٹ کرنے والوں کے طرز عمل کو چھوڑ کر ، ہمارا “ہیلو ورلڈ” پروگرام یہاں تک کسی دوسرے ازگر پروگرام کی طرح کام کرتا ہے۔
results = BMGInference().infer(queries, observations, num_samples)
دلیل queries rvids کی ایک فہرست ہے ، اور observations ان کی مشاہدہ شدہ اقدار پر ایک لغت کی نقشہ سازی rvids ہے۔ سیدھے سادے infer ایک معجزہ ہونے کا سبب بنتا ہے: یہ ایک لغت کی نقشہ سازی کو واپس کرتا ہے جس میں ہر سوالات کے ایک ٹینسر پر num_samples وہ قدریں جو بے ترتیب متغیر کے پچھلے حصے کی تقسیم سے قابل احترام نمونے ہیں۔
یقینا it یہ کوئی معجزہ نہیں ہے۔ ہم مندرجہ ذیل اقدامات کرتے ہیں:
- ماخذ کوڈ کو تبدیل کریں ہر ایک سوال شدہ یا مشاہدہ شدہ فنکشن (اور ان کے کالے) کو ایک مساوی پروگرام میں جزوی طور پر تشخیص کرتا ہے ماڈل ، ایک گراف جمع کرنا جیسا کہ یہ جاتا ہے
- عملدرآمد گراف جمع کرنے کے لئے تبدیل شدہ کوڈ
- تبدیلی جمع شدہ گراف ایک درست میں بی ایم جی گراف
- تشخیص کریں بی ایم جی میں گراف پر
- مارشل نمونے صارف کے ذریعہ متوقع لغت کے ڈیٹا ڈھانچے میں واپس آئے
دیکھنے پر آرہا ہے: ہم دیکھیں گے کہ ہم نے ان میں سے ہر ایک اقدام کو کس طرح نافذ کیا۔
