معماری Llama 2: چه چیزی آن را خاص می کند؟

متا مدل زبان بزرگ خود را در سال 2023 به دنیا معرفی کرد و تنها چند ماه بعد، آن را به Llama 2 ارتقا داد و دنیایی از فرصت‌ها را برای کسب‌وکارها، استارت‌آپ‌ها، کارآفرینان و محققان باز کرد تا از مزایای اقتصادی و اجتماعی آن بهره ببرند.‏LLaMA درست مانند اکثر مدل‌های زبان بزرگ، مبتنی بر معماری ترانسفورمر است که یک معماری استاندارد برای مدل‌سازی زبان از سال 2018 تا به حال است. با این وجود، LLaMA چند بهبود نسبت به معماری اصلی ترانسفورمر معرفی می‌کند که به آن اجازه می‌دهد تا وابستگی‌های طولانی‌تر را در متن یاد بگیرد و عملکرد بهتری در پاسخگویی به سؤالات و یا خلاصه نویسی داشته باشد.معماری LLaMA چه تفاوتی با سایر مدل های LLM دارد؟معماری مدل LLaMa2 بر اساس معماری ترانسفورمر است، با چندین اصلاح و بهبود الهام گرفته از مدل‌های قبلی مانند GPT3، PalM، و GPTNeo. در کد زیر، معماری کلی مدل llama 7b آمده است. در ادامه به بخشهایی از این معماری می پردازیم که با ایده متفاوت نسبت به مدلهای دیگر مطرح شده است.LlamaModel( (embed_tokens): Embedding(32000, 4096, padding_idx=0) (layers): ModuleList( (0-31): 32 x LlamaDecoderLayer( (self_attn): LlamaAttention( (q_proj): Linear8bitLt(in_features=4096, out_features=4096, bias=False) (k_proj): Linear8bitLt(in_features=4096, out_features=4096, bias=False) (v_proj): Linear8bitLt(in_features=4096, out_features=4096, bias=False) (o_proj): Linear8bitLt(in_features=4096, out_features=4096, bias=False) (rotary_emb): LlamaRotaryEmbedding() ) (mlp): LlamaMLP( (gate_proj): Linear8bitLt(in_features=4096, out_features=11008, bias=False) (up_proj): Linear8bitLt(in_features=4096, out_features=11008, bias=False) (down_proj): Linear8bitLt(in_features=11008, out_features=4096, bias=False) (act_fn): SiLUActivation() ) (input_layernorm): LlamaRMSNorm() (post_attention_layernorm): LlamaRMSNorm() ) ) (norm): LlamaRMSNorm() ) (lm_head): Linear(in_features=4096, out_features=32000, bias=False)نرمال‌سازی (normalisation) با استفاده از RMSNorm:‏RMSNorm تکنیکی است که برای نرمال‌سازی تابع فعال‌سازی (activation function) لایه های شبکه عصبی استفاده می شود. در این فرآیند، توابع فعال‌سازی به گونه‌ای تغییر می‌کنند که مقادیر آن‌ها در یک مقیاس مشترک قرار گیرند. هدف از این عمل، تسهیل تحلیل و مدل‌سازی داده‌ها است و همچنین باعث کاهش تأثیر مقیاس‌های مختلف بر دقت مدل‌های یادگیری ماشین می‌شود.تابع نرمال‌سازی RMSNorm توسط Zhang و Sennrich در یک مقاله تحقیقاتی در سال 2019 معرفی شد.RMSNorm ساده شده لایه نرمال‌سازی (LayerNorm) است. LayerNorm یک تکنیک نرمال‌سازی است که می‌تواند مشکل internal covariate shift را کنترل کند تا خروجی لایه فعال‌سازی تثبیت شود و همگرایی مدل را بهبود بخشد. LayerNorm به این صورت عمل می‌کند که میانگین را از خروجی تابع فعال‌سازی کم می‌کند و سپس نتیجه را بر انحراف معیار خروجی تقسیم می‌کند. این روش در مدلهای مبتنی بر NLP کاملاً موفق بوده است و به یک جزء ضروری برای بهینه سازی مدل تبدیل شده است.‏RMSNorm عملکرد قابل مقایسه ای در مقابل LayerNorm به دست می آورد اما زمان اجرا را از 7٪ تا 64٪ کاهش می دهد.‏GPT و Palm از LayerNorm برای نرمال‌سازی استفاده می کنند.چگونه RMSNorm عملکرد بهتری دارد:‏RMSNorm نسبت به داده های پرت (outlier) قوی‌تر است که به دلیل این است که از انحراف استاندارد بهره نمی‌برد، بلکه خروجی تابع فعال‌سازی یک لایه را با تقسیم بر مقدار میانگین مربع ریشه فعال‌سازی‌ها نرمال می‌کند. این به این معناست که مقدار RMS (ریشه میانگین مربع) از جایگزینی برای انحراف استاندارد در فرآیند نرمال‌سازی استفاده می‌شود.فرمول RMSNorm برای یک ویژگی (feature) خاص به شکل زیر است:‏RMSNorm برای محاسبه کارآمدتر است. این به این دلیل است که RMSNorm فقط به محاسبه ریشه دوم مقادیر نیاز دارد، در حالی که LayerNorm نیاز به محاسبه ریشه دوم و میانگین مقادیر دارد.نشان داده شده است که RMSNorm عملکرد را در مدلسازی زبان بهبود می بخشد که احتمالاً به این دلیل است که نسبت به موارد پرت قوی‌تر و برای محاسبه کارآمدتر است.تابع فعال سازی SwiGLU‏LLaMa مشکل غیر خطی بودن تابع فعال‌سازی ReLU را با تابع فعال‌سازی SwiGLU که توسط Shazeer در سال 2020 برای بهبود عملکرد معماری ترانسفورمر معرفی شد جایگزین کرده است.‏ReLU یک تابع فعال سازی غیرخطی است، به این معنی که می تواند روابط پیچیده بین متغیرهای ورودی و خروجی را یاد بگیرد. در عوض ‏SwiGLU یک تابع فعال‌سازی جدیدتر است که نشان داده شده است در معماری‌های شبکه عصبی خاص از ReLU بهتر عمل می‌کند.‏این تابع ترکیبی از تابع‌های فعال سازی Swish و Gated Linear Unit (GLU) است و یک تابع smooth و غیر یکنواخت به حساب میاید که نشان داده شده عملکرد شبکه های عصبی را در کارهای مختلف بهبود می بخشد.تابع فعال سازی GLU یک مکانیسم دروازه ای است که می تواند برای کنترل جریان اطلاعات از طریق یک شبکه عصبی استفاده شود.‏GPT از تابع فعال سازی ReLU استفاده می کند در حالی که Palm از SwiGLU نیز استفاده می کند.مزایای SwiGLU نسبت به ReLU:بهبود عملکرد: نشان داده شده است که SwiGLU عملکرد مدل‌های زبانی را در کارهای مختلف، از جمله مدل‌سازی زبان، ترجمه و پاسخ‌گویی به سؤال بهبود می‌بخشد.کاهش اورفیت: SwiGLU می‌تواند با جلوگیری از یادگیری بیش از حد رابطه بین ویژگی‌ها و متغیر هدف، به کاهش بیش‌برازش در مدل‌های زبانی کمک کند.افزایش کارایی: SwiGLU یک تابع فعال سازی کارآمد از لحاظ محاسبه است که آن را برای استفاده در مدل های زبان بزرگ مناسب می کند.با این حال، SwiGLU هنوز یک تابع فعال سازی نسبتا جدید است و به اندازه ReLU آزمایش نشده است. ممکن است که SwiGLU در تمام وظایف مدلسازی زبان به خوبی ReLU عمل نکند.‏Rotary Embeddings:‏LLaMa امبدینگهای موقعیتی (positional embedding) مطلق را حذف می‌کند و امبدینگهای موقعیتی چرخشی (RoPE) را در هر لایه از شبکه ترکیب می‌کند. این امبدینگ توسط سو و همکاران در سال 2021 معرفی شدند.در Rotary Position Embedding (RoPE)، هر امبدینگ موقعیتی مجموعه ای از توابع سینوس و کسینوس با فرکانس های مختلف است که موقعیت های مختلف را در دنباله نشان می دهد.برخلاف امبدینگ موقعیتی سنتی که اطلاعات موقعیتی را اضافه می‌کند، امبدینگ موقعیتی چرخشی، امبدینگ توکنها را در فضایی با ابعاد بالا می‌چرخاند، بنابراین اطلاعات اصلی را حفظ می‌کند و در عین حال اطلاعات موقعیتی را نیز در بر می‌گیرد.اطلاعات موقعیتی به روشی مبتنی بر چرخش به دلیل ویژگی‌های منحصربه‌فرد عملیات چرخش در فضاهای برداری، به‌ویژه حفظ طول و زاویه بین بردارها، اضافه می‌شود. حفظ‌ این ویژگی‌ها به حفظ یکپارچگی امبدینگ توکنها کمک می‌کنند و در عین حال آنها را با اطلاعات توالی ترکیب می‌کنند.‏ChatGPT و Bard هر دو مدل های زبان بزرگ (LLM) هستند که از امبدینگ‌های موقعیتی برای نمایش ترتیب کلمات در یک جمله استفاده می کنند. با این حال، ChatGPT از توابع سنتی سینوسی و کسینوس استفاده می کند، در حالی که Bard از تعبیه های چرخشی استفاده می کند.مزایای امبدینگ موقعیتی چرخشی:امبدینگ موقعیتی چرخشی چندین مزیت کلیدی دارد:عدم تغییر نسبت به طول دنباله: برخلاف امبدینگهای موقعیتی سنتی، RoPE می‌تواند امبدینگهای موقعیت را در لحظه برای هر طولی از دنباله‌ها ایجاد کند و به حداکثر طول دنباله از پیش تعریف‌شده نیاز ندارد.بهبود عملکرد مدل: با حفظ طول و زوایای بین بردارها، RoPE امکان استفاده دقیق‌تر و ظریف‌تر از امبدینگهای توکن را فراهم می‌کند که می‌تواند منجر به عملکرد بهتر مدل در کارهایی شود که به شدت به اطلاعات موقعیتی متکی هستند.کارایی و هزینه محاسباتی کمتر: از آنجایی که RoPE می تواند امبدینگ موقعیت را به صورت on-the-fly محاسبه کند، می تواند حافظه و منابع محاسباتی را حفظ کرده و آن را به انتخاب کارآمدتری برای مدل های در مقیاس بزرگ تبدیل کند.هدف مدل LLaMa با ترکیب این تغییرات معماری، افزایش پایداری آموزش، بهبود عملکرد و اصلاح رمزگذاری موقعیتی است.‏