Дистиллируй это(c) DL самогонщики.



Сегодня поговорим, про способы замещения одних моделей другими, с нужными свойствами: быстрее, легче, выше,сильнее. Да, я про дистилляцию.



Естественно,нужно упомянуть про концепцию ученик и учитель. Обычно, конечно, это малая модель и большая соответственно. Концептуально мы берём обучаем модель учитель до максимального качества, далее возможны следующие две вилки:



1. Дистилляция векторов эмбеддингов модели.



2. Дистилляция скоров модели.



3. Взаимная, комбо дистилляция.



При этом очень важные хинты:



1. Лучше всего дистиллировать в случае скоров, не пробиты (от 0 до 1), а логиты.

Почему? Ответ прост: мы не теряем после масштабирования так нужную нам вариацию целевой переменной. Именно в ней лежит максимум информации.



2. Для дистилляции векторов разных по embd dim моделей, лучше использовать proxy слои. Причём, обязательно, поверх вектора ученика,тк proxy слой тоже будет обучаемым, а учитель зафрижен. При этом, proxy слой служит выравнивателем между размерностями вектора учителя и ученика. По активациям лучше конечно использовать linear слой (чисто сжатие).



3. Лоссы, тут проще: KLD, MAE/MSE, cosine-sim. Пробуйте, выбирайте тот, который даёт большее качество на вашей downstream таске.



4.Ничто не мешает делать смешивание лоссов дистилляции и целевой задачи. Просто добавьте веса к каждой компоненте.



Из интересного и хорошо забытого: Mutual learning.



Недавно наткнулся на статью 2017г. про взаимное обучение. И это тоже тип дистилляции.



Когда мы одновременно учим модели:

1. При этом они инциализируются по разному

2. Могут иметь одинаковую или схожую задачу.

3. Могут иметь разную архитектуру.

4. Одна может дистиллировать логиты второй, другая эмбеды первой и тп.



Взаимная дистилляция обычно происходит через KLD: lossAB=KL(A/B), lossBA= KL(B/A)



Для чего применяется?

Цель - взять две небольшие модели, которые будут обмениваться знаниями в одной или смежных задачах. Например, вам надо обучить ретривер для KNN , а потом реранкер для выбора топ1 кандидата из KNN. Задачи смежные и почему бы не учить эти модели одновременно?



Подробнее об всех типах дистилляции можно посмотреть неплохую графику тут или в моём выступление тут.