Skip to content

شبکه‌های عصبی بازگشتی – قسمت اول

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

به‌طورکلی، شبکه بازگشتی (RNN) تابعی است که یک ورودی با طول غیرثابت (مثلا جمله) به صورت دنباله‌ای از  n بردار d_in-بعدی  دریافت می‌کند و یک بردار خروجی d_out-بعدی y بازمی‌گرداند:

فرمول شبکه بازگشتی در حالت کلی

که در عبارت بالا x_1:n جمله ورودی ماست که کلمات آن به بردارهای نهفته (مثلا word2vec) تبدیل شده و به یکدیگر چسبانده شده‌اند و به عنوان ورودی شبکه بازگشتی (RNN) داده میشود و یک خروجی y_n برای ما بازگرداننده میشود. این خروجی y_n که گاهی اوقات با h_n هم نمایش داده میشود در کارهای مختلف مورد استفاده قرار میگرد. مثلا فرض کنید یک تسک بانظارت (supervised) مثل طبقه‌بندی اسناد داریم. برای هر سند یک بازنمایی y_n بدست آورده میشود و سپس این y_n به عنوان ورودی classifier داده میشود و شبکه آموزش داده میشود.

شبکه بازگشتی ساده

 

حالا چرا بهشون میگن بازگشتی؟ در شکل بالا هیچ چیز بازگشتی دیده نمیشود پس علت اینکه به این شبکه‌ها میگن بازگشتی چیست؟ اگر یکم دقیق‌تر به فرمول بالا نگاه کنیم یک شبکه بازگشتی به صورت زیر تعریف کرد:
فرمول شبکه بازگشتی ساده

هرتابع بازگشتی از دوتا قسمت اصلی تشکیل شده است بخش بازگشتی یا R بخش خروجی یا O که به ترتیب هدف آنها تولید بردار وضعیت s و بردار خروجی y است.
( بردار وضعیت رو میشه به یک حافظه تشبیه کرد که در داخل اون اطلاعات ذخیره میشن)

در بالا R یک تابع بازگشتی تعریف کرد که بردار وضعیت (s) و بردار ورودی (x)  را می‌گیرد و بردار وضعیت مرحله (s) بعد  را بازمی‌گرداند (حالت پایه برای بردار وضعیت با صفر مقداردهی می‌شود) و در نهایت هم بردار وضعیت با کمک یک تابع O به بردار خروجی تبدیل میشود (تابع O رو فرض کنید یک تابع softmax است که بردار خروجی رو نرمال میکند).

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

کلمات یکی ‌یکی به این شبکه داده میشود (در هرلحظه از زمان تنها یک کلمه x به عنوان ورودی داده میشود) و یک خروجی y و یک بردار وضعیت s درست میشود.

همانطور که در شکل اول (در حالت باز شده) میتونید مشاهده کنید در هر لحظه از زمان این تابع بازگشتی میتواند یک خروجی y داشته باشد (دقت کنید که کلمات یکی یکی به این شبکه داده میشود) اما معمولا از خروجی مرحله آخر آن استفاده میکنند چون به نحوی در بردارنده‌ی تمام اطلاعات قبلی است. پس ما  میتونیم خروجی مرحله دوم در شکل بالا am دسترسی داشته باشیم و مقدار 1_y رو در مرحله دوم بدست بیاریم. یا خروجی مرحله چهارم در شکل بالا sentence و مقدار y_3 را بدست بیاریم و به طور کلی در هرحله از زمان میتوانیم خروجی y_i رو به دست آوریم.

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

حالا یک دیدی نسبت به شبکه بازگشتی پیدا کردیم بیاییم داخل شو ببینیم که چطور کار میکنه. ساختار داخلی شبکه بازگشتی در حالت عادی، بسیار ساده است و از یک تابع تانژانت هیپربولیک ساخته شده است:

ساختار داخلی شبکه بازگشتی

همانطور که در شکل بالا مشاهده میشود، کلمه ورودی (x) و بردار وضعیت مرحله قبل (s) از یک لایه tanh عبور داده میشوند و بردار خروجی (y_n یا h_n) رو تولید میکنند. به طور رسمی میشه به صورت زیر نوشت:

اگر دقت کرده باشید من گفتم از یک لایه تانژانت هیپربولیک عبور داده میشوند. در واقع بردارهای x و s از دو فیلتر یا شبکه feedforward با یک لایه مخفی به نام W عبور داده میشوند و با یکدیگر جمع میشوند و سپس توسط تابع تانژانت هیپربولیک مقادیر آنها بین -۱ تا ۱ نرمال میشود. در واقع یادگیری شبکه توسط همین W انجام میشود.

در نهایت برای اینکه بردار خروجی (y_n یا h_n) رو تولید کنیم بردار s رو از یک تابع softmax عبور میدهیم. حالا از این بردار y در تسکهای مختلف استفاده میشود. مثلا فرض کنید به ازای هر سند یک بردار y بدست آوردیم. برچسب سند هم که میدونیم (فرض تسک supervise است) خوب حالا یک بردار و برچسب داریم و classifier امون رو آموزش میدهیم.

در قسمت بعدی به سراغ شبکه بازگشتی با سلول LSTM خواهیم رفت و تفاوت انها را با شبکه بازگشتی ساده بررسی میکنیم.

 

 

منتشر شده درآموزشپردازش زبان طبیعییادگیری عمیق

3 نظر

  1. سهیلا سهیلا

    سلام.
    بسیار سپاسگزارم که این پست عالی رو گذاشتید..منتظر پست بعدی شما هستیم.
    همچنین اگر امکان داره درمورد lstm یه منبع معرفی کنید خیلی ممنون میشم.

  2. سهیلا سهیلا

    روش انجام پایان نامه من lstm هست ولی متاسفانه هیچ دانش خاصی درمورد این موضوع ندارم.لطفا اگر منبعی درمورد یادگیری این موضوع به من معرفی کنید خیلی ممنون میشم.

    • هادیفر هادیفر

      کتاب اقای Goldberg چندین فصلش به شبکه‌های بازگشتی تخصیص داده شده است (انکدر دیکدر، اتنشن، شبکه بازگشتی، LSTM و GRU) و برای شروع بسیار مناسب است و شدیدا پیشنهاد میکنم مطالعه بفرمایید. اسم کتاب: Neural Network methods for Natural Language Processing و از scihub میتونید گیرش بیارید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

All rights reserved by hadifar.net