В индустрии модели редко учат с нуля: берут предобученную и адаптируют. На собесе спрашивают, как устроены эмбеддинги, как их обучают для поиска и какой способ дообучения выбрать.
Эмбеддинги
Эмбеддинг это плотный вектор, в котором близкие по смыслу объекты оказываются рядом. Слой nn.Embedding это обучаемая таблица векторов по id.
- word2vec: слова в похожих контекстах получают близкие векторы (skip-gram, CBOW, негативное семплирование). Один вектор на слово, многозначность не различается.
- Контекстные эмбеддинги трансформеров: вектор токена зависит от всего предложения.
- Эмбеддинги предложений: pooling выходов энкодера, но лучше модели, дообученные контрастивно.
Контрастивное обучение
Для батча пар (вопрос, правильный ответ) считают матрицу похожестей и учат правильную пару выигрывать у остальных в строке:
L = CE(softmax(sim(qᵢ, dⱼ) / τ), i)
Чем больше батч, тем больше негативов, а трудные негативы особенно полезны. Так обучены модели эмбеддингов для поиска и CLIP (картинка и подпись).
Семантический поиск
- Нарезать документы на фрагменты с перекрытием.
- Закодировать би-энкодером и положить в ANN-индекс.
- Гибрид с BM25 для точных терминов.
- Переранжировать топ кросс-энкодером: он видит вопрос и документ вместе и точнее, но дорог.
- Оценить recall@k и NDCG на размеченных запросах.
Transfer learning
Предобученная модель уже выучила общие признаки. Стратегии:
- Feature extraction: замороженная модель и простой классификатор поверх. Сотни примеров, почти бесплатно.
- Fine-tuning головы, затем разморозка: сначала голова на замороженном бэкбоне, потом верхние блоки с меньшим lr.
- Полный fine-tuning: лучшее качество при достаточных данных, дорого, риск забывания.
Нормализация входа как при предобучении, lr для энкодеров около 1e-5..5e-5, валидация и early stopping.
При заморозке бэкбона с BatchNorm помните: requires_grad = False не останавливает обновление running-статистик в режиме train.
LoRA
Вместо обновления матрицы W учат добавку низкого ранга:
y = Wx + (α / r) · B·A·x, B: d_out×r, A: r×d_in
Для матрицы 4096×4096 при r = 8 обучается 65 536 параметров вместо 16.8 млн, около 0.4%. B инициализируют нулями, чтобы на старте модель совпадала с исходной. Адаптеры весят мегабайты, на одной базе можно держать много задач. QLoRA держит замороженную базу в 4 битах.
Катастрофическое забывание
После полного дообучения на узкой задаче модель хуже в общих. Смягчают LoRA, маленьким lr и коротким обучением, примешиванием общих данных, штрафом за отклонение от исходной модели.
Частые ошибки
- Большой lr при fine-tuning.
- Забыть нормализацию входа, на которой предобучен бэкбон.
- Использовать сырой CLS-вектор BERT как эмбеддинг предложения без дообучения.
- Чисто векторный поиск там, где важны точные коды и артикулы.
Что спросят на собесе
- Что такое эмбеддинг, word2vec против контекстных.
- Как обучают эмбеддинги для поиска.
- Стратегии дообучения и как выбрать.
- Как работает LoRA и сколько параметров она экономит.
- Что такое катастрофическое забывание.