Свяжитесь с нами:

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

Искусственный интеллект

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

mm

Большие языковые модели (LLM), такие как GPT-4, LaMDA, PaLM и другие, покорили мир своей замечательной способностью понимать и генерировать человеческий текст по широкому кругу тем. Эти модели предварительно обучены на огромных наборах данных, содержащих миллиарды слов из Интернета, книг и других источников.

Эта фаза предварительного обучения наполняет модели обширными общими знаниями о языке, темах, способностях к рассуждению и даже определенными предубеждениями, присутствующими в данных обучения. Однако, несмотря на невероятный размах, этим предварительно прошедшим обучение LLM не хватает специализированных знаний для конкретных областей или задач.

Именно здесь на помощь приходит тонкая настройка – процесс адаптации предварительно обученного LLM для достижения успеха в конкретном приложении или варианте использования. Путем дальнейшего обучения модели на меньшем наборе данных для конкретных задач мы можем настроить ее возможности в соответствии с нюансами и требованиями этой области.

Тонкая настройка аналогична передаче обширных знаний высокообразованного специалиста широкого профиля для подготовки эксперта, специализирующегося в конкретной области. В этом руководстве мы рассмотрим, что, почему и как делать тонкую настройку LLM.

Точная настройка больших языковых моделей

Точная настройка больших языковых моделей

Что такое тонкая настройка?

В его ядре, тонкая настройка включает в себя использование большой предварительно обученной модели и обновление ее параметров с использованием второго этапа обучения на наборе данных, адаптированном к вашей целевой задаче или области. Это позволяет модели изучать и усваивать нюансы, закономерности и цели, характерные для этой более узкой области.

В то время как предварительная подготовка формирует общее понимание языка на основе обширного и разнообразного корпуса текстов, тонкая настройка специализируется на этой общей компетенции. Это похоже на то, как если бы человек эпохи Возрождения превратился в эксперта в своей отрасли.

Веса предобученной модели, кодирующие её общие знания, используются в качестве отправной точки или инициализации для процесса тонкой настройки. Затем модель обучается дальше, но уже на примерах, непосредственно релевантных конечному приложению.

Предоставляя модели это специализированное распределение данных и соответствующим образом настраивая параметры модели, мы делаем LLM более точным и эффективным для целевого варианта использования, сохраняя при этом преимущества широких предварительно обученных возможностей в качестве основы.

Зачем проводить тонкую настройку LLM?

Есть несколько ключевых причин, по которым вам может потребоваться тонкая настройка большой языковой модели:

  1. Настройка домена: В каждой области, от юриспруденции до медицины и разработки программного обеспечения, существуют свои нюансы языковых соглашений, жаргона и контекста. Точная настройка позволяет настроить общую модель для понимания и создания текста, адаптированного к конкретной области.
  2. Специализация задачи: LLM можно настроить для различных задач обработки естественного языка, таких как обобщение текста, машинный перевод, ответы на вопросы и т. д. Эта специализация повышает производительность при выполнении целевой задачи.
  3. Соответствие данных: В строго регулируемых отраслях, таких как здравоохранение и финансы, действуют строгие требования к конфиденциальности данных. Точная настройка позволяет обучать специалистов LLM работе с собственными организационными данными, одновременно защищая конфиденциальную информацию.
  4. Ограниченные маркированные данные: Получение больших размеченных наборов данных для обучения моделей с нуля может быть сложной задачей. Тонкая настройка позволяет добиться высокой производительности задач на ограниченном количестве контролируемых примеров, используя возможности предварительно обученной модели.
  5. Обновление модели: по мере того, как в предметной области со временем становятся доступными новые данные, вы можете дополнительно совершенствовать модели, чтобы включить в них новейшие знания и возможности.
  6. Смягчение предубеждений: LLM могут выявить социальные предубеждения на основе обширных данных перед обучением. Точная настройка тщательно подобранных наборов данных может помочь уменьшить и исправить эти нежелательные отклонения.

По сути, точная настройка устраняет разрыв между общей, широкой моделью и конкретными требованиями специализированного приложения. Это повышает точность, безопасность и актуальность результатов модели для целевых сценариев использования.

Точная настройка больших языковых моделей

Точная настройка больших языковых моделей

Представленная схема иллюстрирует процесс внедрения и использования больших языковых моделей (LLM), особенно для корпоративных приложений. Изначально предобученная модель, такая как T5, получает структурированные и неструктурированные данные компании в различных форматах, таких как CSV или JSON. Эти данные подвергаются контролируемой, неконтролируемой или трансферной тонкой настройке, что повышает релевантность модели конкретным потребностям компании.

После точной настройки модели с учетом данных компании ее веса соответствующим образом обновляются. Обученная модель затем проходит дальнейшие циклы обучения, постоянно улучшая свои реакции с течением времени с использованием новых данных компании. Этот процесс является итеративным и динамичным, при этом модель обучается и переобучается для адаптации к меняющимся шаблонам данных.

Результаты этой обученной модели — токены и внедрения, представляющие слова, — затем развертываются для различных корпоративных приложений. Эти приложения могут варьироваться от чат-ботов до здравоохранения, каждое из которых требует, чтобы модель понимала и отвечала на отраслевые запросы. В сфере финансов приложения включают обнаружение мошенничества и анализ угроз; в здравоохранении модели могут помочь в опросе пациентов и диагностике.

Способность обученной модели обрабатывать новые корпоративные данные и реагировать на них с течением времени обеспечивает её постоянную и растущую полезность. Благодаря этому корпоративные пользователи могут взаимодействовать с моделью через приложения, задавая вопросы и получая обоснованные ответы, отражающие обучение и тонкую настройку модели на основе данных, специфичных для предметной области.

Эта инфраструктура поддерживает широкий спектр корпоративных приложений, демонстрируя универсальность и адаптируемость LLM при правильном внедрении и обслуживании в бизнес-контексте.

Подходы к тонкой настройке

Когда дело доходит до тонкой настройки больших языковых моделей, существуют две основные стратегии:

1) Полная точная настройка модели

При полной точной настройке все параметры (веса и смещения) предварительно обученной модели обновляются на втором этапе обучения. Модель подвергается воздействию помеченного набора данных для конкретной задачи, а стандартный процесс обучения оптимизирует всю модель для этого распределения данных.

Это позволяет модели вносить более полные корректировки и целостно адаптироваться к целевой задаче или области. Однако полная тонкая настройка имеет некоторые недостатки:

  • Для обучения требуются значительные вычислительные ресурсы и время, как и на этапе предварительного обучения.
  • Требования к хранилищу высоки, так как для каждой задачи необходимо поддерживать отдельную точно настроенную копию модели.
  • Существует риск «катастрофического забывания», когда точная настройка приводит к потере модели некоторых общих возможностей, полученных во время предварительного обучения.

Несмотря на эти ограничения, полная точная настройка остается мощным и широко используемым методом, когда позволяют ресурсы и целевая задача значительно отличается от общего языка.

2) Эффективные методы тонкой настройки

Чтобы преодолеть вычислительные трудности полной тонкой настройки, исследователи разработали эффективные стратегии, которые обновляют лишь небольшое подмножество параметров модели в процессе тонкой настройки. Эти параметрически эффективные методы обеспечивают баланс между специализацией и снижением требований к ресурсам.

Некоторые популярные эффективные методы тонкой настройки включают в себя:

Префикс-Тюнинг: Здесь вводится и обучается небольшое количество векторов, или «префиксов», специфичных для конкретной задачи, чтобы настроить внимание предобученной модели на целевую задачу. Только эти префиксы обновляются во время тонкой настройки.

LoRA (Адаптация низкого ранга): ЛоРА вводит обучаемые матрицы низкого ранга в каждый слой предварительно обученной модели во время точной настройки. Эти небольшие корректировки ранга помогают специализировать модель с гораздо меньшим количеством обучаемых параметров, чем полная точная настройка.

Конечно, я могу предоставить подробное объяснение LoRA (адаптации низкого ранга) вместе с математической формулировкой и примерами кода. LoRA — это популярный метод точной настройки с эффективным использованием параметров (PEFT), который получил значительное распространение в области адаптации моделей большого языка (LLM).

Что такое ЛоРА?

LoRA — это метод тонкой настройки, который добавляет небольшое количество обучаемых параметров в предварительно обученную модель LLM, что позволяет эффективно адаптировать её к последующим задачам, сохраняя при этом большую часть знаний исходной модели. Вместо тонкой настройки всех параметров LLM, LoRA внедряет в слои модели матрицы низкого ранга, специфичные для конкретной задачи, что обеспечивает значительную экономию вычислительных ресурсов и памяти в процессе тонкой настройки.

Математическая формулировка

LoRA (адаптация низкого ранга) — это метод тонкой настройки для больших языковых моделей (LLM), который вводит обновление низкого ранга в весовые матрицы. Для весовой матрицы , LoRA добавляет матрицу низкого ранга , где и , Где это звание. Такой подход значительно сокращает количество обучаемых параметров, позволяя эффективно адаптироваться к последующим задачам с минимальными вычислительными ресурсами. Обновленная весовая матрица имеет вид .

Это обновление низкого ранга можно интерпретировать как изменение исходной весовой матрицы $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 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="">    target_modules<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">[</span><span class="token" data-darkreader-inline-color="">"q_lin"</span><span class="token" data-darkreader-inline-color="">,</span> <span class="token" data-darkreader-inline-color="">"v_lin"</span><span class="token" data-darkreader-inline-color="">]</span><span class="token" data-darkreader-inline-color="">,</span>  <span class="token" data-darkreader-inline-color=""># Apply LoRA to the query and value layers</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=""># Create the LoRA-enabled 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> get_peft_model<span class="token" data-darkreader-inline-color="">(</span>model<span class="token" data-darkreader-inline-color="">,</span> peft_config<span class="token" data-darkreader-inline-color="">)</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=""><span class="token" data-darkreader-inline-color=""># Fine-tune the model with LoRA</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=""># ... (training code omitted for brevity)</span></code></div>
</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 следует общей схеме:

  1. Подготовка набора данных: Вам потребуется получить или создать маркированный набор данных, который сопоставляет входные данные (подсказки) с желаемыми выходными данными для вашей целевой задачи. Для задач генерации текста, таких как реферирование, это будут пары «входной текст — реферируемый результат».
  2. Разделение набора данных: Следуя рекомендациям, разделите размеченный набор данных на обучающие, проверочные и тестовые наборы. Это разделяет данные для обучения модели, настройки гиперпараметров и окончательной оценки.
  3. Настройка гиперпараметра: такие параметры, как скорость обучения, размер пакета и график обучения, необходимо настроить для наиболее эффективной точной настройки ваших данных. Обычно это включает в себя небольшой набор проверок.
  4. Модельное обучение: Используя настроенные гиперпараметры, запустите процесс тонкой настройки оптимизации на полном обучающем наборе до тех пор, пока производительность модели на проверочном наборе не перестанет улучшаться (ранняя остановка).
  5. Оценка: Оцените производительность точно настроенной модели на отложенном тестовом наборе, в идеале включающем реальные примеры для целевого варианта использования, чтобы оценить реальную эффективность.
  6. Развертывание и мониторинг: После достижения удовлетворительных результатов доработанную модель можно использовать для вывода новых данных. Крайне важно отслеживать её эффективность и точность с течением времени, чтобы исключить смещение концепций.

Хотя это описывает общий процесс, многие нюансы могут повлиять на успех точной настройки для конкретного LLM или задачи. Такие стратегии, как изучение учебной программы, точная настройка многозадачности и краткие подсказки, могут еще больше повысить производительность.

Кроме того, эффективные методы тонкой настройки требуют дополнительных соображений. Например, LoRA требует таких методов, как обработка предварительно обученных выходных данных модели через комбинирующий слой. Оперативная настройка требует тщательно продуманных подсказок для активации правильного поведения.

Расширенная точная настройка: учет отзывов пользователей

Хотя стандартная контролируемая точная настройка с использованием размеченных наборов данных эффективна, интересной перспективой является обучение LLM непосредственно с использованием человеческих предпочтений и обратной связи. Этот подход «человек в цикле» использует методы обучения с подкреплением:

ППО (Проксимальная политика оптимизации): Здесь LLM рассматривается как агент обучения с подкреплением, чьими выходами являются «действия». Модель вознаграждения обучается предсказывать человеческие оценки или показатели качества для этих выходов. Затем PPO оптимизирует LLM для генерации выходов, максимизирующих оценки модели вознаграждения.

РЛХФ (Обучение с подкреплением на основе отзывов людей): Это расширяет возможности PPO, напрямую включая обратную связь от человека в процесс обучения. Вместо модели фиксированного вознаграждения вознаграждение формируется на основе итеративных оценок результатов LLM, проводимых человеком в процессе тонкой настройки.

Несмотря на большие вычислительные затраты, эти методы позволяют более точно формировать поведение LLM на основе желаемых характеристик, оцениваемых людьми, помимо тех, которые могут быть зафиксированы в статическом наборе данных.

Такие компании, как Anthropic, использовали RLHF, чтобы придать своим языковым моделям, таким как Claude, повышенную правдивость, этику и осведомленность о безопасности, выходящие за рамки простой компетентности в выполнении задач.

Потенциальные риски и ограничения

Несмотря на свою огромную эффективность, тонкая настройка LLM не лишена рисков, которыми необходимо тщательно управлять:

Усиление смещения: Если данные точной настройки содержат социальные предубеждения относительно пола, расы, возраста или других атрибутов, модель может усилить эти нежелательные предубеждения. Создание репрезентативных и объективных наборов данных имеет решающее значение.

Фактический дрейф: даже после точной настройки на высококачественных данных языковые модели могут «галлюцинировать» неправильные факты или результаты, не соответствующие обучающим примерам, в ходе более длительных разговоров или подсказок. Могут потребоваться методы поиска фактов.

Проблемы масштабируемости: Полная точная настройка огромных моделей, таких как GPT-3, требует огромных вычислительных ресурсов, что может оказаться невозможным для многих организаций. Эффективная точная настройка частично смягчает это, но имеет свои компромиссы.

Катастрофическое забвение: Во время полной тонкой настройки модели могут столкнуться с катастрофической забывчивостью, при которой они теряют некоторые общие возможности, полученные во время предварительного обучения. Может потребоваться многозадачное обучение.

Риски интеллектуальной собственности и конфиденциальности: Запатентованные данные, используемые для тонкой настройки, могут попасть в общедоступные выходные данные языковой модели, что создает риски. Дифференциальные методы снижения конфиденциальности и защиты информации являются активными областями исследований.

В целом, несмотря на свою исключительную полезность, точная настройка представляет собой тонкий процесс, требующий тщательного подхода к качеству данных, учету идентичности, снижению рисков и балансированию компромиссов между производительностью и эффективностью на основе требований сценария использования.

Будущее: масштабная настройка языковой модели

В перспективе достижения в методах точной настройки и адаптации моделей будут иметь решающее значение для раскрытия всего потенциала больших языковых моделей в различных приложениях и областях.

Более эффективные методы, позволяющие точно настраивать даже более крупные модели, такие как PaLM, с ограниченными ресурсами, могли бы демократизировать доступ. Автоматизация конвейеров создания наборов данных и оперативное проектирование могут упростить специализацию.

Методы самоконтроля для точной настройки на основе необработанных данных без меток могут открыть новые горизонты. А композиционные подходы к объединению точно настроенных подмоделей, обученных различным задачам или данным, могут позволить создавать узкоспециализированные модели по требованию.

В конечном счете, поскольку LLM становятся все более повсеместными, возможность плавно настраивать и специализировать их для каждого мыслимого варианта использования будет иметь решающее значение. Точная настройка и соответствующие стратегии адаптации моделей являются ключевыми шагами в реализации видения больших языковых моделей как гибких, безопасных и мощных помощников искусственного интеллекта, расширяющих человеческие возможности во всех областях и начинаниях.

Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.