آیا یک برنامه خطی می تواند برنامه ریزی وزن-فضا انجام دهد؟
آدرس مقاله: https://nathan.rs/posts/weight-space-lp/ آدرس نظرات: https://news.ycombinator.com/item?id=50452655 امتیاز: 285 # نظرات: 41
هفته گذشته، MIT CSAIL Sparks of Weight-Space Programming را منتشر کرد. با توجه به وزن خام یک شبکه کوچک، GPT-6 Astra می تواند بگوید که برای بازی در کدام بازی آموزش دیده است. تنها با توجه به قوانین یک بازی، می تواند وزن یک شبکه کوچک را از ابتدا بنویسد و شبکه های آموزش دیده با PPO را برای 100 میلیون مرحله شکست دهد. بدون شیب، بدون حلقه آموزشی، فقط استدلال در مورد آنچه که وزن ها محاسبه می کنند. آنها این برنامه ریزی فضای وزن را ابداع کردند.
در آزمایش دیگری، آنها از Astra خواستند تا Qwen3.5-0.8B را با ویرایش وزنهای آن در ریاضیات بهتر کند. Astra تنها 0.016٪ از وزن ها را تغییر داد و دقت MATH-500 از 7.9٪ به 48.1٪ رسید. 1
با نگاهی به ویرایش Astra، متوجه شدم که بیشتر جستجوی آن حل یک برنامه خطی با آزمون و خطا بود. حدود 8 ساعت و 28 پاس رو به جلو را صرف انتخاب وزنه ها و میزان تغییر کرد. چند حلال ال پی، هر کدام حدود یک دقیقه، کار مشابهی را با وزنه های تغییر یافته 8× کمتر انجام می دهند. در این پست به بررسی این ویرایش میپردازم، چرا این یک LP است و آنچه در مورد خود اصلاح میگوید.
مدلهای استدلال کوچک یک شکست مشترک دارند: آنها در حلقههای تفکر گیر میکنند و به جای اینکه استدلال خود را به پایان برسانند، همان چند خط را بارها و بارها تکرار میکنند. Qwen3.5-0.8B به ویژه مستعد آن است و کارت مدل آن نیز چنین می گوید. در MATH-500، 93 درصد از پاسخهای مدل پایه به محدودیت 32768 توکن رسیدند، بدون اینکه به پاسخی برسند.
ویرایش حلقهها را برطرف میکند، بنابراین در هر جایی که مدل حلقه شود کمک میکند. این شامل دستورالعمل زیر است: IFEval از 21٪ به 62٪ رسید.
در Gemma 3 270M، که به ندرت لوپ میشود، Astra نتوانست توانایی ریاضی خود را به طور معناداری بهبود بخشد. همانطور که نویسندگان میگویند، ویرایش وزنهها میتواند مانعی را برای پنهان کردن یک توانایی حذف کند، اما نمیتوان مانعی را که مدل فاقد آن بود اضافه کرد.
ترانسفورماتورها از اتصالات باقی مانده استفاده می کنند: خروجی هر لایه به جای جایگزینی به ورودی آن اضافه می شود. یک توکن را از طریق شبکه دنبال کنید و یک بردار واحد دریافت می کنید که هر لایه به آن اضافه می کند، به نام جریان باقیمانده (1024 بعدی در این مدل). هنگامی که مدل در حال چرخش است، جریان باقیمانده در یک جهت ثابت جابجا می شود. راه حل Astra این بود که دو لایه را ویرایش کرد تا آنچه اضافه میکنند برعکس باشد.
آسترا چهار جفت متن کوتاه نوشت که هر کدام یک تکه استدلال سازنده و یک نسخه چرخشی از همان استدلال بود. هر هشت مورد را در مدل اجرا کرد و بردار جریان باقیمانده هر توکن را در یک لایه ثبت کرد. میانگین گیری از متن های حلقه ای یک بردار و میانگین گیری از متن های تولیدی بردار دیگری را به دست می دهد. تفاوت آنها، نرمال شده، جهت حلقه $u$ است: روشی که جریان باقیمانده هنگام حلقه زدن مدل حرکت می کند.
هر MLP با یک ماتریس $W$ (به نام down_proj) به پایان می رسد. در هر توکن، فعالسازی پنهان 3584 بعدی MLP $h$ را به یک خروجی 1024 بعدی $Wh$ تبدیل میکند که به جریان باقیمانده $x$ اضافه میشود:
بنابراین خروجی MLP همیشه یک مجموع وزنی از همان 3584 بردار است، ستونهای $w_j$ برابر با $W$. $W$ مشخص می کند که آن بردارها چیستند. فعالسازیهای $h_j$ تعیین میکنند که چه مقدار از هر یک به هر توکن اضافه میشود.
هر ستون تا حدی در امتداد $u$ قرار دارد. این مقدار، $u^\top w_j$، مقداری است که ستون $j$ هر زمان که $h_j$ فعال باشد مدل را به سمت حلقه سوق میدهد. ویرایش Astra چندین $\alpha$ از آن را کم می کند:
در $\alpha = 1$، مؤلفه در امتداد $u$ از بین رفته است، بنابراین ستون دیگر به سمت حلقه کردن فشار نمی آورد. انجام این کار برای هر ستون در لایههای 15 و 19 دقتی از 9% تا 33% در مسائل آموزشی GSM8K و MATH داشت. در $\alpha = 6$، مولفه برگردانده میشود: ستونی که $+a$ را در امتداد $u$ مینویسد، اکنون $-5a$ مینویسد، و هر زمان که مدل استفاده میشود، مدل را از حلقه کردن دور میکند.
هر ستون ویرایش شده توسط مضربی از همان بردار $u$ تغییر می کند. بنابراین کل ویرایش یک جهت $u$ به اضافه یک عدد در هر ستون است، $v_j = -\alpha\,(u^\top w_j)$ که برای ستونهایی که به تنهایی باقی مانده صفر است. این یک تغییر رتبه 1 است:
در هر توکن، $(v \cdot h_t)\,u$ را به جریان باقیمانده اضافه میکند: مقداری $u$، که بر اساس میزان فعال بودن ستونهای ویرایش شده تنظیم میشود. هیچ جهت دیگری تغییر نمی کند.
این امر باعث میشود که $v$ انتخاب شود: کدام ستونها را ویرایش کنیم، و مقدار $\alpha$ چقدر باید باشد. Astra آن را با آزمون و خطا انجام داد و هر ویرایش را روی دسته جدیدی از این مشکلات آموزشی آزمایش کرد:
فشار دادن بیشتر از $\alpha = 1$ کمک بیشتری کرد و یک جهت تصادفی هیچ نتیجه ای نداشت. ویرایش نهایی از $\alpha = 6$ فقط در 64 ستون در هر لایه استفاده کرد که بیشترین $u$ را در متن حلقه نوشتند.
این روزنامه گزارشهای کامل Astra را منتشر کرد: هر تماس ابزار، هر پاس رو به جلو، هر یادداشتی که برای خودش مینوشت. Astra یک هسته پایتون با وزنهای بارگذاری شده و بودجه 50 پاس رو به جلو داشت، که هر کدام یک سری از مدل در مشکلات آموزشی یا متنهای انتخابی خود بود.
ویرایش بعد از حدود 10 ساعت ثابت شد و 17 پاس آخر بدون تغییر چیزی دوباره آن را آزمایش کردند. 2 از آن 10 ساعت، پیدا کردن $u$ 15 دقیقه طول کشید. پیدا کردن $v$ حدود 8 ساعت طول کشید.
Astra به دنبال $v$ بود که به شدت توکنهای حلقهای را از $u$ دور میکند در حالی که به سختی توکنهای سازنده را لمس میکند. از آنجایی که فشار در نشانه $t$ $v \cdot h_t$، خطی در $v$ است، هر دو الزامات نابرابری خطی هستند.
توکنها را از ردیابیهای خود مدل پایه برچسبگذاری کردم: نشانههای حلقهای ($R$)، عمق درون یک حلقه، و نشانههای تولیدی ($P$)، خیلی قبل از شروع هر حلقه، 3 و فعالسازیهای آنها $h_t$ را در لایههای 15 و 19 ثبت کردم. هر کدام به یک محدودیت تبدیل میشوند، و LP با کوچکترین $v$j_v $\j_v، کوچکترین مقدار را انتخاب میکند.
در عمل هیچ $v$ هر محدودیتی را برآورده نمی کند، بنابراین هر یک از آنها یک متغیر slack جریمه دریافت می کند.
به حداقل رساندن L1 تمایل دارد $v$ را پراکنده کند. توپ L1 یک الماس است و زمانی که آن را رشد می دهید تا زمانی که به ناحیه امکان پذیر برسد، معمولا در گوشه ای لمس می شود، جایی که بیشتر مختصات دقیقا صفر است. بنابراین LP ستون ها و همچنین مقادیر را انتخاب می کند.
برای به دست آوردن دقیقا 8 ستون در هر لایه، من 8 را با بیشترین افکت نگه داشتم و دوباره با بقیه در صفر ثابت کردم. 4
که جایگزین جستجوی 8 ساعته Astra، از جمله انتخاب ستونها و $\alpha$، با چند راه حل LP میشود. یک حل کننده خارج از قفسه (HiGHS) هر کدام بیش از 20 دقیقه در مورد این محدودیت ها زمان برد، بنابراین من یک حل کننده GPU (PDHG، الگوریتم پشت PDLP) نوشتم که در عرض یک دقیقه به 0.2 درصد از حد مطلوب خود می رسد. 5
من دو ویرایش LP را تست کردم. هر دو از لایه های Astra استفاده می کنند. یکی از جهت Astra $u$ استفاده می کند. دیگری از یک جهت اکتشافی استفاده میکند: نشانهها را در ردیابی خود مدل بهعنوان حلقهای یا مولد با یک آشکارساز تکرار ساده برچسبگذاری کنید، سپس اختلاف میانگین جریانهای باقیمانده آنها را بگیرید. این همان دستوری است که Astra استفاده کرده است، منهای متون دست نویس، بنابراین هیچ LLM درگیر نیست. من تنظیمات LP را روی یک مجموعه توسعه دهنده 128 مشکلی جداگانه تنظیم کردم. همه چیز در نمودار و جدول بر روی داده هایی است که هرگز برای تطبیق یا تنظیم استفاده نشده است.
با جهت Astra، LP با ویرایش Astra در هر معیار، در نویز مطابقت دارد، در حالی که وزنهای 8× کمتر را تغییر میدهد. با جهت اکتشافی، حدود 93 درصد از مسیر به آنجا می رسد.
یک ویرایش تنها میتواند یک نشانه حلقهای را از طریق فعالسازیهایش متمایز کند، و یک حلقه تا زمانی که به خوبی در حال انجام باشد، از آنها قابل تشخیص نیست. بنابراین در مجموعه توسعهدهنده، درخواست از LP برای فشار دادن فقط روی توکنهای حلقهمانند، بهتر از فشار دادن روی هر توکن نبود.
8 ستون LP در لایه 15 روی 89٪ توکن ها فعال هستند و فشاری که آنها اضافه می کنند به سختی از توکنی به توکن دیگر متفاوت است، بنابراین ویرایش نزدیک به یک فشار ثابت در امتداد $u$ است. فشار مداوم نیازی به ویرایش وزن ندارد. می توان آن را مستقیما به عنوان یک بردار فرمان اضافه کرد، یک بردار ثابت به جریان باقیمانده در هر نشانه اضافه می شود.
جدول زیر میانگین فشار ویرایش LP را در امتداد $u$ به مدل ویرایش نشده در لایههای 15 و 19 در سه نقطه قوت اضافه میکند:
برای مقایسه، در همان اجراها: ویرایش LP امتیاز 62.5 در مجموعه توسعه دهنده و 53.2 در MATH-500، ویرایش Astra 59.4 و 50.0، مدل پایه 10.9 و 7.0 دارد. MATH-500 در اینجا یک نمونه برای هر مسئله است.
در 1×، بردار فرمان اساسا کل ثابت را بازیابی می کند. پنجره باریک است: در 0.5× حلقه ها برمی گردند، و در 2× متوقف می شوند اما استدلال از بین می رود.
تنها تفاوت در تحویل است. ویرایش LP یک ایست بازرسی معمولی است. بردار فرمان در زمان استنتاج به کد اضافی نیاز دارد.
این یک مدل است LP هنوز برای لایه ها به Astra متکی است و بهترین نتایج از جهت Astra نیز استفاده می کند. جهت اکتشافی بیشتر راه را بدون LLM انجام می دهد، اما نه همه آن.
حلقهها نیز با فشار ثابت قابل تعمیر بودند، بنابراین محدودیتهای LP برای هر توکن اهمیت چندانی نداشت. رفتاری که باید برخی از نشانه ها را تغییر دهد و دیگران را به حال خود رها کند، آزمون بهتری برای آنها خواهد بود. انتخاب لایه ها بدون عامل، قطعه باز دیگر است.
در نهایت، این فقط در حذف حلقه ها آزمایش شد. بسیاری از رفتارهای دیگر، مانند امتناع یا همسویی، می توانند با افزودن یا حذف یک جهت واحد در جریان باقیمانده هدایت شوند. 7 اگر بتوان رفتاری را با یک جهت هدایت کرد، انتخاب نحوه ساخت آن در وزنه ها باید همان LP باشد، اما هنوز نیاز به آزمایش دارد.
کد، ویرایشها و نوشتن کامل در GitHub هستند.
Rikiya Takehi، Jayden Teoh، Alex Zhang و Omar Khattab، Sparks of Weight-Space Programming، MIT CSAIL، 2026. گزارشها تحت نسخه CC BY 4.0 منتشر شدهاند و همه چیز درباره اجرای Astra در این پست از آنها میآید. ↩︎
دور کامل آسترا 158 دور و 20.3 ساعت به طول انجامید که 4.7 مورد آن قطعی بود. 19 پاس به جلو شکست خورد و در بودجه آن حساب نشد. تفکیک کامل در نوشتن است. ↩︎
اگر 16 ژتون که به آن ختم میشوند، قبلا در پاسخ ظاهر شده باشند، یک توکن تکراری حساب میشود. یک حلقه از اولین نقطه شروع می شود که پس از آن حداقل 80٪ از توکن های باقی مانده تکرار می شوند. توکن های حلقه ای حداقل 64 توکن در یک حلقه تکرار می شوند. توکن های مولد حداقل 256 توکن قبل از آن یا هر جایی در پاسخی که به پایان رسیده است می آید. ↩︎
هر ستون با $|v_j|$ برابر انحراف استاندارد $h_j$ رتبهبندی میشود، تقریبا چقدر در امتداد $u$ در یک نشانه معمولی اضافه میکند. ↩︎
PDHG ( گرادیان هیبریدی اولیه-دوگانه) فقط به محصولات ماتریس-بردار نیاز دارد، بنابراین تمام محدودیت های توکن به یکباره بر روی GPU قرار می گیرند و دقیقا مقدار کمی از $v$ را برمی گرداند. ↩︎
یک کاوشگر خطی روی فعالسازیهای لایه 15 میتواند نشانههای حلقهای را از نشانههای مولد هنگامی که یک حلقه در جریان است تشخیص دهد (AUC 0.93)، اما در نقطه شروع آن بسیار کمتر است (0.73). ↩︎
یا اینکه آیا می توانید آن را شبیه او کنید. ↩︎
متن اصلی (انگلیسی)
Can a Linear Program Do Weight-Space Programming?
Article URL: https://nathan.rs/posts/weight-space-lp/ Comments URL: https://news.ycombinator.com/item?id=50452655 Points: 285 # Comments: 41