بخشی از مقاله
چکیده
شبکههای حافظه یک کلاس جدید از مدلهای یادگیری ماشین است. استدلال شبکههای حافظه با استنباط از ترکیب اجزای حافظه بلند مدت است. یادگیری شبکههای حافظه با ادغام اجزای حافظه بلند مدت میباشد. حافظه بلند مدت یک دانش پویاست که جهت عمل پیشبینی قادر به خواندن و نوشتن داده است.
اکثر مدلهای یادگیری ماشین یک راه آسان برای خواندن و نوشتن در بخش بزرگی از اجزای حافظه بلند مدت دارند که با استنباط و درک میتوانند یکپارچگی ترکیب این اجزا را مهیا کنند؛ کاربرد حافظه بلند مدت در بسیاری از حوزهها مطرح میشود که با پرسش از یک موضوع میتوان به نتیجه پاسخ درست، دست یافت. ساختار مدل شبکههای عصبی RNN منجر به ظهور مدل یادگیری شبکههای حافظه شده است.
-1 مقدمه
شبکههای حافظه یک کلاس جدید از مدلهای یادگیری ماشین است. اکثر مدلهای یادگیری ماشین یک راه آسان برای خواندن و نوشتن در بخش بزرگی از اجزای حافظه بلند مدت دارند که با استنباط و درک میتوانند یکپارچگی ترکیب این اجزا را مهیا کنند؛ بنابراین نمیتوانند از سرمایههای بزرگ کامپیوتری امروزی باشند.
بهعنوان مثال کاربرد حافظه بلند مدت در حوزههای دید و صدا برای تماشای فیلم است تا رسیدن به پاسخ سئوالات پیرامون موضوع فیلم مؤثر باشد. به عنوان مثال اگر مجموعهای از حقایق، داستان یا متن را داشته باشیم، پاسخ به سئوالات مطرح شده در این موضوعات را تنها با مدلسازی زبان - Mikolov et al., 2010; Hochreiter & Schmidhuber, 1997 - مانند شبکه عصبی بازگشتی - - RNN میتوان یافت. در حقیقت گستره پیاده سازی شبکههای حافظه در اکثر مدلها قابل اجرا میباشد.
مدل پیشبینی RNN پس از خواندن کلمات خارج شده از جریان آموزش، پاسخ سئوالات مطرح شده را خواهد داد. از آنجا که کار یادگیری ماشین خواندن و نوشتن است، میتوان نوع خواندن و نوشتن را با عنوان یادگیری دیگری مثل یادگیری ادبی توسط حافظه - - Zaremba & Sutskever, 2014 توسعه داد؛ یعنی آموزش دادن به یک مدل برای امر یادگیری را میتوان با اجزای حافظه به طور مؤثرتر بکار برد.
-2 معرفی اجزای شبکههای حافظه
شبکههای حافظه عبارتند از: حافظه m - مجموعهای از object ها یا آرایهای از رشتهها که دارای اندیس mi هستند - و چهار جزء برای آموزش شامل I، G ، O و .R شرح اجزای شبکههای حافظه به قرار زیر است:
I - ویژگیهای ورودی موضوع - : نمایش تبدیل ورودی به ویژگیهای داخلی.
G - جامعیت - : بروزرسانی حافظه قدیمی با توجه به ورودی جدید جامعیت شبکههای حافظه، فرصتی برای فشرده سازی و جامعیتبخشی حافظه برای استفادههای آتی است.
O - ویژگیهای خروجی موضوع - : تولید خروجی جدید، با توجه به ورودیهای جدید و وضعیت فعلی حافظه. - Rپاسخ - : تبدیل خروجی به فرمت پاسخ مورد نظر مثلاً پاسخدهی متنی باشد و یا ... .
با توجه به ورودی - xمثلاً ورودی کاراکتری، کلمهای از جمله، یک تصویر یا سیگنالی از صدا باشد - جریان مدل به شرح زیر است:
-1 تبدیل x به ویژگی ورودی ارائه داده میشود:
-2 بروزرسانی حافظه mi با توجه به ورودیهای جدید، میشود:
-3 محاسبه ویژگیهای خروجیO که از ورودیهای جدید و حافظه دریافت میشوند:
-4 در پایان هم ویژگیهای خروجی دیکدشده - رمزگشایی شده - o، پاسخ نهایی را میدهد:
چهار فرایند فوق در هر دو مرحله آموزش و تست مدل اعمال میشوند. اگر تمایزی بین این عبارات پیدا شود، حافظهها به ذخیره تمایزات در زمان تست میپردازند ولی پارامترهای مدل که I، G، O و R هستند بروزرسانی نخواهند شد. شبکههای حافظه در طیف گستردهای میتوانند پیادهسازی شوند؛ مثلاً روی پارامترهای I، G و O میتوان هر ایدهای مانند Svms، درخت تصمیم یا ... را روی موضوع یادگیری ماشین مطرح کرد و آن ایده را با مدل مورد علاقه خود پیادهسازی کرد.
-3 شرح پارامترهای شبکههای حافظه
شرح اجزای شبکههای حافظه به قرار زیر است:
I :I به طور استاندارد برای پیشپردازش استفاده میشود. مثل تجزیه و تحلیل و آمادهسازی داده برای ورودی، یا رمزگشایی ورودی برای نمایش ویژگیهای داخلی یا تبدیل متن به بردار پراکنده یا متراکم.
:G سادهترین شکل G، - I - x ذخیره شده در یک حفره حافظه است. فرمول mH - x - =I - x - که در آن H - x - تابع انتخاب حفره حافظه است که بروزرسانی G شاخص H - x - از m خواهد بود اما سایر نقاط حافظه دست نخورده باقی خواهد ماند. انواع پیچیدهتر G میتوانند بازگشت و بروزرسانی سریع حافظههای ذخیره شده را براساس شواهد جدید از ورودیهای فعلی x انجام دهد. چنانچه ورودی یک سطح از کاراکتر یا کلمه باشد آنها را به تکههایی تقسیم و در هر حفره حافظه ذخیره میکند. اگر حافظه بزرگ باشد مثل Wikipedia یکی از نیازهای اساسی آن سازماندهی حافظه است. به صورت دستی موفق به شرح عملکرد تابع H میشود: بهعنوان مثال میتواند طراحی، آموزش یا ذخیرهسازی حافظه را با هر موضوعی انجام دهد. بنابراین برای صرفهجویی در مقدار G و O نیاز به تمامی حافظه نیست؛ بلکه تنها به بخشی از بازبینی کاندیدها نیاز خواهد بود. اگر حافظه پُر و روش انتخاب کاندید فراموش شود، تابع H میتواند جایگزینی حافظه را انتخاب کند. یعنی H، هر واحد از حافظه را که بخواهد خط میزند و در آخرین مورد بازنویسی میکند که تاکنون این حالت پیادهسازی نشده است.
O و O :R برای خواندن از حافظه و مسئول استنباط از حافظه میباشد. به عنوان مثال بدست آوردن آنچه که در حافظهها رخ داده به خوبی انجام میشود و R پاسخ نهایی را از O تولید میکند که مثل عملکرد نهایی RNN است.
-3 پیاده سازی MemNN برای متون
مهمترین بخش شبکههای حافظه، شبکههای عصبی است. پیادهسازی MemNN دارای ورودی و خروجی متنی است. در ادامه معماری مدل MemNN تشریح میشود:
پایه مدل معماری بر اساس ورودی متنی است. با فرض یک جمله باید پاسخ به سیستم داده شود. یک جمله را بر اساس کلمه به کلمه که به طور توالی میآیند در نظر بگیرید. متن در حافظهای که در حفره بعدی در دسترس است قرار میگیرد یعنی جمله S - x - در حفره خالی بعدی N باز میگردد:
N: mN = x, N = N + 1 - 5 -
ماژول G هم فقط با ذخیره حافظه جدید جهت استفاده و بروزرسانی حافظه قدیم استفاده میشود. با تکنیکی که ما برای نمایش متن جهت تعبیه سازی بکار بردیم میتوان ورودی وارد شده را ذخیره کرد. آن را برای آموزش در بردار تعبیه شده داخل حافظه قرار داد.
حرکت نزولی یک انتخاب است که در طول آموزش، پارامترهای تعبیه شده قابل تغییر هستند و نیز میتوان بردارها را که با عنوان حفره میشناسیم را ذخیره کنیم. با وجود اینکه در زمان تست پارامترهای قابل تغییر نیستند، بردارهای تعبیه شده را که شامل جملات هستند، ذخیره میکنیم. این راه سریعتر از خواندن کلمات متنی است و میتوان بارها آن را تعبیه کرد.
هسته اصلی استنباطها در ماژولهای O و R هست. ماژول O، ویژگیهای خروجی را با یافتن حافظه پشتیبان K، x را تولید میکند. k را تا دو بار استفاده میکنیم. اما روش بزرگتر کردن K را نیز داریم. برای حالت k=1 بالاترین حافظه پشتیبان که قابل دسترس باشد طبق فرمول زیر است:
- 6 - o1=O1 - x,m - =arg max so - x,mi -
i=1,…,N
که So یک تابع است که عمل ریاضی بین جفت جملات x و mi را پیش میبرد. برای حالت k=2 ما دو حافظه پشتیبان به اولین حفره قبلی قابل دسترس اختصاص میدهیم؛ طبق فرمول زیر:
- 7 - o2=O2 - x,m - =arg max so - [x,mo1],mi -
i=1,…,N
کاندید حافظه پشتیبان mi با توجه به ورودی اصلی و حافظه پشتیبان اول به دو کروشه داخل لیست خروجیO را میدهد. خروجی نهاییo، [x,mo1 ,mo2] که به عنوان ورودی به ماژول R میدهد.