Не секрет, что большие языковые модели (LLM) эволюционируют с безумной скоростью и привлекают внимание всей отрасли генеративного ИИ. Корпорации не просто заинтригованы, они одержимы LLM, и в частности, потенциалом fine-tuning LLM. В исследования и разработку LLM сейчас вкладываются миллиарды долларов. Лидеры отрасли и энтузиасты технологий всё сильнее стремятся углубить своё понимание LLM и их fine-tuning. Эта сфера natural language processing (NLP) постоянно расширяется, поэтому критически важно иметь актуальную информацию. Польза, которую LLM могут принести вашему бизнесу, зависит от ваших знаний и понимания этой технологии.
Цикл жизни большой языковой модели состоит из множества важных этапов, и сегодня мы рассмотрим один из самых любопытных и активно развивающихся частей этого цикла — процесс fine-tuning моделей LLM. Это трудозатратная, тяжёлая, но перспективная задача, используемая во многих процессах обучения языковых моделей.
Жизненный цикл LLM
Прежде чем перейти к fine-tuning моделей LLM, важно понять жизненный цикл LLM и его устройство.
1.
Концепция модели: сначала нужно определиться с концепцией проекта. Определите, будет ли ваша LLM универсальным инструментом или нацеленным на конкретную задачу, например, на распознавание именованных сущностей. Чётко установите цели, чтобы сэкономить время и ресурсы.
2.
Выбор модели: решите, нужно ли обучать модель с нуля или модифицировать готовую. Во многих случаях эффективно будет адаптировать уже имеющуюся модель, но в некоторых ситуациях требуется fine-tuning с новой моделью.
3.
Точность и выравнивание модели: после подготовки модели нужно оценить её точность. Если она неудовлетворительна, то можно попробовать инжиниринг промтов или дальнейший fine-tuning. Мы рассмотрим второй вариант. Убедитесь, что выходные данные модели совпадают с мнением живых людей.
4.
Оценка и итерации: регулярно выполняйте оценку модели при помощи метрик и бенчмарков. Итеративно работайте с инжинирингом промтов, fine-tuning и оценкой, пока не достигнете желаемых результатов.
5.
Развёртывание: после достижения нужной точности модели нужно её развернуть. На этом этапе выполняйте оптимизации, нацеленные на вычислительную эффективность и UX.
Что такое fine-tuning LLM?
Fine-tuning LLM — это процесс дальнейшего обучения предварительно обученной модели на более мелких специализированных датасетах с целью совершенствования их возможностей и повышения точности в конкретной задаче или предметной области. Fine-tuning — это настройка и превращение моделей общего назначения в специализированные модели. Он ликвидирует пробел между предварительно обученными моделями и уникальными требованиями узких областей применения, обеспечивая близкое соответствие модели ожиданиям людей. Вспомним, например, современную большую языковую модель GPT-3 компании OpenAI, предназначенную для широкого спектра задач обработки естественного языка (natural language processing, NLP). Представим, что медицинская организация хочет, чтобы GPT-3 помогала врачам в генерации отчётов из текстовых заметок. Хотя GPT-3 может понимать и создавать общий текст, он может быть не оптимизирован под запутанную медицинскую терминологию и специфический врачебный жаргон.
Чтобы повысить точность выполнения этой специализированной задачи, организация выполняет fine-tuning модели GPT-3 на основе датасета из медицинских отчётов и записей о пациентах. В течение этого процесса модель ближе знакомится с медицинской терминологией, нюансами врачебного языка и типичной структурой отчётов. После fine-tuning GPT-3 будет готова помогать врачам в генерации точных и связных отчётов по пациентам, демонстрируя свою адаптируемость под конкретные задачи.
Кажется, что подобные возможности пригодились бы в любой большой языковой модели, но стоит помнить, что за всё приходится платить. Подробнее мы поговорим об этом чуть ниже.
Когда использовать fine-tuning
В нашей статье о больших языковых моделях мы должны вскользь коснуться таких тем, как контекстное обучение и zero/one/few shot inference. Вот их краткое изложение:
Контекстное обучение (In-context learning) — это методика совершенствования промта при помощи примеров конкретных задач в рамках промта, используемых моделью LLM в качестве «чертежа» того, что ей нужно достичь.
Zero-shot inference внедряет ваши входные данные в промт без дополнительных примеров. Если zero-shot inference не приводит к желаемым результатам, то можно использовать
one-shot или
few-shot inference. Эти методики заключаются в добавлении в промт одного или нескольких готовых примеров, позволяющих LLM средних размеров повысить свою точность.
Эти техники используются непосредственно в пользовательском промте; они нацелены на оптимизацию результатов работы модели и их подстройку под предпочтения пользователя. Проблема в том, что они не всегда срабатывают, и особенно в случае LLM средних размеров. Выше приведён пример того, как может потерпеть неудачу контекстное обучение.
Кроме того, любые включаемые в промт примеры занимают ценное место в контекстном окне, уменьшая доступное место для полезной информации. И здесь на помощь приходит fine-tuning. В отличие от этапа предварительного обучения, где применяются огромные объёмы неструктурированных текстовых данных, fine-tuning — это процесс обучения с учителем (supervised learning). Это значит, что для обновления весов LLM мы используем датасет из размеченных примеров. Эти размеченные примеры обычно представляют собой пары «промт-ответ», благодаря чему повышается качество выполнения конкретных задач.
Supervised fine-tuning (SFT)
Supervised fine-tuning — это подстройка под конкретную задачу предварительно обученной языковой модели при помощи размеченных данных. Используемые при этом данные заранее проверяются. В этом заключается отличие от методик без учителя (unsupervised), при которых данные не проверяются. Обычно первоначальное обучение языковой модели выполняется без учителя, но fine-tuning происходит с учителем.
Как происходит fine-tuning?
Давайте подробнее рассмотрим fine-tuning моделей LLM. Для подготовки данных обучения существует множество опенсорсных датасетов, позволяющих получать информацию о поведении и предпочтениях пользователей, даже если эта информация не отформатирована напрямую в данные инструкций. Например, можно взять большой датасет отзывов на товары с Amazon и превратить их в датасеты промтов инструкций для fine-tuning. Библиотеки шаблонов промтов содержат множество шаблонов под различные задачи и датасеты.
После завершения подготовки данных инструкций, как и в стандартном обучении с учителем, мы разделяем датасет на части для обучения, валидации и тестирования. При fine-tuning мы выбираем промты из датасета обучения и передаём их LLM, которая генерирует дополнения.
На этапе fine-tuning, когда модели передают новый размеченный датасет под конкретную целевую задачу, она вычисляет погрешность или разность между своими прогнозами и реальной разметкой. Далее модель использует эту погрешность для выравнивания весов, обычно это выполняется при помощи алгоритма оптимизации наподобие градиентного спуска. Величина и направление выравнивания весов зависит от градиентов, определяющих, насколько каждый вес влияет на погрешность. Веса, сильнее влияющие на погрешность, выравниваются больше, а влияющие слабее — меньше.
В течение множества итераций (эпох) датасета модель продолжает выравнивать свои веса, стремясь перейти в конфигурацию, минимизирующую погрешность для конкретной задачи. Цель при этом заключается в адаптации ранее полученных общих знаний к нюансам и специфичным паттернам нового датасета, что делает модель более специализированной и эффективной в выполнении целевой задачи.
В течение этого процесса модель обновляется на основании размеченных данных. Она меняется в зависимости от разности между её предположениями и настоящими ответами. Это помогает модели изучать подробности размеченных данных. Благодаря этому модель совершенствуется в выполнении задачи, под которую происходит её fine-tuning.
Давайте рассмотрим пример. Если спросить, у предварительно обученной модели «Почему небо голубое?», то она может ответить «Потому что так атмосфера рассеивает солнечный свет». Это простой и прямой ответ, однако он может быть слишком кратким для чат-бота на образовательной платформе изучения естественных наук. В зависимости от ваших требований ему может потребоваться больше научных подробностей или контекста. И в этом поможет supervised fine-tuning.
После fine-tuning модель может давать более глубокие ответы на научные вопросы. Если задать ей после fine-tuning вопрос «Почему небо голубое?», то модель может дать более подробное объяснение, например: «Небо выглядит голубым из-за явления, называемого рэлеевским рассеянием. Когда солнечный свет попадает в атмосферу Земли, он состоит из различных цветов, каждый из которых имеет свою длину волны. Голубой цвет имеет короткие длины волн и рассеивается газами и частицами атмосферы по всех направлениях. Из-за этого рассеяния прямой солнечный свет выглядит белым, но само небо приобретает голубой оттенок». Такой расширенный ответ исчерпывающ, он подходит для естественно-научной обучающей платформы.
Методики fine-tuning моделей LLM
Fine-tuning моделей LLM — это процесс обучения с учителем, при котором датасет размеченных примеров используется для обновления весов LLM и повышения способностей модели к решению конкретных задач. Давайте рассмотрим самые значимые методики fine-tuning.
Instruction fine-tuning
Одна из стратегий, применяемых для повышения точности модели при выполнении различных задач — это instruction fine-tuning. Она заключается в обучении модели машинного обучения на примерах, демонстрирующих, как модель должна отвечать за запрос. Датасет, используемый для fine-tuning больших языковых моделей, должен отвечать целям инструкции. Например, если вы выполняете fine-tuning модели для повышения её навыков резюмирования, то вам необходимо создать датасет примеров, начинающихся с инструкции, приказывающей модели создать краткое резюме, за которой идёт текст или фраза. В случае перевода нужно добавить инструкции наподобие «переведи этот текст». Такие пары дополнения промтов позволяют модели «думать» в рамках новой ниши и выполнять конкретную задачу.
Full fine-tuning
Instruction fine-tuning, при котором обновляются все веса модели, называют full fine-tuning («полным fine-tuning»). В результате выполнения этого процесса создаётся новая модель с обновлёнными весами. Важно отметить, что, как и в случае предварительного обучения, для full fine-tuning требуется объём памяти и бюджет вычислительных ресурсов, достаточный для хранения и обработки всех градиентов, оптимизаторов и других компонентов, обновляемых при обучении.
Parameter-efficient fine-tuning
Обучение языковой модели — задача, требующая большого объёма вычислительных ресурсов. Для полного fine-tuning LLM необходима память не только под хранение модели, но и под параметры, необходимые в процессе обучения. Возможно, ваш компьютер справится с обработкой весов модели, но выделение памяти под оптимизацию состояний, градиенты и прямую активацию — это сложная задача. Простое оборудование не сможет справиться с таким бременем, поэтому здесь критически важно использовать PEFT. В процессе обучения с учителем full fine-tuning обновляет все веса модели, а
методики PEFT обновляют только небольшое подмножество параметров. Такая методика трансферного обучения выбирает конкретные компоненты модели и «замораживает» остальные параметры. Логично, что в результате получается гораздо меньше параметров, чем в исходной модели (в некоторых случаях всего 15-20% от исходных весов; LoRA может снизить количество обучаемых параметров в десять тысяч раз). Благодаря этому требования к памяти становятся гораздо более щадящими. Кроме того, PEFT позволяет решать проблему катастрофического забывания (catastrophic forgetting). Так как мы не трогаем исходную LLM, модель не забывает ранее изученную информацию. Full fine-tuning приводит к получению новой версии модели для каждой задачу, под которую выполняется обучение. Каждая из них имеет тот же размер, что и исходная модель, поэтому при выполнении fine-tuning под множество разных задач может возникнуть проблема хранения больших объёмов данных.
Другие типы fine-tuning
Давайте рассмотрим и некоторые другие типы обучения:
Трансферное обучение: это процесс обучения модели, обученной на общих огромных датасетах, на отдельных, специфичных для задачи данных. В такой датасет могут быть включены размеченные примеры, связанные с нужной предметной областью. Трансферное обучение применяется, когда недостаточно данных или времени для сбора данных; его основное преимущество заключается в том, что оно обеспечивает увеличение скорости обучения и accuracy. Можно взять готовые LLM, предварительно обученные на огромных объёмах данных, наподобие GPT 3/4 и BERT, и подстроить их под собственный сценарий использования.
Task-specific fine-tuning (fine-tuning под конкретную задачу): методика, при которой выполняется fine-tuning предварительно обученной модели под конкретную задачу или предметную область на основе датасета, спроектированного для этой предметной области. При такой методике требуется больше данных и времени, чем при трансферном обучении, но она обеспечивает повышенную точность выполнения конкретной задачи.
Например, в случае перевода используется датасет примеров. Любопытно, что хороших результатов можно достичь при относительно небольшом количестве примеров. Часто для обеспечения хорошей точности достаточно всего лишь нескольких сотен или тысяч примеров (для сравнения: на этапе предварительного обучения модель изучает миллиарды текстовых фрагментов). Однако у fine-tuning под отдельную задачу есть потенциальный недостаток. Этот процесс может привести к явлению, называемому
катастрофическим забыванием (catastrophic forgetting).
Катастрофическое забывание происходит из-за того, что процесс full fine-tuning модифицирует веса исходной LLM. Хотя это приводит к отличной точности в выполнении отдельной задачи, может снижаться точность в других задачах. Например, хотя fine-tuning способен повысить умения модели в выполнении определённых задач natural language processing (NLP) наподобие анализа тональности текста и приводить к качественному дополнению, модель может забыть, как выполнять другие задачи, например распознавание именованных сущностей.
Multi-task learning: расширение fine-tuning под конкретную задачу; обучающий датасет состоит из примеров входных и выходных данных разных задач. Датасет содержит примеры, содержащие инструкции выполнения множества задач, в том числе резюмирования, оценки отзывов, перевода кода и распознавания сущностей. Мы обучаем модель на этом смешанном датасете, чтобы она могла одновременно повысить точность выполнения всех задач, таким образом избегая проблемы катастрофического забывания. В течение множества эпох обучения для обновления весов модели используется вычисленная функция потерь для примеров, что приводит к созданию дообученной модели, знающей, как хорошо справляться одновременно со многими задачами. Недостаток таких моделей заключается в необходимости большого объёма данных. Может потребоваться собрать в обучающий датасет 50-100 тысяч примеров. Однако сбор этих данных будет стоить усилий. Получающиеся модели часто очень функциональны и пригодны к использованию в сценариях, требующих хорошей точности во множестве задач.
Sequential fine-tuning (последовательный fine-tuning): последовательная адаптация предварительно обученной модели к множеству связанных друг с другом задач. После первоначального трансферного обучения под общую предметную область LLM можно подвергнуть fine-tuning под более узкое подмножество задач. Например, можно выполнить fine-tuning с общего языка на медицинскую терминологию, а с медицинской терминологии — на детскую кардиологию.
Стоит отметить, что существуют и другие примеры fine-tuning больших языковых моделей — adaptive, behavioral, instruction, reinforced fine-tuning. Они применяются в важных нишевых случаях обучения языковых моделей.
Retrieval augmented generation (RAG)
Retrieval augmented generation (RAG) — это широко известная альтернатива fine-tuning, сочетающая в себе генерацию естественного языка и извлечение информации. RAG гарантирует, что языковые модели будут основаны на внешних актуальных источниках знаний/релевантных документах. Эта методика ликвидирует разрыв между обширными знаниями моделей общего назначения и необходимостью в точной и актуальной информации с подробным контекстом. Таким образом, RAG — это методика, незаменимая в ситуациях, когда факты могут со временем эволюционировать. В последнем изобретении компании xAI под названием Grok методики RAG используются для обеспечения свежести и актуальности информации.
RAG имеет перед fine-tuning одно преимущество — управление информацией. При традиционном fine-tuning данные встраиваются в архитектуру модели, по сути, «запечатывая» в ней знание, что не позволяет с лёгкостью их модифицировать. RAG же выполняет непрерывные обновления данных обучения и обеспечивает возможность удаления/пересмотра данных, гарантируя актуальность и верность модели.
В контексте языковых моделей RAG и fine-tuning часто считают конкурирующими методиками. Однако их совместное применение может привести к существенному повышению точности. В частности, fine-tuning можно применять к системам RAG для выявления и совершенствования их наиболее слабых компонентов, что позволяет им преуспевать в выполнении узких задач LLM.
Рекомендации по выполнению fine-tuning
Чётко определите свою задачу:
Формулировка задачи — фундаментальный этап процесса fine-tuning. Чётко сформулированная задача обеспечивает концентрацию и задаёт направление. Она гарантирует, что широкие способности модели будут направлены в русло конкретной задачи, задавая чёткие бенчмарки для измерения точности.
Выберите и используйте подходящую предварительно обученную модель:
Крайне важно использовать для fine-tuning LLM предварительно обученные модели, поскольку это позволяет задействовать знания, полученные из больших объёмов данных, благодаря чему модели не придётся учиться с нуля. Такой подход и эффективен с точки зрения вычислительных ресурсов, и экономит время. Кроме того, при предварительном обучении модель получает общее понимание языка, позволяя методике fine-tuning сосредоточиться на нюансах конкретной предметной области, что часто приводит к повышению точности модели при выполнении специализированных задач.
Использование предварительно обученных моделей предоставляет надёжный фундамент, однако крайне важно правильно подобрать архитектуру модели, в том числе и такие продвинутые стратегии, как Mixture of Experts (MoE) и Mixture of Tokens (MoT). Эти стратегии могут существенно повлиять на успешность выполнения моделью специализированных задач и обработки языковых данных.
Задайте гиперпараметры:
Гиперпараметры — это настраиваемые переменные, играющие ключевую роль в процессе обучения модели. Скорость обучения, размер батчей, количество эпох, уменьшение весов и так далее — это ключевые гиперпараметры, настройка которых позволяет найти оптимальную для вашей задачи конфигурацию.
Оцените точность модели:
После завершения fine-tuning точность модели оценивается на тестовом датасете. Это позволяет без перекосов определить, насколько высокой будет точность модели при работе с неизвестными ей данными. Также стоит задуматься об итеративном совершенствовании модели, если у неё всё ещё есть потенциал для улучшения.
Почему или когда вашему бизнесу требуется fine-tuning модели?
Мы знаем, что у ChatGPT и у других языковых моделей есть ответы на широкий спектр вопросов. Но проблема в том, что людям и компаниям хочется иметь собственный интерфейс LLM для их приватных и личных данных. Индивидуальные LLM для компаний стали очень популярной темой в технологической сфере.
Fine-tuning LLM может потребоваться по множеству причин, вот некоторые из них:
1.
Специфика и релевантность: хотя LLM обучаются на огромных объёмах данных, они могут быть незнакомы со специфической терминологией, нюансами или контекстами, важными для конкретного бизнеса или отрасли. Fine-tuning обеспечивает понимание и генерацию моделью контента с высокой степенью релевантности для бизнеса.
2.
Повышение точности: в случае критических для бизнеса функций права на ошибку практически нет. Fine-tuning на специфичных для бизнеса данных может помочь в повышении точности, обеспечивая близкое соответствие результатов модели и ожиданий заказчика.
3.
Настраиваемые взаимодействия: если вы используете LLM для взаимодействия с клиентами, например, в чат-ботах, то fine-tuning помогает подстроить ответы под стиль, тональность и цели бренда.
4.
Конфиденциальность и защита данных: обобщённые LLM могут генерировать результаты на основании публично доступных данных. Fine-tuning позволяет бизнеса контролировать данные, которые видит модель, гарантируя, что сгенерированный контент не приведёт к утечкам уязвимой информации.
5.
Реализация редких и уникальных сценариев: каждый бизнес сталкивается с редкими, но очень важными сценариями, специфичными для его предметной области. Обобщённые LLM могут не справляться с такими сценариями оптимальным образом. Fine-tuning гарантирует эффективную работу с подобными пограничными случаями.
LLM предлагают широкие возможности, а fine-tuning подстраивает эти возможности под уникальные требования бизнеса, обеспечивая оптимальную точность и результаты.
Выполнять ли fine-tuning?
Иногда fine-tuning оказывается не лучшим вариантом. Ниже представлена картинка с #OpenAIDevDay — результат fine-tuning на основе 140 тысяч внутренних сообщений Slack.
Пользователь: «Напиши пост в блог из 500 слов по теме промт-инжиниринга»
Ассистент: «Хорошо, я поработаю над этим утром»
Пользователь: «Напиши сейчас»
Помощник: «ok»
Основные выводы
Fine-tuning LLM стал незаменимым инструментом совершенствования операционных процессов организаций при помощи LLM. Фундаментальное обучение LLM даёт моделям широкое понимание языка, а процесс fine-tuning преобразует эти модели в специализированные инструменты, способные понимать нишевые темы и обеспечивать более точные результаты. Обучая LLM под конкретные задачи, отрасли или датасеты, мы расширяем границы возможного для моделей и гарантируем их релевантность и ценность в постоянно меняющемся цифровом мире. Нет сомнений, что в будущем непрерывные исследования и инновации в сфере LLM наряду с подходящими инструментами для методологий fine-tuning проложат путь более умным, эффективным и знакомым с контекстом системам ИИ.