Дистиллируй это(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. Задачи смежные и почему бы не учить эти модели одновременно?
Подробнее об всех типах дистилляции можно посмотреть неплохую графику тут или в моём выступление тут.
Сегодня поговорим, про способы замещения одних моделей другими, с нужными свойствами: быстрее, легче, выше,сильнее. Да, я про дистилляцию.
Естественно,нужно упомянуть про концепцию ученик и учитель. Обычно, конечно, это малая модель и большая соответственно. Концептуально мы берём обучаем модель учитель до максимального качества, далее возможны следующие две вилки:
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. Задачи смежные и почему бы не учить эти модели одновременно?
Подробнее об всех типах дистилляции можно посмотреть неплохую графику тут или в моём выступление тут.