رفتن به نوشته‌ها

انتقال یادگیری (Transfer learning)

شاید بهترین تعریف راجع به انتقال یادگیری یا همان Transfer learning یا Transfer of learning رو ویکی‌پدیا داده باشه که میگه:

Transfer learning is a research problem in machine learning that focuses on storing knowledge gained while solving one problem and applying it to a different but related problem

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

در بحث بینایی کامپیوتر (computer vision) مدل‌هایی که برای تشخیص دسته‌بندی عکس‌ها در یکی دو سال اخیر ارائه شدند مثل AlexNet، Inception یا Inception V2 اغلب میلیون‌ها پارامتر دارند و توانسته‌اند به نتایج بسیار خوبی دست پیدا کنند. بخاطر همین میگن بیاییم این دانشی که برای این مدل‌ها به دست آوردیم به سایر مدل‌ها انتقال بدیم. مثلا مدل Inception V3 رو در شکل زیر مشاهده کنید:

مدل Inception یک شبکه عمیق با تعداد بسیار زیادی لایه‌های کانولوشن، پولینگ است که برای تشخیص دسته‌بندی اشیا روی دادگان ILSRVC 2012 ارائه شده است. این شبکه برای تشخیص دسته‌بندی عکس‌ها (جمعا ۱۰۰۰ دسته مختلف) به بهترین دقت در زمان خودش دست پیدا کرده است (این دسته‌ها تقریبا همه چیزی رو شامل میشن: کامپیوتر، ماشین، کیف و …).

معماری این شبکه از دو قسمت اصلی تشکیل شده است:

  1. قسمت اول: استخراج ویژگی (feature extraction)، که به کمک لایه‌های کانولوشن انجام میشود.
  2. قسمت دوم:‌ دسته‌بندی‌کننده (classification)،  که به کمک یک دسته‌بندی کننده MLP عکسها را گروه‌بندی میکند.

قسمت اول یا بخش استخراج ویژگی (feature extraction) وظیفه دارد تا یک بازنمایی مناسب از عکس استخراج کند تا بتواند دسته‌بندی درست را تشخیص دهد. این شبکه، احتمالا به دلیل عدم وجود داده مناسب در تشخیص گل‌ها به خوبی عمل نمی‌کند و دچار مشکل میشود (یعنی صرف گل رو میفهمه ولی نوع گل رو نمیفهمه!)

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

 

به این تکنیک که میان یک قسمت از یک مدل از پیش آموزش داده شده رو برمیدارن و روی یک کار نسبتا مشابه ازش کمک میگیرن اصلاحا انتقال یادگیری میگن.

 

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

یکی دیگه از کارهایی که در این زمینه انجام شده است مقاله ulmfit هست. ایده مقاله این است که روی یک حجم بسیار زیادی از متن یک مدل زبانی آموزش میدن و سپس از این مدل زبان برای دسته‌بندی (classification) متن استفاده می‌کنند. نتایجی که در مقاله به دست آمده بسیار چشم‌گیر است و تقریبا با ۱۰۰۰ داده آموزش توانسته به دقتی دست پیدا کنند که شبکه با ده‌ها هزار نمونه آموزش داده می‌شد.

 

در قسمت بعد به سراغ پیاده‌سازی این مدل خواهیم رفت.

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

یک دیدگاه

  1. محمدی محمدی

    سلام و عرض ادب و احترام
    تشکر بسیار فراوان

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

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