заглушки Полное руководство по точной настройке больших языковых моделей — Unite.AI
Свяжитесь с нами:

Artificial Intelligence

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

mm
обновленный on

Большие языковые модели (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. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.