Как стать автором
Обновить
24
0
Денис Кузнеделев @19blackadder97

Сжимаю нейросети я ради забавы

Отправить сообщение

Спасибо за интересную статью, захотелось сразу заботать наконец RL.

Кажется, что KL дивергенция должна быть вне знака матожидания в разделе про DPO, то есть минимизируемый функционал \mathbb{E}_{\pi_{\theta}(s|a)} \Vert r_{\psi}(s|a) \Vert - \beta KL (\pi_{\theta}(s|a) | \pi_{SFT}(s|a)).

Матожидание по (\pi_{\theta}(s|a) уже стоит по факту перед логарифмом в KL-дивергенции.

и одну книгу...

проблема есть - поиск оптимальной подсети, даже для одного линейного слоя - NP-сложная задача

Ряд современных подходов использует дистилляцию для обучения дифференцируемых параметров. AQLM и QuIP# оптимизируют L2 лосс между выходами исходной float модели и квантизованной после каждого блока трансформера, а затем минимизируют кросс-энтропию/kl-дивергенцию между выходами квантизованной модели и исходной. Довольно неплохо накидывает в качестве, и при этом сравнительно дешево. В этих подходах - векторная квантизация, когда квантуются веса не поодиночке, а группами (обычно по 8 подряд идущих весов).

В более классических подходах, рассмотренных в статье, можно обучать скейлы квантизации (своеобразный PEFT). И еще layernorm-ы, biasы, входные эмбеддинги и голова модели обычно держат в исходной точности.

Спасибо за статью - довольно подробный и интересный разбор с описанием функционала различной сложности.

В плане производительности существует ряд других альтернатив с быстрым препроцессингом изображений:

  • FFCV

  • DALI Интересно было бы видеть сравнение kornia c данными библиотеками. Правда, функционал kornia значительно шире, чем у приведенных альтернатив.

А вы используете какие-то кастомные ядра, типа Sputnik, SparTA, или nmSparse? Произвольный паттерн прореживания ускоряется не очень хорошо. 2:4 sparsity можно ускорить на Nvidia GPU, начиная с Ampere, но там ускорение порядка 20-30% обычно.

Большие языковые модели дают новое дыхание прунингу, так как многие вычисления memory, а не compute bound, за счет меньшего количества операций с памятью.

Структурированный прунинг дает действительно ускорение почти автоматически, но сжимать целые каналы и размерности обычно куда тяжелее. 30-40% ускорения при сохранении качества не реальной задаче - это хороший результат, и требует обычно серьезного дообучения.

В разделе, посвященном первой статье, возникает где-то посередине картинка (блок-схема) с комментариямии на английском. Это не фича, а баг, в редактируемой версии ее просто не существует.

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

У знаменитого AI блогера Янника Килхера есть про это даже видео.

Здесь неплохой туториал по эффективному по времени и памяти. Рассказывается про стандарнтый способы уменьшить расход памяти - переход в half precision, gradient checkpointing, gradient accumulation и т.д.

Спасибо за статью. Есть пара вопросов.

А вы проводили ablation study? Типа что будет, если убирать по отдельности CE1, CE2, CE3, CE4?

Мне кажется, что конкатенация трех эмбеддингов возможно грубоватый метод. Можно было бы попробовать что-нибудь в духе Perceiver - иметь изначально какие-то обученные токены, и делать cross-attetion между этими токенами и эмбеддингами картинки и текста, а затем уже поверх них ставить ArcFace.

Да, похоже , пространство параметров в архитектурах еще мало исследовано. Здесь, правда замечу, что разница все же не так велика в производительности Swin и их ConvNext, более того, если сравнивать с XCiT, то они выйдут круче обоих моделей.

Стрелочка вверх означает разрешение 384x384, а \Ipsilon - дистилляцию
Стрелочка вверх означает разрешение 384x384, а \Ipsilon - дистилляцию

Справедливости ради надо заметить, они с обучались дистилляцией с учителем, и разницу может делать именно этот факт.

А вообще, кажется что оптимальная архитектура бы брала лушчее из двух миров - свертки с сильным inductive bias и attention со свойством улавливания глобального контекста.

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

Спасибо! Кажется, где-то мелькало мимо меня, но пристально не изучал. Стоит присмотреться)

Я бы сказал, что религия была лишь видимой причиной и оправданием Гугенотских войн, да и вообще всех конфликтов католиков и протестантов в Новое время. Протестантизм появился в это время, не потому, что всех достали католики и роскошь в образе жизни каноников, а как конфликт буржуазии (чьи доходы и имущество были получены за счет торговли) с родовой Средневековой аристократией.

В целом да, выигрыш от использования прунинга обычно не так велик, как можно было бы наивно думать.

Но все же можно добиться заметной пользы. Есть стартап neural magic и для некоторых моделей они добиваются серьезного ускорения за счет прунинга + квантования. На классификации и детекции ускорение серьезное (если верить цифрам).

Идея сделать предобучение, как BERT, выглядит естественно, но вот главный вопрос был в том к поставить задачу, чтобы представить картинку как слово. Авторы BeiT придумали хорошее решение с подачей патчей в дискретный автоэнкодер, и, как я понял, их решение достаточно быстро файнтьюнится на ImageNet и сегментации. Работает даже немного лучше, чем DINO, судя по табличкам в их статье.

Еще есть свежий результат в этом направлении - Masked Autoencoders Are Scalable Vision Learners. Тут авторы маскируют большой процент (75% токенов) прогоняют через энкодер незамаскированные патчи и декодером восстанавливают картинку на предобучении. На файнтьюнинге используется только энкодер со всей (незамаксированной картинкой).

Ух, куда же я смотрел в этот момент) Действительно, EfficientNet выходит круче. Интересно, что в плане throughput таблица наиболее выигрышная для них, хотя, казалось бы, что он должен напрямую зависеть от FLOPs.

С квантизацией не доводилось особо работать. Могу предположить, что причина падения качества - более резкие оптимумы по сравнению с сверточными сетями (большая кривизна босс-поверхности). Вероятно, если брать модели, обученные с помощью SAM, они будут лучше квантоваться. Возможно ли дообучение квантованных моделей в низкой точности?

По личному опыту еще могу сказать, что visual transformer плохо прунится. Если ResNet можно запрунить без потери качества достаточно сильно, EfficientNet и NFNet не так хорошо, в силу их оптимизированности, до 70-80% обычно качество не проседает, а при небольшом прореживании качество слегка растет даже на валидации, то для ViT (DeiT, Swin) я наблюдал монотонное ухудшение качества и модель c 50% весов уже теряет пару процентов на ImageNet.

Очень познавательно! Действительно, интересные работы. Кажется, что практика сильно убежала вперед теории. Интересно, смогут ли когда нибудь теоретики приблизиться к сколько либо точному предсказанию поведения нейронной сети на реальном датасете при условиях, близких к реальным нейронным сетям (то есть не в пределе NTK или среднего поля, скажем)?

спасибо, про Poolformer не видел статью. Правда, навскидку сравнивая перформанс Poolformer и Swin на ImageNet, кажется, что Swin эффективне выходит (именно Swin а не Swin-Mixer). Про ResNet читал статью - действительно процедура обучения решает многое, и к моменту массового использования ViT у исследователей был большой опыт в подборе сильных процедур обучения. Но все же кажется, что если ViT-ы смогли составить сходу конкуренцию давно развиваемым сверточным сетям, то у них еще большой потенциал для дальнейшего развития.

1

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность