View in Telegram
Byte Latent Transformer: Patches Scale Better Than Tokens Artidoro Pagnoni, Ram Pasunuru, Pedro Rodriguez, John Nguyen, Benjamin Muller, Margaret Li, Chunting Zhou, Lili Yu, Jason Weston, Luke Zettlemoyer, Gargi Ghosh, Mike Lewis, Ari Holtzman, Srinivasan Iyer Статья: https://arxiv.org/abs/2412.09871 Код: https://github.com/facebookresearch/blt Byte Latent Transformer (BLT) -- это интересный заход на отказ от токенизации с фиксированным словарём и про работу на уровне байтов в LLM. Динамически разбиваем входной поток на патчи, определяя их границы по энтропии следующего символа, и на таких патчах и работаем. Если поток данных простой и предсказуемый, можем сделать патчи подлиннее, а если всё сложно, можно выделить больше компьюта на большее количество патчей. Получаем динамическую аллокацию компьюта. Интересная нетривиальная работа. Теперь к деталям! Токенизаторы -- это вообще интересная история, которая существует рядом с красивым и дифференцируемым end-to-end обучением трансформеров и разрушает эту идиллическую end-to-end картину. Токенизаторы тоже обучаются, но делается это не бэкпропом, а относительно простым алгоритмом, который выбирает наиболее часто встречающиеся последовательности в языке и составляет из них словарь, обычно заранее заданного размера. Про токенизаторы иногда забывают, но это безумно важная компонента, потому что при плохой токенизации сильно страдает итоговое качество различных задач. Например, сложно учить трансформер выполнять арифметические операции, если числа токенизируются не по отдельным цифрам, а по произвольным кускам из нескольких. Другой типовой пример, применение модели к языкам, на которых токенизация не очень обучалась, тогда слова разбиваются на токены, не отражающие реальной языковой картины и не соответствующие ничему осмысленному. История про ошибочный подсчёт букв “r” в слове “strawberry”, кажется, тоже с этим связана. Были попытки это преодолеть и обучать модели на байтах или UTF-8 символах, но основная проблема в том, что размер последовательности от этого сильно растёт. Это сейчас вон, до 2M контексты, но оно только недавно появилось, да и дорого довольно. Ещё, конечно, неплохо избавиться от огромных софтмаксов на размер словаря… Входные и выходные таблицы эмбеддингов могут быть очень немаленькими. Всегда есть трейдофф между размером словаря и вычислениями. Увеличивая словарь мы увеличиваем среднюю длину токена, что уменьшает число элементов в последовательности, с которой работает модель. Но это же увеличивает размерность финального слоя проекции, так что сильно тут не поиграешь. У Llama 3 размер эмбеддингов увеличился в 4 раза относительно Llama 2 при росте среднего размера токена от 3.7 до 4.4. Идея, что модель должна динамически аллоцировать компьют там, где он нужен, привела к архитектуре Byte Latent Transformer (BLT), в которой три трансформерных блока: две маленьких локальных byte-level модели и большой глобальный латентный трансформер (latent transformer). Латентный трансформер оперирует репрезентациями патчей, а две локальные модели занимаются кодированием последовательности входных байт в патчи и репрезентаций патчей обратно в байты. Есть множество способов разбить входной байтовый поток на патчи. Простейший вариант -- Strided Patching Every K Bytes, патчи фиксированного размера, k байт. Можно контролировать количество вычислений, задавая размер патча. Но динамической аллокации компьюта нет, а хотелось бы выделять побольше на сложные участки, и поменьше на простые. Другая проблема -- неконсистентное разбиение одних и тех же слов в зависимости от их позиции. Непонятно какой от этого профит кроме вреда. Более понятный вариант -- Space Patching, разбиение по пробельным символам, которые скорее всего являются естественными границами в предложении. Но это может плохо работать с некоторыми языками и доменами. Ну и менять размер патча нельзя.
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily