Свежая выжимка ml и AI статей - каждый день
С недавним появлением модели O1 от OpenAI, интерес к моделям, способным выполнять сложные задачи, требующие более высоких когнитивных функций, значительно возрос. O1 продемонстрировал впечатляющие способности в области "мышления второго уровня" (System-2), что открывает новые горизонты для применения в различных областях, включая программирование. В данной статье мы рассмотрим O1-CODER — попытку воспроизвести модель O1 с акцентом на задачи кодирования, интегрируя методы обучения с подкреплением (RL) и Монте-Карло Дерево Поиска (MCTS).
Традиционно большие языковые модели (LLMs) демонстрировали способности "первого уровня" (System-1), характеризующиеся быстрыми интуитивными ответами. Эти модели обучались на наборах данных, состоящих в основном из пар вопрос-ответ, что не позволяло им развивать промежуточные шаги рассуждения. В отличие от этого, O1 сочетает предобучение с RL, что позволяет моделям не только использовать существующие знания, но и исследовать новые стратегии.
Кодирование — это типичная задача, требующая "мышления второго уровня". Оно включает в себя логическое и пошаговое решение проблем. O1-CODER фокусируется на применении RL для генерации и уточнения данных рассуждения, что позволяет создавать более качественный код.
При применении RL к генерации кода существуют две основные проблемы:
Оценка Результатов: В отличие от игр, где результаты можно оценить по правилам, оценка кода требует его выполнения в тестовой среде и проверки на соответствие тестовым случаям.
Определение Поведения Рассуждения: Необходимо определить, как модель будет формировать свои действия и какие награды она будет получать за промежуточные шаги.
Для решения первой проблемы предлагается использовать Генератор Тестовых Случаев (TCG), который автоматически создает тестовые случаи на основе вопросов и истинного кода. Это позволяет создать стандартизированную тестовую среду, где результаты могут быть оценены для обучения модели.
Для решения второй проблемы предлагаются два подхода: "думать перед действием" и "думать во время действия". В O1-CODER выбран первый подход, где модель сначала создает детализированное псевдокодовое представление, а затем генерирует финальный код. Это позволяет контролировать уровень детализации и адаптировать модель под разные задачи.
Основная структура алгоритма O1-CODER состоит из шести шагов:
Обучение TCG: Генератор обучается на наборе данных кодов для максимизации разнообразия и корректности создаваемых тестовых случаев.
Генерация Кодовых Данных: Используя MCTS, создаются кодовые данные с процессами рассуждения.
Уточнение Модели Политики: Модель обучается на данных, содержащих корректные шаги рассуждения.
Обучение Модели Наград Процесса (PRM): Модель оценивает качество шагов рассуждения.
Обновление Модели Политики: Модель обновляется с использованием RL и MCTS, получая награды как за процессы, так и за результаты.
Генерация Новых Данных Рассуждения: На основе обновленной модели создаются новые данные рассуждения, которые добавляются в обучающий набор.
Генератор Тестовых Случаев (TCG) играет ключевую роль в автоматизации создания тестовых случаев, что важно для верификации программного обеспечения. В процессе обучения TCG корректность генерируемого кода оценивается с использованием стандартных тестовых случаев.
Обучение TCG делится на два этапа: Супервизированное Тонкое Настройка (SFT) и Прямую Оптимизацию Предпочтений (DPO). На первом этапе модель обучается следовать заданному формату, а на втором — генерировать тестовые случаи, соответствующие специфическим предпочтениям.
Используя модель DeepSeek-1.3B-Instruct в качестве базовой, TCG продемонстрировал эффективность в создании тестовых случаев, что подтверждается высокими показателями успешности.
Псевдокод служит промежуточным представлением между естественным языком и реальным кодом. Он позволяет моделям лучше понимать структуру и логику задачи, что существенно улучшает качество генерируемого кода.
Используя MCTS, создается набор данных, который включает в себя последовательности рассуждений, что позволяет модели лучше обучаться на промежуточных шагах и улучшать итоговый код.
После завершения синтеза данных рассуждения, модель политики и модель наград процесса обучаются на основе полученных данных. Это позволяет модели лучше понимать требования задачи и следовать ожидаемому поведению.
Модель кодирования рассматривается как языковая-расширенная Марковская Процесс принятия решений (MDP). В этом контексте модель использует как процессные, так и результатные награды для улучшения своих способностей к генерации кода.
На основе обновленной модели создаются новые данные рассуждения, которые добавляются в существующий набор данных. Этот процесс обеспечивает постоянное улучшение и разнообразие примеров для обучения.
O1-CODER представляет собой значительный шаг вперед в области генерации кода с использованием методов RL и MCTS. Этот подход не только улучшает качество генерируемого кода, но и открывает новые возможности для применения в различных областях, требующих сложного рассуждения. В будущем стоит ожидать дальнейших улучшений и внедрения подобных моделей в реальных задачах программирования и других областях, где требуется глубокое понимание и решение сложных проблем.