یادگیری ماشین برای همه (۵)

  • یوسف مهرداد بی‌بالان

نقشه‌ی دنیای یادگیری ماشین
اگر حوصله خواندن مطالب طولانی را ندارید، برای فهمیدن مفاهیم به تصویر زیر نگاهی بیندازید.

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

۱- یادگیری ماشین کلاسیک (Classical Machine Learning)
اولین روش‌های یادگیری ماشین در دهه ۵۰ میلادی از آمار نظری پدید آمدند. آنها مساله‌های ریاضی آکادمیک مانند جستجوی الگوها (patterns) در اعداد، محاسبه‌ی نزدیکی نقطه داده‌‌ها ( proximity of data points) و محاسبه جهت بردارها (vectors) را حل کردند.

امروزه نیمی از اینترنت بر اساس این الگوریتم‌ها کار می‌کنند. وقتی موقع خواندن اخبار و مقالات با انتخاب گزینه‌ی “بعدی” فهرستی از اخبار و مقالات به شما نشان داده می‌شود یا وقتی کارت‌تان توسط بانک به دلایل امنیتی و به خاطر استفاده در پمپ بنزینی وسط ناکجاآباد مسدود می‌شود، احتمالا کار یکی از همین رفقای فسقلی است.
شرکت های بزرگ فناوری طرفدار دو آتیشه شبکه‌های عصبی‌اند. برای آنها بهبود ۲ درصدیِ دقت مدل به معنای افزایش ۲ میلیاردیِ درآمد است. اما برای شرکت‌های کوچک چنین موضوعی منطقی به نظر نمی‌رسد. من داستان‌هایی درباره تیم‌هایی شنیده‌ام که یک سال از وقت خود را صرف پیاده‌سازی الگوریتم جدیدی کرده‌اند تا در صفحه‌ی اصلی وب سایت، محصولاتی را برای خرید به کاربران پیشنهاد کند و بعد از یک سال متوجه‌ شده‌اند که ۹۹٪ ترافیک سایت‌ از موتورهای جستجو می‌آید. الگوریتم‌های پیاده‌سازی‌شده عملا بی‌فایده بودند چون بیشتر کاربران حتی صفحه اصلی سایت را باز نمی‌کردند.
با وجود محبوبیت، رویکردهای کلاسیک آن قدر ساده‌اند که می توان آنها را به راحتی به کودکان توضیح داد. آنها شبیه ریاضیات پایه‌اند و ما بدون آنکه فکرمان را درگیر آنها کنیم، هر روز از آنها استفاده می کنیم.

۱.۱- یادگیری تحت نظارت (Supervised Learning)
یادگیری ماشین کلاسیک اغلب به دو دسته تقسیم می‌شود: یادگیری تحت نظارت (Supervised Learning) و یادگیری بدون نظارت (Unsupervised Learning)
در یادگیری تحت نظارت،‌ ماشین یک «سرپرست»(supervisor) یا «معلم»(teacher) دارد که تمام پاسخ‌ها را در اختیارش قرار می‌دهد برای مثال برای هر عکس مشخص می‌کند که این عکسِ گربه است یا عکس سگ. معلم قبلاً داده‌ها را به دو دسته‌ی عکس گربه‌ها و عکس سگ‌ها تقسیم‌ کرده است (برچسب‌ یا label زده است ). و ماشین از این نمونه‌ها برای یادگیری استفاده می‌کند: يکی يکی و سگ‌ها جدا گربه‌ها جدا.
یادگیری بدون نظارت به این شکل است که انبوهی از عکس حیوان‌ها را در اختیار ماشین قرار می‌دهیم و وظیفه‌ی ماشین این است که به تنهایی و بدون معلم،‌ عکس هر حیوانی (عکس‌های مشابه) را پیدا کند. در این روش، داده‌ها برچسب‌ (label) ندارند و معلمی هم وجود ندارد، ماشین تلاش می‌کند تا به تنهایی الگوها را پیدا کند. در مورد این روش‌ها در ادامه صحبت خواهیم کرد.
بدیهی است که ماشین با کمک معلم سریع‌تر یاد خواهد گرفت از این رو در کارهای (task) واقعی بیشتر از یادگیری تحت نظارت استفاده می‌شود. این کارها (tasks) به دو دسته‌ تقسیم می‌شوند: طبقه‌بندی (classification) که در آن، دسته‌ای که یک شی (object) به آن تعلق دارد پیش‌بینی می‌شود و رگرسیون (regression) که در آن، نقطه‌ای معین روی محور‌های عددی پیش‌بینی می‌شود.

مترجم: خانم سپیده مشایخی

گزیده:
«اگر بخواهم پیام این کتاب را در یک عبارت مختصر و مفید بیان کنم این است که شما باهوش‌تر از داده‌هایتان هستید. داده‌ها نمی‌توانند علت و معلول (causes and effects) را درک کنند، اما انسان‌ها می‌توانند.»
– جودیا پرل، کتاب چرا: علم جدید علت و معلول

به شکوفه‌ها ، به باران، برسان سلام ما را

  • یوسف مهرداد بی‌بالان

 

این عکس زیبا و پیام پایین آن را یکی از دوستان بسیار عزیزم که جنوبی است برای من فرستاده. این عکس ورودی جاده بی‌بالان است. این دوست باصفا در سفری که به شمال داشت وقتی از اینجا رد می‌شده بزرگوارانه به یادم بود و این عکس را گرفته‌ و از طریق شبکه‌های اجتماعی برایم فرستاده‌ تا باعث خوشحالی‌ام شود. قابل گفتن نیست که با دیدن این عکس چقدر حالم خوب شد.
و اما بخوانید ادامه پیام‌های ما را:
من:‌ به‌به، به سلامتی و خوشی. کجا رفته بودید؟‌ ویزا داشتید؟ 🙂 🙂 (من به شوخی به دوستانم می‌گویم که برای ورود به بی‌بالان باید ویزا داشته باشید 🙂 )
دوستم: با ری‌بن بودم. کسی چیزی نپرسید 🙂 😉 . (برای دوست جنوبی و خونگرم من،‌ عینک ری‌بن جایگاهی ویژه دارد)
من: می‌خواهم این عکس را در وبلاگ منتشر کنم. می‌توانم با اسم یا اسم خانوادگی یا هیچ‌کدام منتشر کنم.
دوستم:‌ می‌دونید که اسم کوچک من unique identifier است. فقط در قیاس با ترکیب اسم و فامیل که guid است، کمی بهتره ????. هر جور صلاح می‌دونید.

توضیح: من تا حالا کسی همنام با دوستم ندیده‌ام! تو دنیای من واقعا «تکه» و «لنگه نداره»، هم از نظر شخصیت و هم از نظر اسم!

گزیده:
گیلان، ای سرزمین سبزه خوش‌رنگ
دورم من از تو، گر هزاران فرسنگ
زیر بلندآسمانِ آبی و زیبا
نیست دلم دور از آن بهشتِ دلارا

گلچین گیلانی

یادگیری ماشین برای همه (۴)

  • یوسف مهرداد بی‌بالان

۳) یادگیری (Learning) در مقابل هوش (Intelligence)

یک بار در یکی از وب سایت های رسانه‌ای باکلاس مطلبی دیدم با عنوان “آیا شبکه های عصبی (neural networks) جایگزین یادگیری ماشین (machine learning) می شوند؟” معمولا رفقای رسانه‌ای معمولا به هر رگرسیون خطي ساده و بی‌اهمیتی مانند SkyNet هوش مصنوعی می‌گویند. شکل زیر تصویر ساده‌ای از دسته‌بندی‌ حوزه‌ی هوش مصنوعی نشان می‌دهد .

هوش مصنوعی (Artificial intelligence) نامی است که برای کل دانش این حوزه استفاده می‌شود. شبیه واژه‌های زیست شناسی [علم شیوه‌ی زندگی جانداران] یا شیمی [علم بررسی عناصر و مواد] که به کل دانش بشری در شاخه‌ای از علم اشاره دارند.

یادگیری ماشین (Machine Learning) بخشی از هوش مصنوعی است. البته یکی از بخش‌های مهم آن است ولی تنها بخش آن نیست.

شبکه‌های عصبی (Neural Networks) یکی از انواع یادگیری ماشین و البته یکی از انواع محبوب و پرطرفدار آن است. اما بچه‌های خوب دیگری هم در این گروه حضور دارند.

یادگیری عمیق (Deep Learning) روش مدرنی برای ساخت (build)، آموزش (train) و استفاده از شبکه‌های عصبی است. به طور کلی یادگیری عمیق یک معماری جدید در یادگیری ماشین است. امروزه عملا کسی تفکیکی بین یادگیری عمیق و “شبکه‌های معمولی” قائل نیست حتی از کتابخانه‌های (libraries) یکسانی برای پیاده‌سازی آنها استفاده می‌شود. برای آن که خیلی احمق و بی‌سواد به نظر نرسیم بهتر است در گفتار و نوشتار فقط نوع شبکه را بیان کنیم و از به کار بردن کلمات قلمبه سلمبه و مد روز پرهیز کنیم.

[برای نام‌گذاری این معماری جدید که بر اساس شبکه‌های عصبی طراحی شده بود از عبارت “عمیق” استفاده شد تا تفاوت آن را با “شبکه‌های معمولی” و موجود در آن زمان را نشان دهد؛ مترجم].

قاعده کلی برای مقایسه این است که مفاهیمی که در یک سطح (level) مشترک قرار دادند و اصطلاحا هم‌سطح‌اند با هم مقایسه شوند. به همین دلیل عبارت “شبکه‌های عصبی جایگزین یادگیری ماشین خواهد شد”.به این معنی است که “چرخ‌ها جایگزین خودرو‌ها خواهند شد.” رسانه‌‌ها‌ی عزیز! انتشار چنین مطالبی، آبرو و شهرت شما را واقعا به خطر خواهد انداخت.

خلاصه‌ای از توانایی و ناتوانی ماشین‌ها را در جدول زیر می‌توانید ببیند.

ماشین می‌تواند ماشین نمی‌تواند
پیش‌بینی کند (Forecast). چیز جدیدی خلق کند (Create)
حفظ کند (Memorize) خیلی سریع باهوش شود
دوباره تولید کند (Reproduce) کاری فراتر از از وظیفه‌‌‌ی (task) تعریف‌شده‌اش انجام دهد
بهترین گزینه را انتخاب کند انسان‌ها را بکشد

مترجم: خانم سپیده مشایخی

گزیده:
آنهایی که مالک داده‌اند مالک آینده‌اند. (those who own the data own the future)
یووال نوح هراری، ۲۱ درس برای قرن ۲۱‌

برنامه ۱۲ عاملی (۸)- عامل هفتم: اتصال به پورت

  • یوسف مهرداد بی‌بالان

عامل ۷-سرویس‌ها را از طریق اتصال به پورت (port binding) در اختیار استفاده‌کنندگان بیرونی‌ قرار دهید
[ مترجم؛ برگردان Port به فارسی درگاه است ولی در این متن همان واژ‌ه‌ی پورت استفاده شده است.]

گاهی برنامه‌های وب در داخل یک کانتینر سرویس‌دهنده‌ وب (web-server container) اجرا می‌شوند. برای مثال، برنامه‌های PHP می‌توانند به عنوان یک ماژول داخل apache HTTPD اجرا شوند یا برنامه‌های جاوا می‌توانند داخل Tomcat اجرا شوند.

برنامه‌های 12 عاملی کاملا خودکفا و بی‌نیاز از کانتینر سرویس‌دهنده‌های وب هستند (self-contained). آنها برای ایجاد سرویسی که در محیط اجرا از طریق وب در دسترس باشد (web-facing service) نیازی به سرویس‌دهنده وب (web server) که در زمان اجرا در اختیار آن قرار گیرد ندارند. برنامه وب ۱۲ عاملی، HTTP را به کمک اتصال به پورت (Port Binding) به‌ عنوان یک سرویس در اختیار استفاده‌کنندگان بیرونی قرار می‌دهد و سپس منتظر دریافت درخواست‌هایی می‌ماند که روی آن پورت ارسال می‌شوند.
[مترجم؛ در متن اصلی از واژه‌ی Runtime Injection برای فراهم کردن سرویس‌دهنده وب مورد نیاز برنامه استفاده شده است]

در محیط توسعه شخصی (local development environment)، توسعه‌دهندگان برای دسترسی به سرویسی که توسط برنامه‌ در اختیار استفاده‌کنندگان بیرونی قرار گرفته فقط به سراغ آدرسی شبیه به ‘http://localhost:5000/’ می‌روند. اما در محیط استقرار، یک لایه مسیریابی (routing layer) وظیفه‌ی هدایت درخواست‌های دریافتی روی یک نام میزبان عمومی (public-facing hostname) به برنامه را بر عهده می‌گیرد. ارتباط لایه‌ مسیریابی با برنامه توسط پورت مذکور برقرار می‌گردد.

معمولا برای پیاده‌سازی این ویژگی از اعلان وابستگی (dependency declaration) برای اضافه کردن سرویس‌دهنده‌ی وب به برنامه استفاده می‌شود. [برای اطلاعات بیشتر رجوع کنید به عامل دوم در برنامه‌های ۱۲ عاملی یعنی وابستگی‌ها؛ مترجم]
HTTP تنها سرویسی نیست که می‌توان به کمک اتصال به پورت در اختیار استفاده‌کنندگان قرار داد. تقریباً همه‌ی نرم‌افزارهای سرویس‌دهنده‌‌ (server software) می‌تواند به کمک اتصال به پورت و سپس انتظار و پاسخ به درخواست‌های دریافتی اجرا شوند. به عنوان مثال می‌توان به Redis یا Remote Dictionary Server اشاره کرد.
توجه داشته باشید که روش اتصال به پورت به این معناست که یک برنامه می‌تواند تبدیل به یک سرویس کمکی (backing service) برای سایر برنامه‌‌ها شود. برای این کار آدرس (URL) ارائه‌شده توسط برنامه‌‌ در قالب یک منبع (Resource Handle) در پیکربندی (config) برنامه‌‌ای که می‌خواهد از آن استفاده کند قرار داده می‌شود.

نوشته‌های قبلی:
قسمت هفتم: پردازش

مترجم: حمید آقای خاتمی

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

برنامه ۱۲ عاملی (۷)- عامل ششم: پردازش

  • یوسف مهرداد بی‌بالان

عامل ۶: پردازش‌ها (process)

برنامه را به صورت یک یا چند پردازش بدون حالت (stateless processes) اجرا کنید.

برنامه‌ها در محیط اجرا به صورت یک یا چند پردازش اجرا می‌شود.

در ساده‌ترین حالت، کد برنامه شامل چندین خط است که با یک زبان برنامه‌نویسی نوشته شد و به تنهایی و بدون نیاز به اجزای خارجی می‌تواند اجرا شود؛ محیط اجرای برنامه نیز لپ‌تاپ توسعه‌دهنده‌ای است که محیط اجرای آن زبان روی آن آماده ‌شده است؛ پردازش (Process) هم با نوشتن دستور در خط فرمان(command line) اجرا می‌شود. به عنوان مثال با نوشتن دستور python my_script.pyُ پایتون برنامه‌ی شما را با ایجاد یک پردازش جدید در کامپیوتر اجرا خواهد کرد. از سوی دیگر، استقرار یک برنامه‌ی پیچیده در محیط عملیاتی ممکن است به چندین نوع پردازش‌ نیاز داشته باشد. توجه داشته باشید که از هریک از انواع می‌تواند چندین نسخه در حال اجرا وجود داشته باشد .

پردازش‌های دوازده عاملی بدون حالت (Stateless) هستند و هیچ چیزی را با دیگران به اشتراک نمی‌گذارند (Share Nothing). اگر داده‌ای نیاز به ثبت و نگهداری داشته باشد،‌ باید آن را در یک سرویس کمکی (backing service) که دارای حالت است (stateful) ذخیره کرد. این سرویس کمکی معمولاً یک پایگاه داده (database) است.

توضیح تکمیلی از سایت ردهت (اینجا):
اصل پردازش‌ها که بهتر است آن را پردازش‌های بدون حالت (Stateless Processes) نامید، ادعا می‌کند برنامه‌ی ۱۲ عاملی باید به صورت مجموعه‌ای از پردازش‌های بدون حالت اجرا شود. این بدان معناست که هیچ پردازشی خبری از وضعیت پردازش‌‌های دیگر ندارد و به هیچ اطلاعاتی از سایر پردازش‌ها مانند وضعیت نشست (session state) یا وضعیت گردش‌کار (workflow state) دسترسی ندارد و آنها را دنبال نمی‌کند.
وجود پردازش‌های بدون حالت، مقیاس‌پذیری (scaling) را آسان‌تر می‌کنند. اگر پردازشی بدون حالت باشد می‌توان در هر لحظه، تعداد نسخه‌های در حال اجرای آن را اضافه یا حذف کرد و به کمک آن بار (load) روی سیستم را مدیریت کرد. از آنجایی که هر پردازش مستقل از بقیه کار می‌کند، بدون حالت بودن کمک می‌کند تا از وقوع پیامدهای ناخواسته جلوگیری شود.

نوشته‌های قبلی:
قسمت ششم: ساخت، انتشار و اجرا

مترجم: حمید آقای خاتمی

گزیده:
هرگز به آینده اجازه نده که مزاحم امروز تو شود. تو با آینده، اگر مجبور باشی، با همان سلاح عقلانیتی که امروز سپر توست رو به رو خواهی شد.
مارکوس آئورلیوس

یادگیری ماشین برای همه (۳)

  • یوسف مهرداد بی‌بالان

۲) سه مؤلفه یادگیری ماشین
۱-۲) داده‌ها (Data)
در نوشته قبل (اینجا) مطالعه نمایید.

۲-۲) ویژگی‌ها (Features)
ویژگی‌ها با نام پارامترها(parameters) یا متغیرها (variables) نیز شناخته می شوند. کارکرد خودرو، جنسیت کاربر، قیمت سهام، تعداد تکرار کلمه در یک متن نمونه‌هایی از ویژگی‌ها هستند. به عبارت دیگر، ویژگی‌ها عامل‌هایی‌اند که ماشین برای پیدا کردن الگوها آنها را بررسی می‌کند.
وقتی داده‌ها در جدول ذخیره شده باشند، پیدا کردن ویژگی‌ها ساده است، هر ویژگی معادل یکی از ستون‌های جدول است. اما اگر 100 گیگابایت تصویر از گربه‌ها داشته باشید چه چیزهایی را به عنوان ویژگی‌ انتخاب می‌کنید؟ بی‌شک نمی‌توان هر پیکسل از تصویر را یک ویژگی در نظر بگیریم. به همین دلیل است که انتخاب ویژگی‌های درست معمولاً بیشتر از سایر بخش‌های یادگیری ماشین طول می‌کشد. و همین انتخاب ویژگی‌ها نیز یکی از دلایل اصلی بروز خطاها و اشتباهات در کارهای یادگیری ماشین است. انسان‌ها معمولا بر اساس تفکر و تحلیل خود عمل می‌کنند.آنها فقط ویژگی‌هایی راانتخاب می‌کنند که به آنها علاقه دارند یا فکر می‌کنند “مهم تر” از بقیه‌اند. لطفا در انتخاب ویژگی‌ها تمایلات و احساسات انسانی را کنار بگذارید.

۳-۲) الگوریتم‌ها (Algorithms)
الگوریتم‌ها بدیهی‌ترين بخش یادگیری ماشین هستند. هر مساله‌ی یادگیری ماشین را می‌توان با روش‌های متفاوتی حل کرد. روش انتخابی شما بر دقت، کارایی و اندازه‌ی مدل نهایی تأثیرگذار خواهد بود. به این نکته مهم دقت کنید: اگر داده‌ها نادرست باشند بهترین الگوریتم‌ها هم کمکی به حل مساله نخواهد کرد. به این نکته‌ی مهم گاهی به اختصار «ورودی آشغال-خروجی آشغال» (garbage in – garbage out) گفته می‌شود. بنابراین بیش از حد دنبال به دقت مدل (accuracy)که به صورت درصد بیان می‌شود توجه نکنید، تلاش کنید در ابتدای کار، داده‌های بیشتری آماده کنید.

مترجم: خانم سپیده مشایخی

گزیده:
با وجود تمام پیشرفت‌های انجام‌شده به نظر می‌رسد که تقریباً همه پرسش‌های مهم در هوش مصنوعی بی‌پاسخ مانده‌اند. حتی بسیاری از پرسش‌ها هنوز به درستی مطرح نشده‌اند. فرانسوا شوله

محدودیت‌های دنیای من

  • یوسف مهرداد بی‌بالان

پیش‌گفتار:
یکی از چشم اسفندیارهای زندگی در اینجا آشنایی با زبان و فرهنگ است. کم‌تر کسی را پیدا می‌کنی که خاطرات بامزه در این مورد نداشته باشد. یکی از اتفاقاتی که برای خودم پیش آمده را در اینجا (روزی که وایر ما کراس کرد!) نوشته‌ام.
چند روز پیش داستان زیر را از یکی از دوستانم شنیدم و آن قدر تکان‌دهنده بود که تصمیم گرفتم با کسب اجازه از ایشان، آن را اینجا بازگو کنم.

داستان:
یک نفر بود که می‌گفت همکلاسی‌ها و استادهای من خیلی نژادپرست هستند. توی جلسات بحث و گفتگوی علمی دانشگاه هر وقت که نوبت به من می‌رسد و من حرف می‌زنم بهم می‌گند:
I know where you are coming from
بعد بنده‌خدا می‌خواست سر این قضیه دانشگاهش رو ول کنه.

توضیح داستان:
معنی لغوی جمله‌ای که همکلاسی‌ها و استادهای ایشان می‌گفتند به فارسی می‌شود «من می‌دونم شما از کجا داری می‌آی (از کجا اومدی)» که مودبانه و محترمانه‌ نیست. راستش را بخواهید تحمل فشار روانی ناشی از این برخورد آن هم در یک فضای دانشگاهی برای هیچ‌کس ساده نیست.
اما حالا اجازه بدهید از گوگل و واژه‌نامه‌های آنلاین کمک بگیریم و معنی این جلمه را پیدا کنیم. معنی این جمله یا اصطلاح این است که «من رویکرد و دیدگاه شما [درباره این موضوع] رو می‌فهمم»!
با پیدا کردن معنی این جمله احتمالا شما هم به این نتیجه رسیده‌اید که این داستان فقط و فقط یک سوءتفاهم بوده است.

پس‌گفتار:
بسیاری از این دست اتفاقات زبان و فرهنگی معمولا به داستان‌های خنده‌دار و خاطرات دورهمی‌ها ختم می‌شوند ولی کم نیستند آنهایی که باعث آزار و اذیت یک نفر شده‌اند و حتی زندگی‌اش را به کلی تغییر داده‌اند.

گزیده:
محدودیت‌های زبان من به معنای محدودیت‌های دنیای من است. لودویگ ویتگنشتاین

برای خروج از جستجو کلید ESC را بفشارید