در دنیای امروز، مدلهای زبانی بزرگ (LLMs) با پارامترهای میلیاردی، عملکرد خیرهکنندهای از خود نشان دادهاند. اما یکی از بزرگترین چالشها برای محققان و مهندسان هوش مصنوعی، هزینه محاسباتی و نیاز به حافظه (VRAM) بسیار بالا برای آموزش مجدد (Fine-tuning) این مدلهاست. در این مقاله به بررسی تکنیک Low-Rank Adaptation یا همان LoRA میپردازیم.
۱. مکانیزم عملکرد LoRA
ایده اصلی LoRA این است که به جای تغییر تمامی وزنهای ماتریس اصلی شبکه (که بسیار حجیم است)، تغییرات وزنها را با استفاده از دو ماتریس با مرتبه پایین (Low-Rank) مدلسازی کنیم. اگر ماتریس وزن اصلی را $W_0$ در نظر بگیریم، تغییرات وزنها ($\Delta W$) به صورت حاصلضرب دو ماتریس $A$ و $B$ تقریب زده میشود.
در این فرمول، ماتریس $W_0$ در طول فرآیند آموزش ثابت (Frozen) میماند و تنها ماتریسهای $A$ و $B$ که ابعاد بسیار کوچکتری دارند، آموزش میبینند. این کار باعث کاهش چشمگیر تعداد پارامترهای قابل آموزش میشود.
"تکنیک LoRA به ما اجازه میدهد مدلهایی با میلیاردها پارامتر را روی سختافزارهای معمولی و کارتهای گرافیک مصرفکننده (مانند RTX 4090) بدون افت کیفیت محسوس، شخصیسازی کنیم."
۲. پیادهسازی در PyTorch
برای درک بهتر، بیایید یک پیادهسازی ساده از یک لایه خطی که با LoRA ترکیب شده است را بررسی کنیم. کتابخانه PEFT متعلق به HuggingFace این فرآیند را بسیار ساده کرده است، اما در زیر منطق خام آن را با پایتون میبینید:
import torch import torch.nn as nn class LoRALinear(nn.Module): def __init__(self, in_features, out_features, rank=4, alpha=16): super().__init__() # ماتریس وزن اصلی (فریز شده) self.pretrained = nn.Linear(in_features, out_features, bias=False) self.pretrained.weight.requires_grad = False # ماتریسهای LoRA self.lora_A = nn.Parameter(torch.zeros(in_features, rank)) self.lora_B = nn.Parameter(torch.zeros(rank, out_features)) self.scaling = alpha / rank # مقداردهی اولیه nn.init.normal_(self.lora_A) nn.init.zeros_(self.lora_B) def forward(self, x): # خروجی = W0*x + (BA*x)*scale return self.pretrained(x) + (x @ self.lora_A @ self.lora_B) * self.scaling
۳. نتایج و بنچمارکها
در آزمایشهای انجام شده روی مدل LLaMA-2 7B، استفاده از روش سنتی Fine-Tuning نیازمند بیش از ۱۱۲ گیگابایت VRAM بود. با اعمال پیکربندی $r=8$ و $\alpha=16$ در LoRA و ترکیب آن با کوانتیزاسیون ۴-بیتی (QLoRA)، توانستیم مدل را تنها با ۱۰ گیگابایت حافظه گرافیکی آموزش دهیم.
نتیجهگیری سیستم
استقرار سیستمهای هوش مصنوعی در سطح لبه (Edge AI) و سازمانهای با بودجه محدود، بدون تکنیکهای فشردهسازی مانند LoRA غیرممکن است. این پارادایم شیفت، دسترسی به هوش مصنوعی مولد را دموکراتیزه کرده است.