Существует «бесплатный обед» для тонкой настройки больших моделей, где одна строка кода может повысить производительность как минимум на 10%.
Производительность Llama 2 с параметрами 7B даже увеличилась в два раза, а у Mistral также наблюдался рост на четверть.
Несмотря на то, что этот метод используется на этапе тонкой настройки с учителем, модели RLHF также могут извлечь из него пользу.
来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Метод тонкой настройки.
Это новый метод регуляризации, который можно использовать для повышения производительности моделей с учителем (SFT).
Этот метод был включен в библиотеку TRL HuggingFace и может быть вызван путем добавления дополнительной строки кода для импорта.
NEFT не только проста в эксплуатации, но и не требует значительных затрат, и авторы называют ее «бесплатным обедом».
Некоторые пользователи сети попытались таким образом доработать Mistral-7B на базе Guanaco (модель семейства альпака), и улучшение характеристик было очевидным.
Итак, как же NEFTune «окровливает» большое количество больших моделей одной строкой кода?
Добавление шума в модель
Полное название NEFTune - Noisy Embedding Fine Tuning, что расшифровывается как "Embedded Tuning with Noise".
Разработчики считают, что переобучение является основным фактором, ограничивающим производительность больших моделей, поэтому метод добавления шума в слой встраивания на этапе обучения принят, чтобы избежать возникновения переобучения, тем самым повышая производительность.
В частности, текст в обучающей базе данных сначала размечается и преобразуется в вектор внедрения.
Затем система случайным образом генерирует вектор шума и настраивает шум на заданную интенсивность с помощью скалера.
Масштабированный шум добавляется к вектору встраивания в качестве входных данных для модели, и начинается обучение.
С каждой итерацией обучения генерируется новый шум, который добавляется в слой внедрения.
В этом коде параметр noise_alpha в функции NEFTune - это интенсивность (коэффициент) шума, а mag_norm - диапазон шума в реальном процессе.
NEFT только добавляет шум в модель в процессе обучения, а на этапе инференса такого процесса нет, и эту роль играет оператор if в коде.
В режиме обучения возвращаемым значением функции new_func является слой встраивания после добавления шума.
Этот код опубликован для объяснения необходимости, если вы просто хотите вызвать NEFT, вы можете вызвать его непосредственно из библиотеки TRL, не используя полный код выше.
Следующий код является примером тонкой настройки модели ОПТ-350М:
из наборов данных импортировать load_dataset
из trl import SFTTrainer
dataset = load_dataset("imdb", split="train")
trainer = SFTTrainer(
«Фейсбук/ОПТ-350М»,
train_dataset=набор данных,
dataset_text_field="текст",
max_seq_length=512,
)
trainer.train()
Что касается наборов данных, разработчики использовали в общей сложности четыре различных набора данных, таких как Alpaca и ShareGPT, для их точной настройки.
По мнению авторов, причинами выбора этих данных являются то, что они более известны, были SOTA и так далее.
Кроме того, из соображений производительности оборудования в ходе эксперимента были выбраны наборы данных для однораундовых диалогов.
Итак, как ведет себя большая модель после настройки методом NEFT?
Повышение производительности до 1 раз
Исследовательская группа в основном тестировала качество текста и способность к диалогам, сгенерированные до и после настройки модели.
Его китайское качество в первую очередь основано на наборе данных Aplaca, оцененном с помощью ChatGPT и GPT-4.
В качестве эталона используется модель Text-Davinci-003, а доля обученной модели, превосходящая TD3, является индексом оценки.
Чтобы сэкономить ресурсы, исследовательская группа сначала использовала ChatGPT, чтобы определить, стоит ли оценивать или вызывать GPT-4 самостоятельно, а в некоторых случаях судить вручную.
Результаты В различных наборах данных для обучения Llama 2 имеет прирост производительности не менее чем на 10% после настройки, а в наборе данных Alpaca он напрямую удваивается.
При внедрении в OPT и Llama 1 подход NEFT также может привести к некоторым улучшениям производительности.
Задача, используемая для оценки способности модели к чату, называется OpenLLM Leadorboard.
Обнаружено, что возможности чата скорректированной модели NEFT также дополнительно улучшены по сравнению с Evol-Instruct.
Авторы также оценивают, приведет ли улучшение качества текста и возможностей чата без значительного увеличения стоимости к снижению других возможностей.
Результаты показывают, что метод NEFT не оказывает существенного влияния на другие возможности модели на различных наборах данных и моделях.
В ходе эксперимента авторы также обнаружили, что текст, сгенерированный моделью, не копирует обучающие данные, что говорит о том, что модель обладает определенными возможностями обобщения.
Чтобы подтвердить это, авторы оценили потери модели и обнаружили, что потери тестового набора данных были ниже, чем обучающие данные, что подтверждает эту точку зрения.
Кроме того, авторы обнаружили, что после корректировки NEFT текст, сгенерированный моделью, не только увеличился в качестве и длине, но и увеличил содержание без повторений.
Чтобы подтвердить, что улучшение качества текста было вызвано добавлением шума, а не увеличением длины текста, исследователи также провели эксперименты по абляции.
Результаты показывают, что простое принуждение модели к генерации более длинного текста не может достичь эффекта NEFT.
Адрес доклада:
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Одна строка кода повышает производительность больших моделей на 10%, разработчик: free lunch
Первоисточник: Qubits
Существует «бесплатный обед» для тонкой настройки больших моделей, где одна строка кода может повысить производительность как минимум на 10%.
Производительность Llama 2 с параметрами 7B даже увеличилась в два раза, а у Mistral также наблюдался рост на четверть.
Несмотря на то, что этот метод используется на этапе тонкой настройки с учителем, модели RLHF также могут извлечь из него пользу.
Это новый метод регуляризации, который можно использовать для повышения производительности моделей с учителем (SFT).
NEFT не только проста в эксплуатации, но и не требует значительных затрат, и авторы называют ее «бесплатным обедом».
Добавление шума в модель
Полное название NEFTune - Noisy Embedding Fine Tuning, что расшифровывается как "Embedded Tuning with Noise".
Разработчики считают, что переобучение является основным фактором, ограничивающим производительность больших моделей, поэтому метод добавления шума в слой встраивания на этапе обучения принят, чтобы избежать возникновения переобучения, тем самым повышая производительность.
Затем система случайным образом генерирует вектор шума и настраивает шум на заданную интенсивность с помощью скалера.
Масштабированный шум добавляется к вектору встраивания в качестве входных данных для модели, и начинается обучение.
С каждой итерацией обучения генерируется новый шум, который добавляется в слой внедрения.
из torch.nn импортировать функционал как F
def NEFTune(модель, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
if model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(dims)
return embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
еще:
возврат orig_embed(x)
Возврат new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Возвращаемая модель
В этом коде параметр noise_alpha в функции NEFTune - это интенсивность (коэффициент) шума, а mag_norm - диапазон шума в реальном процессе.
NEFT только добавляет шум в модель в процессе обучения, а на этапе инференса такого процесса нет, и эту роль играет оператор if в коде.
В режиме обучения возвращаемым значением функции new_func является слой встраивания после добавления шума.
Этот код опубликован для объяснения необходимости, если вы просто хотите вызвать NEFT, вы можете вызвать его непосредственно из библиотеки TRL, не используя полный код выше.
Следующий код является примером тонкой настройки модели ОПТ-350М:
из наборов данных импортировать load_dataset
из trl import SFTTrainer
dataset = load_dataset("imdb", split="train")
trainer = SFTTrainer(
«Фейсбук/ОПТ-350М»,
train_dataset=набор данных,
dataset_text_field="текст",
max_seq_length=512,
)
trainer.train()
Что касается наборов данных, разработчики использовали в общей сложности четыре различных набора данных, таких как Alpaca и ShareGPT, для их точной настройки.
По мнению авторов, причинами выбора этих данных являются то, что они более известны, были SOTA и так далее.
Кроме того, из соображений производительности оборудования в ходе эксперимента были выбраны наборы данных для однораундовых диалогов.
Итак, как ведет себя большая модель после настройки методом NEFT?
Повышение производительности до 1 раз
Исследовательская группа в основном тестировала качество текста и способность к диалогам, сгенерированные до и после настройки модели.
Его китайское качество в первую очередь основано на наборе данных Aplaca, оцененном с помощью ChatGPT и GPT-4.
В качестве эталона используется модель Text-Davinci-003, а доля обученной модели, превосходящая TD3, является индексом оценки.
Чтобы сэкономить ресурсы, исследовательская группа сначала использовала ChatGPT, чтобы определить, стоит ли оценивать или вызывать GPT-4 самостоятельно, а в некоторых случаях судить вручную.
Результаты В различных наборах данных для обучения Llama 2 имеет прирост производительности не менее чем на 10% после настройки, а в наборе данных Alpaca он напрямую удваивается.
Обнаружено, что возможности чата скорректированной модели NEFT также дополнительно улучшены по сравнению с Evol-Instruct.
Результаты показывают, что метод NEFT не оказывает существенного влияния на другие возможности модели на различных наборах данных и моделях.
Чтобы подтвердить это, авторы оценили потери модели и обнаружили, что потери тестового набора данных были ниже, чем обучающие данные, что подтверждает эту точку зрения.
Чтобы подтвердить, что улучшение качества текста было вызвано добавлением шума, а не увеличением длины текста, исследователи также провели эксперименты по абляции.
Результаты показывают, что простое принуждение модели к генерации более длинного текста не может достичь эффекта NEFT.