Leveraging Random Label Memorization for Unsupervised Pre-Training (оверфиттинг как благо)

Nov 18, 2018 17:40

Идея

Статья от 05.11.2018 (https://arxiv.org/pdf/1811.01640.pdf) описывает способ предварительной тренировки сеток на неразмеченных данных (формально в supervised режиме с рандомно перемешанными целевыми значениями). Идея простая - заставить нейросеть запомнить случайно присвоенные метки. Чтобы такой агрессивный overfitting удался, сетка должна выявить статистически устойчивые паттерны во входных данных. После этого можно обучать сетку уже по нормальному датасету, пользуясь тем, что низкоуровневые фичи уже выявлены и веса первых слоев сетки сформированы.

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

Проверка

Разумеется, никакие общие рассуждения не заменят практическую проверку. Поэтому надо взять какую-то модель и попробовать на ней. Я в последнее время очень плотно увяз в distance metric learning для проверки релевантности вопросов и предпосылок для вопросно-ответной системы, поэтому решил проверить сначала на модели nn_relevancy_tripleloss.py. Подробности по этой модели есть тут https://kelijah.livejournal.com/245759.html. Суть модели в том, что формируемые ею векторы должны быть близки (в формальном, математическом смысле) для релевантных вопросов и предпосылок, и далеки для нерелевантных.

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

Чтобы сделать pretrain, берем весь обучающий набор троек (anchor, positive, negative). Распиливаем на составляющие, и генерируем рандомные тройки в практически неограниченном количестве. Обучение на таком датасете с шумом вместо расстояний показывает на первых десяти-двадцати эпохах уменьшение loss'а, то есть сетка действительно пытается запоминать шум.

В статье из описания можно понять, что авторы случайно меняют метки после каждой эпохи pretrain'а. Я срезал этот угол, генерируя весь рандомный датасет заранее - см. со строки 391.

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

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

Ссылки на материалы

Leveraging Random Label Memorization for Unsupervised Pre-Training
Deep Semantic Similarity Model
FaceNet: A Unified Embedding for Face Recognition and Clustering
Lossless triplet loss
Similarity learning

neural nets, vector space model, triple loss, sent2vec

Previous post Next post
Up