В последнее время, подсела на иглу адаптеров, поэтому сегодня хочу написать про подход AdaMix (2022), идея красивая, перетекла от MoE (MIXTURE-OF-EXPERTS), но со множеством своих доработок из побуждения экономии ресурсов (действительно, если мы имеем дело с PEFT методами, а о чем еще заботиться?)
В чем суть MoE бегло? Из названия в целом понятно. Берем данные, прогоняем через разные разреженные параллельные слои, получаем «экспертов», лучшие результаты которых можем обрабатывать далее. В чем отличие от ансамбля? В том, что данные показываем экспертам не все, а разные части. Соответсвенно, обучаем и то, по какому пути пойдем, при активации конкретной части данных
Получается логично взять вместо обычных слоев адаптивные слои и также выбирать лучшего эксперта, но!! Мы же понимаем, что тут получается какое-то противоречие, вроде PEFT методы направлены на уменьшение количества параметров модели, а тут наоборот «ансамбль адаптеров», что никак не уменьшит количество параметров, а дай бог придет количество в 0
Так какие для этого решения?🙂
1. Стохастическая маршрутизация
У адаптера есть up и down, то есть это отдельный слой, который не совпадает по размерности. Мы можем случайно выбирать из множества экспертов up и из множества down (см вложения). Таким образом, мы не добавляем дополнительных обучаемых параметров на задачу выбора эксперта. Такая стахостическая маршрутищация позволяет получить разные представления задачи.
Но как же понять, какой эксперт использовать на инференсе?❔ Именно это решают следующие пункты
2. Consistency regularization
Изменяем формулу loss с применением дивергенции Кульбака-Лейблера (см вложения). Такой подход позволяет шерить информация между адаптерами
3. Усреднение матриц адаптеров
Используется этот пункт только на инференсе. Позволяет не только смягчить несогласованность регуляризацией, но и уменьшить количество потребляемых FLOPs на инференсе
Такой подход позволяет добиться результатов выше, чем обычные PEFT методы, а также его прелесть в том, что мы можем таким образом работать не только с адаптерами, но и, со всеми любимой LoRA. Ведь по сути, нам нужно только выбрать экспертные слои😮
🖥 код
#PEFT
В чем суть MoE бегло? Из названия в целом понятно. Берем данные, прогоняем через разные разреженные параллельные слои, получаем «экспертов», лучшие результаты которых можем обрабатывать далее. В чем отличие от ансамбля? В том, что данные показываем экспертам не все, а разные части. Соответсвенно, обучаем и то, по какому пути пойдем, при активации конкретной части данных
Получается логично взять вместо обычных слоев адаптивные слои и также выбирать лучшего эксперта, но!! Мы же понимаем, что тут получается какое-то противоречие, вроде PEFT методы направлены на уменьшение количества параметров модели, а тут наоборот «ансамбль адаптеров», что никак не уменьшит количество параметров, а дай бог придет количество в 0
Так какие для этого решения?
1. Стохастическая маршрутизация
У адаптера есть up и down, то есть это отдельный слой, который не совпадает по размерности. Мы можем случайно выбирать из множества экспертов up и из множества down (см вложения). Таким образом, мы не добавляем дополнительных обучаемых параметров на задачу выбора эксперта. Такая стахостическая маршрутищация позволяет получить разные представления задачи.
Но как же понять, какой эксперт использовать на инференсе?
2. Consistency regularization
Изменяем формулу loss с применением дивергенции Кульбака-Лейблера (см вложения). Такой подход позволяет шерить информация между адаптерами
3. Усреднение матриц адаптеров
Используется этот пункт только на инференсе. Позволяет не только смягчить несогласованность регуляризацией, но и уменьшить количество потребляемых FLOPs на инференсе
Такой подход позволяет добиться результатов выше, чем обычные PEFT методы, а также его прелесть в том, что мы можем таким образом работать не только с адаптерами, но и, со всеми любимой LoRA. Ведь по сути, нам нужно только выбрать экспертные слои
#PEFT