Методы дообучения. PEFT. База к собеседованиям
Вы думаете, что дообучение моделей сводится к заморозке слоёв или изменению последнего слоя? Cейчас расскажу простым языком — про методы, которые экономят время и мощности, не теряя качества. В условиях нынешнего рынка это уже относится к теормину - ЗНАТЬ ОБЯЗАТЕЛЬНО
Определение
PEFT (Parameter-Efficient Fine-Tuning) - это совокупность методов, позволяющих дообучать модели, минимизируя вычислительные траты, что особо актуально в контексте больших генеративных моделей(диффузионки и LLM)
ЧЕГО МОЖНО ДОБИТЬСЯ С ДООБУЧЕНИЕМ
Вы можете дообучить большую диффузионную сеть (FLUX), генерировать именно ВАС, пример:
Научим нашу нейросеть генерировать Алексея Семихатова (в обучающей выборке она его не видела, поэтому сходу сама нарисовать не сможет)
А вот после дообучения, мы вольны генерировать любой контент, какой пожелаем
Также можно дообучить LLM на ваших телеграмм чатах, чтобы она начала разговаривать как вы
Можно дообучить аудио модель, чтобы она озвучивала текст вашим голосом
Мотивация
С появлением сверхмасштабных моделей, таких как FLUX для генерации изображений или LLama/Qwen для текста, полное дообучение стало практически недостижимой задачей для большинства пользователей. Эти модели требуют колоссальных вычислительных ресурсов — даже базовые варианты могут занимать десятки гигабайт видеопамяти (VRAM), а полноценное обучение требует доступа к флоту мощных GPU/TPU, которые доступны лишь крупным компаниям. Кроме того, оригинальные версии таких моделей создаются на основе проприетарных данных, собранных разработчиками за годы — массивов, которые невозможно воспроизвести самостоятельно. Это делает попытки «переучивать» модели с нуля не только технически сложными, но и бессмысленными: оригинальная версия уже содержит знания, недоступные для повторения. Вместо этого гораздо эффективнее использовать методы, которые позволяют адаптировать модель под конкретные задачи, не затрагивая её исходные параметры.
Методы PEFT полезны не только для больших моделей, но и для повседневных задач — например, дообучение YOLO детекторов или ResNet классификаторов на задачи котик/собачка. Они позволяют адаптировать модель под новые данные эффективно, не теряя исходное качество и экономя ресурсы.
- Быстрее проходит обучение
- Мы будем обучаться на экстремально малом числе данных - 2-10 семплов
- Снижение затрат на потребление ГПУ
- Меньше риск переобучиться
- Не портим изначальные веса модели, нет катастрофического забывания
- Легче подменять версии модели, каждая версия - это небольшой файл весов, который в 10-ки раз! меньше изначальных полных весов
Виды PEFT
Идем от самых базированных -> к более редким случаям. Если вы не знаете про самые первые, то уже считайте, что 100% НЕ прошли собес.
LoRA (Low-Rank Adaptation)
Статья - https://arxiv.org/pdf/2106.09685.pdf
При анализе финальных весов LLM было выявлено, что в матрицах линейных слоев(а трансформеры и self-attention - это просто очень много линейных слоев) ранк этих матриц весов меньше их самих. Че это значит то?
Проще говоря, большинство параметров являются избыточными. Из чего можно сделать вывод, что матрицы можно представить пространством меньшей размерности, сохраняя при этом большую часть важной информации.
Если изначально линейный слой был задан как 756x756(для примера взял числа - nn.Linear(756, 756)), то после обучения уже ясно, что его можно ужать, например, до 128x128 - без какой-либо потери качества. Просто потому, что наша модель очень хорошо обучилась и мы на старте взяли слишком много обучаемых параметров, можно было брать меньше. Вот отсюда, там слово Rank (в данном примере rank=128)
Создатели LoRA предположили, что изменение весов при файнтюнинге модели имеет низкий "внутренний ранг" (intrinsic rank). Идея данного метода заключается в том, что для предварительно обученной матрицы весов мы представляем её обновление двумя меньшими матрицами, полученными путем низкоранговой аппроксимации. Эти матрицы мы тренируем при обучении, а исходную матрицу весов замораживаем. Затем для получения окончательного результата мы объединяем исходные и обученные веса.
- Мы морозим ВСЮ модель
- К некоторой части линейных слоев(часть = от 0 до 100% всех линейных слоев). Мы прибавляем два линейных слоя(это и есть наша лора).
Linear(768, r) -> Linear(r, 768) - Обучаться будут только эти доп слои
- Есть только 2 гиперпараметра настройки - ранк (r) и alpha коэффициент умножения выхода линейных слоев лоры на alpha
- alpha нужна чтобы наша огромная модель, вообще ощутила на себе влияние этих добавленных слоев и стала вести себя под нашу задачу(часто alpha=rank=16)
- rank - чем он больше, тем выше способность модели запомнить полностью, то под что она файтюнится. Минимально ранг берут около 8-16. Максимально 256-512
Prefix tuning
Идея до ужас простая - давайте не трогать вообще модель, а будем обучать входной токен, по аналогии с CLS токеном (подробности про CLS токен)
Мы создаем рандомный токен, который будет меняться (ведет себя как обычный слой обучаемых параметров, меняется от градиентного спуска). Он просто КОНКАТИТСЯ ко всем входным последовательностям при дообучении. И ВСЕ
Это работает как для текста, так и для картиночных моделей.
В оригинальной статье создатели данного метода, исходя из результатов эксперимента на основе GPT-2, сделали вывод, что, обучая только 0,1% параметров, Prefix tuning показывает производительность, сравнимую с дообучением, при котором настраиваются все параметры модели, и превосходит его при файнтюнинге с малым объемом данных.
- Не трогает оригинальную модель — все параметры заморожены, обучается только префикс.
- Очень мало обучаемых параметров
- Менее точный, по сравнению с LoRA, поэтому реже используется
Адаптеры
Это просто более общая формулировка того, как можно добавлять к зафриженной модели доп обучаемые слои. LoRa - это частный случай Adapters
Доп линейный слои можно подставить вообще где угодно в модели. И сам блоков адаптеров может быть чем угодно: это может быть 1 линейный слой или несколько комбинированных более сложных трюков, как на фото ниже
- Адаптеры - это что угодно, любая комбинация обучаемых слоев просунутая внутрь зафриженной модели
- LoRA - это частный случай адаптеров
СПАСИБО ЗА ВНИМАНИЕ
Подписывайтесь на телеграмм канал, там больше инфы к собесам - https://t.me/AI_bolno_ml
Личные консультации и обучение - менторство