شما می توانستید ترانسفورماتورها را از حافظه اختراع کنید
آدرس مقاله: https://alexwang.ai/posts/associative-memory/ آدرس نظرات: https://news.ycombinator.com/item?id=50122878 امتیاز: 248 # نظرات: 64
ظرفیت فروشگاه محصولات بیرونی به $M \تقریبا d_k = 64$ می رسد. فروشگاه بهینه دقیقا تا $M = d_k$ را به یاد می آورد. پس از آن، تداخل آن از صفر مانند $\sqrt{M/d_k - 1}$ افزایش مییابد، و همانطور که پیشبینی شده بود، ظرفیت فروشگاه نزدیک به $M = 2d_k = 128$ میرسد. از آنجایی که تعداد ثابتی از تداخل حافظه را لغو می کند، شکاف بین دو فروشگاه با افزایش M$ کاهش می یابد.
اگرچه این حافظه بهینه از نظر شباهت ها هنوز خطی است. باید شباهت های کوچک و بزرگ را بر اساس یک عامل مقیاس بندی کند. برای انجام بهتر، باید نحوه یادآوری فروشگاه را تغییر دهیم.
اگر زمانی که $k_i\transpose x$ کوچک است راهی برای سرکوب وزن داشتیم، میتوانیم میزان تداخل کلیدهای شباهت کم را کاهش دهیم.
اجازه دهید قبل از محاسبه مجموع وزنی مقادیر، هر شباهت را از یک تابع غیرخطی $\sigma$ عبور دهیم:
ما به تازگی یک MLP دو لایه را از اصول اولیه دوباره کشف کردیم! ردیفهای ماتریس وزن اول کلیدها و ستونهای ماتریس وزن دوم مقادیر هستند. سوخباتور و همکاران به این شباهت بین لایههای پیشخور و ذخایر حافظه اشاره کرد و Geva و همکارانش. دریافتند که لایههای پیشخور در ترانسفورماتورهای آموزشدیده اغلب به این شکل کار میکنند و کلیدها روی الگوهای قابل تشخیص در ورودی شلیک میکنند.
در حالت ایدهآل، تابع دروازهای $\sigma$ طوری انتخاب میشود که وقتی شباهت کم است ($k_i\transpose x \sim 0$ یا حتی وقتی $k_i\transpose x 5 . یک فعالسازی مربعی ReLU کلیدهای با شباهتهای نزدیک به صفر را سرکوب میکند. شباهت 0.1 به شباهت 0.01 تبدیل میشود، در حالی که واقعیات ReLU به 0.01 تبدیل میشوند، در حالی که واقعیات ReLU میمانند. یکی از بهبودهای کمتر شناخته شده اما در مقیاس ثابت برای فعال سازی MLP (So et al.).
یک ReLU MLP مربعی یک GLU MLP است که دروازه و پروژکتور ورودی دارای وزن هستند، زیرا $\operatorname{ReLU}(Kx)^2 = \operatorname{ReLU}(Kx) \odot Kx$. SwiGLU MLPs در مدلهای زبان امروزی وزن خود را به گیت میدهد و از فعالسازی Swish به جای ReLU استفاده میکند.
در عمل، MLPها حقایق را در برهم نهی ذخیره میکنند: بسیاری از حقایق وزنهای یکسانی دارند و خروجی ترکیبی از بسیاری از خاطرات است. گارسیا و همکاران به صراحت یکی را بسازید: واحدهای پنهان یک GLU MLP محاسبه تصادفی $\phi(x)$ از ورودی را دارد، ماتریس وزن دوم یک ذخیره محصول بیرونی $\sum_i v_i \phi(k_i)\transpose$ بر روی آن ویژگی ها است، و MLP اطلاعات بسیار بیشتری را نسبت به واحدهای پنهان خود ذخیره می کند. با این حال، MLP های ReLU ترانسفورماتورهای آموزش دیده می توانند تنها 1٪ از واحدهای پنهان خود را برای یک ورودی مشخص فعال کنند، بنابراین هر فراخوانی از بخش کوچکی از حافظه ها استفاده می کند (Li et al.).
کاغذ ترانسفورماتور اصلی نیز این اتصال را ایجاد کرد، اما فقط در v2 و v3 در arXiv. در آنجا، واسوانی و همکاران. لایه پیشخور را به عنوان "نوعی توجه" توصیف کنید، با ردیف های دو ماتریس وزن آن به عنوان کلیدها و مقادیر، و ReLU به جای softmax. آنها حتی سعی کردند لایههای فید فوروارد را با توجه به پارامترهای کلیدی-مقدار آموخته شده جایگزین کنند و تقریبا کیفیت ترجمه یکسانی داشتند: یک نسخه کمی بدتر بود، نسخه دیگر کمی بهتر بود، اگرچه نسخه اول حدود 30٪ کندتر آموزش دید. این قطعه از هر نسخه بعدی مقاله حذف شده است.
در زیر به چگونگی ارتباط خودتوجهی با همه اینها خواهیم پرداخت.
برای بررسی این موضوع، آزمایش قبلی را برای پنج گزینه $\sigma$ اجرا می کنیم:
از آنجایی که تداخل مانند $\sqrt{M}$ رشد می کند، خطوط تقریبا موازی در نمودار log-log هستند. فقط ارتفاع آنها تغییر می کند، و با آن ظرفیت، جایی که هر خط از 1 عبور می کند:
بالا بردن وزنه ها به توان، ظرفیت را تا حدود $d_k^p$ افزایش می دهد. اما چه می شود اگر بتوانیم این را به حداکثر برسانیم؟ به جای انتخاب یک قدرت، می توانیم بی نهایت از آنها استفاده کنیم. در واقع، نمایی مجموع وزنی هر توان است،
با وضوح $\beta$ که وزن را روی توان های بالاتر تنظیم می کند. در اینجا همان آزمایش با $\beta = \sqrt{d_k}$، مقدار استفاده از توجه به خود، 6 برای نمایی و سری آن پس از 2، 3 و 4 عبارت کوتاه شده است:
با 2 ترم، ظرفیت حدود 40 است، کمتر از ذخیره خطی، زیرا عبارت ثابت به هر کلید وزنی در حدود 1 می دهد. با 3 عبارت حدود 450 و با 4 عبارت حدود 3100، نزدیک به مربع ReLU است. نمایی کامل بسیار زیر خط چین باقی می ماند، بنابراین ظرفیت آن از لبه نمودار گذشته است.
رشد تصاعدی با $\beta$ تا زمانی که $\beta$ بسیار کمتر از $d_k$ باشد، به جای چند جمله ای در $d_k$ مانند قبل! با $\beta = \sqrt{d_k} = 8$، ظرفیت حدود $e^{14} \تقریبا 1.2 میلیون دلار حافظه است، تقریبا 20000 برابر ظرفیت ذخیره خطی. یک دوره طولانیتر از همین آزمایش، ظرفیت آن را در حدود 1.2 میلیون نیز نشان میدهد.
در عمل، ممکن است نخواهیم ساده لوحانه اعداد را در پیاده سازی خود نشان دهیم، زیرا اعداد کوچک می توانند سرریز شوند و اعداد بزرگ می توانند سرریز شوند. خوشبختانه، تداخل فقط به نسبت بین وزن ها بستگی دارد، همانطور که زنجیره بالا نشان می دهد، بنابراین ما می توانیم هر وزن را بر مجموع آنها تقسیم کنیم بدون اینکه نسبت تداخل به سیگنال را تغییر دهیم، در حالی که ثبات عددی را تضمین می کنیم:
بر خلاف MLP که کلیدها و مقادیر آن وزنهای آموزشدیده هستند، توجه به خود کلیدها و مقادیر آن را از توکنهای موجود در متن آن محاسبه میکند. هر توکن یک حافظه را ذخیره می کند، بنابراین تعداد حافظه های $M$ طول زمینه است. این همان چیزی است که توجه به خود را غیر پارامتری می کند: خاطرات آن پارامتر نیستند و فروشگاه با زمینه رشد می کند.
در اینجا دوباره شکل نوار است که با softmax شروع می شود. در $\beta = 8$، فراخوانی هرگز در محدوده نوار لغزنده با شکست مواجه نمی شود، بنابراین $\beta$ را به 2 کاهش دهید و $M$ را افزایش دهید: فراخوانی پس از چند ده خاطره با شکست مواجه می شود. هر دو برابر شدن $M$ به مقداری $\beta$ بیشتر نیاز دارد تا یادآوری کار کند، که ایده پشت بخش بعدی است.
از آنجایی که $\beta$ تعیین میکند که چقدر کلیدهای مشابه کمتر را سرکوب کنیم، میتوانیم با افزایش تعداد جفتهای کلید-مقدار $\beta$ را افزایش دهیم. چرا فقط $\beta$ را بزرگ نکنید؟ به عنوان $\beta \to \infty$، softmax تبدیل به argmax سختی میشود که فقط شبیهترین کلید را انتخاب میکند، که قابل تمایز نیست، و یک $\beta$ بسیار بزرگ در حال حاضر باعث میشود آموزش ضعیف عمل کند، زیرا softmax اشباع میشود و گرادیانها برای هر کلید دیگر ناپدید میشوند. بنابراین ما $\beta$ را فقط به اندازه ای که $M$ نیاز دارد افزایش می دهیم. مقیاس کردن لاجیت های توجه با $\log M$ ترفندی برای زمینه های طولانی است که این کار را انجام می دهد.
چند نسخه از آن وجود دارد، و هر کدام $\beta$ را نسبت به طول مرجع ثابت $L$، معمولا طول آموزش، تنظیم می کند، به طوری که $\beta$ ارزش آموزش داده شده خود را زمانی که $M = L$ حفظ می کند:
در اینجا نحوه عملکرد هر قانون در آزمایش ما آمده است، با $\beta = \sqrt{d_k} = 8$ در $L = 1024$:
در اینجا حافظه های ذخیره شده ای هستند که ما از آنها بازدید کردیم، با ظرفیت های آنها هنگامی که با یک کلید ذخیره شده پرس و جو می کنیم و کلیدها و مقادیر تصادفی هستند:
ما از یک فروشگاه حافظه اکتشافی، حافظه بیرونی محصول شروع کردیم و به تدریج راه خود را به تمام لایه های استانداردی که امروزه در ترانسفورماتورهای مدرن می بینیم، رساندیم. این دیدگاه همچنین به ما اجازه میدهد تا تفاوت آنها در ظرفیت، توانایی آنها برای عمل به عنوان ذخیرههای ارزش کلیدی با ارزش برداری را تخمین بزنیم.
باید اشاره کنم که این برآورد ظرفیت تنها یکی از راههای نگاه به معماری شبکههای عصبی مدرن است. تخمین ظرفیت ما فقط شمارش می کند که یک لایه منفرد چند بردار تصادفی را قبل از تسلط تداخل بر سیگنال به یاد می آورد. در واقع، ما اصلا دادههای آموزشی را در نظر نگرفتهایم، که بر آنچه واقعا در کلیدها و مقادیر نشان داده میشود تأثیر میگذارد! کارهای دیگری نیز وجود دارد که لایه های آموزش دیده را محاسبه می کنند و اطلاعات ذخیره شده را در بیت ها اندازه گیری می کنند. موریس و همکاران
تخمین می زنند که مدل های سبک GPT حدود 3.6 بیت در هر پارامتر را به خاطر می سپارند و متوجه می شوند که وقتی یک مدل ظرفیت خود را پر کرد، شروع به تعمیم می کند و کمتر از هر مثال آموزشی را به خاطر می سپارد. Allen-Zhu و Li دریافتند که مدلهای زبانی حدود 2 بیت دانش واقعی را در هر پارامتر ذخیره میکنند، حتی زمانی که به int8 کوانتیزه شوند.
از اینجا، بسیاری از مسیرهای مرتبط وجود دارد که آنها نیز جذاب هستند:
من همیشه جذب حافظه شده ام، شاید به این دلیل که احساس می کنم حافظه ام چقدر محدود است. شاید بخشی از من امیدوار است که با درک اینکه ماشینها چگونه به یاد میآورند، چیزی در مورد خودم نیز بیاموزم.
گاهی اوقات این تجمع کلیدها و مقادیر را "یادگیری هبی" می نامند، زیرا قدرت سیناپس ها (وزن ها) توسط ورودی ها (کلیدها) و خروجی ها (مقادیر) که با هم شلیک می شوند (همبستگی) افزایش می یابد. ↩︎
این ذخیره حافظه بیرونی محصول برای حالت توجه خطی استفاده میشود که وزنهای سریع نیز نامیده میشود: هر توکن با اضافه کردن $v k\transpose$ به ماتریسی که بعدا پرس و جو میکند، حافظه $(k, v)$ را ذخیره میکند (کاتاروپولوس و همکاران؛ Schlag، Irie و Schmidhuber). ↩︎
این برای یادآوری یک بردار مقدار تمیز است. اگر هر مقدار فقط باید به سمت پاسخ درست در میان یک مجموعه ثابت اشاره کند، مانند انتخاب محتملترین توکن، یک فراخوان باید به پاسخ درست نزدیکتر باشد تا به اشتباه، و یک ماتریس $d\times d$ میتواند حدود $d^2$ حقایق را در خود جای دهد (نیچانی، لی و بیتی). ↩︎
همچنین میتوانیم از این هدف رگرسیون برای طراحی خاطرات کوتاهمدت استفاده کنیم که یک مدل توالی در طول پاس رو به جلو مینویسد، مانند توجه خطی و توجه به خود. کار من روی رگرسیون زمان آزمون را ببینید. ↩︎
برای کلیدهای تصادفی، یک ReLU تداخل را با ضریب $\sqrt 2$ کاهش می دهد. شباهت یک کلید تصادفی به همان اندازه مثبت یا منفی است، بنابراین ReLU حدود نیمی از وزن ها را صفر می کند و نیمی دیگر را بدون تغییر می گذارد. که واریانس تداخل، مجموع وزنهای مجذور را نصف میکند، بنابراین تداخل خود با ضریب $\sqrt{2}$ کوچک میشود. ژونگ و همکاران را ببینید. برای اشتقاق کامل ↩︎
ترانسفورماتورها به جای ضرب، شباهت ها را بر $\sqrt{d_k}$ تقسیم می کنند. اما پرس و جوها و کلیدهای آنها طولی در حدود $\sqrt{d_k}$ دارند، بنابراین یک جفت منطبق دارای $q\transpose k \approx d_k$ است. کلیدها و جستارهای ما دارای طول واحد هستند، بنابراین یک جفت منطبق دارای شباهت 1 است. بنابراین ما با $\beta = \sqrt{d_k}$ مقیاس میکنیم. ↩︎
متن اصلی (انگلیسی)
You could have invented transformers from memory
Article URL: https://alexwang.ai/posts/associative-memory/ Comments URL: https://news.ycombinator.com/item?id=50122878 Points: 248 # Comments: 64