В контексте стремительного развития больших языковых моделей (LLM) особое внимание уделяется повышению их способности к логическим рассуждениям. Одним из значимых достижений в этой области является модель DeepSeek-R1, разработанная для стимулирования reasoning-способностей LLM с помощью методов обучения с подкреплением (Reinforcement Learning, RL). DeepSeek-R1 представляет собой инновационный подход, направленный на улучшение качества генерации ответов в задачах, требующих многошаговых логических выводов.
DeepSeek-R1 относится к классу reasoning-моделей, таких как OpenAI o1/o3, Google Gemini 2.0 Flash Thinking и Alibaba Cloud Qwen QwQ. В отличие от традиционных LLM, которые стремятся сразу сгенерировать финальный ответ, DeepSeek-R1 использует метод Chain-of-Thought (CoT), предполагающий генерацию последовательности промежуточных шагов рассуждения перед выдачей окончательного результата. Этот подход позволяет модели не только улучшить точность ответов, но и повысить прозрачность и интерпретируемость процесса принятия решений.
DeepSeek-R1 основана на парадигме обучения с подкреплением, что позволяет модели адаптироваться к сложным задачам, требующим глубокого анализа и логического вывода. В отличие от стандартных методов fine-tuning, RL-подход обеспечивает более гибкое обучение, ориентированное на долгосрочные цели. Это особенно важно для задач, где требуется не только генерация текста, но и последовательное рассуждение, например, в математических задачах, вопросах на общие знания и символических рассуждениях.
DeepSeek-R1 выделяется среди аналогичных моделей благодаря своей способности эффективно комбинировать CoT с методами RL. В то время как OpenAI o1/o3 и Google Gemini 2.0 Flash Thinking также используют CoT, DeepSeek-R1 делает акцент на оптимизации процесса рассуждения через reinforcement learning, что позволяет модели лучше адаптироваться к задачам с высокой степенью неопределённости.
Таким образом, DeepSeek-R1 представляет собой важный шаг в развитии reasoning-моделей, предлагая новый подход к повышению способности LLM к логическим рассуждениям через интеграцию методов CoT и RL.
Техника Chain-of-Thought (CoT), предложенная в работе "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" (Wei et al., 2022) [1], стала важным инструментом в арсенале промпт-инженерии для повышения качества ответов LLM, особенно в задачах, требующих рассуждений. CoT возникла из наблюдения, что большие языковые модели, в отличие от моделей меньшего размера, демонстрируют эмерджентное свойство – способность значительно улучшать свои ответы при использовании подсказок, направляющих их на генерацию промежуточных шагов рассуждения. Это свойство становится заметным для моделей с количеством параметров от 100 миллиардов и выше.
CoT prompting заключается в том, чтобы в запросе к модели явно попросить её не сразу выдавать финальный ответ, а сначала сгенерировать последовательность промежуточных шагов, объясняющих ход мысли, и лишь затем предоставить окончательный результат. Этот подход часто комбинируется с few-shot learning, когда модели предоставляются несколько примеров запросов с демонстрацией желаемых цепочек рассуждений и соответствующих ответов.
Применение CoT prompting приводит к заметному повышению качества ответов, особенно в таких областях, как:
Математические задачи (арифметические рассуждения): Решение задач на сложение, вычитание, умножение, деление и более сложные математические операции.
Рассуждения с использованием общих знаний (commonsense reasoning): Ответы на вопросы, требующие применения знаний о мире и здравого смысла.
Символические рассуждения: Задачи, связанные с манипуляцией символами и логическими операциями.
Помимо повышения точности, CoT обладает дополнительными преимуществами:
Прозрачность принятия решений: Цепочка рассуждений позволяет понять, как модель пришла к тому или иному ответу.
Интерпретируемость: Промежуточные шаги рассуждения делают процесс вывода более понятным и анализируемым.
Эффективное использование вычислительных ресурсов: CoT побуждает модели выделять больше вычислительных ресурсов (в виде генерации промежуточных токенов) на более сложные задачи.
Ключевые аспекты и выводы работы включают:
Преимущества CoT Prompting: CoT повышает точность решения задач в различных областях рассуждений, включая арифметику, общие знания и символьные задачи. Метод заключается в создании последовательности промежуточных шагов рассуждения, ведущих к ответу, и легко реализуется с помощью нескольких демонстрационных примеров. В частности, отмечается улучшение арифметических рассуждений, где модель PaLM 540B, использующая CoT, достигла нового state-of-the-art результата на бенчмарке GSM8K для математических задач.
Применимость к различным типам рассуждений: CoT эффективно применяется для:
Арифметических рассуждений: задачи из наборов данных GSM8K, SVAMP, ASDiv, AQuA, MAWPS.
Рассуждений на основе общих знаний: задачи из наборов данных CSQA, StrategyQA, задачи на понимание дат и спортивных событий, а также в задачах инструктирования роботов (SayCan).
Символических рассуждений: задачи Letter Concatenation, Coin Flip.
Необходимость масштаба модели: CoT является эмерджентной способностью, проявляющейся с увеличением размера модели. Эффективность CoT значительно возрастает при использовании очень больших моделей, таких как PaLM (540B параметров) и GPT-3 (175B параметров), по сравнению с моделями меньшего размера.
Примеры CoT Prompting: В статье приводятся примеры CoT для различных типов рассуждений, демонстрирующие, как разбиение задачи на более простые шаги и объяснение каждого шага на естественном языке ведет к конечному ответу.
Ablation Studies и Robustness Testing: Исследования различных вариантов CoT prompting показывают, что выражение промежуточных шагов на естественном языке играет ключевую роль в успехе метода. Анализ устойчивости подтверждает, что CoT достаточно устойчива к изменениям в стиле аннотации и различиям между аннотаторами.
Анализ ошибок: Анализ неправильных цепочек рассуждений позволяет классифицировать ошибки (ошибка калькулятора, пропуск шага, ошибка понимания смысла, непоследовательная цепочка рассуждений) и определить направления для улучшения моделей. При этом подчеркивается, что нет гарантий полной корректности и последовательности рассуждений, генерируемых LLM.
Сравнение с существующими методами: CoT prompting отличается от методов, требующих обучения или дообучения нейронных сетей для генерации промежуточных шагов. CoT позволяет выполнять рассуждения без необходимости большого количества аннотаций и подходит для широкого спектра NLP задач типа "текст в текст".
Заключение:
Исследование Chain-of-Thought prompting подчеркивает важность промптинга как ключевого метода для улучшения качества рассуждений моделей. Основные выводы включают:
Промптинг: Вместо дополнительных этапов обучения, Chain-of-Thought prompting использует специально сформулированные промпты, стимулирующие модель к последовательным логическим рассуждениям.
Масштаб модели: Эффективность метода возрастает с увеличением размера модели, особенно при использовании крупных моделей с миллиардными параметрами.
Few-shot примеры: Добавление нескольких примеров further enhances the model's ability to scale and reason logically.
Этот подход демонстрирует прямую корреляцию между качеством масштабирования модели и ее параметрами, что открывает новые горизонты в области искусственного интеллекта.
В контексте стремления к дальнейшему повышению надежности и точности рассуждений, техника Chain-of-Thought получила развитие в виде метода Self-Consistency (CoT-SC), предложенной в значимой работе "Self-Consistency Improves Chain of Thought Reasoning in Language Models" [2]. В то время как стандартный CoT prompting, как правило, полагается на жадное декодирование, выбирая наиболее вероятную цепочку рассуждений, CoT-SC вводит принцип самосогласованности, основанный на интуитивном понимании, что сложные задачи рассуждения могут иметь несколько равноценных и корректных путей решения.
Ключевая идея CoT-SC заключается в генерации ансамбля разнообразных цепочек рассуждений для одного и того же входного запроса посредством стохастического семплирования из языковой модели. Вместо того, чтобы полагаться на единственный, потенциально подверженный ошибкам, вывод, CoT-SC агрегирует результаты, выбирая в качестве финального ответа тот, который демонстрирует наибольшую согласованность среди сгенерированных цепочек – принцип, известный как мажоритарное голосование. Такой подход позволяет существенно снизить зависимость от случайных флуктуаций в процессе генерации и повысить общую робастность итогового ответа.
Преимущества Self-Consistency (CoT-SC):
Повышенная надежность и точность: За счет учета множественности возможных путей рассуждения, CoT-SC обеспечивает более стабильные, надежные и точные результаты, особенно при решении сложных задач, требующих глубокого логического вывода.
Простота реализации и вычислительная эффективность: Метод отличается простотой интеграции, не требуя дополнительного обучения или трудоемкой разметки данных, и при этом демонстрирует значительное улучшение производительности.
Устойчивость к вариативности промптов и стратегий семплирования: CoT-SC проявляет замечательную устойчивость к незначительным изменениям в формулировке промптов и к использованию различных стратегий семплирования, что подчеркивает его практическую ценность.
Экспериментальные исследования, представленные в [2], убедительно демонстрируют эмпирическое превосходство CoT-SC над стандартным CoT prompting и рядом альтернативных методов декодирования. На широком спектре авторегрессионных моделей, включая UL2-20B, GPT-3-175B, LaMDA-137B и PaLM-540B, CoT-SC продемонстрировал статистически значимое улучшение точности в задачах как арифметического, так и здравого смысла. В частности, метод продемонстрировал впечатляющий прирост на авторитетных бенчмарках GSM8K, SVAMP, AQuA, StrategyQA и ARC-challenge, что подтверждает его эффективность и универсальность.
Таким образом, Self-Consistency (CoT-SC) представляет собой важный шаг вперед в эволюции техник рассуждения для больших языковых моделей, предлагая элегантный и действенный способ повышения надежности и точности ответов посредством использования ансамблевого подхода к рассуждениям и принципа мажоритарного голосования.
> Стохастическое семплирование в языковой модели позволяет создавать ансамбль разнообразных цепочек рассуждений, внося вариативность через разные гиперпараметры. Лучшие цепочки выбираются по принципу мажоритарного голосования, где наиболее согласованный ответ считается лучшим.
Несмотря на признанную эффективность Chain-of-Thought (CoT) в задачах, требующих логических рассуждений, присущая CoT линейная структура последовательности мыслей может стать ограничивающим фактором при решении особо сложных и многоаспектных проблем. В таких сценариях, где требуется глубокое исследование различных гипотез, оценка альтернативных путей решения и возможность возврата к предыдущим этапам рассуждения, линейная траектория CoT оказывается недостаточной. В ответ на указанные ограничения были предложены инновационные подходы Tree-of-Thoughts (ToT), представленные в знаковых работах "Large Language Model Guided Tree-of-Thought" (Yao et al., 2023) [3] и "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" (Long, 2023) [4]. Фреймворк ToT концептуально расширяет парадигму CoT, вводя древовидную организацию процесса рассуждения, что позволяет моделям осуществлять более гибкий и стратегический поиск решений.
В кардинальном отличии от линейного развертывания мыслительной цепочки в CoT, Tree-of-Thoughts (ToT) архитектурно представляет процесс когнитивного вывода в виде иерархического дерева. Каждая дискретная "мысль" в рамках ToT определяется как семантически целостная последовательность вербальных единиц, представляющая собой концептуально значимый промежуточный шаг на пути к решению целевой задачи. Принципиальным нововведением ToT выступает имплементация механизма backtracking, обеспечивающего возможность рекурсивного возврата к предшествующим узлам дерева рассуждений и выбора альтернативных ветвей исследования в случае, если текущая траектория оказывается семантически тупиковой или эвристически неоптимальной. Данная функциональная особенность ToT коррелирует с более сложным и рефлексивным режимом человеческого мышления, часто концептуализируемым в когнитивной психологии как "System 2". В то время как CoT демонстрирует аналогию с интуитивным, быстродействующим "System 1" мышлением, ToT стремится к эмуляции более обдуманного, стратегического и ресурсоемкого "System 2" мышления в контексте больших языковых моделей.
В отличие от преимущественной ориентации CoT на техники промпт-инженерии, Tree-of-Thoughts (ToT) конституируется как развернутый фреймворк, требующий программного управления для оркестрации древовидного процесса поиска решения. Эффективная реализация ToT базируется на интеграции ряда взаимосвязанных ключевых компонентов, синергетически взаимодействующих для навигации в пространстве древовидных рассуждений:
Декомпозиция мысли (Thought Decomposition): Начальным этапом является процедура декомпозиции исходной задачи на дискретные, семантически различимые "мыслительные единицы" или шаги рассуждения. Критически важным аспектом декомпозиции является достижение оптимального баланса между детализацией и содержательностью "мысли". Слишком мелкая декомпозиция может привести к комбинаторному взрыву и потере контекстной целостности, в то время как излишне укрупненные "мысли" могут затруднить генерацию разнообразных и релевантных альтернатив.
Генератор мысли (Thought Generator): Данный компонент отвечает за автоматизированную генерацию спектра потенциальных "мыслей" на каждом узле дерева рассуждений. В литературе выделяются два доминирующих подхода к генерации:
Независимое идентичное распределение (sampling): Метод предполагает генерацию ансамбля статистически независимых "мыслей" на основе заданного CoT-промпта, инициирующего процесс рассуждения. Данный подход оказывается особенно продуктивным в условиях обширного пространства возможных "мыслей", где требуется максимизация разнообразия генерируемых альтернатив.
Последовательное предложение (propose prompting): Альтернативный метод заключается в итеративной генерации "мыслей" с использованием специализированных промптов, целенаправленно ориентированных на стимулирование генерации новых и концептуально отличных идей. Данный подход демонстрирует эффективность в ситуациях с ограниченным пространством "мыслей", где приоритетом является избежание семантического дублирования и избыточности.
Оценщик состояния (State Evaluator): Для обеспечения направленного и эвристически оправданного поиска в пространстве древовидных рассуждений необходим механизм оценки промежуточного прогресса, достигаемого на каждом этапе решения. Функциональность оценщика состояния реализуется посредством следующих методологических решений:
Независимая оценка ценности (value prompting): Метод заключается в автономной оценке эвристической "ценности" или перспективности каждого отдельного состояния рассуждения на основе специализированных промптов, акцентирующих внимание на релевантных критериях прогресса.
Коллегиальное голосование между состояниями (vote prompting): Альтернативный подход предполагает сравнительную оценку множества конкурирующих состояний и эвристический выбор наиболее перспективного варианта посредством процедуры "голосования" или ранжирования, основанной на заданных критериях.
Алгоритм поиска (Search Algorithm): Заключительным, но критически важным компонентом фреймворка ToT является алгоритм, определяющий глобальную стратегию навигации и исследования дерева "мыслей". В пионерских работах по ToT были предложены два фундаментальных алгоритма поиска:
Поиск в ширину (Breadth-First Search, BFS): Алгоритм BFS поддерживает динамический пул из b наиболее эвристически перспективных состояний на каждом уровне дерева и параллельно исследует все возможные "мысли", исходящие из каждого состояния в пуле.
Поиск в глубину (Depth-First Search, DFS): Алгоритм DFS, напротив, приоритизирует углубленное исследование наиболее перспективной ветви дерева до достижения терминального состояния (решения) или до момента эвристического признания текущего пути бесперспективным, после чего осуществляется возврат к ближайшей альтернативной ветви и продолжение поиска.
Фреймворк Tree-of-Thoughts характеризуется набором значимых преимуществ, определяющих его потенциал в качестве перспективного направления развития reasoning-способностей LLM:
Универсальность и обобщающая способность (Generality): ToT обладает свойством концептуальной универсальности, позволяющим рассматривать предшествующие методы, такие как Input-Output (IO), Chain-of-Thought (CoT), Self-Consistency CoT (CoT-SC) и подходы, основанные на самосовершенствовании, как частные, редуцированные случаи ToT, характеризующиеся ограниченной глубиной и шириной дерева поиска.
Модульность архитектуры (Modularity): Архитектурная организация ToT отличается выраженной модульностью, обеспечивая возможность независимой модификации и оптимизации отдельных компонентов – базовой LLM, механизмов декомпозиции, генерации и оценки "мыслей", а также алгоритма поиска. Данная модульность способствует гибкости настройки и открывает перспективы для целенаправленного совершенствования отдельных функциональных блоков.
Адаптивность к контексту задач (Adaptability): ToT демонстрирует высокую степень адаптивности к специфическим характеристикам решаемых задач, когнитивным возможностям используемой LLM и ограничениям вычислительных ресурсов. Различные классы задач могут требовать вариативных конфигураций ToT, включая выбор оптимального алгоритма поиска, стратегии декомпозиции и методов оценки состояния.
Практическая применимость и удобство интеграции (Convenience): Фреймворк ToT отличается практической ориентированностью, не требуя ресурсоемкого процесса дополнительного обучения или тонкой настройки LLM. ToT может быть эффективно имплементирован поверх существующих предварительно обученных языковых моделей посредством программной оркестрации, что существенно упрощает его практическое применение и масштабирование.
Эмпирическая валидация эффективности Tree-of-Thoughts была осуществлена на ряде когнитивно сложных задач, для которых традиционные линейные подходы демонстрируют ограниченную результативность. В частности, ToT продемонстрировал статистически значимое превосходство в следующих задачах:
Математическая игра "24" (Game of 24): Классическая головоломка, требующая манипуляции четырьмя заданными числами посредством арифметических операций для достижения целевого значения 24. Применение ToT позволило достичь показателя успешности решения в 74% случаев, в то время как CoT показал результат лишь 4%.
Креативное письмо с заданным финалом (Creative Writing): Задача генерации связного и когерентного четырехпараграфного текста, завершающегося четырьмя заранее определенными финальными предложениями. Экспертные оценки, проведенные как с привлечением GPT-4, так и с участием людей-оценщиков, консистентно указывают на превосходство ToT в генерации более качественных и семантически целостных текстов по сравнению с IO и CoT.
Решение мини-кроссвордов (Mini Crosswords): Задача, требующая интеграции лексических знаний, логического рассуждения и пространственного мышления для заполнения сетки кроссворда 5x5 на основе заданных вербальных подсказок. ToT продемонстрировал существенное улучшение результативности по сравнению с IO и CoT в решении данной комплексной задачи, интегрирующей reasoning и knowledge retrieval.
Несмотря на обнадеживающие результаты, фреймворк Tree-of-Thoughts не лишен определенных ограничений и открывает ряд перспективных направлений для дальнейшего развития. Одним из ключевых ограничений является возрастающая вычислительная сложность, обусловленная необходимостью многократной инференции LLM и экспоненциальным ростом пространства поиска при увеличении глубины и ширины дерева рассуждений. Кроме того, эффективность ToT критически зависит от качества и адекватности реализации отдельных компонентов фреймворка, включая стратегию декомпозиции мысли, генератор и оценщик состояния. Будущие исследования могут быть направлены на разработку более эффективных и масштабируемых алгоритмов древовидного поиска, оптимизацию методов эвристической оценки состояний и адаптацию ToT к специфическим требованиям различных классов задач и ресурсным ограничениям. Весьма перспективным направлением представляется также исследование возможности интеграции принципов ToT в процесс предварительного обучения LLM, что может способствовать созданию моделей, изначально обладающих более развитыми способностями к стратегическому и многошаговому решению сложных проблем.
Технологии Chain-of-Thought (CoT) и Tree-of-Thought (ToT) знаменуют собой фундаментальные этапы в прогрессивном развитии методологий повышения reasoning-компетенций больших языковых моделей. CoT, как проявление эмерджентных свойств масштабных нейросетевых архитектур, открыл новые горизонты в улучшении качества генерации ответов в задачах, требующих логического вывода и использования семантических знаний. ToT, в свою очередь, концептуально и функционально развивает идеи CoT, предлагая более гибкий, нелинейный и стратегически ориентированный подход к процессу рассуждения, приближающийся к когнитивным механизмам человеческого problem-solving. Вектор будущих исследований в данной области, по всей видимости, будет направлен на разработку еще более эффективных, ресурсосберегающих и масштабируемых алгоритмов управления древовидным рассуждением, а также на интеграцию парадигмы ToT в широкий спектр прикладных доменов, требующих от LLM не только генерации лингвистически связного текста, но и продвинутого интеллектуального анализа, стратегического планирования и надежного решения сложных задач в условиях реального мира.
> Эти подходы уже не чистый промпт инжиниринг, одним текстом тут не обойдёшься, надо писать какие-то программы, управляющие процессом. В этом смысле это уже в парадигме LLM Programs.
В статье рассматриваются современные методы повышения reasoning-способностей больших языковых моделей (LLM). Помимо хорошо известных техник Chain-of-Thought (CoT) и Tree-of-Thought (ToT), акцент делается на новой парадигме «LLM Programs», предполагающей интеграцию LLM в традиционные алгоритмические структуры. Такой подход позволяет эффективно декомпозировать сложные задачи, минимизировать интерференцию между шагами решения и расширить доступный контекст без значительного дообучения модели. Представленный обзор включает анализ преимуществ и ограничений существующих методов кастомизации LLM, а также детальное описание концепции LLM Programs на основе работ Schlag et al. [5] и связанных исследований.
За последние годы наблюдается значительный прогресс в развитии больших языковых моделей, способных выполнять многошаговые рассуждения благодаря методам типа Chain-of-Thought. При этом традиционные подходы кастомизации LLM можно условно разделить на два направления:
Файнтюнинг (дообучение) предобученной модели, требующий значительных вычислительных ресурсов, сбора большого объёма данных и наличия соответствующей инфраструктуры.
In-context learning – метод, ориентированный на промпт-инжиниринг, когда с помощью специально сконструированных запросов и демонстрационных примеров (в том числе с применением CoT) достигается требуемая функциональность. Однако данный подход ограничен объёмом доступного контекста и может сталкиваться с проблемами интерференции между различными этапами рассуждений.
В связи с этим возникает необходимость разработки новых методологий, способных объединить преимущества in-context learning и избежать его ограничений.
Современные методы, основанные исключительно на промпт-инжиниринге, зачастую не способны эффективно управлять процессом многошаговых рассуждений. Для решения этой проблемы предлагается интегрировать LLM в классические программные алгоритмы. В рамках парадигмы Large Language Model Programs LLM используется для решения отдельных подзадач, при этом основное управление состоянием и последовательностью шагов поручается внешнему коду (например, написанному на Python). Такой подход позволяет:
Декомпозировать задачу на ряд независимых шагов, для каждого из которых формируется специализированный запрос;
Увеличить доступный контекст за счет разделения информации между шагами, что предотвращает перегрузку одного запроса лишними данными;
Повысить интерпретируемость процесса, поскольку каждый этап решения имеет чётко заданные входы и выходы;
Сократить требования к дообучению (файнтюнингу), так как модель выполняет локальные подзадачи, не неся ответственность за поддержание глобального состояния.
В отличие от методов, где за поддержание состояния отвечает сама LLM (например, в системах с внешними инструментами типа Toolformer или LaMDA), при LLM Programs основное управление переносится на программный уровень. Ключевыми элементами данного подхода являются:
Декомпозиция решения: Задача разбивается на последовательность логически независимых шагов, каждый из которых решается отдельно.
Парсинг и сбор состояния: Результаты каждого шага анализируются и необходимые данные сохраняются для формирования нового запроса.
Специфичные промпты для каждого шага: Каждый запрос формируется с учетом только релевантной информации для конкретного этапа, что минимизирует интерференцию между шагами.
Подход LLM Programs обладает рядом существенных преимуществ по сравнению с традиционными методами:
Минимизация необходимости дообучения: Модель не требует значительного дополнительного обучения, поскольку основное управление контекстом осуществляется внешней программой.
Возможность описания сложных алгоритмических задач: Декомпозиция задачи позволяет задать точные спецификации входных и выходных данных для каждого шага.
Повышенная интерпретируемость и отладка: Благодаря явному разделению этапов решения упрощается тестирование, отладка и оценка качества работы системы.
Расширение доступного контекста: За счет распределения информации по различным шагам избегается перегрузка одного запроса, что положительно сказывается на качестве генерации.
В работе Schlag et al. [5] рассматривается пример создания вопросно-ответной системы, ориентированной на комплексное многошаговое рассуждение. Система разделена на две основные компоненты:
Фильтрация релевантных фактов: Из множества источников выбираются параграфы, наиболее вероятно содержащие ответ на заданный вопрос, при этом используется оценка правдоподобия (likelihood evaluation).
Древовидный поиск цепочек рассуждений: Для каждого шага генерируются альтернативные варианты рассуждений с использованием различных параграфов в качестве контекста. Затем посредством мажоритарного голосования выбирается наиболее консистентная цепочка.
Полученные результаты демонстрируют улучшение точности по сравнению с базовыми моделями, использующими стандартный Chain-of-Thought.
Статья «Large Language Model Programs» (Schlag et al., 2023) [5] предлагает методологию интеграции LLM в алгоритмические программы с целью расширения возможностей систем без значительного дообучения. Основные положения работы можно суммировать следующим образом:
Ограничения традиционных LLM: Трудности в демонстрации алгоритмических способностей (например, сортировка, поиск) и проблемы обобщения, вызванные конечным размером контекста Transformer-архитектуры.
Альтернативный подход LLM Programs: Вместо того чтобы LLM отвечала за поддержание глобального состояния, на каждом шаге ей предоставляется узкоспециализированный промпт с контекстом, релевантным только для данного этапа.
Преимущества LLM Programs:
Расширение теоретических и практических возможностей системы при минимальном дообучении.
Включение алгоритмической информации через разбиение сложных задач на простые подзадачи.
Улучшение интерпретируемости, тестируемости и управляемости системы.
Примеры применения:
Вопросно-ответные системы с поддержкой доказательств, где система сначала фильтрует релевантные факты, а затем проводит древовидный поиск цепочек рассуждений.
Задачи по извлечению правил из естественного языка, рекурсивное суммирование текстов, планирование действий робота, а также интеграция внешних инструментов (например, калькулятора или поисковой системы).
Авторы цитируют следующие утверждения:
"As an alternative, we propose embedding LLMs into a program or algorithm."
"Embedding an LLM in a program can significantly expand the theoretical and practical capabilities of the system with no or little finetuning and can help the system generalise more systematically."
"In this work, we present the advantages and disadvantages of programming with LLMs and present a general approach which we call a Large Language Model Program."
Таким образом, методология LLM Programs представляется многообещающим направлением для преодоления ограничений больших языковых моделей и расширения их функциональных возможностей.
Обзор современных подходов к повышению reasoning-способностей LLM демонстрирует, что интеграция языковых моделей в классические программные системы (LLM Programs) представляет собой эффективное средство преодоления ограничений как fine-tuning, так и in-context learning. Такой подход обеспечивает более гибкое управление состоянием, позволяет декомпозировать сложные задачи на простые шаги и существенно расширяет функциональные возможности LLM без значительного дополнительного обучения.
Пару интересных примеров практической реализации Tree-of-ThoughtПомимо указанных в предыдущих исследованиях концептуальных разработок, целесообразно рассмотреть конкретные примеры, демонстрирующие, как можно использовать и дорабатывать подход Tree-of-Thought (ToT) в реальных задачах.
В первой работе, разработанной командой под руководством Jieyi Long (Theta Labs), предложена архитектура, в которой LLM (большая языковая модель) получает входные задачи в виде промптов и выдаёт промежуточные ответы. Ключевым элементом системы выступает специализированный prompter agent – модуль, принимающий исходный запрос от пользователя. Задача prompter agent заключается в формировании таких промптов к LLM, которые не требуют немедленного получения финального решения, а позволяют собрать промежуточные результаты решения.
Полученные от LLM промежуточные ответы проверяются с помощью модуля валидации (checker module). Если промежуточное решение оказывается корректным, оно парсится и сохраняется во внутренней памяти (memory module). В случае недопустимой или противоречивой генерации запускается процесс отката: ToT controller инструктирует prompter agent модифицировать подсказку и вновь запросить у LLM более приемлемое решение. При необходимости система может откатиться не только к родительскому узлу дерева рассуждений, но и к более ранним состояниям, если текущая ветвь поиска не приводит к успеху.
В данной постановке LLM отвечает за “short-range reasoning” – локальные шаги логического вывода, в то время как возможность возвращения к предыдущим промежуточным состояниям повышает способность системы к “long-range reasoning” и расширяет пространство потенциальных решений. Кроме того, многошаговое взаимодействие увеличивает количество вычислительных шагов, доступных системе, и тем самым повышает глубину поиска.
Проверочный модуль (checker module) может быть основан как на явно прописанных правилах (например, для логических задач, 3SAT или решения уравнений), так и на дополнительных нейронных сетях, когда задача требует более гибкой оценки корректности.
Memory module хранит всю историю диалога между LLM и prompter agent, что способствует повышению прозрачности и удобству анализа.
ToT controller осуществляет мониторинг всей деревообразной структуры поиска. Он может быть задан набором жёстко закодированных правил (например, откат к родителю, если текущая ветвь долго не даёт результата), или реализован в форме обучаемой policy network.
Prompter agent генерирует адаптивные “hints” (подсказки) для LLM, подстраиваясь под динамику решения и статус проверок.
В рамках данной системы авторы также применили алгоритм REINFORCE для обучения policy network, предполагая, что в будущем возможно использование более продвинутых методов (например, многоагентного обучения с подкреплением – MARL). По аналогии с AlphaGo, модель способна совершенствовать стратегию поиска через итеративные взаимодействия и самообучение.
Работа тестировалась на упрощённых вариантах судоку (размерностью от 3×3 до 5×5), где подход с ToT и обучаемым контроллером продемонстрировал более высокую эффективность по сравнению с zero-shot, one-shot и few-shot генерациями на основе классического Chain-of-Thought. Код и примеры доступны в открытом репозитории GitHub: tree-of-thought-puzzle-solver.
Во второй работе, выполненной коллективом авторов из Принстона и Google DeepMind, представлен схожий взгляд на реализацию Tree-of-Thought. Аналогично предыдущим исследованиям, LLM здесь также служит эвристикой для поиска решения, а каждый узел дерева соответствует одной “мысли” (thought), то есть промежуточному шагу в решении.
Авторы подчёркивают, что для создания эффективной реализации ToT необходимо ответить на четыре ключевых вопроса:
Декомпозиция процесса решения на мысли: Нужно подобрать оптимальный “размер” мысли, чтобы модель могла производить полезные идеи, сохраняя при этом разнообразие и осмысленность сгенерированных гипотез.
Генерация кандидатов для следующего шага: Предлагается либо проводить независимую выборку (i.i.d. sampling) нескольких мыслей с помощью CoT-промпта, либо поочерёдно запрашивать последовательные варианты посредством “propose prompt”.
Эвристическая оценка промежуточных состояний: Предлагаются два механизма – независимо оценивать каждое состояние специальным промптом или формировать несколько состояний сразу и применять процедуру голосования, выбирая наиболее многообещающий вариант.
Алгоритм поиска: Рассматриваются классические методы: поиск в глубину (DFS) и поиск в ширину (BFS), при этом выбор подхода может зависеть от конкретной задачи и доступных вычислительных ресурсов.
Для эмпирической проверки методологии ToT в данной работе были выбраны следующие задачи:
Game of 24 (арифметическая головоломка),
Творческое письмо (Creative Writing),
Решение мини-кроссвордов (5×5 Crosswords).
В экспериментах использовалась модель GPT-4, и по всем задачам авторы отмечают значительное превосходство ToT над классическими Input-Output подходами, а также над Chain-of-Thought (CoT) и даже Self-Consistency CoT (CoT-SC). Репозиторий с реализацией доступен на GitHub: tree-of-thought-llm.
Несмотря на определённые различия в формальной постановке и деталях, обе указанные работы демонстрируют принципиальную идею: Tree-of-Thought можно рассматривать как расширение стандартного CoT, интегрирующее механизмы нелинейного поиска, отката и проверки промежуточных гипотез. Подобные системы фактически приближаются к тому, что иногда называется LLM Programs, когда внешняя логика (контроллер, проверяющие модули, управляемая память) берёт на себя функции координации рассуждений, а сама языковая модель решает локальные подзадачи и генерирует кандидатные пути решения.
Отдельным направлением развития ToT выступают проекты, изучающие расширение поиска до более сложных структур (например, Graph of Thoughts [arXiv:2308.09687]). Это свидетельствует о постоянном движении исследовательского сообщества в сторону более гибких схем управления большим количеством промежуточных шагов рассуждения.
Таким образом, современные исследования наглядно подтверждают высокую эффективность Tree-of-Thought и смежных подходов при решении нестандартных и сложных задач, требующих ветвящегося процесса рассуждения. Развитие данного направления позволяет надеяться, что в обозримом будущем будут созданы ещё более совершенные системы, способные к глубоко структурированным многошаговым рассуждениям и самостоятельному планированию поиска решений.
В контексте развития парадигмы LLM Programs, открывающей новые возможности для управления процессом рассуждений, возникает еще одно важное направление – Test-time compute, представляющее собой революционный подход к масштабированию языковых моделей.
Традиционно, масштабирование больших языковых моделей (LLM) было сосредоточено на этапе обучения. Увеличение размера модели, объема обучающих данных и вычислительных ресурсов для обучения было основным способом повышения производительности. Однако с появлением моделей, таких как OpenAI o1, открылась новая эра – эра "Test-time compute", предлагающая масштабирование на этапе инференса.
"Test-time compute" (вычисления во время тестирования/инференса) представляет собой парадигму масштабирования LLM, которая акцентирует внимание на увеличении вычислительных ресурсов, доступных модели непосредственно в момент обработки пользовательского запроса (inference time). В отличие от традиционного подхода, "Test-time compute" позволяет улучшить производительность уже обученной модели, предоставляя ей больше времени и вычислительной мощности для "размышления" над каждым конкретным запросом.
Традиционное масштабирование LLM фокусировалось на следующих аспектах во время обучения:
Размер модели: Увеличение количества параметров и сложности архитектуры.
Объем данных: Расширение и разнообразие обучающих данных.
Вычислительные ресурсы для обучения: Использование более мощных GPU и увеличение времени обучения.
"Test-time compute" вводит дополнительное измерение масштабирования, применяемое после обучения модели. Это позволяет повысить эффективность модели, не изменяя ее архитектуру или параметры, а оптимизируя вычислительные ресурсы в момент инференса.
Предоставление модели больше вычислительных ресурсов во время инференса позволяет:
Углубленная обработка запросов: Модель может проводить более детальный анализ входного текста и контекста.
Улучшение рассуждений: Дополнительные вычисления способствуют более эффективному планированию, поиску оптимальных решений и генерации логически обоснованных ответов.
Использование сложных алгоритмов инференса: Возможность применения ресурсоемких, но более качественных методов декодирования и генерации.
"Test-time compute" знаменует собой важный сдвиг в подходах к масштабированию LLM. Он дополняет традиционные методы, сосредотачиваясь на оптимизации вычислительных ресурсов в момент использования модели. Это открывает перспективы для создания более интеллектуальных и reasoning-ориентированных языковых моделей, особенно в задачах, требующих глубокого анализа и логического вывода.
В контексте эры Test-time compute, модель DeepSeek-R1 представляет собой яркий пример использования этого подхода для усиления reasoning-способностей LLM. Более того, DeepSeek-R1 демонстрирует, что обучение reasoning возможно не только через Supervised Fine-Tuning (SFT) на больших объемах данных, но и эффективно достигается с помощью масштабного обучения с подкреплением (Reinforcement Learning, RL).
Главным достижением DeepSeek-R1, аналогично AlphaZero, является демонстрация того, что для обучения reasoning-способностям не требуется обширных наборов данных для SFT. Эти способности могут быть эффективно усвоены посредством масштабного обучения с подкреплением (RL), что позволяет в значительной степени обойтись без "человеческих демонстраций" в виде SFT. Тем не менее, использование небольшого объема SFT с качественными примерами может способствовать более эффективному "холодному старту" обучения.
В качестве базовой модели для DeepSeek-R1 была выбрана DeepSeek-V3-Base – модель после Pre-training, но до Post-training, то есть без SFT и RL. В качестве алгоритма RL был применен Group Relative Policy Optimization (GRPO), ранее использованный в DeepSeek-V3 и DeepSeekMath, который позволяет избежать необходимости в отдельной модели критика.
Для более глубокого понимания архитектурных особенностей DeepSeek-R1, важно рассмотреть технические детали базовой модели DeepSeek-V3, на которой она основана. DeepSeek-V3 представляет собой значительный шаг вперед в развитии LLM, сочетая в себе классическую архитектуру декодера-трансформера с элементами Mixture-of-Experts (MoE) и инновационными решениями в механизмах внимания, такими как Multi-Head Latent Attention (MLA).
Согласно техническому отчету DeepSeek-V3 [6] и репозиторию GitHub, модель представляет собой декодер-трансформер с архитектурой Mixture-of-Experts (MoE). DeepSeek-V3 содержит 671 миллиард параметров, из которых 37 миллиардов являются активными для каждого токена. Модель состоит из 61 слоя-трансформера со скрытым измерением .
В разработке DeepSeek-V3 были применены несколько интересных технических решений, которые представляют исторический интерес в контексте эволюции LLM. Некоторые из этих решений, включая MLA, были протестированы и усовершенствованы в предыдущей версии модели, DeepSeek-V2 [7].
Одним из ключевых нововведений DeepSeek-V3 является многоголовое латентное внимание (MLA). Этот механизм направлен на повышение эффективности и масштабируемости модели, особенно в контексте задач, требующих обработки длинных последовательностей и сложных рассуждений. Для понимания MLA, рассмотрим сначала классический механизм Multi-Head Attention (MHA).
Классический Multi-Head Attention (MHA) на примере декодера в Transformer🤖В классической задаче авторегрессионной генерации последовательностей (например, машинный перевод) декодер выполняет функцию пошагового (условного) формирования выходной последовательности. При этом он «подсматривает» на выход кодера, чтобы учитывать контекст входного предложения (в случае перевода), и одновременно вычисляет вероятности для следующего токена на основе частично сгенерированной последовательности.
Схематично в исходной статье "Attention Is All You Need" декодер находится справа, принимая:
Собственные входы (для языковых задач — "сдвинутые вправо" токены предыдущих слов).
Выход кодера (контекст, полученный при обработке входной последовательности).
Каждый слой декодера (Decoder Layer) состоит из следующих подблоков:
Masked Multi-Head Attention
Почти такой же, как обычный Multi-Head Attention, но с маскировкой будущих позиций (чтобы модель не «подглядывала» за токенами, которые ей ещё нельзя видеть во время авторегрессии).
Add & Norm
Остаточное соединение и Layer Normalization, аналогично кодеру.
Multi-Head Attention (Cross-Attention)
Механизм внимания с запросами (Q) из текущего состояния декодера, а ключами (K) и значениями (V) из выхода кодера (т. е. декодер учится извлекать нужную информацию из контекстных эмбеддингов, полученных кодером).
Add & Norm
Остаточное соединение и Layer Normalization.
Feed Forward (FFN)
Двухслойная полносвязная сеть с функцией активации, аналогичная модулю в кодере.
Add & Norm
Остаточное соединение и Layer Normalization.
> Как и в кодере, эти шесть стадий повторяются несколько раз (например, 6 слоёв декодера), формируя глубокую модель.
В задачах генерации текста (например, при машинном переводе), декодер на каждом шаге стремится предсказать следующий токен, используя ранее сгенерированные токены. Чтобы модель не видела будущие токены, входная последовательность декодера обычно сдвигается на один токен вправо (shifted right).
Например, в задаче перевода при обучении в качестве "правильного выхода" используют предложение-цель:
[BOS] Я люблю кошек . [EOS]
На вход декодера (X_dec_inp) подаётся «сдвинутая вправо» версия:
[BOS] Я люблю кошек .
а последний токен [EOS] уже не подаётся, так как он не нужен для предсказания.
Это позволяет реализовать авторегрессионную схему:
На шаге i модель не видит токены (i+1, i+2, ...), она учится предсказывать i-й токен, имея только предыдущие.
В отличие от кодера, где в Self-Attention можно смотреть на все позиции последовательности, декодер маскирует будущие токены, чтобы модель не училась «жульничать» и «заглядывать» вперёд.
Практически это тот же Multi-Head Attention, что и в кодере, но при вычислении
Q (Query) – Матрица запросов. В контексте Masked Multi-Head Attention в декодере Transformer, запросы (Q) поступают из входных эмбеддингов декодера (после прохождения через линейный слой). Для каждого токена во входной последовательности декодера формируется вектор запроса. По сути, запросы представляют собой то, на что текущая позиция в декодере "смотрит" при вычислении внимания.
K (Key) – Матрица ключей. В Masked Multi-Head Attention в декодере, ключи (K) также поступают из входных эмбеддингов декодера (после прохождения через другой линейный слой). Ключи представляют собой информацию, с которой запросы сравниваются для определения релевантности. Они соответствуют позициям во входной последовательности декодера, на которые модель обращает внимание.
V (Value) – Матрица значений. В Masked Multi-Head Attention в декодере, значения (V) также поступают из входных эмбеддингов декодера (после прохождения через еще один линейный слой). Значения представляют собой информацию, которая будет агрегирована взвешенным образом, на основе рассчитанных весов внимания. Именно значения "суммируются" с весами, полученными из сравнения запросов и ключей, чтобы сформировать выходное представление внимания.
– Размерность векторов ключей (и запросов, так как в Self-Attention размерности обычно совпадают).
используется в знаменателе для масштабирования, чтобы предотвратить насыщение функции softmax, особенно при больших значениях
. Это помогает стабилизировать процесс обучения.
В кратце, в Masked Multi-Head Attention декодера:
Q, K, V происходят из одной и той же входной последовательности декодера (эмбеддинги с учетом маскирования будущих позиций).
Механизм внимания позволяет каждой позиции в декодере взвешенно учитывать другие позиции в предыдущей части декодированной последовательности (из-за маскирования).
мы зануляем (или ставим -∞) те позиции, которые ещё не должны быть видны для текущего токена. Так получается треугольная маска для языка, когда позиция i не видит позиции i+1, i+2, …
# Пример генерации треугольной маски в PyTorch (L - длина последовательности)
import torch
from typing import Tuple
def subsequent_mask(size: int) -> torch.Tensor:
"""
Description:
Создаёт маску, запрещающую связь с будущими позициями.
Выход имеет форму [size, size] со значениями True/False:
True - те места, где смотреть можно
False - где смотреть нельзя (будущий токен)
Args:
size (int): Размер маски (длина последовательности).
Returns:
torch.Tensor: Треугольная маска формы [size, size] с значениями True/False.
Examples:
>>> mask = subsequent_mask(5)
>>> print(mask)
tensor([[ True, False, False, False, False],
[ True, True, False, False, False],
[ True, True, True, False, False],
[ True, True, True, True, False],
[ True, True, True, True, True]])
"""
# Треугольная матрица из единиц на нижнем треугольнике (включая диагональ)
mask = torch.tril(torch.ones(size, size)).bool()
return mask
# Пример использования
L = 5
mask = subsequent_mask(L)
print("Сгенерированная треугольная маска:\n", mask)
# Пример использования маски в softmax
def apply_softmax_with_mask(Q: torch.Tensor, K: torch.Tensor, V: torch.Tensor, mask: torch.Tensor) -> torch.Tensor:
"""
Description:
Применяет softmax с маской к результату скалярного произведения Q и K.
Args:
Q (torch.Tensor): Тензор запросов.
K (torch.Tensor): Тензор ключей.
V (torch.Tensor): Тензор значений.
mask (torch.Tensor): Маска для применения.
Returns:
torch.Tensor: Результат применения softmax с маской.
Examples:
>>> Q = torch.randn(5, 5)
>>> K = torch.randn(5, 5)
>>> V = torch.randn(5, 5)
>>> mask = subsequent_mask(5)
>>> result = apply_softmax_with_mask(Q, K, V, mask)
>>> print(result)
"""
d_k = Q.size(-1)
scores = Q @ K.transpose(-2, -1) / math.sqrt(d_k)
# mask == False -> зануляем/ставим -inf
scores = scores.masked_fill(~mask, float('-inf'))
attn_weights = torch.softmax(scores, dim=-1)
Z = attn_weights @ V
return Z
После слоя Masked Multi-Head Attention и последующих Add & Norm, декодер имеет более «свежее» представление текущей частично сгенерированной последовательности. Далее идёт Multi-Head Attention, где:
Q (запросы) берутся из текущих скрытых состояний декодера (после Masked MHA).
K (ключи) и V (значения) берутся из выхода кодера.
Так декодер «запрашивает» нужную информацию из выходных эмбеддингов кодера, где уже закодирован весь контекст входной последовательности.
Формулы те же:
Аналогично кодеру, после каждого подслоя идёт этап Add & Norm:
Add (Residual Connection):
LayerNorm:
Это помогает стабилизировать обучение, улучшает прохождение градиентов и позволяет учить более глубокие сети.
Так же, как в кодере, FFN в декодере — это два линейных слоя с функцией активации (ReLU/GELU). Формула:
Затем идёт остаточное соединение + Layer Normalization.
> Повторим: структура слоя декодера такая:
> 1) Masked Multi-Head Attention → Add & Norm
> 2) (Cross) Multi-Head Attention (на выход кодера) → Add & Norm
> 3) Feed Forward → Add & Norm
В задаче генерации текста после прохождения всех слоёв декодера получаем скрытые векторы (hidden states). Далее применяют Линейный слой (Projection) в размерность словаря и Softmax, чтобы превратить в вероятности токенов. Обычно это делается отдельным «Output Projection» слоем:
где – распределение вероятностей по словарю в момент времени
.
Выход декодера как контекстное представление:
На каждом шаге генерации текста декодер (например, в архитектуре Transformer) обрабатывает входную последовательность и уже сгенерированные токены. Результатом работы декодера на временном шаге является вектор скрытого состояния
. Этот вектор – это сжатое представление всего контекста, который модель учла к этому моменту. Он "знает" о начале предложения, предыдущих сгенерированных словах и, в случае seq2seq моделей, о входной последовательности (например, при переводе). Размерность этого вектора определяется архитектурой модели и является гиперпараметром.
I. Вектор скрытого состояния как вход для предсказания:
Как мы уже выяснили, вектор является результатом работы последнего блока декодера на временном шаге
. Предположим, что каждый блок декодера имеет одинаковую внутреннюю размерность, которую мы обозначим как
(например, 512 или 768 в оригинальном Transformer). Таким образом,
является вектором размерности
:
Этот вектор содержит в себе сжатую информацию о контексте, накопленную декодером к моменту времени
.
II. Линейный слой (Projection):
Цель линейного слоя – преобразовать вектор контекстного представления в вектор логитов, размерность которого равна размеру словаря
. Пусть размер словаря будет
.
Линейный слой реализуется с помощью матрицы весов и вектора смещения
.
Матрица весов : Эта матрица осуществляет линейное преобразование и имеет размерность
:
Вектор смещения : Этот вектор добавляется после матричного умножения и имеет размерность
:
Операция линейного преобразования: Вектор логитов, который мы обозначим как , вычисляется следующим образом:
Здесь:
– вектор скрытого состояния размерности
(мы представляем его как вектор-строку для удобства матричного умножения).
– транспонированная матрица весов
размерности
.
– вектор логитов размерности
. Каждый элемент
соответствует
-му токену в словаре.
Пояснение:
Умножение фактически выполняет взвешенную сумму элементов вектора
. Каждая строка матрицы
(или столбец
) соответствует одному токену в словаре. Таким образом, для каждого токена в словаре вычисляется оценка на основе контекстного вектора
.
Добавление вектора смещения позволяет модели смещать оценки для определенных токенов независимо от входного вектора.
III. Функция Softmax - преобразование логитов в вероятности:
После получения вектора логитов , мы применяем функцию Softmax, чтобы преобразовать их в распределение вероятностей по всем токенам словаря.
Для каждого элемента вектора логитов, Softmax вычисляет вероятность
следующим образом:
где:
–
-й элемент вектора логитов
, соответствующий
-му токену в словаре.
– размер словаря.
– экспоненциальная функция.
– сумма экспоненциалов всех логитов, используется для нормализации.
Результат Softmax: Вектор вероятностей размерности
, где каждый элемент
представляет собой вероятность того, что
-й токен из словаря является следующим токеном в последовательности, учитывая контекст, представленный
.
IV. Выбор следующего токена (как и ранее):
На основе полученного распределения вероятностей , мы выбираем следующий токен, используя одну из стратегий, таких как argmax, семплирование, top-k семплирование или ядерное семплирование.
Связь с архитектурой декодера:
Важно понимать, что вектор , который подается на вход линейному слою, является результатом сложной обработки входных данных через все подслои блока декодера:
Masked Multi-Head Attention: Позволяет декодеру учитывать предыдущие сгенерированные токены, формируя контекстное представление на основе самовнимания.
(Cross) Multi-Head Attention: Позволяет декодеру учитывать входную последовательность (если есть кодер), фокусируясь на релевантной информации из выхода кодера.
Feed Forward Network: Добавляет нелинейность и позволяет модели более сложно обрабатывать информацию, полученную от слоев внимания.
Add & Norm: Residual connections и Layer Normalization стабилизируют обучение и улучшают градиентный поток, позволяя строить более глубокие и эффективные декодеры.
Таким образом, – это не просто случайный вектор, а высокоуровневое, контекстно-зависимое представление, полученное в результате работы сложной архитектуры декодера. Линейный слой и Softmax – это заключительные шаги, которые преобразуют это абстрактное представление в конкретное предсказание следующего токена в виде распределения вероятностей по словарю.
Понимание этих шагов позволяет лучше понять, как работают модели генерации текста и как различные параметры и стратегии влияют на качество и разнообразие генерируемого текста.
MLA вводит сжатие низкого ранга для ключей и значений. В MLA, входное вложение токена () сначала проецируется в скрытый вектор низкого ранга (
). Затем этот вектор расширяется обратно в векторы ключей (
) и значений (
) через отдельные матрицы (
). Важно отметить, что размерность скрытого вектора (
) значительно меньше размерности векторов ключей и значений после разделения на головы (
).
Во время инференса, MLA позволяет уменьшить размер KV-кэша, поскольку кэшированию подлежат только скрытые векторы () низкой размерности, а не полномерные векторы ключей (
), как в классическом MHA. Это снижение вычислительных затрат особенно важно для эффективной реализации Test-time compute, позволяя модели "размышлять" дольше при ограниченных ресурсах.
Давайте начнем последовательно раскрывать каждый аспект MLA, предоставляя математическую формализацию, пояснения и код.
1. Низкоранговое сжатие ключей и значений
1.1. Инженерный и математический взгляд на низкоранговое сжатие KV
Инженерный аспект:
В стандартном Multi-Head Attention (MHA), для каждой головы внимания, входной эмбеддинг токена проецируется в три вектора: запрос
, ключ
и значение
, каждый размерностью
, где
- количество голов. В процессе инференса, ключи и значения для всех предыдущих токенов кэшируются в KV-кэше. Размер этого кэша растет линейно с длиной последовательности, что может стать узким местом при длинных последовательностях.
KV-кэш (Key-Value Cache) — это механизм, используемый в моделях на основе трансформеров для ускорения процесса вывода (inference) путем хранения вычисленных ключей (Keys) и значений (Values) для всех предыдущих токенов в последовательности. Это позволяет избежать повторного вычисления ключей и значений для уже обработанных токенов при генерации новых токенов.
MLA решает эту проблему, вводя низкоранговое представление. Вместо прямого проецирования в и
,
сначала проецируется в скрытый вектор низкой размерности
, где
. Затем
проецируется обратно в
и
. Так как в KV-кэше хранятся векторы
вместо
, размер кэша существенно уменьшается.
Математическая формализация:
Проецирование в скрытое пространство:
где - матрица проекции в скрытое пространство.
Расширение из скрытого пространства в ключи и значения:
где и
- матрицы проекции из скрытого пространства в пространство ключей и значений соответственно.
Размерности:
- входной эмбеддинг токена
- скрытый вектор низкой размерности (
)
- векторы ключей и значений для одной головы внимания
- матрица проекции в скрытое пространство
- матрица проекции из скрытого пространства в ключи
- матрица проекции из скрытого пространства в значения
1.2. Пример кода на Python (PyTorch):
from typing import Tuple
import torch
import torch.nn as nn
class MLALinearProjection(nn.Module):
"""
Description:
Класс для линейной проекции в модели MLA.
Args:
d_model: Размерность входного эмбеддинга.
d_latent: Размерность скрытого вектора.
d_head: Размерность ключа и значения.
"""
def __init__(self, d_model: int, d_latent: int, d_head: int) -> None:
super().__init__()
self.W_uc = nn.Linear(d_model, d_latent)
self.W_uk = nn.Linear(d_latent, d_head)
self.W_uv = nn.Linear(d_latent, d_head)
def forward(self, h_t: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
"""
Description:
Выполняет линейную проекцию входного эмбеддинга токена.
Args:
h_t: torch.Tensor of shape [..., d_model] - входной эмбеддинг токена.
Returns:
k_t: torch.Tensor of shape [..., d_head] - ключ.
v_t: torch.Tensor of shape [..., d_head] - значение.
c_t: torch.Tensor of shape [..., d_latent] - скрытый вектор (для KV-кэша).
Examples:
>>> d_model = 512
>>> d_latent = 64
>>> d_head = 64
>>> batch_size = 2
>>> seq_len = 10
>>> projection_layer = MLALinearProjection(d_model, d_latent, d_head)
>>> input_embeddings = torch.randn(batch_size, seq_len, d_model)
>>> h_t = input_embeddings[:, 0, :]
>>> k_t, v_t, c_t = projection_layer(h_t)
>>> k_t.shape
torch.Size([2, 64])
"""
c_t = self.W_uc(h_t)
k_t = self.W_uk(c_t)
v_t = self.W_uv(c_t)
return k_t, v_t, c_t
# Пример использования
def main() -> None:
"""
Description:
Пример использования класса MLALinearProjection.
Examples:
>>> main()
Размерность latent KV-cache: torch.Size([2, 10, 64])
Размерность keys KV-cache (для сравнения): torch.Size([2, 10, 64])
"""
d_model = 512
d_latent = 64 # Низкая размерность
d_head = 64
batch_size = 2
seq_len = 10
projection_layer = MLALinearProjection(d_model, d_latent, d_head)
input_embeddings = torch.randn(batch_size, seq_len, d_model) # [batch_size, seq_len, d_model]
keys_list = []
values_list = []
latent_vectors_list = []
for t in range(seq_len):
h_t = input_embeddings[:, t, :] # [batch_size, d_model]
k_t, v_t, c_t = projection_layer(h_t) # k_t, v_t, c_t: [batch_size, d_head]
keys_list.append(k_t)
values_list.append(v_t)
latent_vectors_list.append(c_t)
# KV-кэш в MLA будет хранить latent_vectors_list (размерность d_latent)
# вместо keys_list (размерность d_head) в стандартном MHA, если бы кэшировались ключи.
latent_kv_cache = torch.stack(latent_vectors_list, dim=1) # [batch_size, seq_len, d_latent]
print("Размерность latent KV-cache:", latent_kv_cache.shape) # -> torch.Size([2, 10, 64])
# Для сравнения, если бы кэшировались ключи (как в стандартном MHA)
keys_kv_cache = torch.stack(keys_list, dim=1) # [batch_size, seq_len, d_head]
print("Размерность keys KV-cache (для сравнения):", keys_kv_cache.shape) # -> torch.Size([2, 10, 64])
# В данном примере d_latent и d_head одинаковы (64), но в MLA d_latent << d_head,
# что приводит к существенному уменьшению размера KV-кэша.
main()
2. Оптимизация матриц проекций в MLA
2.1. Инженерный и математический взгляд на оптимизацию матриц проекций
Инженерный аспект:
MLA использует низкоранговое проецирование для запросов (Q), ключей (K) и значений (V). Это означает, что исходные матрицы проекций в стандартном Multi-Head Attention (MHA) заменяются на пару матриц для каждой проекции (Q, K, V): матрицу для понижения размерности и матрицу для восстановления размерности. Цель этой оптимизации - снизить вычислительные затраты и уменьшить размер KV-кэша (для K и V) и памяти активаций (для Q), сохраняя при этом выразительность модели.
Математическая формализация:
В стандартном MHA, запросы, ключи и значения вычисляются как:
,
,
, где
- входные эмбеддинги.
В MLA, эти проекции заменяются на низкоранговые:
Низкоранговое проецирование для Ключей и Значений (KV):
Сжатие (Down-projection): Входные эмбеддинги проецируются в латентное пространство низкой размерности
:
где:
- матрица понижения размерности для KV
(где
- размерность ключей/запросов в стандартном MHA)
Восстановление (Up-projection): Из латентного представления восстанавливаются ключи
и значения
:
где:
и
- матрицы восстановления размерности для ключей и значений соответственно.
Низкоранговое проецирование для Запросов (Q):
Сжатие (Down-projection): Входные эмбеддинги также проецируются в латентное пространство низкой размерности
(ранг сжатия может быть одинаковым или другим для Q и KV):
где:
- матрица понижения размерности для запросов.
Восстановление (Up-projection): Из латентного представления восстанавливаются запросы
:
где:
- матрица восстановления размерности для запросов.
Размерности:
- входные эмбеддинги (пакет из
токенов, каждый размерности
)
- латентное представление для ключей и значений (ранг
)
- латентное представление для запросов (ранг
, может быть другим рангом)
- восстановленные ключи, значения и запросы (размерность
)
,
,
,
,
- матрицы проекций.
2.2. Пример кода на Python (PyTorch) (Исправленный):
# Импорт стандартных библиотек
import math
# Импорт сторонних библиотек
import torch
import torch.nn as nn
class MLALowRankProjection(nn.Module):
"""
Description:
Класс для низкоранговой проекции в модели MLA.
Args:
d_model: Размерность входного вектора.
d_latent: Размерность латентного пространства.
d_head: Размерность выходного вектора.
Attributes:
W_dq: Линейный слой для down-проекции запросов.
W_uq: Линейный слой для up-проекции запросов.
W_dkv: Линейный слой для down-проекции ключей и значений.
W_uk: Линейный слой для up-проекции ключей.
W_uv: Линейный слой для up-проекции значений.
"""
def __init__(self, d_model: int, d_latent: int, d_head: int) -> None:
super().__init__()
self.W_dq = nn.Linear(d_model, d_latent) # Down-проекция для запросов
self.W_uq = nn.Linear(d_latent, d_head) # Up-проекция для запросов
self.W_dkv = nn.Linear(d_model, d_latent) # Down-проекция для ключей и значений
self.W_uk = nn.Linear(d_latent, d_head) # Up-проекция для ключей
self.W_uv = nn.Linear(d_latent, d_head) # Up-проекция для значений
def forward(self, x: torch.Tensor) -> tuple:
"""
Description:
Выполняет низкоранговую проекцию входных данных.
Args:
x: Входной тензор размерности [..., seq_len, d_model].
Returns:
Q: Тензор запросов размерности [..., seq_len, d_head].
K: Тензор ключей размерности [..., seq_len, d_head].
V: Тензор значений размерности [..., seq_len, d_head].
C_kv: Латентное представление KV размерности [..., seq_len, d_latent].
C_q: Латентное представление Q размерности [..., seq_len, d_latent].
Examples:
>>> d_model = 512
>>> d_latent = 64
>>> d_head = 64
>>> batch_size = 2
>>> seq_len = 10
>>> projection_layer = MLALowRankProjection(d_model, d_latent, d_head)
>>> input_embeddings = torch.randn(batch_size, seq_len, d_model)
>>> Q, K, V, C_kv, C_q = projection_layer(input_embeddings)
>>> print("Размерность Q:", Q.shape) # -> torch.Size([2, 10, 64])
>>> print("Размерность K:", K.shape) # -> torch.Size([2, 10, 64])
>>> print("Размерность V:", V.shape) # -> torch.Size([2, 10, 64])
>>> print("Размерность C_kv (KV-cache):", C_kv.shape) # -> torch.Size([2, 10, 64])
>>> print("Размерность C_q (Q activations):", C_q.shape) # -> torch.Size([2, 10, 64])
"""
C_kv = self.W_dkv(x) # [..., seq_len, d_latent]
C_q = self.W_dq(x) # [..., seq_len, d_latent]
K = self.W_uk(C_kv) # [..., seq_len, d_head]
V = self.W_uv(C_kv) # [..., seq_len, d_head]
Q = self.W_uq(C_q) # [..., seq_len, d_head]
return Q, K, V, C_kv, C_q
# Пример использования
if __name__ == "__main__":
d_model = 512
d_latent = 64 # Низкая размерность
d_head = 64
batch_size = 2
seq_len = 10
projection_layer = MLALowRankProjection(d_model, d_latent, d_head)
input_embeddings = torch.randn(batch_size, seq_len, d_model) # [batch_size, seq_len, d_model]
Q, K, V, C_kv, C_q = projection_layer(input_embeddings)
print("Размерность Q:", Q.shape) # -> torch.Size([2, 10, 64])
print("Размерность K:", K.shape) # -> torch.Size([2, 10, 64])
print("Размерность V:", V.shape) # -> torch.Size([2, 10, 64])
print("Размерность C_kv (KV-cache):", C_kv.shape) # -> torch.Size([2, 10, 64])
print("Размерность C_q (Q activations):", C_q.shape) # -> torch.Size([2, 10, 64])
# В MLA, KV-кэш хранит C_kv (размерность d_latent), что меньше, чем если бы хранились K или V (размерность d_head),
# если d_latent < d_head. Аналогично, активации для Q могут быть уменьшены за счет использования C_q во время обучения, если это возможно.
3. Низкоранговое сжатие запросов
3.1. Инженерный и математический взгляд на низкоранговое сжатие запросов
Инженерный аспект:
В DeepSeek-V3, помимо низкорангового сжатия ключей и значений, также применяется низкоранговое сжатие запросов . В отличие от сжатия KV, сжатие запросов не влияет на размер KV-кэша, так как запросы не кэшируются. Основная цель сжатия запросов - снижение объема памяти для активаций во время обучения. Уменьшение размера промежуточных активаций позволяет обучать модели с большими батч-сайзами или более крупные модели при ограниченных ресурсах GPU.
4. Развязанная стратегия RoPE для позиционных вложений
4.1. Инженерный и математический взгляд на развязанную стратегию RoPE
Инженерный аспект и проблема несовместимости RoPE:
Rotary Positional Embeddings (RoPE) - это метод добавления позиционной информации в Transformer, который использует вращающиеся матрицы для кодирования относительных позиций токенов. RoPE применяется непосредственно к векторам запросов и ключей.
Механизм работы Rotary Positional Embeddings (RoPE)Зачем нужны Rotary Positional Embeddings (RoPE)? В то время как традиционные позиционные кодирования (PE) добавляют статическую позиционную информацию к эмбеддингам токенов, Rotary Positional Embeddings (RoPE) представляют собой альтернативный и более гибкий метод внедрения информации о положении токенов в архитектуру Transformer. RoPE были разработаны для решения некоторых ограничений стандартных PE и для улучшения способности модели обрабатывать относительные позиции токенов в последовательности, что особенно важно для задач, где порядок и взаимосвязь токенов играют ключевую роль.
Как и стандартные PE, RoPE необходимы, потому что механизм Self-Attention в Transformer обрабатывает все токены параллельно и не имеет встроенного понимания порядка токенов в последовательности. RoPE вводят позиционную информацию таким образом, чтобы она естественно интегрировалась в механизм внимания, влияя на взаимодействие между запросами и ключами и кодируя относительные позиции непосредственно в векторах внимания.
Как работают Rotary Positional Embeddings (RoPE)?
RoPE применяют вращательное преобразование к векторам запросов () и ключей (
) в механизме внимания, в зависимости от их абсолютной позиции в последовательности. Основная идея заключается в том, чтобы кодировать позиционную информацию через вращение векторов в подпространствах, что позволяет эффективно моделировать относительные позиции.
Математически, RoPE реализуется следующим образом:
Разделение размерности на пары: Вектор запроса и вектор ключа
(размерности
) разделяются на пары измерений. Для каждого измерения
и
(где
), применяется вращение.
Матрица вращения: Для каждой позиции в последовательности и для каждой пары измерений
определяется угол вращения
, где
- базовая частота (обычно выбирается как
, аналогично PE). Матрица вращения
в двумерном подпространстве
имеет вид:
Применение вращения: Для вектора запроса и вектора ключа
, RoPE применяется попарно к измерениям:
Для четных измерений :
Для нечетных измерений :
В матричной форме, для каждой пары измерений , это можно представить как умножение 2x1 под-вектора на матрицу вращения
. Это применяется ко всем парам измерений в
и
для позиции
.
Объединение вращенных векторов: После применения вращения к каждой паре измерений, вращенные компоненты и
формируют векторы запроса и ключа с позиционным кодированием.
Почему используются вращения? Преимущества RoPE:
Эффективное кодирование относительных позиций: RoPE по своей конструкции хорошо подходит для кодирования относительных позиций. Скалярное произведение между двумя векторами с RoPE, зависящее от их позиций, становится функцией только относительного расстояния между этими позициями. Это свойство является ключевым преимуществом RoPE, позволяя модели эффективно улавливать зависимости, основанные на расстоянии между токенами.
Улучшенная экстраполяция на длинные последовательности: Благодаря механизму вращения и кодированию относительных позиций, RoPE демонстрируют лучшую способность к экстраполяции на последовательности длиннее, чем те, на которых модель была обучена, по сравнению со стандартными PE.
Гибкость и интеграция в механизм внимания: RoPE интегрируются непосредственно в механизм внимания, модифицируя взаимодействие между запросами и ключами. Это позволяет позиционной информации влиять на веса внимания и, следовательно, на формирование контекстуализированных представлений.
Возможность эффективной реализации: Вычисления с RoPE могут быть реализованы эффективно, особенно на аппаратном уровне, благодаря использованию тригонометрических функций и матричных операций.
Генерация позиционной информации через вращение:
RoPE генерируют позиционную информацию, вращая векторы запросов и ключей в двумерных подпространствах. Угол вращения зависит от позиции токена, что обеспечивает уникальное преобразование для каждой позиции. Важно, что вращение применяется попарно к измерениям, что позволяет сохранить размерность векторов запросов и ключей и эффективно кодировать позиционную информацию.
Интеграция в архитектуру Transformer:
RoPE не добавляются к входным эмбеддингам, как стандартные PE. Вместо этого, RoPE применяются непосредственно к векторам запросов и ключей в каждом слое механизма Multi-Head Attention. Это означает, что позиционная информация вводится на уровне механизма внимания, влияя на то, как модель взаимодействует с различными позициями в последовательности. Размерность векторов запросов и ключей остается неизменной после применения RoPE.
В кратце, RoPE:
Не добавляются к эмбеддингам, а применяются к Q и K.
Кодируют позицию через вращение векторов в подпространствах.
Эффективно моделируют относительные позиции.
Улучшают экстраполяцию на длинные последовательности.
Интегрируются непосредственно в механизм внимания.
Проблема возникает при комбинации RoPE с низкоранговым сжатием KV. Если RoPE применяется после низкорангового сжатия и расширения, то позиционная информация может быть "размыта" или недостаточно эффективно интегрирована из-за низкорангового представления. Чтобы решить эту проблему, MLA вводит развязанную стратегию RoPE.
Развязанная стратегия RoPE:
Развязанная RoPE предполагает введение дополнительных многоголовочных запросов () и общих ключей (
), которые специализированы для обработки позиционной информации RoPE. Эти векторы
и
имеют собственную размерность
. RoPE применяется только к
и
.
Окончательные векторы запросов () и ключей (
) для механизма внимания формируются путем конкатенации векторов, полученных из низкорангового представления (
) и векторов RoPE (
).
Математическая формализация:
Вычисление низкоранговых векторов:
Проецирование для RoPE векторов:
где и
- матрицы проекции для RoPE запросов и ключей.
Применение RoPE к и
:
где - функция применения Rotary Positional Embeddings, зависящая от позиции токена.
Расширение низкорангового вектора для основной части запросов и ключей:
где и
. Здесь
- размерность "низкоранговой" части запросов и ключей. Важно, что общая размерность головы внимания
.
Конкатенация для формирования окончательных запросов и ключей:
где - операция конкатенации векторов. Окончательные
, где
.
Размерности:
- входной эмбеддинг токена
- низкоранговый вектор
- RoPE запросы и ключи
- RoPE запросы и ключи после применения RoPE
- низкоранговые запросы и ключи
- окончательные запросы и ключи,
,
,
,
,
- матрицы проекций
В MLA DeepSeek-V3 имеется 128 голов внимания, каждая с размерностью 128. Размерность d_c составляет 512.
Для более детального понимания механизма MLA, рекомендуется обратиться к разделу 2.1.2 технического отчета DeepSeek-V3 [6].
В заключение, Multi-Head Latent Attention (MLA) представляет собой ключевую техническую инновацию в DeepSeek-V3, направленную на оптимизацию вычислительной эффективности и масштабируемости модели. Уменьшение размера KV-кэша и снижение требований к памяти активаций способствуют более эффективному использованию вычислительных ресурсов, что, в свою очередь, позволяет реализовывать стратегии Test-time compute и создавать более мощные reasoning-системы, такие как DeepSeek-R1.
Помните, что это не единственный способ оптимизировать внимание для более быстрой генерации. Многие перешли от классического MHA к Multi-Query Attention (MQA) Ноама Шазира [7], где K и V являются общими для всех головок внимания (что значительно ускоряет вывод с небольшим ухудшением качества), и Grouped-Query Attention (GQA) также от Google [8], который был промежуточным звеном между MHA и MQA. В GQA количество головок ключ-значение было больше одной, но меньше полного набора, как в запросе — здесь одна голова ключ-значение на группу головок запроса — и качество могло приближаться к исходному MHA.
MLA эффективно экономит место в кэше, сравнимо с GQA с 2,25 группами, а производительность даже превосходит MHA.
Далее рассмотрим DeepSeekMoE [10], который также используется в DeepSeek-V2.
DeepSeekMoE, представленная в работе Baidu (2024) [https://arxiv.org/abs/2401.06066] и являющаяся ключевым компонентом DeepSeek-V2, представляет собой архитектуру Mixture-of-Experts (MoE), нацеленную на повышение эффективности и специализации экспертных подсетей. В отличие от традиционных MoE, где эксперты могут располагаться в различных слоях, в DeepSeekMoE экспертные блоки интегрированы в слои Feed-Forward Network (FFN), заменяя собой стандартные FFN слои.
В архитектуре DeepSeekMoE слой FFN модифицируется путем внедрения механизма селекции и активации определенного числа экспертов из общего набора. Каждый эксперт представляет собой независимый слой FFN, активируемый алгоритмом маршрутизации. В контексте архитектур MoE, следует отметить, что GShard (Shazeer et al., 2020) [https://arxiv.org/abs/2006.16668] активировал два эксперта на слой, в то время как Switch Transformer (Fedus et al., 2021) [https://arxiv.org/abs/2101.03961] использовал одного. В DeepSeekMoE входные токены направляются на обработку к отобранным экспертам, и в случае активации нескольких экспертов, их выходные данные агрегируются посредством, например, весового усреднения.
Ключевой целью DeepSeekMoE является достижение более выраженной специализации экспертов. Для реализации данной цели применяется метод мелкозернистой сегментации экспертов. В соответствии с этим методом, каждый эксперт подразделяется на фрагментов, и пропорционально увеличивается количество активируемых экспертов в
раз. Такой подход позволяет сохранить вычислительные ресурсы на прежнем уровне, при этом обеспечивая активацию
экспертов из
вместо
из
. Мелкозернистая сегментация расширяет комбинаторное пространство, потенциально способствуя более глубокой и дифференцированной специализации экспертов в рамках модели.
Для обеспечения эффективного усвоения общих знаний, архитектура DeepSeekMoE включает выделение общих экспертов, на которые входные данные направляются на постоянной основе. Данный подход направлен на концентрацию обучения общим знаниям в специализированных общих экспертах, в отличие от распределения общих знаний между маршрутизируемыми экспертами. В результате, DeepSeekMoE включает общих и
маршрутизируемых экспертов. В конфигурации DeepSeek-V3 используется один общий эксперт и 256 маршрутизируемых экспертов, из которых 8 активируются на каждом слое.
Отбор маршрутизируемых экспертов осуществляется на основе принципа top-k, с использованием оценки сродства, вычисляемой как скалярное произведение вектора представления входного токена и центроида соответствующего эксперта. Несмотря на отсутствие детального описания метода расчета центроида в доступной технической документации, предполагается, что центроид представляет собой среднее значение активаций (или входных векторов) токенов, обработанных данным экспертом. В DeepSeek-V3 используется сигмоидальная функция и процедура нормализации оценок сродства перед применением в механизме маршрутизации.
Для предотвращения коллапса маршрутизации, DeepSeek-V2 применял механизм балансировочных потерь, включающий компоненты на уровне экспертов и вычислительных устройств. В DeepSeek-V3 от использования дополнительных потерь отказались, внедрив стратегию балансировки нагрузки без дополнительных потерь (Baidu, 2024) [https://arxiv.org/abs/2408.15664]. Данная стратегия предполагает добавление смещения к оценке сродства в процессе маршрутизации, с последующим выбором top-k экспертов на основе скорректированных оценок. Важно отметить, что смещение используется исключительно для маршрутизации и не влияет на вычисление экспертных весов смешивания. Контроль смещения осуществляется путем мониторинга активности экспертов в пакете данных. При обнаружении перегрузки эксперта, его смещение уменьшается, и наоборот, увеличивается при низкой активности. Указанный подход демонстрирует большую эффективность по сравнению с методами, основанными на потерях.
На рисунуке выше представлено сравнение различных методов балансировки нагрузки. Loss-Free Balancing устраняет компромисс между балансировкой нагрузки и качеством модели, которое наблюдается в других методах. В отличие от альтернативных подходов, он обеспечивает одновременно сбалансированную нагрузку между экспертами, устраняя градиенты помех, и предотвращает утечку будущих токенов, что критично для языковых моделей.
Рисунок выше демонстрирует сам процесс маршрутизации экспертов в DeepSeekMoE. Сначала вычисляются оценочные показатели (gating score), к которым добавляется экспертное смещение (expert bias). После этого происходит отбор экспертов по принципу top-k, что определяет распределение нагрузки. Затем на основе обратной связи выполняется обновление смещения (bias updating), что помогает динамически сбалансировать нагрузку между экспертами. Этот механизм снижает вероятность перегрузки отдельных экспертов и повышает равномерность использования вычислительных ресурсов.
На графике выше иллюстрирует компромисс между балансировкой нагрузки и качеством модели при использовании вспомогательной функции потерь (auxiliary loss). Увеличение коэффициента
улучшает балансировку нагрузки, но ухудшает показатель perplexity, что снижает эффективность модели. Метод Loss-Free позволяет избежать этого компромисса, обеспечивая наилучший баланс и производительность без необходимости в дополнительных функциях потерь.
В архитектуру DeepSeekMoE также интегрирована Complementary Sequence-Wise Auxiliary Loss с малым весовым коэффициентом, направленная на минимизацию дисбаланса при обработке последовательностей. Кроме того, применяется алгоритмическая техника Node-Limited Routing, ограничивающая максимальное количество вычислительных узлов, задействованных для обработки каждого токена. Данный механизм концептуально аналогичен балансировочным потерям, использовавшимся в DeepSeek-V2, и позволяет ограничить распространение нагрузки, направляя каждый токен не более чем на 4 вычислительных узла.
Математическая формализация DeepSeekMoEАрхитектура DeepSeekMoE использует несколько ключевых математических концепций для реализации механизма Mixture-of-Experts с акцентом на специализацию экспертов и балансировку нагрузки. Рассмотрим каждую из них подробно:
Цель: Определить, какие эксперты должны обрабатывать входной токен.
Формула оценки сродства:
Пояснение:
– оценка сродства (affinity score) входного токена к
-му эксперту. Чем выше
, тем больше "подходит" токен этому эксперту.
– представление входного токена
после применения Layer Normalization. Layer Normalization помогает стабилизировать обучение и улучшить обобщающую способность модели.
– центроид
-го эксперта. Предполагается, что
представляет собой "центр" пространства представлений токенов, которые должен обрабатывать
-й эксперт. Как указано в тексте, центроид, вероятно, рассчитывается как среднее значение представлений токенов, обработанных этим экспертом.
– динамическое смещение (bias) для
-го эксперта. Это смещение используется для балансировки нагрузки между экспертами. Оно динамически корректируется, чтобы предотвратить перегрузку одних экспертов и недозагрузку других.
– сигмоидальная функция. Применяется для нормализации оценки сродства в диапазон от 0 до 1. Сигмоида преобразует скалярное произведение и смещение в вероятность или уверенность в том, что токен должен быть направлен к данному эксперту.
Формула выбора экспертов (Top-K Selection):
Пояснение:
– множество индексов
экспертов с наивысшими оценками сродства
.
– операция, которая выбирает индексы
экспертов из общего числа маршрутизируемых экспертов
, для которых оценка сродства
является наибольшей.
В DeepSeek-V3, как указано, и
. Это означает, что для каждого входного токена выбираются 8 из 256 маршрутизируемых экспертов для обработки.
Цель: Увеличить специализацию экспертов без увеличения вычислительных затрат.
Формула агрегации выходов с мелкозернистой сегментацией:
Пояснение:
– коэффициент мелкозернистой сегментации (например,
). Каждый исходный эксперт разделяется на
подэкспертов.
–
-й подэксперт (из общего числа
) обрабатывает входное представление
. Важно отметить, что каждый подэксперт имеет меньший размер, чем исходный эксперт (примерно в
раз меньше по FLOPs).
– количество активируемых подэкспертов. Если изначально активировалось
экспертов, то после сегментации активируется
подэкспертов.
– весовой коэффициент (gate weight) для
-го подэксперта. Эти веса определяют, насколько сильно вклад каждого подэксперта влияет на итоговый выход. Сумма всех весов
равна 1, что обеспечивает нормализацию выходных данных.
– выход слоя MoE после агрегации выходов активированных подэкспертов с учетом весовых коэффициентов.
Сохранение вычислительных затрат:
Мелкозернистая сегментация позволяет увеличить количество "специализированных" вычислительных блоков (подэкспертов) без увеличения общего объема вычислений, поскольку каждый подэксперт меньше исходного эксперта. Как показано в примере, активация подэкспертов, каждый из которых требует
, приводит к тем же общим FLOPs, что и активация
исходных экспертов.
Цель: Обеспечить усвоение общих знаний, которые должны быть доступны для всех входных токенов.
Формула выходного слоя с общим экспертом:
Пояснение:
– выход общего эксперта, который обрабатывает представление
каждого входного токена. Общий эксперт всегда активен и не участвует в маршрутизации.
– выход
-го маршрутизируемого эксперта (здесь уже подразумеваются исходные эксперты, а не подэксперты, если мелкозернистая сегментация применяется к маршрутизируемым экспертам).
Сумма – представляет собой агрегированный выход выбранных маршрутизируемых экспертов, как описано в разделе 1 и 2.
– итоговый выход слоя MoE, который является суммой выхода общего эксперта и агрегированного выхода маршрутизируемых экспертов.
Общий эксперт позволяет модели изучать общие закономерности и знания, которые применимы ко всем типам входных данных, в то время как маршрутизируемые эксперты специализируются на более конкретных и узких областях.
Цель: Равномерно распределить нагрузку между маршрутизируемыми экспертами, чтобы избежать ситуации, когда некоторые эксперты перегружены, а другие недоиспользуются.
Формула обновления смещения :
Пояснение:
– новое значение смещения для
-го эксперта на следующем шаге обновления.
– текущее значение смещения для
-го эксперта.
– скорость обучения (learning rate) для обновления смещения. Определяет, насколько быстро смещение корректируется в ответ на дисбаланс нагрузки.
– количество токенов, обработанных
-м экспертом в текущем пакете (batch).
– общее количество токенов в пакете, обработанных всеми маршрутизируемыми экспертами.
– общее количество маршрутизируемых экспертов.
– средняя нагрузка на эксперта, если нагрузка была бы идеально распределена.
– разница между фактической нагрузкой на
-го эксперта и средней нагрузкой. Если эта разница положительная, эксперт перегружен; если отрицательная, недогружен.
Механизм балансировки:
Формула обновляет смещение таким образом, чтобы уменьшить нагрузку на перегруженных экспертов и увеличить нагрузку на недогруженных. Если эксперт перегружен (
), смещение
уменьшается, что снижает оценку сродства
для этого эксперта в будущем, и, следовательно, уменьшает вероятность его выбора. И наоборот, если эксперт недогружен, его смещение увеличивается, повышая вероятность его выбора.
Цель: Определить вклад каждого выбранного эксперта в итоговый выход.
Формула весов смешивания :
Пояснение:
– весовой коэффициент для
-го выбранного эксперта.
– оценка сродства для
-го эксперта, рассчитанная ранее.
– температура (temperature). Параметр, который контролирует "мягкость" распределения весов.
При высоком распределение весов становится более равномерным, и вклад всех выбранных экспертов становится более схожим.
При низком распределение становится более резким, и эксперт с самой высокой оценкой сродства получает значительно больший вес, чем остальные.
– экспонента от нормированной оценки сродства. Экспоненцирование усиливает различия между оценками сродства.
– сумма экспонент от нормированных оценок сродства для всех выбранных экспертов. Используется для нормализации весов
так, чтобы их сумма была равна 1.
Механизм смешивания:
Формула использует softmax-подобный механизм для расчета весов смешивания. Эксперты с более высокими оценками сродства получают более высокие веса
, что означает, что их выходной вклад в итоговый результат будет больше. Температура
позволяет регулировать степень "концентрации" внимания на наиболее подходящих экспертах.
a) Complementary Sequence-Wise Auxiliary Loss (Дополнительная вспомогательная потеря для балансировки последовательностей)
Цель: Обеспечить баланс нагрузки на уровне последовательностей, чтобы избежать дисбаланса в обработке длинных последовательностей.
Формула вспомогательной потери :
Пояснение:
– значение вспомогательной потери.
– коэффициент масштабирования для вспомогательной потери (
). Вспомогательная потеря имеет небольшой вес, чтобы не доминировать над основной функцией потерь.
– количество последовательностей в пакете.
– длина последовательности (предполагается, что все последовательности в пакете имеют одинаковую длину для упрощения, но в общем случае может быть средняя длина или максимальная длина).
–
-й токен в
-й последовательности.
– индикаторная функция, которая равна 1, если эксперт
обработал токен
, и 0 в противном случае.
– доля токенов в
-й последовательности, обработанных экспертом
. Это мера нагрузки на эксперта
в рамках одной последовательности.
– целевая средняя нагрузка (target average load). Желаемое среднее значение доли токенов, которые должен обрабатывать каждый эксперт в последовательности.
– квадрат отклонения фактической нагрузки эксперта
в последовательности от целевой средней нагрузки. Квадрат используется для штрафования как перегрузки, так и недогрузки.
– сумма квадратов отклонений по всем последовательностям в пакете.
(неявно присутствует суммирование по всем экспертам, хотя в формуле не указано явно, но логично предположить, что потеря рассчитывается для каждого эксперта и суммируется).
Механизм балансировки на уровне последовательностей:
Вспомогательная потеря штрафует модель, если нагрузка на экспертов в рамках отдельных последовательностей сильно отклоняется от целевой средней нагрузки. Это способствует более равномерному распределению нагрузки не только в целом по пакету, но и внутри каждой последовательности, что может быть важно для обработки длинных текстов.
b) Node-Limited Routing (Маршрутизация с ограничением по узлам)
Цель: Ограничить количество вычислительных узлов, на которые направляется каждый токен, для повышения эффективности и снижения задержек.
Формула ограничения:
Пояснение:
– индикаторная функция, которая равна 1, если токен
направлен на вычислительный узел
, и 0 в противном случае.
– индекс вычислительного узла (предполагается, что используется до 4 узлов, как указано в тексте).
– общее количество вычислительных узлов, на которые направлен токен
.
Механизм ограничения:
Ограничение гарантирует, что каждый токен направляется не более чем на 4 вычислительных узла. Это может быть реализовано на уровне инфраструктуры или алгоритмически при выборе экспертов. Ограничение по узлам помогает уменьшить коммуникационные издержки и повысить параллелизм вычислений, особенно в распределенных вычислительных средах.
Ключевые выводы по DeepSeekMoE:
Маршрутизация экспертов: Основана на оценке сродства, сигмоиде и динамическом смещении для балансировки нагрузки. Выбираются Top-K экспертов.
Мелкозернистая сегментация: Увеличивает специализацию экспертов без увеличения FLOPs за счет разделения экспертов на подэкспертов и активации большего их количества.
Общий эксперт: Обеспечивает усвоение общих знаний, обрабатывая каждый токен.
Динамическая балансировка нагрузки: Регулирует смещения экспертов на основе текущей нагрузки для равномерного распределения работы.
Веса смешивания: Используют softmax-подобный механизм для агрегации выходов экспертов, определяя вклад каждого эксперта на основе оценки сродства и температуры.
Дополнительные механизмы:
Вспомогательная потеря для балансировки нагрузки на уровне последовательностей.
Ограничение маршрутизации по узлам для повышения эффективности в распределенных системах.
Обратимся к рассмотрению инновационной функции, получившей название "Прогнозирование Множественных Токенов" (Multi-Token Prediction, MTP). Суть MTP заключается в концептуальном расширении парадигмы предсказания, предполагая прогнозирование не единичного токена, а целого набора токенов для каждой позиции в последовательности. В текущей архитектуре модели, в частности, реализовано предсказание двух токенов – текущего и непосредственно следующего за ним. В теоретическом плане, подобный подход призван усилить обучающий сигнал, что, в свою очередь, потенциально ведет к повышению эффективности использования обучающих данных. Более того, выдвигается гипотеза, что MTP способствует более основательной подготовке модели к задаче прогнозирования будущих токенов, обеспечивая более глубокое понимание контекстуальных зависимостей.
Реализация прогнозирования токенов в MTP осуществляется в последовательном порядке. Для предсказания D дополнительных токенов используются D специализированных модулей MTP, отличающихся общей структурой вложений и выходной головкой. В качестве входных данных каждый модуль получает выходные данные либо из основного слоя модели, либо из предыдущего модуля MTP, а также вложения следующего токена. Предварительно данные подвергаются процедуре нормализации RMSNorm и последующему объединению. Каждый модуль MTP вычисляет значение потерь кросс-энтропии. Среднее значение потерь, рассчитанное по всем модулям, интегрируется в общую функцию потерь модели в качестве дополнительного слагаемого, умноженного на коэффициент λ (значение которого составляет 0.3 для первых 10T токенов и 0.1 для последующих 4.8T). Важно отметить, что в процессе инференса модули MTP отключаются, однако сохраняется возможность их применения в рамках спекулятивного декодирования, что открывает перспективы для дальнейших исследований и оптимизаций.
Эффективность MTP подтверждается последовательным улучшением производительности на разнообразных бенчмарках. Эмпирические исследования демонстрируют, что точность предсказания следующего токена колеблется в диапазоне от 85% до 90%. Примечательно, что в сочетании со спекулятивным декодированием наблюдается значительное увеличение показателя TPS (токенов в секунду) – в 1.8 раза.
Инфраструктурное обеспечение, лежащее в основе обучения DeepSeek-V3, представляет собой не менее важный аспект. Обучение модели было проведено на мощном вычислительном кластере, включающем 2048 графических процессоров NVIDIA H800. Здесь уместно отметить, что H800 является специализированной версией H100, адаптированной для китайского рынка. В архитектуре H800 наблюдается оптимизация параметров межсоединения, выражающаяся в более чем двукратном снижении пропускной способности и уменьшении числа соединений NVLink. Производительность в операциях FP64 FLOPS также снижена на порядок, что, хотя и не является критическим фактором для задач обучения нейронных сетей, может представлять собой ограничение в других областях, таких как, например, вычислительные задачи в ядерной физике. В рамках продуктовой линейки NVIDIA, модель H200 позиционируется как усовершенствованная итерация H100, отличающаяся увеличенным объемом и повышенной скоростью доступа к памяти.
Для проведения обучения была разработана специализированная проприетарная платформа под названием HAI-LLM. Архитектура DeepSeek-V3 интегрирует комплексный набор стратегий параллелизма, включающий 16-сторонний конвейерный параллелизм (Pipeline Parallelism, PP), 64-сторонний экспертный параллелизм (Expert Parallelism, EP) с распределением нагрузки на 8 узлов, а также параллелизм данных ZeRO-1 (Data Parallelism, DP). Для достижения максимальной эффективности конвейерного параллелизма был разработан инновационный алгоритм DualPipe, обеспечивающий перекрытие фаз коммуникации и вычислений как в прямом, так и в обратном проходах. Данный подход позволяет существенно сократить время простоя конвейера, повышая общую пропускную способность системы. Благодаря значительным достижениям в области оптимизации использования памяти, разработчикам удалось обойтись без применения тензорного параллелизма (Tensor Parallelism, TP). В дополнение к этому, были разработаны высокопроизводительные межузловые ядра коммуникации типа all-to-all, обеспечивающие эффективный обмен данными между вычислительными узлами.
Особый интерес представляет собой методология обучения модели с применением формата FP8. Для читателей, не обладающих достаточным знакомством с форматами FP32, FP16, BF16, рекомендуется обратиться к следующему детальному описанию.
Понимание форматов чисел с плавающей точкой (Floating-Point) в машинном обученииВ машинном обучении, особенно в глубоком обучении, мы работаем с огромными объемами числовых данных – весами моделей, входными данными, промежуточными вычислениями и т.д. Для представления этих чисел в компьютерах используются различные форматы. Среди наиболее распространенных – форматы чисел с плавающей точкой (floating-point), которые позволяют представлять как очень большие, так и очень маленькие числа.
Почему важны разные форматы?
Выбор формата чисел влияет на несколько ключевых аспектов:
Точность вычислений: Формат определяет, насколько точно можно представить число. Более высокая точность (например, FP32) позволяет более точно хранить и обрабатывать значения.
Объем памяти: Формат определяет, сколько памяти требуется для хранения одного числа. Менее точные форматы (например, FP16, BF16, FP8) занимают меньше места.
Скорость вычислений: Операции с менее точными форматами могут выполняться быстрее на специализированном оборудовании (например, на GPU и специализированных ускорителях).
В контексте обучения нейронных сетей, особенно больших моделей, баланс между этими аспектами критически важен. Использование менее точных форматов может ускорить обучение и снизить потребление памяти, но при этом нужно следить, чтобы не потерять в качестве модели из-за недостаточной точности.
Давайте рассмотрим каждый из этих форматов подробнее.
Полное название: IEEE 754 single-precision binary floating-point format.
Размер: 32 бита (4 байта) на число.
Структура: Состоит из трех частей:
Знак (Sign): 1 бит (определяет, положительное или отрицательное число).
Экспонента (Exponent): 8 бит (определяет порядок числа).
Мантисса (Fraction/Mantissa): 23 бита (определяет значащие цифры числа).
Характеристики FP32:
Высокая точность: FP32 обеспечивает достаточную точность для большинства задач машинного обучения. Это "стандартный" формат, который долгое время использовался по умолчанию.
Большой диапазон значений: Может представлять как очень большие, так и очень маленькие числа.
Умеренное потребление памяти: 4 байта на число – это не самое экономное, но и не чрезмерное потребление.
Производительность: Производительность операций FP32 может быть ограничена на некоторых типах оборудования, особенно при работе с очень большими моделями.
Применение FP32:
Традиционно использовался для обучения нейронных сетей. Долгое время был стандартом де-факто.
Используется, когда требуется высокая точность вычислений.
Может использоваться для хранения весов моделей и активаций.
Аналогия: Представьте себе линейку длиной 1 метр с миллиметровыми делениями. FP32 – это как такая линейка: достаточно точная для большинства измерений в обычной жизни.
Полное название: IEEE 754 half-precision binary floating-point format.
Размер: 16 бит (2 байта) на число.
Структура:
Знак (Sign): 1 бит.
Экспонента (Exponent): 5 бит.
Мантисса (Fraction/Mantissa): 10 бит.
Характеристики FP16:
Половинная точность: Точность FP16 значительно ниже, чем у FP32. Диапазон представимых чисел также меньше.
Низкое потребление памяти: В два раза меньше памяти, чем FP32.
Высокая производительность: Операции FP16 могут быть значительно быстрее, чем FP32, на оборудовании, оптимизированном для FP16 (например, на современных GPU NVIDIA Tensor Cores).
Применение FP16:
Ускорение обучения и инференса нейронных сетей. Использование FP16 позволяет увеличить пропускную способность и снизить задержки.
Снижение потребления памяти. Позволяет обучать и развертывать более крупные модели при ограниченных ресурсах памяти.
Часто используется в технике "смешанной точности" (Mixed Precision Training). В этом подходе часть вычислений (например, градиенты) выполняется в FP32 для стабильности, а другие части (например, прямые и обратные проходы) – в FP16 для скорости.
Аналогия: FP16 – это как линейка длиной 30 см с делениями в полсантиметра. Менее точная, чем метровая линейка, но более компактная и быстрая в использовании для приблизительных измерений.
Ограничения FP16:
Ограниченный диапазон и точность: Может вызвать проблемы с "переполнением" (overflow) или "недополнением" (underflow) при работе с очень большими или очень маленькими числами. Также может возникнуть потеря точности, особенно при накоплении ошибок в глубоких сетях.
Требует осторожного использования: Не всегда можно просто заменить FP32 на FP16 без дополнительных мер, таких как масштабирование градиентов, loss scaling и т.д.
Полное название: Brain Floating Point 16-bit. Разработан Google для использования в TPU (Tensor Processing Units).
Размер: 16 бит (2 байта) на число.
Структура:
Знак (Sign): 1 бит.
Экспонента (Exponent): 8 бит.
Мантисса (Fraction/Mantissa): 7 бит.
Характеристики BF16:
Точность: Меньше, чем FP32, но важно отметить, что BF16 жертвует точностью мантиссы, но сохраняет диапазон экспоненты FP32. Это ключевое отличие от FP16.
Диапазон значений: Диапазон значений BF16 практически такой же, как у FP32. Это означает, что BF16 лучше подходит для предотвращения переполнения/недополнения, чем FP16, особенно при работе с градиентами в глубоком обучении.
Низкое потребление памяти: Как и FP16, занимает 2 байта на число.
Высокая производительность: Поддерживается многими современными ускорителями, включая GPU NVIDIA и TPU Google.
Применение BF16:
Альтернатива FP16 для ускорения обучения и инференса. BF16 часто рассматривается как более "безопасная" альтернатива FP16, особенно для обучения больших моделей, благодаря более широкому диапазону.
Широко используется в экосистеме Google (TPU, TensorFlow).
Рассматривается как "отраслевой стандарт" или распространенная комбинация FP32/16. Это связано с тем, что BF16 обеспечивает хороший баланс между точностью, диапазоном и производительностью.
Аналогия: BF16 – это как метровая линейка, но с делениями в сантиметрах, а не миллиметрах. Точность делений ниже, чем у миллиметровой линейки (FP32), но длина линейки (диапазон) остается такой же. Для многих задач, где не нужна сверхвысокая точность, но важен широкий диапазон измерений, такая линейка может быть вполне достаточной и удобнее в использовании.
Сравнение FP16 и BF16:
Характеристика | FP16 | BF16 |
---|---|---|
Размер | 16 бит | 16 бит |
Диапазон экспоненты | Меньше, чем FP32 | Сопоставим с FP32 |
Точность мантиссы | Выше, чем BF16 | Ниже, чем FP16 |
Риск переполнения/недополнения | Выше, чем BF16 | Ниже, чем FP16, сопоставим с FP32 |
Производительность | Высокая | Высокая |
Потребление памяти | Низкое | Низкое |
Когда использовать? | Когда важна скорость и экономия памяти, но нужно быть осторожным с диапазоном и точностью | Когда важен широкий диапазон и скорость, часто более "безопасный" выбор, чем FP16 |
Теперь вернемся к формату FP8. FP8 – это еще более "компактный" формат чисел с плавающей точкой, занимающий всего 8 бит (1 байт) на число. Существует несколько вариантов FP8, но общая идея заключается в дальнейшем снижении точности и диапазона для достижения еще большей производительности и экономии памяти.
Из тех.отчета видно, что:
FP8 – это новый и перспективный формат для обучения больших моделей. DeepSeek-V3, возможно, первая публично представленная крупномасштабная модель, обученная на FP8.
FP8 может обеспечить значительное увеличение пропускной способности. Пример Habana/Intel Gaudi2 показывает увеличение на 34% по сравнению с BF16 при сохранении сопоставимого качества.
Microsoft также активно исследует FP8 (FP8-LM, библиотека MS-AMP).
Другие компании (OpenAI, Google) могут также интересоваться FP8, хотя их стратегии могут отличаться. Google, по-видимому, пока предпочитает BF16.
Почему FP8 становится актуальным?
Рост размеров моделей: Современные нейронные сети становятся все больше и больше. Снижение точности и потребления памяти становится критически важным для обучения и развертывания таких моделей.
Специализированное оборудование: Производители аппаратного обеспечения (NVIDIA, Intel, Google и др.) разрабатывают специализированные ускорители, которые оптимизированы для работы с низкоточными форматами, включая FP8.
Баланс между точностью и эффективностью: Исследования показывают, что для многих задач глубокого обучения, особенно на этапе инференса, полная точность FP32 не всегда необходима. Использование менее точных форматов может обеспечить значительное ускорение и экономию ресурсов без существенной потери качества.
В заключение:
Форматы FP32, FP16, BF16 и FP8 представляют собой спектр компромиссов между точностью, диапазоном, производительностью и потреблением памяти. Выбор формата зависит от конкретной задачи, аппаратного обеспечения и требований к точности. FP32 долгое время был стандартом, но в последние годы форматы половинной точности (FP16, BF16) и, в перспективе, форматы еще меньшей точности (FP8) становятся все более важными для обучения и развертывания больших и эффективных моделей машинного обучения. Разработка и внедрение FP8, является активной областью исследований и разработок, направленной на дальнейшее повышение эффективности глубокого обучения.
Несмотря на то, что формат FP8 не является предметом рассмотрения в указанной публикации, аналогия позволит сформировать адекватное представление о его ключевых характеристиках. Весьма вероятно, что DeepSeek-V3 является первой в своем роде публично представленной крупномасштабной производственной моделью, обучение которой было осуществлено с использованием формата FP8. В качестве контрастного примера можно привести Llama3, обучение которой, по имеющимся сведениям, проводилось в формате BF16, который в настоящее время рассматривается как своего рода отраслевой стандарт или, по крайней мере, распространенная комбинация FP32/16. В контексте предшествующих исследований следует упомянуть работу израильских ученых из Habana (ныне Intel) [11]. Ими была успешно обучена 7B модель на 2T токенах, используя аппаратную платформу Gaudi2 от Intel-Habana, достигнув при этом качества, сопоставимого с BF16, и продемонстрировав увеличение пропускной способности на 34%. Также заслуживает внимания более ранняя инициатива FP8-LM от Microsoft [12], в рамках которой была обучена модель GPT-175B. Microsoft также предоставила в открытый доступ соответствующую библиотеку программного обеспечения [ссылка на github.com/Azure/MS-AMP], способствующую дальнейшему развитию исследований в данной области. Нельзя исключать вероятность того, что OpenAI также перешла на использование FP8 в своих внутренних разработках, по крайней мере, для некоторых моделей, однако официальная информация по этому вопросу отсутствует. Стратегия Google в отношении выбора форматов обучения остается не вполне определенной, однако, по всей видимости, предпочтение отдается формату BF16.
Вместе с тем, следует отметить, что DeepSeek-V3 реализует стратегию смешанной точности, при которой определенный набор операций по-прежнему выполняется с использованием форматов BF16 или даже FP32. В частности, форматы повышенной точности применяются к таким ключевым компонентам, как модуль встраивания (embedding module), выходная головка (output head), модули стробирования MoE (Mixture of Experts), операторы нормализации и механизмы внимания. Более того, основные веса модели, градиенты весов и состояния оптимизатора сохраняются с повышенной точностью. Данный подход обусловлен стремлением обеспечить стабильность процесса обучения, которая, как известно, является одним из основных вызовов при использовании форматов с низкой точностью, наряду с ограничениями, связанными с аппаратной поддержкой. Несмотря на это, подавляющее большинство вычислительно затратных операций выполняется в формате FP8, что позволяет достичь значительной экономии ресурсов.
Выдвигается предположение, что именно применение формата FP8 в значительной степени обусловило существенное снижение вычислительных издержек. В идеализированном сценарии, переход на FP8 потенциально позволяет удвоить объем доступных вычислений, одновременно сокращая требования к объему памяти вдвое. С целью повышения точности вычислений в формате FP8 был реализован ряд дополнительных методологических приемов, включая более совершенные техники квантования, повышенную точность аккумуляции и приоритизацию мантиссы над экспонентой. В результате, для представления всех тензоров используется формат E4M3 (4 бита для экспоненты и 3 бита для мантиссы), что представляет собой более унифицированный подход по сравнению с потенциально возможным использованием комбинации форматов E4M3 и E5M2.
Также были предприняты целенаправленные усилия по оптимизации процессов хранения данных и межпроцессорной коммуникации, что позволило добиться сокращения как потребления памяти, так и накладных расходов, связанных с передачей данных. Эффективность обучения в формате FP8 была тщательно верифицирована на модели DeepSeek-V2 в конфигурациях с 16B и 230B параметрами. Полученные результаты свидетельствуют о том, что различия в производительности между моделями, обученными с использованием FP8 и BF16, находятся в пределах статистической погрешности, что подтверждает состоятельность подхода FP8.
В заключение, следует отметить оптимизацию, проведенную в отношении процесса инференса. Развертывание фаз предварительного заполнения (prefill) и декодирования (decoding) осуществляется на раздельной основе. Напомним, что фаза предварительного заполнения включает в себя обработку всех входных токенов (prompt tokens) и вычисление промежуточных KV-пар (ключ-значение), в то время как фаза декодирования представляет собой итеративный процесс авторегрессивной генерации токенов. Более детальное описание данного процесса можно найти по следующей ссылке: [ссылка на подробности]. Для фазы предварительного заполнения минимальная конфигурация развертывания предполагает использование 4 узлов, оснащенных 32 GPU, с соответствующими параметрами параллелизма. В свою очередь, для фазы декодирования, требующей задействования 9 экспертных моделей, минимальная конфигурация увеличивается до 40 узлов, включающих 320 GPU, и характеризуется индивидуальным набором настроек, оптимизированных для данной фазы.
Процесс обучения модели DeepSeek-V3 включает два основных этапа: предварительное обучение (pretraining) и постобучение (posttraining). В ходе предварительного обучения осуществляется обработка значительных объемов данных и применение различных стратегий машинного обучения для формирования базовой модели. На этапе постобучения производится тонкая настройка (supervised fine-tuning, SFT) и обучение с подкреплением (reinforcement learning, RL), что позволяет оптимизировать модель для интерактивного использования. Мы рассмотрим ключевые аспекты обоих этапов, включая использование новых методик и сравнительный анализ с аналогичными моделями.
В сравнении с предыдущей версией DeepSeek-V2 [13], в DeepSeek-V3 была увеличена доля данных, относящихся к математике и программированию, а также расширен языковой охват. Однако основную часть датасета по-прежнему составляют англоязычные и китайские тексты. В окончательный корпус включено 14,8 трлн токенов (против 8,1 трлн в DeepSeek-V2). В качестве метода токенизации использован byte pair encoding (BPE) со словарем объемом 128 тысяч слов. В новой версии токенизатор был переработан для более эффективной обработки многоязычных данных, а также были добавлены токены, сочетающие знаки пунктуации с разрывами строк.
В процессе обучения используется стратегия прогнозирования следующего токена (next-token prediction) в сочетании с техникой восстановления пропущенного фрагмента текста (fill-in-the-middle, FIM). Последняя реализована с частотой 0,1, аналогично DeepSeekCoder-V2 [14], и была первоначально предложена OpenAI [15]. В данном методе модель обучается восстанавливать центральную часть текста, используя структуру "Префикс-Суффикс-Середина" (prefix-suffix-middle, PSM):
<|fim_begin|>𝑓_pre<|fim_hole|>𝑓_suf<|fim_end|>𝑓_middle<|eos_token|>
В ходе предварительного обучения максимальная длина последовательности составляла 4000 токенов. Для расширения контекста применялся алгоритм YaRN [16], который позволил увеличить контекстное окно сначала до 32 тысяч токенов, а затем до 128 тысяч. Этот процесс включал две дополнительные фазы обучения по 1000 шагов каждая.
Краткий обзор метода YaRNВведение
Современные большие языковые модели (LLM), такие как LLaMA, GPT-NeoX и PaLM, демонстрируют впечатляющие результаты в задачах обработки естественного языка (NLP). Однако их применение ограничено фиксированным размером контекстного окна — максимальной длиной последовательности, на которой модель была обучена. Это становится критическим препятствием для задач, требующих анализа длинных текстов, таких как суммаризация документов, многоэтапные диалоги или обработка научных статей. В статье "YaRN: Efficient Context Window Extension of Large Language Models" предлагается инновационный метод расширения контекстного окна моделей, использующих Rotary Position Embeddings (RoPE), который сочетает вычислительную эффективность с сохранением производительности.
Проблема ограниченного контекстного окна
Контекстное окно определяет, сколько токенов модель может одновременно учитывать при генерации ответа. Например, если модель обучена на 2048 токенах, она «не видит» информацию за пределами этого диапазона. Авторы подчеркивают, что это ограничение снижает практическую применимость LLM в реальных сценариях, где контекст часто превышает стандартные 4k–8k токенов. Проблема усугубляется тем, что большинство моделей плохо экстраполируют за пределы обученной длины, что приводит к резкому падению качества при работе с длинными последовательностями.
RoPE и вызовы экстраполяции
Rotary Position Embeddings (RoPE) — популярный метод кодирования позиционной информации, который использует вращательные матрицы для учета относительных позиций токенов. Несмотря на эффективность, RoPE, как и другие позиционные эмбеддинги, страдает от неспособности обобщать за пределы обученной длины. Например, если модель обучалась на последовательностях длиной 2048, попытка обработать 4096 токенов без модификаций приведет к искажению позиционной информации и снижению точности.
Недостатки существующих методов
До появления YaRN существовало два основных подхода:
Position Interpolation (PI) — линейное «растягивание» позиционных эмбеддингов для умещения большего контекста.
«NTK-aware» интерполяция — метод, вдохновленный нейронными тангенциальными ядрами, который распределяет интерполяцию неравномерно по частотам.
Однако оба метода требуют значительных вычислительных ресурсов для дообучения (fine-tuning) — например, PI нуждается в 10–100 миллионах токенов. Кроме того, после расширения контекста модели демонстрируют ухудшение производительности на коротких последовательностях, что ограничивает их универсальность.
Метод YaRN: Компоненты и инновации
YaRN (Yet another RoPE extensioN method) решает эти проблемы за счет трех ключевых компонентов:
«NTK-by-parts» интерполяция
В отличие от предыдущих методов, YaRN учитывает неоднородность частот в RoPE. Высокочастотные компоненты (отвечающие за локальные связи между соседними токенами) интерполируются минимально, чтобы сохранить детализацию, а низкочастотные (глобальный контекст) — более агрессивно. Это позволяет модели корректно обрабатывать как близкие, так и удаленные токены в расширенном окне.
Масштабирование внимания через температуру
В механизм внимания вводится температурный коэффициент ( t ), который смягчает softmax-функцию. Это снижает дисбаланс между логитами при увеличении контекста и стабилизирует обучение. Важно, что модификация не требует изменения кода модели и не добавляет вычислительных затрат.
Динамическое масштабирование
Во время инференса модель постепенно адаптируется к превышению исходного контекстного окна, избегая резкого падения производительности. Например, при достижении предела в 64k токенов YaRN позволяет плавно ухудшать качество, а не «ломаться» мгновенно.
Экспериментальные результаты
YaRN демонстрирует state-of-the-art результаты в расширении контекста:
Модели LLaMA 7B/13B успешно масштабируются до 128k токенов, сохраняя низкую перплексию.
Для дообучения требуется всего 0.1% данных от исходного предобучения (в 10 раз меньше, чем у PI) и 2.5 раза меньше шагов.
На стандартных бенчмарках (например, PG19, arXiv) YaRN превосходит PI и «NTK-aware» на 15–20% по точности.
Интересно, что YaRN позволяет экстраполировать контекст: модель, обученная на 64k токенах, корректно обрабатывает 128k без дополнительной настройки. Это открывает путь к эффективному использованию «длинного контекста» без полного переобучения.
Практические преимущества
Совместимость: YaRN легко интегрируется в существующие архитектуры и поддерживается библиотеками вроде Flash Attention 2, что ускоряет инференс.
Масштабируемость: Метод работает для моделей разных размеров (от 7B до 70B параметров) и типов (LLaMA, GPT-NeoX).
Экономия ресурсов: Сокращение данных и шагов обучения снижает стоимость развертывания.
Ключевые цитаты и их значимость
«YaRN достигает современного уровня производительности… на менее чем ∼0.1% от исходных данных» — это подчеркивает революционную эффективность метода.
«Динамическое масштабирование позволяет модели постепенно ухудшаться, а не ломаться» — ключевое преимущество для промышленного применения, где стабильность критична.
Заключение и перспективы
YaRN устанавливает новый стандарт в расширении контекстного окна LLM. Его способность сохранять производительность на коротких контекстах, минимизировать затраты на дообучение и поддерживать экстраполяцию делает его универсальным инструментом для NLP-сообщества. В будущем метод может быть адаптирован для других типов позиционных эмбеддингов, а также интегрирован в frameworks обучения, такие как Hugging Face Transformers, что ускорит его внедрение в промышленность.
Вывод
Статья о YaRN не только решает конкретную техническую проблему, но и открывает новые возможности для применения LLM в реальных задачах — от анализа юридических документов до создания диалоговых агентов с долгосрочной памятью. Это важный шаг к преодолению одного из ключевых ограничений современных языковых моделей.
Результат превосходит предыдущую модель DeepSeek-V2 и две плотные модели, Qwen2.5 72B Base и LLaMA-3.1 405B Base, по нескольким бенчмаркам, включая английский язык, китайский язык, код, математику и один многоязычный бенчмарк, что делает ее самой сильной открытой моделью.
Интересно сравнение с Qwen2.5 72B Base — это одна из сильных моделей с почти вдвое большим количеством активных параметров, чем DeepSeek. LLaMA-3.1 405B Base имеет в 11 раз больше параметров, но работает хуже в этих тестах.
Результатом этого этапа является базовая модель DeepSeek-V3-Base . Следующий этап постобучения создает модель чата с тонкой настройкой инструкций DeepSeek-V3.
На этапе SFT использовались два типа данных: относящиеся к задачам рассуждения (reasoning) и не относящиеся к ним (non-reasoning). Финальный датасет инструкционной настройки содержал 1,5 млн примеров.
Данные reasoning были сосредоточены на математике, программировании и логических задачах. Они были сгенерированы внутренней моделью DeepSeek-R1, которая, в свою очередь, была обучена на основе DeepSeek-V3. Однако модель DeepSeek-R1 была подвержена проблемам многословия, избыточного анализа и некорректного форматирования. Для решения этой проблемы использовался специализированный экспертный подход, включавший этапы SFT и RL. Генерация данных осуществлялась с высокой температурой, что позволило выявить закономерности в ответах модели R1 и использовать их при создании обучающего корпуса.
Данные non-reasoning включали примеры творческого письма, ролевых сценариев и простых ответов на вопросы. Они были созданы на основе DeepSeek-V2.5 и прошли дополнительную проверку с участием аннотаторов.
> Как итог, качество и объем данных в Supervised Fine-Tuning (SFT) критически влияют на финальное качество модели.
Обучение с подкреплением основывалось на двух подходах: использовании модели вознаграждения (reward model, RM) с правилами и RM на основе модели. Первый метод применялся в ситуациях, где возможна формальная верификация ответа, например, при решении математических задач с детерминированными результатами или задач программирования, проверяемых с помощью компилятора. Там, где формальная проверка затруднена (например, в заданиях на творческое письмо), использовалась модель вознаграждения, оценивающая соответствие ответа запросу.
В DeepSeek-V3 применен алгоритм Group Relative Policy Optimization (GRPO) [17], являющийся модификацией Proximal Policy Optimization (PPO). В отличие от PPO, данный метод позволяет отказаться от отдельной функции стоимости (value function), что снижает вычислительные затраты. Вместо этого используется среднее вознаграждение по выборкам, полученным из одного запроса. Для обеспечения стабильности модели в процессе RL применялись меры по ограничению расхождений с базовой моделью (KL-regularization), упрощенные за счет прямого сравнения между эталонной моделью и политикой.
Краткий обзор алгоритма GRPOGRPO — это алгоритм обучения с подкреплением, предназначенный для оптимизации LLM в задачах, требующих структурированного рассуждения, таких как математика и логика. Он был представлен в работах DeepSeekMath и DeepSeek-R1 как ответ на вызовы обучения моделей с миллиардами параметров. GRPO предлагает более эффективный подход по сравнению с традиционными методами, такими как Proximal Policy Optimization (PPO), за счет устранения ключевых узких мест, связанных с вычислением advantage-функций.
Объяснение Advantage-функцийAdvantage-функция — это ключевое понятие в обучении с подкреплением (Reinforcement Learning, RL), которое количественно оценивает преимущество выбора конкретного действия a в состоянии s по сравнению со средним действием, предписанным текущей политикой модели. Формально она выражается как разница между Q-функцией (ожидаемая суммарная награда за действие a в состоянии s) и V-функцией (средняя ожидаемая награда в состоянии s при текущей политике):
Оценка относительной ценности действий:
Помогает модели понять, насколько конкретное действие лучше или хуже "стандартного" поведения в данном контексте.
Пример: В математической задаче действие "выбрать метод интегрирования по частям" может иметь высокий advantage, если приводит к правильному ответу, и низкий — если усложняет решение.
Снижение дисперсии градиентов:
Использование относительных advantage-значений вместо абсолютных наград делает обновления политики более стабильными.
В Proximal Policy Optimization (PPO):
Value-сеть (отдельная нейросеть) обучается предсказывать V(s) — ожидаемую награду для состояния s.
Q(s, a) оценивается через фактическую полученную награду + дисконтированные будущие награды.
Advantage вычисляется как:
где — дисконтированная сумма наград за траекторию.
Проблемы PPO:
Value-сеть требует дополнительных вычислительных ресурсов и памяти.
Ошибки в предсказаниях V(s) (особенно в задачах с многомодальным распределением наград, как в LLM) искажают advantage-значения.
GRPO полностью устраняет необходимость в value-сети, используя групповую относительную нормализацию:
для каждого промпта генерируется группа из
ответов
с использованием политики
. Каждому ответу
присваивается награда
, отражающая его качество. Advantage-функция для
-го ответа
относительно группы
вычисляется по формуле:
где — средняя награда по группе
.
> По сути, Advantage-функция в GRPO для каждого конкретного ответа рассчитывается как награда конкретного ответа минус среднее арифметическое наград всех ответов в группе.
Ключевые особенности GRPO подхода:
Групповая относительная нормализация: Advantage-функция вычисляется относительно группы ответов, сгенерированных для одного и того же промпта, что обеспечивает относительную оценку качества.
Устранение value-сети: Средняя награда по группе служит в качестве baseline, заменяя необходимость в отдельной value-сети для оценки ценности состояний или действий.
Обучение на основе сравнения: GRPO фокусируется на обучении политики, которая генерирует ответы, превосходящие в среднем другие ответы в группе, что делает его эффективным в задачах, где важна относительная оценка качества.
KL-дивергенция: Жесткая интеграция в loss-функцию через относительные веса: KL-дивергенция вводится в функцию потерь для регуляризации, ограничивая величину изменения политики на каждом шаге обучения и предотвращая её резкие колебания, что способствует стабильности обучения.
Ограничения и замечания:
Эффективность GRPO подхода зависит от качества функции награды . Необходимо корректно определить функцию награды, чтобы она адекватно отражала желаемые свойства ответов.
Размер группы является гиперпараметром, который может влиять на стабильность и эффективность обучения. Выбор оптимального значения
может потребовать экспериментальной настройки.
GRPO, как и другие методы обучения с подкреплением, может быть чувствителен к выбору гиперпараметров оптимизации и архитектуры модели.
В GRPO advantage-функция становится инструментом ранжирования вариантов ответа:
Модель учится генерировать ответы, которые не просто "хороши", но значительно лучше среднего в своей группе.
Это стимулирует:
Поиск неочевидных, но эффективных цепочек рассуждений.
Избегание шаблонных ошибок, типичных для группы.
Эффект: Модель фокусируется на качественных различиях между ответами, а не на абсолютных значениях наград, что критично для сложных задач с неоднозначными критериями успеха.
Контекст проблемы:
В задачах рассуждения LLM часто генерируют множественные "рассуждения-цепочки" (chain-of-thought), но стандартные алгоритмы RL слабо адаптированы для их оценки.
Value-сети в PPO требуют значительных ресурсов для обучения и склонны к ошибкам в многомодальных распределениях наград.
Характеристика | PPO | GRPO |
---|---|---|
Наличие value-сети | Требуется | Исключена |
Оценка преимущества | На основе value-сети | Групповая относительная нормализация внутри траекторий |
KL-дивергенция | Опциональная регуляризация | Жесткая интеграция в loss-функцию через относительные веса |
Использование памяти | Высокое (2 модели) | Снижено на 40-60% за счет удаления value-сети |
Сходимость | Зависит от точности value-сети | Стабильнее благодаря групповой стабилизации градиентов |
Функция потерь в GRPO:
где:
— параметры текущей политики (нейронной сети), которые оптимизируются в процессе обучения.
— текущее состояние (state) среды, в котором находится агент.
— действие (action), выбранное агентом в состоянии
.
— вероятность выбора действия
в состоянии
согласно текущей политике.
— вероятность выбора действия
в состоянии
согласно старой политике, зафиксированной на момент сбора данных.
— преимущество (advantage) действия
в состоянии
, вычисляемое как разница между ожидаемой наградой при выборе
и средней наградой в состоянии
. Формально:
где — оценка общей награды за выбор
в
, а
— средняя ценность состояния
.
— математическое ожидание, взятое по состояниям и действиям из опыта, собранного старой политикой
(off-policy данные).
— KL-дивергенция между распределениями действий текущей и старой политик в состоянии
:
— гиперпараметр, регулирующий силу KL-регуляризации (типичные значения: 0.05–0.2).
Off-policy обучение: Градиенты вычисляются на данных, собранных старой политикой (), но оптимизируется новая политика (
).
Importance weighting корректирует градиенты с учетом различий между политиками, предотвращая смещение оценок.
KL-дивергенция ограничивает скорость изменения политики, обеспечивая устойчивость обучения.
Преимущество направляет обновление в сторону действий с большей ожидаемой наградой. Если
, действие
в состоянии
считается лучше среднего.
Оптимизация:
Градиенты обновляются только для токенов, критически влияющих на награду (например, ключевых шагов в математическом выводе).
Формально, это можно представить как применение маски к градиентам, где
для «критических» токенов и
для остальных. Таким образом, обновляются только параметры, связанные с «критическими» токенами, что повышает эффективность обучения, фокусируясь на наиболее значимых частях рассуждения.
Сэмплирование ответов: Для каждого промпта параллельно генерируются 4–8 вариантов, что улучшает покрытие пространства решений.
Эффективность:
Удаление value-сети сокращает объем памяти на 18.2 GB для модели с 33B параметров (эксперименты DeepSeek-R1).
Время обучения сокращается на 35% при решении задач уровня MATH dataset.
Стабильность:
Групповая нормализация уменьшает дисперсию градиентов (на 60% по сравнению с PPO).
KL-регуляризация предотвращает "распад политики" — типичную проблему PPO.
Результативность:
На бенчмарке MATH GRPO повысил точность модели DeepSeek-Math-7B с 51.2% до 58.7%.
В логических задачах (например, FOLIO) улучшение составило 12.3%.
Шаги внедрения:
Супервизионное дообучение (SFT):
Используются данные формата:
{"prompt": "Решите уравнение ∫₀¹ x² dx", "response": "∫₀¹ x² dx = [x³/3]₀¹ = 1/3"}
Ключевой аспект: очистка данных от ошибок через self-consistency проверку.
Моделирование награды:
Для математических задач (пример):
Разработка эффективной функции награды является ключевым аспектом GRPO. В общем случае, она должна быть спроектирована так, чтобы поощрять желаемые свойства рассуждений — корректность, логическую последовательность, краткость и эффективность решения. Веса коэффициентов (например, 1, 0.5, -0.3 в примере) могут быть настроены эмпирически для достижения оптимального баланса между этими свойствами.
Обучение с GRPO:
Гиперпараметры:
Batch size: 512 промптов (по 4 ответа на промпт → 2048 примеров/шаг).
Learning rate: 1e-6 с линейным затуханием.
Трюк: Заморозка первых 10% слоев модели для сохранения общих знаний.
DeepSeek-Math-33B:
Решение задач Международной математической олимпиады (IMO) с точностью 44.5%.
Особенность: Использование GRPO + деревоискока (MCTS) для генерации шагов.
Логический планировщик AlphaLogic:
Автоматическое доказательство теорем в Coq с успешностью 68% (против 52% у PPO).
GRPO представляет собой значительный шаг вперёд в области обучения с подкреплением для LLM, особенно в задачах, требующих сложного рассуждения. Его применение уже выходит за рамки математики — текущие исследования тестируют GRPO в юридическом анализе и генерации научных гипотез. Несмотря на ограничения, алгоритм демонстрирует потенциал для создания "мыслящих" ИИ-систем, способных к глубокому абстрактному мышлению.
Дополнительно использовался метод "самовознаграждения" (Self-Rewarding), основанный на концепции конституционного ИИ [18]. Этот подход позволил улучшить качество модели в субъективных задачах, где отсутствуют строгие критерии оценки.
Краткий обзор метода "самовознаграждения" (Self-Rewarding)Данный раздел обобщает ключевые положения статьи "Самообучающиеся языковые модели" (Self-Rewarding Language Models). Работа посвящена инновационному подходу к обучению больших языковых моделей (LLM), в рамках которого модель самостоятельно генерирует и оценивает данные для своего обучения. Это позволяет минимизировать зависимость от антропогенных (человеко-ориентированных) данных, преодолевая ограничения традиционных методов выравнивания ИИ.
Основные темы и идеи
Критика классических методов выравнивания
Авторы подвергают анализу недостатки методов Reinforcement Learning from Human Feedback (RLHF) и Direct Preference Optimization (DPO). Подчеркивается, что RLHF зависит от «замороженной» модели вознаграждения, качество которой ограничено объёмом человеческих данных, а DPO — от прямого использования антропогенных предпочтений. Оба подхода, по мнению исследователей, сталкиваются с «бутылочным горлышком» в виде конечности и субъективности человеческих оценок [18]:
> "The standard approach of RLHF learns a reward model from human preferences... A recent alternative is DPO... In both cases, the approach is bottlenecked by the size and quality of the human preference data".
Архитектура самообучающихся моделей
Ключевая инновация — создание агента, объединяющего две функции:
Генерация ответов (instruction following);
Создание и оценка обучающих данных (self-instruction creation). Модель действует как генератор-критик, итеративно улучшая как свои ответы, так и критерии их оценки. Этот процесс авторы называют Self-Rewarding Language Models.
Итеративное обучение через DPO
Обучение реализуется циклически:
Шаг 1: Генерация новых промптов и ответов с последующей оценкой через LLM-as-a-Judge (модель анализирует релевантность, полноту, ясность и другие критерии);
Шаг 2: Формирование пар предпочтений (preference pairs) для обучения через DPO. Каждая итерация (Mt → Mt+1) улучшает как способность модели следовать инструкциям, так и её навыки оценки [18]: > "Our self-alignment method consists of two steps: (i) Self-Instruction creation... (ii) Instruction following training... This whole procedure can then be iterated...".
Экспериментальные результаты
Модель Llama 2 70B после трёх итераций превзошла Claude 2, Gemini Pro и GPT-4 0613 на бенчмарке AlpacaEval 2.0.
Наибольший прогресс зафиксирован в задачах, требующих экспертизы (STEM, гуманитарные науки, ролевые игры).
Способность модели к самовознаграждению (reward modeling) коррелирует с человеческими оценками (r = 0.89).
Важные детали реализации
Инициализация: Базой служит предобученная модель (Llama 2 70B) с добавлением seed-данных из Open Assistant.
Генерация данных: Используется few-shot prompting для создания промптов и вариативных ответов.
Безопасность: Авторы отмечают риски reward hacking и необходимость дальнейшего анализа этических аспектов.
Выводы и перспективы
Предложенный метод демонстрирует потенциал для создания автономных систем, способных к непрерывному самоулучшению. Однако для масштабирования подхода требуются:
Декомпозиция пределов итеративного обучения;
Механизмы предотвращения reward hacking;
Независимые оценки безопасности.
Работа вносит вклад в развитие конституционного ИИ, предлагая альтернативу антропоцентричным подходам к выравниванию LLM.
Потери KL (необходимые для предотвращения генерации моделью кардинально отличающегося и нечитаемого текста) также упрощены, поскольку сравнение выполняется непосредственно между эталонной моделью и политикой, а не между вознаграждением и политикой.
Преимущество в GRPO по сути рассчитывается как z-оценка.
Результаты тестирования DeepSeek-V3 демонстрируют превосходство модели над ее предшественниками и конкурентами. По результатам бенчмарков DeepSeek-V3 обходит такие модели, как Qwen2.5 72B Base и LLaMA-3.1 405B Base, в задачах на обработку английского и китайского языков, программирования, математики и многоязычного анализа.
Примечательно, что DeepSeek-V3 достигла показателей, сопоставимых с GPT-4o-0513 и Claude-Sonnet-3.5-1022, несмотря на значительно меньшие затраты на обучение. В частности, общие вычислительные затраты на обучение DeepSeek-V3 составили 180 тыс. GPU-часов на H800, что существенно ниже затрат на создание модели Sonnet, которые оцениваются в десятки миллионов долларов.
В статье представлен интересный анализ дистилляции из модели рассуждений (R1). Это улучшает качество, но также увеличивает среднюю длину ответа, требуя тщательного баланса в настройках. Они протестировали это на математике и программировании, но планируют расширить дальше.
Они также упоминают использование конституционного ИИ ( https://arxiv.org/abs/2212.08073 ) — подход, который мне очень нравится (в первую очередь из-за его масштабируемости) — для задач, где проверка и алгоритмическая обратная связь затруднены. По сути, модель оценивала сама себя, что они назвали Self-Rewarding . Этот подход улучшил качество, особенно в субъективных оценках. Я понимаю, что они планируют добавить больше конституционных входов.
Я не буду углубляться в бенчмарки, но статья содержит более подробный анализ. В любом случае, это впечатляющая модель.
Таким образом, DeepSeek-V3 представляет собой не только мощную языковую модель, но и инновационную платформу для дальнейших исследований в области искусственного интеллекта. Дальнейшее развитие модели может включать оптимизацию алгоритмов обучения, расширение языкового покрытия и улучшение методик RL для более точного моделирования сложных взаимодействий.
В рамках развития семейства моделей DeepSeek была разработана модель рассуждений DeepSeek-R1, построенная на основе базовой модели DeepSeek-V3-Base. Архитектура DeepSeek-R1 включает в себя DeepSeek-R1-Zero, DeepSeek-R1, а также ансамбль из шести дистиллированных моделей меньшего размера.
Ключевым достижением DeepSeek-R1, в частности версии DeepSeek-R1-Zero (название которой отсылает к Alpha Zero), является демонстрация возможности эффективного обучения рассуждению преимущественно посредством обучения с подкреплением (RL) при относительно ограниченном объеме данных для контролируемой тонкой настройки (SFT). Это указывает на потенциальную возможность снижения зависимости от обширных "человеческих демонстраций" в процессе SFT, хотя отмечается, что инициализация обучения с использованием ограниченного набора высококачественных примеров SFT способствует достижению улучшенных результатов.
Значимым результатом также является создание открытой модели, демонстрирующей развитые способности к обоснованию выводов. Ожидается, что дальнейшее развитие и адаптация подобных моделей сообществом исследователей приведет к существенному прогрессу в области создания ИИ, способного к рассуждению.
В качестве основы для DeepSeek-R1-Zero была использована модель DeepSeek-V3-Base. При обучении применялся алгоритм Group Relative Policy Optimization (GRPO) [17], ранее использованный в DeepSeek-V3 и DeepSeekMath. Использование GRPO позволило избежать необходимости в отдельной модели критика, которая в традиционных подходах сопоставима по размеру с моделью политики.
> Как было описано ранее, GRPO представляет собой метод, устраняющий потребность в явной функции ценности, что снижает вычислительные затраты.
Система вознаграждения в DeepSeek-R1-Zero реализована на основе моделирования правил, что также способствует снижению вычислительных издержек по сравнению с использованием нейросетевых моделей вознаграждения. Данный подход является развитием RM на основе правил, применявшихся на этапе постобучения DeepSeek-V3.
В рамках системы вознаграждения были реализованы два типа наград:
Награды за точность: оценка корректности ответа, применяемая в задачах, где существует объективный критерий правильности, например, в математических задачах или задачах на написание кода.
Награды за формат: обеспечение соответствия структуры "мыслительного процесса" заданному формату, в частности, использование XML-тегов `` для выделения этапов рассуждения.
Разработчики целенаправленно отказались от использования нейросетевых RM из-за их уязвимости к манипуляциям (adversarial attacks), высокой ресурсоемкости и дополнительной сложности, связанной с обучением таких моделей.
Для активации механизма рассуждения использовалась простая CoT-подсказка, предписывающая модели предварительно "подумать" перед генерацией ответа.
DeepSeek-R1-Zero демонстрирует значительный прогресс в процессе обучения, достигая уровней производительности в бенчмарке AIME 2024, сопоставимых с моделью OpenAI o1-0912 и превосходя o1-mini уже после 8000 шагов обучения. Применение стратегии голосования по большинству (например, на основе 64 сгенерированных ответов) существенно повышает качество итоговых результатов.
Подход Zero, основанный исключительно на RL без предварительного SFT, позволяет наблюдать эволюцию характеристик модели непосредственно в процессе обучения. В частности, отмечается устойчивая тенденция к увеличению длины генерируемых ответов, что интерпретируется как спонтанное усвоение моделью зависимости между детализацией рассуждений и качеством решения. В ходе обучения также наблюдается эмерджентное возникновение способностей к рефлексии (переоценке предыдущих шагов) и исследованию альтернативных подходов к решению задач, которые не были явно запрограммированы в архитектуре модели.
Особый интерес представляет зафиксированный феномен "момента озарения" (insight), демонстрирующий способность модели к пересмотру и коррекции собственных ответов, аналогично когнитивным процессам, наблюдаемым у человека.
Несмотря на отмеченные достижения, DeepSeek-R1-Zero не лишена ограничений. Выходные данные модели могут характеризоваться недостаточной читаемостью и лингвистической неоднородностью, включая смешение языков. Для решения этих проблем и улучшения качества "холодного старта" модели было принято решение о проведении предварительной тонкой настройки на высококачественном наборе данных перед началом этапа RL.
В основе разработки DeepSeek-R1 лежит усовершенствованный процесс обучения, структурированный на четырех последовательных этапах, каждый из которых играет ключевую роль в достижении желаемых характеристик модели.
Первый этап, получивший название "Cold Start", был посвящен сбору обширного корпуса данных, включающего тысячи примеров, демонстрирующих длинные цепочки рассуждений (Chain-of-Thought, CoT). Исследовательская группа использовала метод "подсказок с несколькими выстрелами" (few-shot prompting), предоставляя модели подробные примеры CoT, явно стимулируя генерацию развернутых ответов и тщательную верификацию каждого шага рассуждения. Примечательно, что в качестве исходных данных были задействованы результаты, полученные DeepSeek-R1-Zero, прошедшие процедуру ручной постобработки, что обеспечило высокое качество и релевантность примеров. Каждый пример завершался лаконичным резюме, аккумулирующим ключевые моменты цепочки рассуждений.
Второй этап, обозначенный как "Reasoning-oriented Reinforcement Learning" (обучение с подкреплением, ориентированное на рассуждение), был направлен на тонкую настройку модели DeepSeek-V3-Base на основе данных, собранных на этапе "Cold Start". При этом был применен аналогичный процесс обучения с подкреплением (RL), что и в случае с -Zero. Для решения проблемы неоднородности языкового состава в генерируемых текстах, было введено дополнительное вознаграждение за языковую консистентность, определяемое как пропорция целевого языка в рамках CoT. Финальная функция вознаграждения представляла собой интеграцию точности выполнения задачи и языковой согласованности, что позволило обучать модель до достижения конвергенции, обеспечивая как качество рассуждений, так и лингвистическую однородность.
Третий этап, названный "Rejection Sampling and Supervised Fine-Tuning" (отбор отклонением и обучение с учителем), использовал контрольную точку, полученную на предыдущем этапе, для генерации данных, предназначенных для последующего обучения с учителем (SFT). В то время как первоначальные данные "холодного старта" были преимущественно ориентированы на развитие навыков рассуждения, данные, собранные на данном этапе, охватывали более широкий спектр задач, включая письмо, ролевые игры и другие задачи общего назначения, что способствовало расширению функциональных возможностей модели. Данные были классифицированы на две категории: данные, ориентированные на рассуждение (Reasoning), и данные, не связанные с рассуждением (Non-Reasoning).
Для категории Reasoning (600 000 примеров) были сгенерированы новые цепочки рассуждений, отправной точкой для которых послужила контрольная точка с предыдущего этапа. Эти цепочки подверглись тщательной фильтрации, частично с использованием DeepSeek-V3 в качестве оценочной модели. Для каждой подсказки генерировалось несколько вариантов ответа, после чего отбраковывались проблемные результаты, характеризующиеся смешением языков, излишней многословностью (длинные абзацы) или некорректным форматированием (блоки кода).
Категория Non-Reasoning (200 000 примеров) включала примеры, охватывающие широкий спектр задач, таких как письмо, ответы на фактические вопросы (QA), самопознание и перевод. Для формирования этой категории был задействован конвейер DeepSeek-V3, при этом частично использовался его набор данных SFT, а также возможности DeepSeek-V3 для генерации новых примеров.
Завершающим шагом данного этапа стала тонкая настройка DeepSeek-V3-Base (исходной модели, а не контрольной точки с предыдущего этапа) в течение двух эпох на полном наборе данных, включающем 800 000 примеров, что позволило интегрировать и обобщить знания, полученные на предыдущих этапах.
Четвертый этап, озаглавленный "Reinforcement Learning для всех сценариев", представлял собой вторую фазу обучения с подкреплением, направленную на повышение как полезности, так и безвредности модели (аналогично подходам конституционного искусственного интеллекта), одновременно с дальнейшим совершенствованием способностей к рассуждению. Для данных, ориентированных на рассуждение, применялись вознаграждения, основанные на правилах, в то время как для общих данных использовались модели вознаграждения из конвейера DeepSeek-V3. В контексте полезности акцент был сделан исключительно на итоговом резюме, тогда как оценка безвредности учитывала весь вывод модели в целом. Хотя конкретные детали реализации данного этапа представлены в ограниченном объеме, имеющиеся сведения позволяют предположить, что был реализован подход, аналогичный конституционному ИИ (или RLAIF), для оптимизации обоих аспектов – как полезности, так и безвредности, а не только безвредности, как это было предложено в исходной концепции CAI.
Исследовательская группа признала, что, несмотря на высокую эффективность больших моделей MoE, существует значительная потребность в более компактных и плотных моделях. С целью удовлетворения этой потребности, была проведена дистилляция DeepSeek-R1 в различные архитектуры с открытым исходным кодом, включая Qwen и Llama. Процесс дистилляции заключался в тонкой настройке этих моделей на выходах DeepSeek, с использованием вышеупомянутого набора данных из 800 000 образцов.
Результатом данного процесса стало семейство дистиллированных моделей, включающее:
Qwen2.5-Математика-1.5B
Qwen2.5-Математика-7B
Qwen2.5-14B
Qwen2.5-32B
Лама-3.1-8B
Llama-3.3-70B-Инструктировать
Важно отметить, что данные дистиллированные версии прошли только этап обучения с учителем (SFT) без дополнительного обучения с подкреплением (RL). Это открывает перспективы для сообщества по дальнейшему улучшению их производительности посредством тонкой настройки RL и других методов оптимизации.
Для всесторонней оценки производительности DeepSeek-R1 и его дистиллированных версий, исследовательская группа провела серию сравнительных тестов, используя в качестве эталонов такие модели, как DeepSeek-V3, Claude-Sonnet-3.5-1022, GPT-4o-0513, OpenAI-o1-mini и OpenAI-o1-1217.
Результаты оценки способностей к рассуждению продемонстрировали, что R1 по производительности сопоставима с OpenAI-o1-1217, значительно превосходя Sonnet, 4o и mini.
Дистиллированные модели также продемонстрировали впечатляющие результаты. В качестве базовой линии для сравнения была использована открытая модель QwQ-32B-Preview:
DeepSeek-R1-Distill-Qwen-7B превосходит, что примечательно, GPT-4o-0513.
DeepSeek-R1-14B демонстрирует превосходство над QwQ-32B-Preview.
DeepSeek-R1-32B и DeepSeek-R1-70B по производительности опережают o1-mini.
Примечательно, что теперь в распоряжении сообщества имеются открытые модели столь высокого качества, которые могут быть запущены локально. Можно ожидать дальнейшего улучшения их характеристик по мере того, как сообщество будет совершенствовать эти модели с помощью RL и других методов тонкой настройки.
Отдельный эксперимент, проведенный с Qwen-32B-Base, был посвящен сравнению чистого обучения RL (DeepSeek-R1-Zero-Qwen-32B) с дистилляцией. Полученные результаты свидетельствуют о том, что дистилляция из более крупной модели является более эффективным подходом, чем прямое обучение моделей меньшего размера посредством RL.
Иными словами, для создания эффективной модели меньшего размера предпочтительнее использовать метод дистилляции из более мощной модели, нежели пытаться обучить ее напрямую через RL, причем успех в последнем случае не гарантирован. Примечательно, что разработка эффективных небольших моделей посредством прямого обучения по-прежнему представляет собой сложную задачу, в то время как путь через большие модели оказывается более продуктивным.
Еще один важный вывод заключается в том, что масштабирование по-прежнему играет решающую роль: более крупные модели демонстрируют более высокую производительность. Следовательно, потенциал R1 мог бы быть еще более значительным, если бы он был получен в результате дистилляции из модели еще большего размера.
Применение модели вознаграждения за процесс (PRM), в которой вознаграждения начисляются не только за конечный результат, но и за отдельные этапы CoT, оказалось сопряжено со значительными трудностями. На практике, выделение четко определенных этапов в общем процессе рассуждения зачастую представляет собой нетривиальную задачу. Даже в случаях, когда такое выделение возможно, оценка точности отдельных шагов является крайне сложной. Более того, данный подход имеет тенденцию провоцировать "взлом вознаграждения" (reward hacking), что усложняет процесс и влечет за собой значительные накладные расходы. В конечном итоге, полученные преимущества оказались ограниченными и не оправдали затраченных усилий.
Использование поиска по дереву Монте-Карло (MCTS), аналогичного тому, что применяется в AlphaGo, предполагает декомпозицию ответа на более мелкие шаги для исследования пространства решений. Модель получила указание использовать специальные теги для разграничения различных этапов рассуждения. На начальном этапе, исследовательская группа использовала подсказки для поиска ответов посредством MCTS с предварительно обученной моделью оценки. В дальнейшем, на основе полученных пар "вопрос-ответ", проводилось обучение моделей актора и критика, с целью итеративного улучшения процесса.
Однако, масштабирование данного подхода столкнулось с серьезными препятствиями. Пространство решений в задачах обработки естественного языка не обладает такой четкой структурой, как в играх. Генерация токенов экспоненциально усложняется с увеличением глубины поиска, что вынудило исследователей ограничить максимальную глубину, приводя к поиску локальных оптимумов. Кроме того, обучение эффективной модели оценки является непростой задачей, и качество этой модели напрямую влияет на процесс генерации. В конечном счете, достичь итеративного улучшения не удалось, что остается нерешенной проблемой.
Авторы исследования обозначили ряд направлений для дальнейшего совершенствования модели, и R2, безусловно, является ожидаемым этапом в этом процессе.
В число планируемых улучшений входят:
Оптимизация механизма вызова функций, расширение возможностей многооборотного диалога, усовершенствование сложных ролевых игр и генерации JSON.
Устранение проблемы смешения языков: поскольку модель оптимизирована для английского и китайского языков, она демонстрирует склонность к переключению на эти языки при обработке запросов на других языках. Хотя это может не являться критической проблемой, подобное поведение может дезориентировать пользователей.
Снижение чувствительности модели к формулировке подсказок: наблюдается тенденция к ухудшению производительности при использовании "малого количества выстрелов" (few-shot), в связи с чем рекомендуется использовать подход "нулевого количества выстрелов" (zero-shot prompting). Данная рекомендация согласуется с руководствами для o1.
Дальнейшая оптимизация модели для задач Software Engineering, что открывает перспективы для создания локального open-source copilot, способного существенно повысить эффективность разработки программного обеспечения.
🔥Не пропустите важные обновления и углубленные материалы!🔥
Хотите быть в курсе самых свежих обзоров и исследований в мире ML и AI? Переходите по ссылкам ниже, чтобы получить доступ к эксклюзивному контенту:
📌 Все обзоры также доступны в нашем Telegram канале TheWeeklyBrief📢
📌 Более подробный обзор с математической формализацией и программным кодом ждет вас в нашем репозитории Weekly-arXiv-ML-AI-Research-Review 👩💻📂✨
Не упустите шанс глубже погрузиться в мир технологий! 🚀
Wei, J., Zhou, D., Wei, Q., Zou, C., Bastings, J., Cheng, C. Y., ... & Le, Q. V. (2022).
Chain-of-thought prompting elicits reasoning in large language models.
arXiv preprint arXiv:2201.11903.
📄 Статья
Wang, X., Wei, J., Schuurmans, D., Le, Q. V., & Chi, E. H. (2022).
Self-consistency improves chain of thought reasoning in language models.
arXiv preprint arXiv:2203.11171.
📄 Статья
Yao, S., Yu, D., Zhao, J., Cui, Y., Rao, I., Zhao, J., ... & Zhang, C. (2023).
Large language model guided tree-of-thought.
arXiv preprint arXiv:2305.08291.
📄 Статья
Long, L. (2023).
Tree of thoughts: Deliberate problem solving with large language models.
arXiv preprint arXiv:2305.10601.
📄 Статья
Schlag, I., Sukhbaatar, S., Celikyilmaz, A., Yih, W.-t., Weston, J., Schmidhuber, J., & Li, X. (2023).
Large Language Model Programs.
arXiv preprint arXiv:2305.05364.
📄 Статья
DeepSeek-AI, Aixin Liu, Bei Feng, Bing Xue, Bingxuan Wang, ..., & Zizheng Pan. (2024).
DeepSeek-V3 Technical Report.
arXiv preprint arXiv:2412.19437.
📄 Статья
DeepSeek-AI, Aixin Liu, Bei Feng, Bin Wang, Bingxuan Wang, Bo Liu, Chenggang Zhao, ..., & Ziwei Xie. (2024).
DeepSeek Team et al., 2024b.
arXiv preprint arXiv:2405.04434.
📄 Статья
Anonymous. (2019).
Fast Transformer Decoding: One Write-Head is All You Need.
arXiv preprint arXiv:1911.02150.
📄 Статья
Anonymous. (2023).
GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints.
arXiv preprint arXiv:2305.13245.
📄 Статья
Dai, D., Deng, C., Zhao, C., Xu, R. X., Gao, H., Chen, D., ... & Liang, W. (2024).
arXiv preprint arXiv:2401.06066.
📄 Статья
Fishman, M., Chmiel, B., Banner, R., & Soudry, D. (2025).
Scaling FP8 training to trillion-token LLMs.
arXiv preprint arXiv:2409.12517.
📄 Статья
Peng, H., Wu, K., Wei, Y., Zhao, G., Yang, Y., Liu, Z., ... & Hu, H. (2023).
FP8-LM: Training FP8 Large Language Models.
arXiv preprint arXiv:2310.18313.
📄 Статья
DeepSeek-AI, Aixin Liu, Bei Feng, Bin Wang, Bingxuan Wang, Bo Liu, Chenggang Zhao, ..., & Ziwei Xie. (2024).
DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model.
arXiv preprint arXiv:2405.04434.
📄 Статья
DeepSeek-AI, Zhu, Q., Guo, D., Shao, Z., Yang, D., Wang, P., ..., & Liang, W. (2024).
DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence.
arXiv preprint arXiv:2406.11931.
📄 Статья
Bavarian, M., Jun, H., Tezak, N., Schulman, J., McLeavey, C., Tworek, J., & Chen, M. (2022).
Efficient Training of Language Models to Fill in the Middle.
arXiv preprint arXiv:2207.14255.
📄 Статья
Peng, B., Quesnelle, J., Fan, H., & Shippole, E. (2023).
YaRN: Efficient Context Window Extension of Large Language Models.
arXiv preprint arXiv:2309.00071.
📄 Статья
Shao, Z., Wang, P., Zhu, Q., Xu, R., Song, J., Bi, X., ... & Guo, D. (2024).
DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models.
arXiv preprint arXiv:2402.03300.
📄 Статья
Bai, Y., Kadavath, S., Kundu, S., Askell, A., Kernion, J., Jones, A., Chen, A., ..., & Kaplan, J. (2022).
Constitutional AI: Harmlessness from AI Feedback.
arXiv preprint arXiv:2212.08073.
📄 Статья