خانه / datamining / معرفی زبان Gen
زبان Gen

معرفی زبان Gen

زمینه زبانهای برنامه نویسی احتمالی PPL یک تجربه شگفت انگیز را برای رشد سریع فناوریهای یادگیری ماشین انجام می دهد. فقط در طی چند سال ، PPL ها از یک منطقه مبهم از تحقیقات آماری به شمارش بیش از ده ها طرح ابتکاری Open Source واقعا فعال رفته اند. به تازگی ، محققان موسسه فناوری ماساچوست (MIT) از یک زبان برنامه نویسی احتمالی جدید به نام Gen پرده برداری کردند. این زبان جدید به محققان اجازه می دهد تا مدل ها و الگوریتم هایی را از زمینه های مختلفی که تکنیک های هوش مصنوعی به کار می رود مانند دید رایانه ، روباتیک و آمار استفاده شود.

PPL ها یکسری کامپوننت های منظم از ساختار یادگیری ماشین هستند اما اجرای آن همچنان چالش برانگیز است. اگرچه افزایش چشمگیر PPL در بازار وجود داشته است ، اما اکثر آنها محدود به تلاشهای تحقیقاتی و غیر عملی برای کاربردهای عمومی هستند. یک چالش مشابه در فضای یادگیری عمیق تا زمان Google open sourced TensorFlow در سال 2015 تجربه شد. با TensorFlow ، توسعه دهندگان قادر به ساختن مدلهای یادگیری عمیق بسیار پیچیده و در عین حال کارآمد با استفاده از یک چارچوب ثابت بودند. به تعبیری ، Gen به دنبال انجام برنامه نویسی احتمالی است که TensorFlow برای یادگیری عمیق انجام داده است. با این حال ، برای انجام این کار ، Gen باید در مورد دو ویژگی اصلی PPL ها ، تعادل خوبی را برطرف کند.

بیانگری در مقابل بهره وری

بزرگترین چالش PPL های مدرن تعادل هر دو مدل سازی بیان و کارایی استنتاج است. در حالی که بسیاری از PPL ها از لحاظ نحوی غنی هستند که می توانند برای نشان دادن تقریباً هر مدلی مورد استفاده قرار گیرند ، اما تمایل دارند از مجموعه محدودی از الگوریتم های استنتاج حمایت کنند که بطور آهسته همگرا می شوند. PPL های دیگر غنی از الگوریتم های استنتاج هستند اما محدود به حوزه های خاص هستند که این امر را برای برنامه های عمومی کاربرد ندارد.

با استفاده از اصطکاک پذیری و راندمان اصطکاک ، یک PPL با هدف کلی باید دو بردار اصلی کارایی را فعال کند:

1 – کارایی الگوریتم استنتاج: یک PPL با هدف کلی باید به توسعه دهندگان اجازه دهد تا بدون آسیب زدن به عملکرد اجزای اصلی ، مدلهای سفارشی و بسیار پیشرفته ایجاد کنند. هرچه نحوی PPL روشن تر باشد ، روند بهینه سازی چالش برانگیزتر خواهد بود.

2 – کارایی پیاده سازی: یک PPL با هدف کلی به یک سیستم نیاز دارد تا الگوریتم های استنتاج را اجرا کند که فراتر از خود الگوریتم است. کارآیی پیاده سازی توسط عواملی مانند ساختار داده ها که برای ذخیره حالت الگوریتم استفاده می شود و اینکه آیا سیستم از حافظه پنهانی و محاسبات افزایشی استفاده می کند ، تعیین می شود.

زبان Gen

ژنرال با استفاده از یک معماری جدید که بر برخی از تکنیک های سنتی PPL پیشرفت می کند ، برخی از چالش های ذکر شده در بخش قبلی را برطرف می کند. براساس زبان برنامه نویسی julia معماری را معرفی می کند که مدل ها را نه به عنوان کد برنامه در یک زبان مدل سازی کامل تورینگ ، بلکه به عنوان جعبه های سیاه که قابلیت های مفید برای استنتاج را از طریق یک رابط مشترک نشان می دهد ، معرفی می کند. این جعبه های سیاه توابع تولیدی نامیده می شوند و رابط با قابلیت های زیر را شامل می شوند:

1 – ابزار برای ساختن مدل ها:

Gen چندین زبان مدل سازی متقابل را ارائه می دهد ، هر یک از انعطاف پذیری / بازده متفاوت بهره می برند. یک مدل واحد می تواند کد را از چندین زبان مدل سازی ترکیب کند. توابع تولیدی حاصل ساختارهای داده را به خوبی با مدل و همچنین محاسبات افزایشی مناسب می کند.

2 – ابزاری برای Tailoring Inference

Gen کتابخانه سطح بالایی را برای برنامه نویسی Inference فراهم می کند ، که بلوک های ساختمانی الگوریتم Inference را پیاده سازی می کند که فقط با عملکردهای تولیدی با مدل ها در تعامل است.

3 – ارزیابی

Gen یک مدل تجربی برای ارزیابی عملکرد خود در برابر گزینه های مختلف در مشکلات استنتاج مشهور ارائه می دهد.

شکل زیر معماری Gen را نشان می دهد. همانطور که مشاهده می کنید ، چارچوب ها از الگوریتم های استنتاج تفاوت و همچنین لایه ای از انتزاع مبتنی بر مفهوم توابع تولیدی پشتیبانی می کنند.

منبع

استفاده از زبان Gen

شروع با ژنرال بسیار ساده است. این زبان با استفاده از Julia package manager قابل نصب است.
pkg> add https://github.com/probcomp/Gen

نوشتن یک عملکرد تولیدی در Gen به آسانی نوشتن یک عملکرد Julian با چند پسوند است.

@gen function foo(prob::Float64)
    z1 = @trace(bernoulli(prob), :a)
    z2 = @trace(bernoulli(prob), :b)
    return z1 || z2
end
Gen همچنین شامل یک چارچوب ویژوالی و تجسمی است که اجازه می دهد تا مدل های استنتاج را ترسیم کند و کارایی آن را ارزیابی کند.
# Start a visualization server on port 8000 
server = VizServer(8000)  
# Initialize a visualization with some parameters 
viz = Viz(server, joinpath(@__DIR__, "vue/dist"), 
Dict("xs" => xs, "ys" => ys, "num" => length(xs), "xlim" => [minimum(xs), maximum(xs)], "ylim" => [minimum(ys), maximum(ys)]))  # Open the visualization in a browser 
openInBrowser(viz)

Gen تنها زبانی نیست که سعی در حل چالش های استنتاج قابل برنامه ریزی دارد. در سالهای اخیر ، فضای PPL با تعدادی از زبان برنامه نویسی روبرو بوده است:

Edward

Edward  یک Turing-complete probabilistic programming language) PPL) نوشته شده بوسیله پایتون است. Edward  در ابتدا توسط تیم Google Brain معرفی شد اما اکنون لیست گسترده ای از مشارکت کنندگان را در اختیار دارد. مقاله اصلی تحقیق Edward   در مارس سال 2017 منتشر شد و از آن زمان جامعه هوش مصنوعی شاهد پذیرش زیادی بوده است. Edward  سه زمینه را آمیخته است: آمار بیزی و یادگیری ماشین ، یادگیری عمیق و برنامه نویسی احتمالی. این کتابخانه یکپارچه با چارچوبهای یادگیری عمیق مانند Keras و TensorFlow ادغام شده است.

Pyro

Pyro یک زبان برنامه نویسی احتمالاً عمیق (PPL) است که توسط Uber AI Labs منتشر شده است. Pyro در بالای PyTorch ساخته شده است.

Infer.Net

مایکروسافت اخیراً چارچوبی را برای برنامه نویسی احتمالی برای توسعه دهندگان .Net ، Infer.Net چیدمان باز کرده است. تحقیقات مایکروسافت از سال 2004 در Infer.NET کار می کند ، اما اخیراً با ظهور یادگیری عمیق ، این چارچوب بسیار محبوب شده است. Infer.NET برخی از تمایزهای قدرتمند را فراهم می کند که آن را به گزینه ای قدرتمند برای توسعه دهندگان که وارد فضای Deep PPL می شوند ، تبدیل می کند.

Gen یکی از جدیدترین اما همچنین یکی از جالب ترین اضافات در فضای PPL است. ترکیب آمار و یادگیری عمیق عنصر اصلی آینده فضای هوش مصنوعی است. تلاشهایی مانند Gen در تلاش هستند تا PPL ها را به همان روشی که TensorFlow برای یادگیری عمیق انجام داده ، دموکراتیک سازی کند.

  • آیا این مقاله مفید بود؟
  • بله   خیر

با تمام وجود علاقمندم مباحث جدید مربوط به برنامه نویسی رو یاد بگیرم و به دیگران یاد بدم. نیمی از زمان روزانه رو صرف یادگیری میکنم. سعی میکنم مقالات مفید و جدید در حوزه برنامه نویسی و به ویژه جاوا اسکریپت رو برای شما دوستان عزیز در لایو گوگل منتشر کنم.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.