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

1. Уменьшите размер модели

1.1. Обучение смешанной точности

С помощью этого метода мы сохраняем некоторые параметры модели с более низкой точностью (например, 16-битной), а некоторые — с более высокой точностью (например, 32-битной по умолчанию) во время обучения. Это помогает уменьшить объем памяти и ускорить обучение. И в Pytorch, и в Tensorflow есть реализации для автоматического выполнения этого (с графическими процессорами Nvidia).

Погрузитесь глубже: https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html

Реализации

1.2. Квантование

Квантование — еще один метод, снижающий точность параметров модели. Вместо того, чтобы представлять их в формате float32, мы используем float16, целое число (int16) или, в крайнем случае, двоичное число (ага, посмотрите BinaryBERT). Эти менее точные представления могут сократить потребление памяти, плюс числовые операции над целыми числами могут иногда выполняться быстрее, чем над числами с плавающей запятой на ЦП (но это на самом деле зависит). Модель может быть обучена с полной точностью, а затем квантована или обучена напрямую с параметрами с более низкой точностью.

Обзор методов квантования: https://github.com/christianversloot/machine-learning-articles/blob/main/tensorflow-model-optimization-an-introduction-to-quantization.md

Реализации

1.3. Адаптация низкого ранга (LoRA)

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

Погрузитесь глубже: Hu, E. J. et al. (2021) «LoRA: низкоранговая адаптация больших языковых моделей».

Реализации

1.4. Обрезка модели

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

Примеры

1.5. Дистилляция модели

Хорошо известный метод, когда мы обучаем большую сеть («учитель»), а затем обучаем меньшую модель («ученик»), чтобы имитировать вывод учителя. Цель обучения состоит в том, чтобы свести к минимуму разницу между результатами учителя и ученика. Таким образом, меньшая модель ученика может научиться приближаться к функциональности большей модели, но с меньшим количеством параметров, что делает ее более эффективной.

Примеры

2. Тренируйтесь с меньшим объемом памяти

2.1. Градиентная контрольная точка

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

Погрузитесь глубже: см. раздел 4 в Chen, T. (2016) «Обучение глубоких сетей с сублинейной стоимостью памяти».

Реализации

2.2. Накопление градиента

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

3. Передача обучения: повторное использование существующих моделей

3.1. Функциональное трансферное обучение

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

3.2. Адаптеры

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

Погрузитесь глубже: https://medium.com/dair-ai/adapters-a-compact-and-extensible-transfer-learning-method-for-nlp-6d18c2399f62

Реализации

4. Максимальное использование ваших помеченных данных

4.1. Мультимодальное и многозадачное обучение

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

4.2. Выбор основного набора

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

4.3. Дистилляция набора данных

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

Погрузитесь глубже: Ю, Р. и др. (2023) «Дистилляция набора данных: всесторонний обзор».

4.4. Активное изучение

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

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

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

Погрузитесь глубже: Рен, П. и др. (2020) «Обзор глубокого активного обучения».

4.5. Увеличение данных

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

Увеличение данных в НЛП: Shorten, C. et al. (2021) «Увеличение текстовых данных для глубокого обучения.

Очень небольшая выборка библиотек для враждебного преобразования текста: