<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های طاها اکبری</title>
        <link>https://virgool.io/feed/@tahaakbarialvanagh</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 08:25:17</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>طاها اکبری</title>
            <link>https://virgool.io/@tahaakbarialvanagh</link>
        </image>

                    <item>
                <title>Multi-Query attention و Group-Query attention</title>
                <link>https://virgool.io/@tahaakbarialvanagh/multi-query-attention-%D9%88-group-query-attention-epq7ivdxge9i</link>
                <description>یک معماری که توی LLM های اخیر مورد توجه قرار گرفته معماری Group Query attention (GQA) هستش. جریان اینه که در زمان آموزش با توجه به این که همه توکن ها رو داریم می‌تونیم امبدینگ ها و پروجکشن‌هاشون رو همزمان و به شکل ضرب دو تا ماتریس حساب کنیم. ولی در زمان inference نیاز داریم که یک توکن رو توی هر زمان تولید کنیم و دوباره به شبکه بدیم که از موازی‌سازی به شکل ضرب ماتریس جلو‌گیری می‌کنه.یک GPU وقتی دو تا ماتریس رو می‌خواد در هم ضرب کنه هر دو تا رو میاره توی کش و ضرب می‌کنه و باعث میشه که دسترسی مموریمون در حد همون دو تا ماتریس باشه. زمانی که توی حالت inference هستیم دیگه نمی‌تونیم عملیات رو با استفاده از ضرب ماتریس انجام بدیم و در واقع بعد از هر projection روی هر کدوم از query, key, value میریم سراغ لایه های بعدی attention و ماتریس های projection از کش خارج میشن و مجبوریم دوباره لودشون کنیم.این لود کردن در هنگام inference باعث میشه که هر بار مجبور بشیم ماتریس های projection رو از مموری لود کنیم که باعث میشه که تعداد عملیات خواندن از مموری نسبت به تعداد عملیات حسابی زیاد بشه که توی پردازنده‌هایی مثل GPU که عملیات پردازشی رو سریع انجام میدن خوندن مموری به باتلنک تبدیل میشه. برای حل این مشکل راه‌حلی که ارائه شده اینه که به جای این که از یک ماتریس project برای key, value برای هر کدوم از head های attention استفاده کنیم از یک ماتریس مشترک برای همه key ها و value ها استفاده کنیم. این باعث میشه که گلوگاه لود کردن ماتریس های key و value عملا از بین بره. این روش به Multi-Query attention معروفه که در مقابل Multi-Head attention قرار می‌گیره.مشکلی که وجود داره اینه که در این روش عملا مقداری از عملکرد مدل فدا میشه و لذا پیشنهاد میشه که Head ها رو با هم دیگه گروه کنیم و برای هر گروه یک ماتریس تصویر key و value جدا در نظر بگیریم. این روش که عملا بین دو روش Multi-Query attention و Multi-Head attention قرار گرفته به Group-Query attention معروفه که در بعضی از LLM های نسبتا جدید مثلا Mistral هم استفاده شده.</description>
                <category>طاها اکبری</category>
                <author>طاها اکبری</author>
                <pubDate>Wed, 28 Aug 2024 22:13:07 +0330</pubDate>
            </item>
                    <item>
                <title>یادگیری با استفاده از نمونه های کم با استفاده از SetFit</title>
                <link>https://virgool.io/@tahaakbarialvanagh/%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%86%D9%85%D9%88%D9%86%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%85-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-setfit-lgd70cuwp5dy</link>
                <description>گاهی اوقات در حل مسائل دسته‌بندی NLP تعداد کمی داده از هر کدام از دسته‌ها داریم. (به طور مثال ۸ داده از هر دسته داریم).  SetFit روشی برای دسته‌بندی در این حالت ها مبتنی بر معماری sentence transformer ارائه می‌دهد.در حالت کلی SetFit در دو مرحله انجام می‌گردد.یک embedding با استفاده از ساختار sentence transformer روی داده ها به طور contrastive آموزش داده می‌شود، به طوری که داده های از یک کلاس به عنوان نمونه های positive و داده های از کلاس های متفاوت به عنوان نمونه های negative در نظر گرفته می‌شوند.یک مدل Logistic Regression روی امبدینگ های استخراج شده با لیبل به طور نظارت شده آموزش داده می‌شوند.با توجه به این که در مرحله اول جفت دادگان به عنوان داده آموزش در نظر گرفته می‌شوند، اگر K تعداد دادگان آموزش از هر کلاس باشند، تعداد کل دادگان مثبت به تعداد K(K - 1) ضربدر تعداد کلاس ها خواهد بود، و لذا کمی از وضعیت دادگان کم خارج می‌شویم.کتابخانه SetFit در Huggingface بدین منظور نوشته شده‌است. کارکردن با این کتابخانه مشابه با کتابخانه transformers می‌باشد. برای استفاده از این کتابخانه باید چندین مرحله را طی کنیم:ابتدا مدل SetFit را مشابه کتابخانه transformers لود می‌کنیم# Initializing a new SetFit model
model = SetFitModel.from_pretrained(&#039;BAAI/bge-small-en-v1.5&#039;, labels=[&#039;negative&#039;, &#039;positive&#039;])۲. آرگومان‌های آموزش را مقداردهی می‌کنیم تا به کلاس Trainer دهیم# Preparing the training arguments
args = TrainingArguments(
    batch_size=32,
    num_epochs=10,
)۳. کلاس Trainer را ایجاد کرده و مدل را روی دادگان ایجاد می‌کنیم# Preparing the trainer
trainer = Trainer(
    model=model,
    args=args,
    train_dataset=train_dataset,
)
trainer.train()۴. در نهایت می‌توانیم مدل را روی دادگان ارزیابی، ارزیابی کنیم# Evaluating
metrics = trainer.evaluate(test_dataset)
print(metrics)۵. در نهایت می‌توانیم مدل را ذخیره کنیم# Saving the trained model
model.save_pretrained(&#039;setfit-bge-small-v1.5-sst2-8-shot&#039;)</description>
                <category>طاها اکبری</category>
                <author>طاها اکبری</author>
                <pubDate>Wed, 28 Aug 2024 21:25:39 +0330</pubDate>
            </item>
            </channel>
</rss>