اصلا الگوریتم چیست؟ بحث پرتکرار این روزهای اینستاگرام
الگوریتم، غیرقابل فهم، مرموز، دانای کل و قادر مطلق است. نه، اینطور نیست.
الگوریتم یک مفهوم ساده است که امروزه نمودهای مختلفی دارد. نقش محوری و گنگ الگوریتم در شبکههای اجتماعی مانند اینستاگرام و فیسبوک باعث شده تا آن را به چشم حقیقتی محترم و مرموز ببینیم. در ذهن خود از الگوریتمها مفاهیمی فنی و غیرقابلدرک یا داور کل حقایق ساختهایم. شاید هم با افتادن از آن طرف بام، کلا به آن اعتماد نمیکنیم. اما زمانی که مردم از «الگوریتم» صحبت میکنند (چه در اینستاگرام و فیسبوک، چه به عنوان الگوریتم پیشنهاددهنده یک شرکت فروش دیجیتال و چه الگوریتم به مفهوم کلی آن)، واقعا میدانند که معنای آن چیست؟ با توجه به افزایش استفاده از این واژه و البته رواج مطالب نادرست درباره آن، احتمالا نمیدانند. اما وقتی که ناگهان یک پست عجیب در اکسپلور اینستاگرام ما ظاهر میشود، میخواهیم مستقیم سراغ اصل مطلب برویم: اصلا الگوریتم چیست؟
ما در این باره به گفتگو با پدرو دومینگز، استاد علوم کامپیوتر دانشگاه واشنگتن پرداختیم؛ فردی که کتابی درباره نقش روزافزون الگوریتمها در زندگی نوشته است. پیش از آنکه به تحسین یا سوءظن به الگوریتم کامپیوتری بعدی بپردازید، میتوانید 6 نکته اصولی درباره این مفاهیم پررنگ در جهان خود را بیاموزید.
1. یک الگوریتم، مجموعهای از دستورات بسیار مشخص است
دستور پخت کیک، یافتن حاصلجمع 2 به اضافه 2 یا حتی اداره یک کشور براساس قانون اساسی آن، همگی نمونههایی از الگوریتم هستند. چرا؟ چون به گفته دومینگز، تعریف الگوریتم «یک سری از دستورها» است. همین!
امروزه، اغلب یک الگوریتم به «یک سری از دستورات که به یک کامپیوتر میگوید چه کاری انجام دهد»، اطلاق میشود. برنامه کامپیوتر هم یک الگوریتم است که به یک زبان برنامهنویسی نوشته شده و کامپیوتر میتواند آن را خوانده و اجرا کند.
به طور مشابه، الگوریتمهایی که برای کامپیوتر نوشته میشوند، باید بسیار مشخص و دقیق باشند و اغلب در آنها از دستورهایی مانند if (اگر)، then (آنگاه) و else (در غیر اینصورت) استفاده میشود. به عنوان مثال، یک خودروی بدون راننده ممکن است براساس الگوریتمی برنامهریزی شده باشد که با استفاده از برنامههای ناوبری، مسیر خود را طی کند: «اگر برنامه ناوبری گفت به چپ بپیچید، آنگاه به چپ بپیچ». مشاهده میکنید که برای پیروی کامپیوتر از یک سری دستورات ساده، چقدر باید واضح و دقیق بود؟
در نظر عامه، واژه الگوریتم ذهنها را به سمت الگوریتمهای پیشنهادگر میبرند. به عنوان مثال، الگوریتمهای یک شبکه تلویزیونی مانند نتفلیکس تشخیص میدهد که احتمالا به چه فیلمهایی علاقه دارید و الگوریتمهای مورد استفاده در صنعت گردشگری هم تشخیص میدهند که کدام دسته از مسافران ممکن است اهل سفر با هواپیما نباشند و باید به آنها بلیط قطار پیشنهاد داد. هر چند این موارد، الگوریتمهایی بسیار پیچیده هستند، باز هم در قلب خود مجموعهای از دستورات روشن و مشخص دارند که کامپیوتر برای انجام یک وظیفه (task) آنها را دنبال میکند.
دومینگز توضیح میدهد: «با کامپیوتر، الگوریتمها میتوانند بسیار پیچیده شوند. الحاقیه (Addition) الگوریتمی است که در چند خط متنی توضیح تعریف شده است. کامپیوترها میتوانند الگوریتمهایی با میلیونها خط تعریف داشته باشند.»
2. تاریخچه الگوریتمها به مدتها پیش از ظهور کامپیوتر بازمیگردد
از زمان تمدن بابل، انسانها مشغول به نوشتن الگوریتمهایی شدند که برای آنها معادلات ریاضی را حل کرده و امکان مدیریت جامعه کشاورزیمحور را فراهم سازد.
دومینگز استدلال میکند: «الگوریتمها پیش از ظهور کامپیوتر وجود داشتند. دلیلش آن است که برای اجرای یک الگوریتم نیازی به کامپیوتر نیست و یک فرد هم میتواند آن را اجرا کند.»
استفاده الگوریتمها از کامپیوتر در میانه قرن بیستم اوج گرفت که ارتش (آمریکا) شروع به نوشتن فرمولهایی کرد که به عنوان مثال یک موشک را به سمت اهداف متحرک هدایت میکرد. پس از آن، این مفهوم به حوزه مدیریت کسبوکارها وارد شد و فرمولهایی کامپیوتری برای فعالیتهایی مانند مدیریت حقوق کارکنان رواج یافت. در حوزه علم و فناوری نیز وظایفی مانند رهگیری حرکات اجرام آسمانی به آنها محول شد.
یکی از نقاط عطف الگوریتمهای مدرن، زمانی بود که لری پیج (Larry Page) و سرگی برین (Sergei Brin) الگوریتم ردهبندی صفحات اینترنت را برای موتور جستجوی گوگل نوشتند. الگوریتم این موتور جستجو، به جای آنکه برای مرتبط بودن نتایج جستجو به محتوای صفحات توجه کند، مجموعهای از نشانههای دیگر را استفاده کرد تا بهترین نتایج را نشان کاربر دهد. از جمله موارد مورد توجه این الگوریتم میتوان به تعداد ارجاعات به یک مقاله، میزان اعتبار آن مقالات و تعداد لینکهای ورودی به صفحات را اشاره کرد. این موارد، نشانههای خوبی از مرتبط بودن محتوا برای یک جستجوی خاص بودند. باقی آن را هم که خودتان میدانید.
3. امروزه میتوان الگوریتمها را هر جایی مشاهده کرد
در حالی که ممکن است الگوریتمها را مانند معادلاتی ریاضی تصور کنیم، دومینگز نظر دیگری دارد: «الگوریتمها میتوانند هر چیزی را از هر جایی محاسبه کنند و حتی ممکن است در آنها اعداد وجود نداشته باشند.» از معروفترین و پیچیدهترین الگوریتمها میتوان به الگوریتمهایی اشاره کرد که در فیسبوک و اینستاگرام برای نشان دادن پستهای جدید به شما استفاده میشوند. این الگوریتمها معادلههایی هستند که فیسبوک با استفاده از آنها تصمیم میگیرد چه محتوایی را به شما نشان دهد. به عبارت دیگر، یک سری از دستورات مشخص وجود دارد که براساس آنها در مورد خبرمایه (News Feed) اختصاصی شما تصمیمگیری میشود.
دومینگز گفت: «خبرمایه فیسبوک برای شما هیچ پایانی ندارد، اما باید پستها را برای شما انتخاب کند. این انتخابها هم معمولا با ترکیبی از عوامل مختلف صورت میگیرد. به عنوان مثال، اینکه چقدر تولیدکننده مستقیم یا غیرمستقیم آن پست برای شما مهم است؛ اینکه چقدر با او در شبکه اجتماعی صمیمی هستید؛ چقدر محتوای آن پست با علایق شما همخوانی دارد و چقدر تازگی دارد.»
فیسبوک، گوگل، آمازون و بقیه شرکتهای بزرگ فناوری برای ارائه محتوا و محصولات خود به الگوریتمها متکی هستند. اما ممکن است الگوریتمهایی هم در زندگیتان وجود داشته باشد که از آنها بیخبر باشید.
به عنوان مثال، دومینگز توضیح میدهد که ماشین ظرفشویی شما میداند چه زمانی باید به جای شستن به خشک کردن ظروف بپردازند؛ خودروی شما ورودی بنزین شما را تنظیم میکند و میداند در پمپبنزین باکش پر است؛ یا سایهها در فیلمهای انیمه دیجیتالی بر صفحه نمایش ظاهر میشوند تا خورشید جهان واقعی را به شکلی عالی به تصویر بکشند.
دومینگز میگوید: «مشخص است که در زمان تعامل با کامپیوتر یا جستجو در اینترنت، با الگوریتمهای مختلفی سروکار خواهید داشت، اما این روزها تقریبا الگوریتمها را در هر چیزی میتوان دید.»
4. پیچیدهترین الگوریتمها از یادگیری ماشینی استفاده میکنند
همانطور که یاد گرفتیم، الگوریتمها باید با «جزئیاتی طاقتفرسا» نوشته شده باشند تا یک کامپیوتر بفهمد چه کاری باید انجام دهد. اما این موضوع در مورد الگوریتمهای استفادهکننده از یادگیری ماشینی (نوعی هوش مصنوعی) مصداق ندارد. این دسته از الگوریتمها، پیچیدهترین انواع خود هستند.
دومینگز در این باره میگوید: «در برنامهنویسی سنتی، یک نفر باید تمام جزئیات دستورها را مینوشت که کاری بسیار زمانبر و پرهزینه بود. اما با یادگیری ماشینی، کامپیوتر میتواند الگوریتمهای خود را کشف کرده و نیازی نیست کسی به آن بگوید چه کاری انجام دهد.»
به عبارت دیگر، یادگیری ماشینی زمانی است که یک برنامهنویس دادههای خام را به عنوان نقطه شروع به دستگاه میدهد و پس از آن، نقطه پایانی و شکل سازمانیافته و دستهبندی شده دادهها را تعریف میکند. باقی کار به عهده برنامه گذاشته میشود و خودش باید تعیین کند که چگونه از نقطه الف به نقطه ب برود. یک پیاز را در نظر بگیرید: یک انسان میداند که چگونه این پیاز کروی خام و بدبو را به خلالهایی کاراملی و خوشطعم تبدیل کند. در یک الگوریتم سنتی، برنامهنویس تمام مراحل آمادهسازی و سرخ کردن این پیاز را مینوشت. اما در الگوریتمی که توسط هوش مصنوعی توسعه یافته باشد، با تعیین نقطه پایانی به عنوان یک هدف، خودِ برنامه راه تبدیل پیاز خام به پیاز سرخشده کاراملی را پیدا خواهد کرد. در این حالت، ماشین یاد گرفته است.
این نوع الگوریتمها زمانی قدرتنمایی میکنند که یک انسان حتی نداند چگونه باید از نقطه الف به ب برود. به عنوان مثال، فرایندهای ذهنی انسان در تشخیص اینکه فلان حیوان یک گربه است، به قدری پیچیده است که نمیتوان آن را گام به گام نوشت. اما با نشان دادن مجموعهای از تصاویر گربهها و تصاویری که گربه نیستند، میتوان برای کامپیوتر هدف تعیین کرد. در این صورت، خود کامپیوتر میتواند بیاموزد و فرایند تفکیک تصاویر گربهها را انجام دهد.
دومینگز توضیح میدهد: «کامپیوتر میآموزد که به خود برنامه دهد و نیازی به برنامهنویسی انسان نباشد. زمانی که این فرایند با موفقیت انجام شود، خارقالعاده است. در این صورت خواهید توانست با کمترین دخالت انسانی، الگوریتمهایی بسیار قدرتمند و بسیار پیچیده داشته باشید.» زمانی هم که این یادگیری ماشینی موفق نباشد، نتایج جالبی رقم خواهد خورد.
5. الگوریتمها جادویی نیستند.
الگوریتمها اشتباه میکنند. شاید با توجه به حجم فرایندهایی که الگوریتمها انجام میدهند، تصور شود که مانند جعبه سیاهی هستند که برای افشای راز و رمزها ساخته شدهاند. با این حال، الگوریتم فقط یک سری از دستورات هستند. مهمتر آنکه انسان الگوریتمها را میسازد و به همین دلیل ممکن است خطا داشته باشند.
دومینگز عنوان میکند: «تصورات اشتباه فراوانی درباره الگوریتمها وجود دارد که بخشی از آن به دلیل ناآگاهی مردم از فرایندهای داخلی کامپیوترها است. یکی از متداولترین تصورات اشتباه، این است که الگوریتمها به نحوی عالی هستند.»
دومینگز توضیح میدهد که برنامهنویسها بخش زیادی از زمان خود را به رفع اشتباهات الگوریتمها میکنند تا کدها نتایج مناسبی ارائه دهند. با این حال، تمام اشتباهات را نمیتوان متوجه شد. علاوه بر آن، الگوریتمها حول نتایج مطلوب و بهینهسازی شده انسان شکل گرفتهاند. یک الگوریتم استخدامی را در نظر بگیرید که باید بهترین گزینههای تصدی یک شغل را شناسایی کند. ممکن است برنامهنویس این الگوریتم، شرایطی غیرضروری برای یک شغل تعریف کرده باشد (به عنوان مثال، پسزمینه دانشگاه محل تحصیل). در این صورت، اگر الگوریتم عنوان کند که «فرد الف بهترین گزینه برای تصدی فلان شغل است» لزوما نتیجهگیریاش درست نیست.
این خطا اغلب نتیجه جهتگیری است. اما زمانی مشکلات ناشی از جهتگیری و انحراف (در دادهها یا فرایندها) وخیمتر میشوند که الگوریتمها از هوش مصنوعی استفاده کنند. دومینگز میگوید: «در برنامهنویسی سنتی همواره باید نگران جهتگیریهای برنامهنویس بود. در یادگیری ماشینی، نگرانی اصلی جهتگیریها (و انحرافهای) ناشی از دادهها است.»
به عنوان مثال، یک الگوریتم استخدامی استفادهکننده از یادگیری ماشینی ممکن است نقطه شروعش مجموعهای از رزومههای متقاضیان شغل باشد و نقطه پایانش را رزومه افرادی تعیین کرده باشیم که پیش از این در شرکت استخدام شدهاند. با این حال، بیشتر شرکتهای فناوری تنوع چندانی در کارکنانشان (از نظر تحصیلات، مهارت، جنسیت، فرهنگ و …) دیده نمیشود. در این شرایط، الگوریتم ماشینی ما هم پیشنهاداتش را براساس همین نابرابریهای جهان واقعی مطرح خواهد کرد (مثلا فقط مردان سفیدپوست را پیشنهاد دهد).
پژوهشها نشان دادهاند که هوش مصنوعی ممکن است کلیشههای جنسیتی و نژادی جامعه را هم فرا بگیرد. در یک پژوهش، یک الگوریتمِ تداعی کلمات، برای یادگیری کلمات همپیوند صرفا از زبان انگلیسی اینترنت استفاده کرد. به لطف جهتگیریهای جهان ما، این الگوریتم پس از تایپ واژه زن، واژه هنر را پیشنهاد میداد و پس از تایپ واژه مرد، ریاضیات و علم را. چنین پژوهشهایی نشان میدهند که الگوریتمها ذاتا بیطرف، عالی یا شیطانی نیستند؛ آنها فقط کاری که برنامهنویسها و دادههای مورد استفاده در یادگیریشان میگویند، انجام میدهند. به صورت خلاصه، آنها هم مانند ما عیب دارند.
6. الگوریتمها دروازه انقلاب فناوری هستند
الگوریتمها ممکن است عالی نباشند، اما در هر صورت در حال دگرگون ساختن جهان ما هستند. دومینگز میگوید: «تمام چیزهایی مانند اینترنت و رسانههای اجتماعی که آنها را عادی میدانیم، نمیتوانستند بدون الگوریتمها وجود داشته باشند.»
هر چقدر که این مجموعه دستورات ماشینی افزایش و گسترش بیشتری مییابند (از استفاده در ماشینهای ظرفشویی تا ابرکامپیوترهای دولتی)، توانایی ما را برای کسب سریعتر و کاراتر دانش افزایش میدهند. این سرعت و کارایی هیچگاه در این حد نبوده و نمیتوان آن را کمتر از یک انقلاب دانست.
به گفته دومینگز «الگوریتمها آنچه با کار ذهنی ما انجام میدهند که انقلاب صنعتی با کار یدی انجام داد. الگوریتمها هوش را خودکار و ماشینی میکنند. اگر به این موضوع فکر کنید، اهمیت آن را مییابید: کاری را که پیش از این نیاز به تفکر انسان و قدرت جسمی او داشت، میتوان با یک الگوریتم انجام داد.»
الگوریتمها به حیات خود ادامه خواهند داد، اما شیوهای که برای طراحیشان در پیش میگیریم (جهتگیرانه یا منصفانه، مفید یا مضر) و میزانی که آنها را بیچونوچرا خواهیم پذیرفت، به خودمان بستگی دارد.