شبکه‌های عصبی، به زبان ساده

438

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

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

در این مقاله قصد داریم تا به درکی عامه‌پسند از یادگیری عمیق (Deep Learning) برسیم. برای همین سعی می‌کنیم که تا جای ممکن وارد ریاضیات نشویم و تا جای ممکن به مثال و انیمیشن بسنده کنیم.

فکر زوری

یکی از اولین مکاتب هوش مصنوعی می‌گفت که اگر مقدار زیادی داده را، تا آنجا که ممکن است، در یک کامپیوتر قدرتمند بچپانیم و تا حد ممکن به‌اش دستورات کافی بدهیم تا از آن داده‌ها سردرآورد، آن کامپیوتر می‌تواند «فکر» کند. شالوده‌ی کامپیوترهای شطرنج‌باز مثل کامپیوتر Deep Blueی IBM همین بود: اینکه بیاییم هر حرکت ممکنی را به اضافه‌ی استراتژی‌های شناخته‌شده به کامپیوتر بدهیم و بعد قدرتش را به حد کافی بالا ببریم. IBM با این کار توانست ماشینی بسازد که به طور نظری تمام حرکات ممکن را محاسبه و نتیجه‌ی آن را در آینده پیش‌بینی کند و بهترین حرکات متعاقب را برای غلبه بر حریف برگزیند. چنانچه شطرنج‌بازان حرفه‌ای در سال ۱۹۹۷ متوجه شدند، این کار امکان‌پذیر بود.

با این نوع محاسبه، ماشین بر قواعد تثبیت‌شده‌ای تکیه می‌کند که با مشقت فراوان توسط مهندسین از پیش برنامه‌ریزی و پیش‌بینی شده‌ است (مثلاً اگر این حرکت را کرد، این کار را بکن؛ و اگر این‌طور شد، این حرکت را انجام بده) و اصلاً شبیه یادگیری منعطف آدمیزادی نیست. شکی نیست که داریم راجع به ابرمحاسبات قدرتمند صحبت می‌کنیم، اما نمی‌شود به آن گفت «فکر کردن».

آموزش یادگیری به ماشین‌ها

در طی دهه‌ی گذشته، دانشمندان یک مفهوم کهنه را دوباره زنده کرده‌اند. این مفهوم بر یک بانک حافظه‌ی دایره‌المعارفی تکیه ندارد، بلکه از یک روش ساده و سیستماتیک تحلیل داده‌های ورودی استفاده می‌کند که بر اساس تفکر انسانی بنا شده. این فن‌آوری با اسم یادگیری عمیق یا شبکه‌های عصبی از دهه‌ی ۴۰ وجود داشته، اما حالا با وجود این رشد نمایی داده‌های امروز (اعم از تصاویر، ویدئوها، جستجوهای صوتی، عادات وب‌گردی و…) و همین‌طور دسترسی به پردازشگرهای ارزان، آماده‌ است تا توان خود را به نمایش بگذارد.

ماشین‌ – درست مثل خود ما!

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

ماشین – مثل خود ما

این ANN لایه-لایه یکی از اصلی‌ترین راه‌های یادگیری ماشین در روزگار فعلی است. با فراهم کردن داده‌های نشان‌دار فراوان، ماشین قادر خواهد بود تا یاد بگیرد چگونه داده‌ها را مثل انسان (یا حتی بهتر از انسان) تفسیر کند.

مثلاً تشخیص تصویر را در نظر بگیریم. این کار به یک جور شبکه‌ی عصبی خاص به نام شبکه‌ی عصبی پیچشی (CNN) وابسته است. علت نامگذاری، به کارگیری پردازه‌ی ریاضیِ convolution برای آنالیز تصاویر به شیوه‌های غیر متعارف، مثل پیدا کردن یک ابژه‌ی نیمه‌پنهان یا ابژه‌ای است که فقط از زوایای خاصی قابل رویت است. البته انواع دیگری هم از شبکه‌های عصبی، مثل شبکه‌های عصبی راجعه وجود دارند، اما از آنها کمتر برای مثال فعلی ما، یعنی تشخیص تصاویر، استفاده می‌شود.

آموزش شبکه

اما شبکه‌های عصبی چه طور یاد می‌گیرند؟ اجازه بدهید یک پردازه‌ی بسیار ساده اما موثر، به اسم یادگیری تحت نظارت (Supervised Learning) را به شما معرفی کنیم. ما داده‌های زیادی را برای آموزش به شبکه‌ی عصبی می‌دهیم. این داده‌ها توسط انسان برچسب‌گذاری شده‌اند، به طوری که شبکه‌ی عصبی می‌تواند در حین یادگیری خودش را محک بزند. پیچیده شد؟ اجازه بدهید مثالی بزنیم.

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

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

این تنظیم‌ها در طی پروسه‌ای به اسم پس‌انتشار (backpropagation) انجام می‌شوند و احتمال پیش‌بینی «سیب» را برای همان تصویر در دور بعدی پیش‌بینی بالاتر می‌برند. این روند آن‌قدر تکرار می‌شود تا زمانی که پیش‌بینی‌ها کمابیش دقیق باشند و یا اینکه شبکه پس از تمرین بیشتر، پیشرفتی نداشته باشد. اینجا هم مثل والدینی که این‌قدر به بچه‌هایشان فرق سیب و پرتقال را یاد می‌دهند تا آنها بتوانند خودشان تشخیص دهند، تمرین شرط اصلی است. اگر در طی خواندن این بخش، خودتان به این نتیجه رسیده باشید که «اِه، آدم هم همین‌طوری یاد می‌گیره»، ممکن است در حوزه‌ی هوش مصنوعی آینده‌ای داشته باشید.

یک عالمه لایه

معمولاً یک شبکه‌ی عصبی پیچشی، در کنار لایه‌های ورودی و خروجی، چهار لایه‌ی اساسی دارد:

  • کانولوشن یا هم‌گشت
  • فعال‌سازی
  • جمع‌آوری
  • کاملاً مرتبط

هم‌گشت (Convolution)

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

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

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

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

فعال‌سازی (Activation)

یکی از مزیت‌های شبکه‌های عصبی اینست که می‌توانند به صورت غیر خطی یاد  بگیرند. به زبان غیر ریاضی یعنی می‌توانند ویژگی‌هایی را تشخیص دهند که کاملاً مشهود نیستند؛ مثلاً تصویر سیب‌های روی درخت که بعضی‌هایشان زیر نور آفتاب و بعضی‌ها داخل سایه‌اند، یا سیب‌هایی که روی کانتر آشپزخانه داخل کاسه چیده شده‌اند. کار لایه‌ی فعال‌سازی پررنگ کردن چیزهای با ارزش است.

در مثال اسباب‌کشی، فکر کنید که از هر دسته چند چیز را دست‌چین کرده‌ایم که مطمئن نیستیم به درد بخورند. مثلاً چند تا کتاب قدیمی یا تی‌شرت دمده از دوران قدیم. آنها را دم دست می‌گذاریم تا بعداً دوباره به نگه داشتن یا دور انداختن‌شان فکر کنیم.

ادغام (Pooling)

کانولوشن‌های متعدد روی یک عکس، اطلاعات زیادی را تولید می‌کند. حجم اطلاعات تولیدی خود می‌تواند به یک کابوس محاسباتی بدل شود. پس نوبت به لایه‌ی ادغام می‌رسد که همه‌ی این اطلاعات را به شکلی عام و هضم‌شدنی تبدیل می‌کند. راه‌های زیادی برای این کار وجود دارد، اما یکی از محبوب‌ترین روش‌ها «ادغام حداکثری (Max Pooling)» است. در این روش نقشه‌ی هر ویژگی به صورت نسخه‌ای خلاصه از خودش درمی‌آید، به صورتی که تنها بهترین مثال‌های قرمزی، شکل ساقه یا انحنا به صورت خصوصیت درمی‌آیند.

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

طراح شبکه‌ی عصبی می‌تواند لایه‌های اینچنینی (کانولوشن، فعال‌سازی، ادغام) متعددی را پشت سر هم تعبیه کند و تصاویر را به دنبال اطلاعات رده بالاتری فیلتر کند. در مثال تشخیص سیب در تصویر، عکس‌ها بارها و بارها فیلتر می‌شوند. لایه‌های اولی بخش‌های ناواضحی از یک لبه، یک نقطه‌ی قرمز، یا شاید نوک ساقه را نشان دهند، در حالی که لایه‌های فیلترشده‌تر و متاخرتر، سیب‌های کامل را نشان می‌دهند. به هرحال، در هنگام حصول نتیجه، پای لایه‌ی «کاملاً مرتبط» به میان می‌آید.

ارتباط کامل (Fully Connected)

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

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

وظیفه‌ی گره‌های سیب و پرتقال (که آن را در طول انجام وظیفه آموخته‌اند) اینست که به نقشه‌های ويژگی‌ از آیتم مورد نظر که به دست‌شان رسیده، رای بدهند. هر چه‌قدر گره «سیب» بیشتر فکر کند که نقشه‌ی ویژگی، شامل ویژگی‌های سیب است، رای بیشتری به آن اختصاص می‌دهد. هر دو گره باید به تمام نقشه‌ها، فارغ از محتویات‌شان، رای بدهند. مثلاً اینجا، گره «پرتقال» رای زیادی به نقشه‌های ویژگی نمی‌دهد، چون در واقع چیزی از ویژگی‌های «پرتقال» در آنها نیست. در آخر، گره‌ای که بیشترین رای را داده باشد –در این مثال گره «سیب»- می‌تواند به عنوان جواب شبکه تلقی شود؛ هرچند که این‌قدرها هم ساده نیست.

از آنجایی که شبکه به دنبال دو چیز متفاوت (سیب و پرتقال) است، خروجی نهایی شبکه به شکل درصد بیان می‌شود. در این مثال ما فرض می‌گیریم که شبکه کمی از مسیر آموزش و یادگیری‌اش را طی کرده است. در چنین شرایطی مثلاً شبکه پیش‌بینی می‌کند که تصویر ۷۵ درصد «سیب» و ۲۵ درصد «پرتقال» است. شبکه‌ای که کمتر از این تحت یادگیری بوده است، ممکن است جواب غیر دقیق و غیر قاطعی بدهد و بگوید ۲۰ درصد «سیب» و ۸۰ درصد «پرتقال»! آخ!

اگر موفق نشدی، باز هم امتحان کن، باز هم، باز هم، باز هم

پس این‌طور که معلوم است، شبکه‌ی عصبی در مراحل اول جواب‌های اشتباهی را به شکل درصد ارائه می‌کند. جوابِ ۲۰ درصد «سیب» و ۸۰ درصد «پرتقال» به وضوح اشتباه است، اما از آنجایی که داده‌های ورودی ما برچسب دارند، شبکه می‌تواند اشتباه‌های خود را پیدا کند و از طریق پروسه‌ی پس‌انتشار دریابد که این اشتباه چه طور اتفاق افتاده است.

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

این پردازه آن‌قدر و آن‌قدر تکرار می‌شود تا شبکه‌ی عصبی بتواند سیب و پرتقال را با دقت هرچه بیشتری در تصاویر تشخیص دهد و در نهایت به ۱۰۰ درصد پیش‌بینی درست برسد (گرچه بسیاری ۸۵ درصد را قابل قبول می‌دانند). وقتی به اینجا رسید، شبکه‌ی عصبی آماده است و می‌تواند به صورت حرفه‌ای به تشخیص سیب در تصاویر بپردازد.

این مقاله ترجمه‌ای است از:
https://techcrunch.com/2017/04/13/neural-networks-made-easy/

ارسال یک پاسخ

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