گپ و گفت‌های هوش مصنوعی (۲)

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

من کاربران بسیاری را دیده‌ام که می‌گویند «خوب [مدل] کار می‌کند اما نمی‌دانم چرا.» اگر یادگیری عمیق را بر روی حجم عظیمی از داده‌ها به کار بندید، پویایی خاص خودش را دارد. خودش را اصلاح و بهینه‌سازی می‌کند و در اغلب اوقات نتایج صحیح را در اختیارتان می‌گذارد. اما اگر چنین نکرد، شما سرنخی ندارید که چه چیزی اشتباه بود و چه چیزی باید درست شود. به ويژه، شما نمی‌دانید که اشتباه در برنامه بود یا در روش و یا به خاطر این که عوامل محیط تغییر کرده‌اند. ما باید نوع دیگری از شفافیت را هدف قرار دهیم.

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

جودیا پرل (Judea Pearl)

منبع: کتاب تراوش‌های ذهنی، ۲۵ شیوه نگرش به هوش مصنوعی، فصل ۲
نوشته جان بروکمن، ترجمه استاد گرامی ابراهیم نقیب‌زاده مشایخ

گپ و گفت‌های هوش مصنوعی (۱)

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

در میان بسیاری از موضوعات مطرح شده در کتاب «استفاده انسانی از انسان‌ها» [The Human Use of Human Beings] نوشته وینر (۱۹۵۰) [Norbert Wiener] که هم‌اکنون نیز مربوطند، مهم‌ترین آنها برای پژوهشگران هوش مصنوعی این احتمال است که انسان، کنترل خود بر روی سرنوشتش را به ماشین واگذار کند.

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

استوارت راسل

منبع: کتاب تراوش‌های ذهنی، ۲۵ شیوه نگرش به هوش مصنوعی، فصل ۳
نوشته جان بروکمن، ترجمه استاد گرامی ابراهیم نقیب‌زاده مشایخ

 

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

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

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

یکی از نکات مهمی که همواره باید به خاطر داشت این است که برای هر مساله در دنیای یادگیری ماشین، فقط و فقط یک راه‌حل وجود ندارد. معمولا چندین الگوریتم مناسب برای مساله وجود دارد و شما باید انتخاب کنید که کدام یک از آنها بهتر است. بی‌شک همه مسائل را می‌توان با شبکه‌های عصبی حل کرد اما چه کسی هزینه‌ی تامین 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) روی سیستم را مدیریت کرد. از آنجایی که هر پردازش مستقل از بقیه کار می‌کند، بدون حالت بودن کمک می‌کند تا از وقوع پیامدهای ناخواسته جلوگیری شود.

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

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

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

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