۲۹ شهریور ۱۳۹۹

بسته نرم افزاری Primitives

انیمیشنی که مشاهده می‌کنید، خروجی یک بسته نرم‌افزاری به نام Primitives است که به صورت متن‌باز در گیت‌هاب [+] در دسترس قرار دارد. کد این نرم‌افزار، با استفاده از زبان Go و توسط «مایکل فوگلمن» نوشته شده است.

خروجی این برنامه، می‌تواند به صورت رستری (فرمت PNG و JPG)، برداری (فرمت SVG) و یا انیمیشن (فرمت GIF) باشد. برای ساخت خروجی نیز، می‌توان مشخص کرد که شکل یا عنصر پایه (Primitive) چه باشد؛ خط، دایره، مستطیل، بیضی، مثلث، چندضلعی و حتی ترکیب همه این‌ها.

اما این نرم‌افزار چطور این کار را انجام می‌دهد؟ مسأله ما، یافتن یک نسخه تقریبی از تصویر ورودی است که در آن، از عناصر پایه مشخصی استفاده شده است. در واقع، این یک مسأله بهینه‌سازی است که البته پاسخ زیر-بهینه (sub-optimal) برای آن نیز، کار ما را راه می‌اندازد.

اما برای ساده‌تر کردن حل این مسأله بهینه‌سازی، یک ترفند جالب به کار رفته است. حل مسأله آن طور که هست، خیلی سخت است؛ اما می‌توان آن را تبدیل به یک فرایند بهینه‌سازی دنباله‌ای (Sequential Optimization) کرد. یعنی به جای حل یک مسأله بزرگ و سخت، چند مسأله ریز و متوالی را حل کنیم.

این تکنیک رایجی در حل مسائل بهینه‌سازی است و کاربردهای فراوانی در حوزه‌های مختلف دارد. در مورد این کاربرد خاص، مسأله اصلی به پیدا کردن فقط و فقط یک شکل یا عنصر پایه در هر مرحله، شکسته می‌شود. یعنی در هر مرحله، فقط یک عنصر افزوده می‌شود. البته پاسخ، غالبا زیر-بهینه خواهد بود.

مثلا فرض کنید که قصد داریم تصویری را فقط با دایره تخمین بزنیم. الگوریتم وقتی شروع به کار می‌کند، یک صفحه خالی دارد و بهترین دایره تنها را پیدا می‌کند که می‌تواند بهترین تقریب از تصویر را ارائه کند. محل، اندازه، زاویه، رنگ و شفافیت عناصر، متغیرهای تصمیم ما هستند. الگوریتم با تغییر این موارد، در فضای جواب به دنبال بهترین عنصری می‌گردد که می‌تواند اضافه کند و خطای تصویر تقریبی را کاهش دهد. تابع خطا نیز با معیارهایی مانند مجموع یا میانگین مربعات اختلاف رنگ، قابل محاسبه است.

در پروژه Primitive از الگوریتم‌های بهینه‌سازی ساده‌ای استفاده شده است و نتایج هم قابل قبولند؛ هم سرعت خوبی دارند و هم کیفیت پاسخ‌ها مطلوب است. در این برنامه نسخه تغییر یافته الگوریتم‌های تپه‌نوردی (Hill Climbing) و شبیه‌سازی تبرید (Simulated Annealing) به کار رفته‌اند.

الگوریتم بهینه‌سازی، در هر مرحله، بهترین شکل پایه جدیدی را که می‌تواند، پیدا می‌کند و به نتیجه بهینه‌سازی به دست آمده از مراحل قبل، اضافه می‌کند. به این ترتیب، به مرور و با افزوده شدن شکل‌های پایه به صورت متوالی، رفته رفته خطای تصویر اصلی و تصویر تقریبی، کاهش می‌یابد.

البته این فرایند کلا تصادفی است و پاسخ در دفعات مختلف اجرا، متفاوت خواهد بود. همین موضوع، می‌تواند به خلق تصاویر جالبی کمک کند. مثلا در تصویر زیر، نتیجه تقریب یک تصویر در دفعات مختلف، کمک کرده‌اند که چیزی شبیه انیمیشن استاتیک ایجاد شود.

۲۳ اردیبهشت ۱۳۹۸

YPEA: الگوریتم‌های تکاملی یارپیز

زمستان سال ۱۳۹۵ بود که پیاده‌سازی یکی از ایده‌های قدیمی‌ام را شروع کردم که سال‌ها ذهنم را به خود مشغول کرده بود. هدفم ایجاد یک ساختار واحد و منسجم، برای مدل‌سازی، تعریف و حل «مسائل بهینه‌سازی» (Optimization Problem) با استفاده از روش‌های «محاسبات تکاملی» (Evolutionary Algorithm) و «فراابتکاری» (Metaheuristic) بود. انگیزه اصلی من برای انجام این کار، طی ارتباطم با دانشجوها شکل گرفت. سال‌ها، با صدها دانشجو به صورت مستقیم در ارتباط بوده‌ام و می‌دانم که یکی از بزرگ‌ترین مشکلات محققین و دانشجویان، به ویژه افرادی که در برنامه‌نویسی چندان توانمند نیستند، تعریف ساختار مسأله و متغیرهای آن است.

۱۰ بهمن ۱۳۹۶

مهم‌ترین دانش ما چیست؟

آیا تا کنون به این فکر کرده‌اید که مهم‌ترین دانش، تخصص و مهارت ما چیست؟ چیزی که مادر و پدید آورنده بخش مهمی از علم بشری است. آیا مانند «دو» که مادر ورزش‌ها شناخته می‌شود، دانشی وجود دارد که علوم مختلف، از آن منشعب شده باشند؟ باید بگویم چنین دانشی وجود دارد و در این نوشته، به این موضوع خواهم پرداخت.

مجموعه نکات و تجارب مرتبط با برنامه‌نویسی

از اواخر سال ۱۳۷۹ (و به طور غیر رسمی از تابستان ۱۳۷۸)، در مقاطع مختلف، مشغول به تدریس برنامه‌نویسی بوده‌ام. تا به حال (۲۵ مهر ۱۳۹۶)، فقط در بستر فرادرس، بیش از ۱۵ هزار دانشجو، در حوزه برنامه‌نویسی داشته‌ام. حاصل سال‌ها فعالیت آموزشی و کاری در حوزه برنامه‌نویسی، تجاربی هستند که بخشی از آن‌ها در قالب یک سری پادکست، در ادامه با شما به اشتراک گذاشته شده‌اند. پس از به راه افتادن «کانال پرسش و پاسخ» در تلگرام، فرصتی پیش آمد تا با دغدغه‌های بیشتری که برای دانشجویان و جوان‌ترها مطرح است، آشنا شوم. در این پست، پادکست‌هایی را که در کانال پرسش و پاسخ به اشتراک گذاشته‌ام و مربوط به حوزه برنامه‌نویسی هستند، جمع‌بندی کرده‌ام.

۲۶ فروردین ۱۳۹۶

هوش مصنوعی و آینده کسب و کارها

پیش از این، مطالبی درباره هوش مصنوعی و اثرات آن بر روی اشتغال، مطالبی را نوشته‌ام، که در دسته هوش مصنوعی [+] در دسترس هستند. چند وقتی بود که می‌خواستم در مورد تاثیر هوش مصنوعی بر صنایع و کسب و کارها، به خصوص استارتاپ‌ها مطلبی را بنویسم. اما این بار خواستم، یک روش جدید را تجربه کنیم. مطالبی را که در این نوشته قصد بیان‌شان را داشتم، در قالب یک کلیپ صوتی کوتاه ضبط کرده‌ام، که در ادامه قابل مشاهده است.

۲۰ فروردین ۱۳۹۶

هوشمندی چیست؟

چند روز پیش، مطلبی را در خصوص ضریب هوشی ایرانیان نوشتم و وقوع فجایع دنباله‌دار و متناوب را، مرتبط با مشکل هوشمندی دانستم. عده‌ای از دوستان و خوانندگان مطالب، سئوالات و نقدهایی را در خصوص این موضوع مطرح کردند. بخش مهمی از پیام‌ها، مرتبط با این موضوع بود که، اساسا ضریب هوشی، و به صورت کلی هوشمندی، چه ربطی به این مشکلات فرهنگی دارد؟ توضیحی که در ادامه آورده‌ام، احتمالا بتواند این ارتباط را، روشن‌تر به تصویر بکشد.

۲۹ بهمن ۱۳۹۵

برقراری تعادل میان تمرکز و تنوع

بخش مهمی از مسائل کاربردی در حوزه‌های مختلف علمی و فنی، مربوط به حوزه بهینه‌سازی و جستجو است. الگوریتم‌های متنوعی هم برای حل این دسته از مسائل معرفی شده‌اند، که نوع مهمی از آن‌ها، الگوریتم‌های تکاملی هستند که تشکیل دهنده مبحث محاسبات تکاملی در هوش مصنوعی می‌باشند. یکی از اصول کلی که لازمه عملکرد مناسب یک الگوریتم بهینه‌سازی است، ایجاد تعادل بین دو فاکتور مهم است: اکتشاف (Exploration) و استخراج (Exploitation). یک الگوریتم موثر و کارآمد، باید بتواند میان این دو مولفه، تعادل مناسبی را برقرار کند.

۲۳ دی ۱۳۹۵

قضاوت مبتنی بر هوش مصنوعی

چند ماه قبل، مقاله جالبی منتشر شد که مدت‌ها بود می‌خواستم در خصوص آن، مطلبی را در اینجا بنویسم. در اواخر اکتبر ۲۰۱۶ ، مقاله‌ای با عنوان «پیش‌بینی تصمیمات قضاوتی پرونده‌های دادگاه حقوق بشر اروپا: یک رویکرد پردازش زبان طبیعی»، در مجله علوم کامپیوتر PeerJ منتشر شد که افق‌های جدیدی را از کاربردهای هوش مصنوعی، روشن می‌کند. در صورتی که مایل به مطالعه این مقاله هستید، فایل آن در این لینک [+] در دسترس شماست.

۲۳ آبان ۱۳۹۵

کامپیوترهایی که عقب نشینی می‌کنند

چند روزی است که رقابت‌های جهانی قهرمانی شطرنج ۲۰۱۶ در نیویورک آغاز شده است، و قرار است پس از برپایی دوازده مسابقه میان دو مدعی عنوان قهرمانی، مگنوس کارلسن (از نروژ) و سرگئی کارجاکین (از روسیه)، قهرمان جهان در زمینه شطرنج مشخص شود. تا کنون، دو مسابقه برگزار شده است و هر یک از دو شرکت کننده، یک بازی را برده است.

۹ آبان ۱۳۹۵

هوش مصنوعی و هالووین

هر سال در روزهای پایانی ماه اکتبر، جشن سنتی هالووین در کشورهای غربی برگزار می‌شود. اما امسال، سه نفر از پژوهشگران دانشگاه MIT، با ایجاد یک «ماشین کابوس» (Nightmare Machine)، پای هوش مصنوعی را به هالووین باز کرده‌اند. سیستم هوشمندی که این سه نفر پیاده‌سازی کرده‌اند، با دریافت عکس‌های معمولی، تغییراتی را در آن‌ها اعمال می‌کند که باعث ترسناک شدن آن‌ها می‌شود. ماشین کابوس با استفاده از استخراج ویژگی‌های ترسناک، والبته با رأی گیری از تعدادی کاربر، توانسته است شیوه زامبی گونه کردن تصاویر را یاد بگیرد، و نتایج به دست آمده در وبسایت این پروژه، نشان می‌دهند که این سیستم کارش را خوب بلد است.