ACECODER: Udoskonalanie Modeli Generowania Kodu za pomocą Automatycznej Syntezy Przypadków Testowych i Uczenia ze Wzmocnieniem
Nowe podejście do generowania kodu z wykorzystaniem uczenia ze wzmocnieniem
Modele generowania kodu osiągnęły imponujący postęp dzięki zwiększonej mocy obliczeniowej oraz poprawie jakości danych treningowych. Najnowsze technologie, takie jak Code-Llama, Qwen2.5-Coder oraz DeepSeek-Coder, wykazują wyjątkowe możliwości w różnorodnych zadaniach programistycznych. Ich rozwój jest możliwy dzięki procesowi wstępnego treningu oraz nadzorowanemu dostrajaniu (SFT) na podstawie dużych zbiorów kodu pochodzących z zasobów internetowych.
Jednak mimo ogromnego postępu, zastosowanie uczenia ze wzmocnieniem (RL) w generowaniu kodu wciąż pozostaje w dużej mierze nieeksplorowane. W innych dziedzinach, takich jak rozwiązywanie problemów matematycznych, RL zyskało szerokie zastosowanie, lecz w przypadku kodowania napotyka na dwie kluczowe przeszkody. Po pierwsze, trudno jest określić wiarygodne sygnały nagrody, które skutecznie oceniałyby jakość wygenerowanego kodu. Po drugie, brakuje kompleksowych zbiorów danych zawierających rzetelne przypadki testowe, które mogłyby wspomagać proces oceny.
Wyzwania w generowaniu kodu
Aby sprostać problemom związanym z generowaniem kodu, opracowano różnorodne podejścia. Modele językowe dedykowane kodowaniu, takie jak Code-Llama i Qwen Coder, przechodzą dwufazowy proces treningowy obejmujący etap wstępny oraz dostrajanie. W celu weryfikacji poprawności programów powszechnie stosuje się automatyczne generowanie przypadków testowych. Modele te często generują zarówno kod, jak i testy w sposób samospójny, jednak problemem pozostaje ich wiarygodność – często zawierają błędne lub nierzetelne testy.
Niektóre rozwiązania, jak np. Algo, próbowały poprawić jakość testów poprzez wykorzystanie programów referencyjnych (Oracle) i wyczerpujące enumeracje, jednak natrafiły na ograniczenia związane ze skalowalnością. Ponadto, modele nagradzania, które odgrywają kluczową rolę w dostosowywaniu modeli językowych do określonych zadań przy użyciu RL, sprawdzają się w ogólnych zadaniach, lecz napotykają trudności w wysoko wyspecjalizowanych dziedzinach, takich jak generowanie kodu.
Nowatorskie rozwiązanie badaczy
Zespół naukowców z Uniwersytetu Waterloo, HKUST, niezależny badacz oraz firma Netmind.AI zaproponowali innowacyjne podejście do usprawnienia modeli generowania kodu przy użyciu RL. Kluczowym elementem ich metody jest opracowanie nowej ścieżki przetwarzania, która automatycznie generuje kompleksowe pary pytań i przypadków testowych na podstawie istniejących danych kodu.
Podejście to wykorzystuje wskaźniki przejścia testów do tworzenia par preferencji, które następnie służą do trenowania modeli nagradzania przy użyciu funkcji strat Bradley-Terry. Eksperymenty wykazały, że zastosowanie tej metody zwiększyło skuteczność modelu Llama-3.1-8B-Ins o 10 punktów, natomiast w przypadku Qwen2.5-Coder7B-Ins osiągnięto 5-punktowy wzrost przy użyciu najlepszego z 32 próbek. Dzięki temu model o rozmiarze 7B dorównał większemu modelowi DeepSeekV2.5 o rozmiarze 236B.
Szczegóły eksperymentów
Badania obejmowały trzy główne etapy: trening modelu nagradzania, uczenie ze wzmocnieniem oraz ocenę wyników. Do trenowania modelu nagradzania użyto Qwen2.5-Coder-7B-Instruct, który generował 16 odpowiedzi na każde zapytanie z zestawu ACECODE89K. Proces ten wygenerował około 300 tysięcy par preferencji na podstawie 46 618 unikalnych pytań, co stanowiło 37,34% wszystkich spełniających określone warunki.
W ramach RL zastosowano trzy modele polityki: Qwen2.5-7B-Instruct, Qwen2.5-Coder7B-Base oraz Qwen2.5-Coder-7B-Instruct. Modele te korzystały z dwóch wariantów nagrody – wytrenowanego modelu ACECODE-RM-7B oraz binarnego systemu nagradzania opartego na wynikach przypadków testowych.
Ocena skuteczności odbywała się na trzech benchmarkach: EvalPlus, Big Code Bench oraz Live Code Bench. W eksperymentach zastosowano metodę top-p sampling z temperaturą 1.0 w celu przeprowadzenia testów Best-of-N.
Wyniki i znaczenie badań
W eksperymentach Best-of-N z udziałem modeli MistralInstruct-V0.3-7B, Llama-3.1-Instruct-8B oraz Qwen2.5-Coder7B-Instruct model ACECODE-RM konsekwentnie poprawiał wydajność w porównaniu do strategii zachłannego dekodowania. Szczególnie duże wzrosty – przekraczające 10 punktów – zaobserwowano w słabszych modelach, takich jak Mistral i Llama-3.1.
Eksperymenty z RL również wykazały stałe ulepszenia, zwłaszcza na benchmarkach HumanEval i MBPP. Model Qwen2.5-Coder-Instruct-7B z wykorzystaniem regułowego systemu nagradzania uzyskał wzrost o 3,4 punktu na BigCodeBench-Full-Hard, natomiast podejście oparte na modelu nagradzania osiągnęło imponującą wartość 86,0 punktów na MBPP, zbliżając się do wyniku 87,6 uzyskanego przez model DeepSeek-V2.5.
Podsumowanie
Przedstawiona metoda to pierwsze w pełni zautomatyzowane podejście do tworzenia dużych zestawów przypadków testowych na potrzeby modeli kodujących. Badania pokazują, że wysokiej jakości, weryfikowalne dane kodu mogą być generowane bez konieczności stosowania najbardziej zaawansowanych modeli, co umożliwia skuteczny trening modeli nagradzania oraz zastosowanie RL.
Chociaż podejście to wykazało znaczące ulepszenia w eksperymentach Best-of-N, wzrosty wynikające z RL były bardziej umiarkowane. Wyniki te stanowią jednak solidną podstawę do dalszych badań nad zwiększaniem odporności modeli nagradzania i dalszym doskonaleniem technik generowania kodu. Sukces tej metody otwiera nowe możliwości dla przyszłych usprawnień w dziedzinie generowania kodu z wykorzystaniem automatycznej syntezy przypadków testowych oraz uczenia ze wzmocnieniem.