Самообучение
Тема дорожной карты · Глубокое обучение
Самообучение (Self-supervised learning, SSL) представляет собой метод обучения моделей искусственного интеллекта на основе неразмеченных данных, где модель обучается решать предшествующие задачи, такие как предсказание следующего токена, восстановление маскированных патчей или сравнение аугментированных изображений одного и того же объекта. Этот подход позволяет получить представления, которые могут быть успешно перенесены на различные задачи с минимальным количеством меток или даже без них. Самообучение является ключевым компонентом современных foundation-моделей, таких как BERT (masked language model), GPT (next-token prediction), SimCLR, DINO и MAE в области компьютерного зрения, а также wav2vec в области обработки аудио.
Сначала модели предобучаются на больших наборах неразмеченных данных, а затем дообучаются или используются для линейного поиска на конкретной задаче. Этот подход позволяет значительно сократить время и затраты на обучение моделей, особенно для задач с большим количеством данных.
Как это работает
Самообучение использует различные техники для улучшения эффективности обучения. Например, mixed precision (FP16/BF16) позволяет оптимизировать использование памяти и ускорить процесс обучения, сохраняя точность вычислений с помощью FP32-аккумуляторов. Распределенное обучение (Distributed training) позволяет распределить модель по нескольким GPU для ускорения процесса обучения. Это включает в себя использование DDP (Data Parallel), FSDP/ZeRO (Fully Sharded Data Parallel) и DeepSpeed, которые позволяют распределить параметры, градиенты и состояние оптимизатора по нескольким GPU для обработки огромных моделей.
Самообучение также использует различные методы предобучения на неразмеченных данных, такие как SimCLR, BYOL, DINO и MAE, которые позволяют получить фундаментальные представления для современных foundation-моделей.
Когда применять
Самообучение особенно полезно, когда у вас есть доступ к большим наборам неразмеченных данных. Включите mixed precision (torch.cuda.amp или accelerator="auto" в Lightning) для бесплатного ускорения скорости обучения на современных GPU (Ampere+). Для работы с несколькими GPU начните с DDP. Используйте FSDP/DeepSpeed, когда модели не помещаются на одну GPU. Самообучение предобучения оправдано только на масштабе (>1M примеров), иначе лучше использовать supervised обучение и предобученные foundation модели.
Типичные ошибки
Существуют различные ловушки, которые могут возникнуть при использовании самообучения. Например, использование FP16 может привести к NaN loss (BF16 является более стабильным вариантом, если железо поддерживает его). Также могут возникнуть проблемы с согласием градиентов при использовании DDP с несогласованным RNG между rank. Без активационного checkpointing FSDP может привести к исчерпанию оперативной памяти (OOM) на больших моделях. Наконец, предобучение на небольших данных может привести к неоправданным затратам на вычисления.