Модели и платформы ИИ
Полное руководство по тонкой настройке больших языковых моделей

By
Aayush Mittal Mittal
Большие языковые модели (LLM) seperti GPT-4, LaMDA, PaLM и другие захватили мир своей замечательной способностью понимать и генерировать текст, похожий на человеческий, на широком спектре тем. Эти модели предварительно обучены на огромных наборах данных, состоящих из миллиардов слов из интернета, книг и других источников.
Эта фаза предварительного обучения наделяет модели обширными знаниями о языке, темах, способностях рассуждения и даже определенных предубеждениях, присутствующих в обучающих данных. Однако, несмотря на их невероятную широту, эти предварительно обученные LLM не обладают специализированной экспертизой для конкретных областей или задач.
Именно здесь тонкая настройка приходит на помощь – процесс адаптации предварительно обученной LLM для того, чтобы она могла выполнять конкретное приложение или задачу. Обучая модель на меньшем, задаче-специфичном наборе данных, мы можем настроить ее возможности, чтобы они соответствовали нюансам и требованиям этой области.
Тонкая настройка аналогична передаче широких знаний высокообразованного человека для создания специалиста в определенной области. В этом руководстве мы исследуем, что такое тонкая настройка, почему она необходима и как ее выполнять.
Что такое тонкая настройка?
В своей основе тонкая настройка включает в себя взятие большой предварительно обученной модели и обновление ее параметров с помощью второй фазы обучения на наборе данных, адаптированном к вашей целевой задаче или области. Это позволяет модели учиться и внутренне осваивать нюансы, закономерности и цели, специфичные для этой более узкой области.
Хотя предварительное обучение захватывает широкое понимание языка из огромного и разнообразного текстового корпуса, тонкая настройка специализирует это общее умение. Это похоже на то, чтобы взять человека эпохи Возрождения и сформировать из него специалиста в определенной области.
Веса предварительно обученной модели, которые кодируют ее общие знания, используются в качестве начальной точки или инициализации для процесса тонкой настройки. Затем модель обучается дальше, но на этот раз на примерах,直接 связанных с конечным приложением.
Подвергая модель этому специализированному распределению данных и настраивая параметры модели соответственно, мы делаем LLM более точной и эффективной для целевой задачи, сохраняя при этом широкие предварительно обученные возможности в качестве основы.
Почему тонко настраивать LLM?
Существует несколько ключевых причин, почему вы можете захотеть тонко настроить большую языковую модель:
- Настройка области: Каждая область, от юридической до медицинской и программной инженерии, имеет свои нюансы языковых конвенций, жаргона и контекстов. Тонкая настройка позволяет адаптировать общую модель для понимания и генерации текста, адаптированного к конкретной области.
- Специализация задач: LLM можно тонко настроить для различных задач обработки естественного языка, таких как суммаризация текста, машинный перевод, ответы на вопросы и т. д. Эта специализация повышает производительность на целевой задаче.
- Соблюдение требований к данным: Высоко регулируемые отрасли, такие как здравоохранение и финансы, имеют строгие требования к конфиденциальности данных. Тонкая настройка позволяет обучать LLM на проприетарных организационных данных, защищая при этом конфиденциальную информацию.
- Ограниченные помеченные данные: Получение больших помеченных наборов данных для обучения моделей с нуля может быть сложной задачей. Тонкая настройка позволяет достигать сильной производительности на задаче с ограниченными обучающими примерами, используя возможности предварительно обученной модели.
- Обновление модели: По мере появления новых данных во времени в области можно тонко настроить модели дальше, чтобы включить последние знания и возможности.
- Смягчение предубеждений: LLM могут унаследовать социальные предубеждения от широких предварительно обученных данных. Тонкая настройка на отобранных наборах данных может помочь снизить и исправить эти нежелательные предубеждения.
По сути, тонкая настройка мостит разрыв между общей, широкой моделью и сосредоточенными требованиями специализированного приложения. Она повышает точность, безопасность и актуальность выходных данных модели для целевых случаев использования.
Предоставленная диаграмма описывает процесс реализации и использования больших языковых моделей (LLM), в частности, для корпоративных приложений. Первоначально предварительно обученная модель, такая как T5, подается структурированными и неструктурированными компаний данными, которые могут поступать в различных форматах, таких как CSV или JSON. Эти данные проходят обучение с учителем, без учителя или передачу обучения, улучшая актуальность модели для конкретных потребностей компании.
Как только модель тонко настроена с компаний данными, ее веса обновляются соответственно. Обученная модель затем проходит через дополнительные циклы обучения, непрерывно улучшая свои ответы с течением времени с новыми компаний данными. Процесс является итеративным и динамичным, с моделью, обучающейся и переобучаемой для адаптации к меняющимся закономерностям данных.
Выходные данные обученной модели – токены и вложения, представляющие слова, – затем развертываются для различных корпоративных приложений. Эти приложения могут варьироваться от чат-ботов до здравоохранения, каждое из которых требует от модели понимания и ответа на отраслевые запросы. В финансах приложения включают обнаружение мошенничества и анализ угроз; в здравоохранении модели могут помочь с пациентскими запросами и диагностикой.
Способность обученной модели обрабатывать и отвечать на новые компаний данные с течением времени обеспечивает ее полезность и рост. В результате корпоративные пользователи могут взаимодействовать с моделью через приложения, задавая вопросы и получая информированные ответы, отражающие обучение и тонкую настройку модели на отраслевые данные.
Эта инфраструктура поддерживает широкий спектр корпоративных приложений, демонстрируя универсальность и адаптируемость LLM при правильной реализации и поддержке в бизнес-контексте.
Подходы к тонкой настройке
Существует два основных подхода, когда речь идет о тонкой настройке больших языковых моделей:
1) Полная тонкая настройка
В подходе полной тонкой настройки все параметры (веса и смещения) предварительно обученной модели обновляются во время второй фазы обучения. Модель подвергается воздействию задаче-специфичного помеченного набора данных, и стандартный процесс обучения оптимизирует всю модель для этого распределения данных.
Это позволяет модели сделать более комплексные корректировки и адаптироваться целостно к целевой задаче или области. Однако полная тонкая настройка имеет некоторые недостатки:
- Требуется значительные вычислительные ресурсы и время для обучения, подобно фазе предварительного обучения.
- Требования к хранилищу высоки, поскольку необходимо поддерживать отдельную тонко настроенную копию модели для каждой задачи.
- Существует риск “катастрофического забывания”, когда тонкая настройка вызывает у модели потерю некоторых общих способностей, полученных во время предварительного обучения.
Несмотря на эти ограничения, полная тонкая настройка остается мощным и широко используемым методом, когда ресурсы разрешают и целевая задача существенно отличается от общего языка.
2) Эффективные методы тонкой настройки
Чтобы преодолеть вычислительные проблемы полной тонкой настройки, исследователи разработали эффективные стратегии, которые обновляют только небольшой подмножество параметров модели во время тонкой настройки. Эти параметрически эффективные методы находят баланс между специализацией и снижением требований к ресурсам.
Некоторые популярные эффективные методы тонкой настройки включают:
Префикс-тонкая настройка: Здесь вводятся и обучаются небольшое количество задаче-специфичных векторов или “префиксов”, которые обусловливают предварительно обученную модель внимания для целевой задачи. Только эти префиксы обновляются во время тонкой настройки.
LoRA (Низкоранговая адаптация): LoRA вводит обучаемые низкоранговые матрицы в каждый слой предварительно обученной модели во время тонкой настройки. Эти небольшие ранговые корректировки помогают специализировать модель с гораздо меньшим количеством обучаемых параметров, чем полная тонкая настройка.
Да, я могу предоставить подробное объяснение LoRA (Низкоранговая адаптация) вместе с математической формулировкой и примерами кода. LoRA – популярный параметрически эффективный метод тонкой настройки (PEFT), который получил значительное внимание в области адаптации больших языковых моделей (LLM).
Что такое LoRA?
LoRA – метод тонкой настройки, который вводит небольшое количество обучаемых параметров в предварительно обученную LLM, позволяя эффективно адаптироваться к задачам вниз по потоку, сохраняя при этом большинство исходных знаний модели. Вместо тонкой настройки всех параметров LLM LoRA вводит задаче-специфичные низкоранговые матрицы в слои модели, обеспечивая значительную вычислительную и памятную экономию во время процесса тонкой настройки.
Математическая формулировка
LoRA (Низкоранговая адаптация) – метод тонкой настройки для больших языковых моделей (LLM), который вводит низкоранговое обновление в матрицы весов. Для матрицы весов 0∈W0∈Rd×k, LoRA добавляет низкоранговую матрицу BA, с A∈Rr×k и B∈Rd×r, где r – ранг. Этот подход значительно снижает количество обучаемых параметров, обеспечивая эффективную адаптацию к задачам вниз по потоку с минимальными вычислительными ресурсами. Обновленная матрица весов задается выражением W=W0+B⋅A.
Это низкоранговое обновление можно интерпретировать как модификацию исходной матрицы весов $W_{0}$ путем добавления низкоранговой матрицы $BA$. Основное преимущество этого подхода заключается в том, что вместо обновления всех $d \times k$ параметров в $W_{0}$ LoRA обновляет только $r \times (d + k)$ параметров в $A$ и $B$, значительно снижая количество обучаемых параметров.
Вот пример на Python, использующий библиотеку peft, чтобы применить LoRA к предварительно обученной LLM для классификации текста:
</div> <div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color="">from</span> transformers <span class="token" data-darkreader-inline-color="">import</span> AutoModelForSequenceClassification </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color="">from</span> peft <span class="token" data-darkreader-inline-color="">import</span> get_peft_model<span class="token" data-darkreader-inline-color="">,</span> LoraConfig<span class="token" data-darkreader-inline-color="">,</span> TaskType </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Load pre-trained model</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">model <span class="token" data-darkreader-inline-color="">=</span> AutoModelForSequenceClassification<span class="token" data-darkreader-inline-color="">.</span>from_pretrained<span class="token" data-darkreader-inline-color="">(</span><span class="token" data-darkreader-inline-color="">"bert-base-uncased"</span><span class="token" data-darkreader-inline-color="">,</span> num_labels<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">2</span><span class="token" data-darkreader-inline-color="">)</span> </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Define LoRA configuration</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">peft_config <span class="token" data-darkreader-inline-color="">=</span> LoraConfig<span class="token" data-darkreader-inline-color="">(</span>task_type<span class="token" data-darkreader-inline-color="">=</span>TaskType<span class="token" data-darkreader-inline-color="">.</span>SEQ_CLS<span class="token" data-darkreader-inline-color="">, </span>r<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">8</span><span class="token" data-darkreader-inline-color="">,</span> <span class="token" data-darkreader-inline-color=""># Rank of the low-rank update</span> lora_alpha<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">16</span><span class="token" data-darkreader-inline-color="">,</span></code><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Scaling factor for the low-rank update</span> </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
В этом примере мы загружаем предварительно обученную модель BERT для классификации последовательностей и определяем конфигурацию LoRA. Параметр r указывает ранг низкорангового обновления, а lora_alpha – масштабирующий фактор для обновления. Параметр target_modules указывает, какие слои модели должны получить низкоранговые обновления. После создания модели LoRA можно приступить к процессу тонкой настройки с помощью стандартной процедуры обучения.
Слои адаптеров: Аналогично LoRA, но вместо низкоранговых обновлений в каждый трансформерный блок предварительно обученной модели вставляются тонкие “адаптерные” слои. Только параметры этих нескольких новых компактных слоев обучаются.
Тонкая настройка подсказок: Этот подход сохраняет предварительно обученную модель полностью замороженной. Вместо этого вводятся обучаемые “подсказочные” вложения в качестве входных данных для активации предварительно обученных знаний модели для целевой задачи.
Эти эффективные методы могут обеспечить до 100-кратное снижение вычислительных затрат по сравнению с полной тонкой настройкой, сохраняя при этом конкурентоспособную производительность на многих задачах. Они также снижают потребности в хранилище, избегая полной дубликации модели.
Однако их производительность может отставать от полной тонкой настройки для задач, которые существенно отличаются от общего языка или требуют более целостной специализации.
Процесс тонкой настройки
Независимо от стратегии тонкой настройки, общий процесс специализации LLM следует общему_framework:
- Подготовка набора данных: Вам необходимо получить или создать помеченный набор данных, который сопоставляет входные данные (подсказки) с желаемыми выходными данными для вашей целевой задачи. Для задач генерации текста, таких как суммаризация, это будет пара входного текста и суммированного выходного текста.
- Разделение набора данных: Следуя лучшим практикам, разделите ваш помеченный набор данных на наборы для обучения, проверки и тестирования. Это отделяет данные для обучения модели, настройки гиперпараметров и окончательной оценки.
- Настройка гиперпараметров: Параметры, такие как скорость обучения, размер партии и график обучения, необходимо настроить для наиболее эффективной тонкой настройки на ваших данных. Это обычно включает небольшой набор проверки.
- Обучение модели: Используя настроенные гиперпараметры, запустите процесс оптимизации тонкой настройки на полном наборе для обучения до тех пор, пока производительность модели на наборе проверки не перестанет улучшаться (раннее остановление).
- Оценка: Оцените производительность тонко настроенной модели на отдельном наборе тестирования, идеально состоящем из реальных примеров для целевого случая использования, чтобы оценить реальную эффективность.
- Развертывание и мониторинг: Как только будет достигнута удовлетворительная производительность, тонко настроенную модель можно развернуть для вывода на новые входные данные. Крайне важно отслеживать ее производительность и точность с течением времени для концептуального дрейфа.
Хотя это описывает общий процесс, многие нюансы могут повлиять на успех тонкой настройки для конкретной LLM или задачи. Стратегии, такие как обучение по учебной программе, многозадачная тонкая настройка и фьюшн-пrompting, могут еще больше повысить производительность.
Кроме того, эффективные методы тонкой настройки включают дополнительные соображения. Например, LoRA требует методов, таких как условирование предварительно обученных выходных данных модели через объединяющий слой. Тонкая настройка подсказок требует тщательно разработанных подсказок для активации правильных поведений.
Продвинутая тонкая настройка: Включение обратной связи человека
Хотя стандартная надзорная тонкая настройка с помощью помеченных наборов данных эффективна, интересной областью является обучение LLM напрямую с помощью человеческих предпочтений и обратной связи. Этот подход “человек в цикле” использует методы обучения с подкреплением:
PPO (Проксимальная оптимизация политики): Здесь LLM рассматривается как агент обучения с подкреплением, с его выходными данными в качестве “действий”. Модель вознаграждения обучается для прогнозирования человеческих оценок или баллов качества для этих выходных данных. PPO затем оптимизирует LLM для генерации выходных данных, максимизирующих баллы модели вознаграждения.
RLHF (Обучение с подкреплением из человеческой обратной связи): Этот метод расширяет PPO, напрямую включая человеческую обратную связь в процесс обучения. Вместо фиксированной модели вознаграждения вознаграждения поступают из итеративных человеческих оценок выходных данных LLM во время тонкой настройки.
Хотя вычислительные затраты значительны, эти методы позволяют формировать поведение LLM более точно на основе желаемых характеристик, оцениваемых людьми, за пределами того, что можно захватить в статическом наборе данных.
Компании, такие как Anthropic, использовали RLHF для наделения своих языковых моделей, таких как Claude, улучшенной правдивостью, этикой и осведомленностью о безопасности, помимо компетенции в задаче.
Потенциальные риски и ограничения
Хотя тонкая настройка LLM невероятно мощна, она не без рисков, которые необходимо тщательно управлять:
Усиление предубеждений: Если набор данных для тонкой настройки содержит социальные предубеждения, связанные с полом, расой, возрастом или другими атрибутами, модель может усилить эти нежелательные предубеждения. Отбор репрезентативных и де-биазированных наборов данных имеет решающее значение.
Фактический дрейф: Даже после тонкой настройки на высококачественных данных языковые модели могут “галлюцинировать” неправильные факты или выходные данные, несовместимые с обучающими примерами, в более длинных разговорах или подсказках. Методы извлечения фактов могут быть необходимы.
Проблемы масштабируемости: Полная тонкая настройка огромных моделей, таких как GPT-3, требует огромных вычислительных ресурсов, которые могут быть невозможны для многих организаций. Эффективные методы тонкой настройки частично смягчают эту проблему, но имеют компромиссы.
Катастрофическое забывание: Во время полной тонкой настройки модели могут испытывать катастрофическое забывание, когда они теряют некоторые общие способности, полученные во время предварительного обучения. Многозадачное обучение может быть необходимо.
Риски интеллектуальной собственности и конфиденциальности: Проприетарные данные, используемые для тонкой настройки, могут просочиться в публично выпущенные выходные данные языковой модели, представляя риски. Техники дифференциальной приватности и смягчения информационных опасностей являются активными областями исследований.
В целом, хотя тонкая настройка исключительно полезна, она является нюансированным процессом, требующим осторожности вокруг качества данных, соображений идентичности, смягчения рисков и балансирования производительности и эффективности на основе требований к случаям использования.
Будущее: Настройка языковых моделей на уровне масштаба
Взглянув вперед, достижения в тонкой настройке и адаптации моделей будут иметь решающее значение для разблокировки полного потенциала больших языковых моделей в различных приложениях и областях.
Более эффективные методы, позволяющие тонко настраивать даже более крупные модели, такие как PaLM, с ограниченными ресурсами, могут демократизировать доступ. Автоматизация конвейеров создания наборов данных и инженерии подсказок может упростить специализацию.
Самостоятельные методы тонкой настройки из сырых данных без меток могут открыть новые горизонты. И составные подходы к объединению тонко настроенных подмоделей, обученных на разных задачах или данных, могут позволить строить высоко адаптированные модели на заказ.
В конечном итоге, поскольку LLM становятся более повсеместными, способность настраивать и специализировать их без проблем для каждого возможного случая использования будет иметь решающее значение. Тонкая настройка и связанные с ней стратегии адаптации моделей являются важными шагами в реализации видения больших языковых моделей как гибких, безопасных и мощных инструментов ИИ, дополняющих человеческие возможности во всех областях и начинаниях.
Я провел последние пять лет, погружаясь в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и экспертиза привели меня к участию в более чем 50 различных проектах программной инженерии, с особым акцентом на ИИ/МО. Мое непрекращающееся любопытство также привело меня к обработке естественного языка, области, которую я с нетерпением жду возможности изучить дальше.
Узнать больше


Лаборатории только что доказали, что песочница вашего агента – это всего лишь предложение


Нью-Йорк только что сделал реальную бутылочное горлышко ИИ борьбой за использование земли


Почему агенты ИИ проходят QA, но терпят неудачу в производстве


Лучшая модель OpenAI только что вышла за правительственную заставу


Нарушение работы ИИ из-за чрезмерной тренировки, а не тонкой настройки, показывают исследования


Лаборатория Thinking Machines Ships Первую Модель С Реальным Временем Взаимодействия 200ms

