gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24.1K subscribers
2.72K photos
2 videos
3 files
1.34K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
13💔6
Пользуясь случаем, напомню, что вы можете поддержать наш канал, если он вам полезен и вам нравится, что я делаю.

У канала есть Патреон (https://patreon.com/GonzoML), и я также завёл Boosty (https://boosty.to/gonzoml), если это более удобно.

Спасибо за то, что вы с нами :)
223
Навигация по работам с NeurIPS 2024

https://jalammar.github.io/assets/neurips_2024.html
👍14
взгляд сверху
👍23
Ждём o3 в следующем году (имя o2 решили пропустить). Разработка софта явно изменится. Да уже изменилась, но это только начало.

https://openai.com/12-days/
🤯22😍4👍3
И ARC challenge тоже большой привет!

https://www.youtube.com/watch?v=SKBG1sqdyIU
🤯17🔥4👍1👏1
Картинка с деньгами ещё лучше

https://arcprize.org/blog/oai-o3-pub-breakthrough
🤯19👍5😁4🤔3🤮1
Forwarded from e/acc
o3 на 175 месте в Codeforces, то есть примерно 175й сильнейший программист во всем мире.

Это лучше 99,9% участников рейтинга (а все из них — это профессиональные программисты).

Живые участники рейтинга, у которых с 1 по 100 место — это люди, которые выигрывали золотые медали по информатике и продолжали профессионально участвовать в соревнованиях после школы/универа.
🗿98🔥36🤡14👍5🌚3💩21😭1
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, разбиение по пробельным символам, которые скорее всего являются естественными границами в предложении. Но это может плохо работать с некоторыми языками и доменами. Ну и менять размер патча нельзя.
14👍2014🔥1
Entropy Patching -- это более интересный вариант и по сути data-driven подход, использующий оценки энтропии для определения границ. Обычно первые байты в словах сложнее всего предсказать и их энтропия максимальна, дальше она падает, потому что всё понятно. Для получения оценок энтропии обучают маленькую побайтовую авторегрессионную языковую модель на том же корпусе, что и сам трансформер, и затем через её вероятности считают энтропию следующего байта. Дальше, надо как-то поделить последовательность на токены. Например, можно определять границы токенов по превышению энтропией заданного глобального порога. Другой метод определяет высокую относительно предыдущей энтропию, то есть точки, в которых ломается примерно монотонное снижение энтропии (по сути дельта энтропий двух последних символов больше заданного порога). Это всё можно делать лёгкой предобработкой в дата лоадере.

Между патчами и токенами (например, BPE) есть существенная разница в том, что в случае токенов LLM не имеет доступа к побайтовым фичам (и в частности не знает, сколько там букв R). BPE также не удовлетворяет свойству инкрементальности патчинга, то есть он не должен зависеть от будущих частей последовательности. BPE может токенизировать один и тот же префикс по-разному, в зависимости от того, что находится дальше. Для BLT это не подходит, трансформер должен в моменте решить, есть ли на текущем байте граница патча или нет.

Теперь собственно к BLT.

Latent Global Transformer -- это обычный большой и тяжёлый авторегрессионный трансформер, который маппит последовательность репрезентаций входных патчей в последовательность репрезентаций выходных патчей. Эта модель использует block-causal attention mask, которая ограничивает внимание позициями до (и включая) текущего патча в текущем документе. В этой модели и расходуются основные FLOPS.

Local Encoder -- это лёгкий трансформер с гораздо меньшим числом слоёв, который маппит последовательность входных байт в репрезентации патчей. Особенность этого энкодера в том, что после каждого трансформерного слоя там стоит cross-attention, задача которого пулить байтовые репрезентации в репрезентации патчей.

Трансформерный слой использует local block causal attention mask, где каждый байт может “смотреть” на окно фиксированного размера из предшествующих байт (пересечения границ патчей допустимы).

Байтовые эмбеддинги довольно хитрые, аугментируются хешированными эмбеддингами. Для каждого байта считаются n-граммы от предыдущих байт (байтграммы) для n=3..8, через хэш-функцию маппятся в таблицу эмбеддингов фиксированного размера, и добавляются к эмбеддингам байтов перед тем, как отправиться в локальный энкодер. Кроме n-граммных эмбеддингов пробовали также frequency based.

Encoder Multi-Headed Cross-Attention очень похож на входной кросс-аттеншн Perceiver (https://news.1rj.ru/str/gonzo_ML/545, https://news.1rj.ru/str/gonzo_ML/700), только latents теперь не фиксированный набор, а соответствуют репрезентациям патчей и смотрят только на байты из данного патча. Query вектора соответствуют патчам, а Key/Value -- байтам, поэтому и cross attention.

Local Decoder -- тоже лёгкий трансформер, который декодирует последовательность репрезентаций патчей в выходные байты. Предсказывает последовательность выходных байтов как функцию уже декодированных байтов и берёт на вход скрытые репрезентации байтов из локального энкодера. Здесь тоже чередование трансформера и кросс-аттеншна (теперь в качестве Q репрезентации байтов, а K/V -- патчей), и начинается с кросс-аттеншна.

Взяли датасеты от Llama 2 на 2T токенов и новый BLT-1T на 1T. Энтропийная моделька это трансформер на 100M параметров, 14 слоёв, 512 размерность скрытого состояния и внимания со скользящим окном в 512. Трансформерные блоки в целом следуют рецептам Llama 3.

Обучали семейство моделей размером 400M, 1B, 2B, 4B и 8B.
14🔥4👍2
Обучили compute-optimal BPE and BLT модели размеров 1B-8B. BLT либо соответствует, либо превосходит BPE модели, и сохраняет это свойство на скейлинге. Заявляют, что BLT -- это первый byte-level трансформер с такими же трендами масштабирования, как у BPE-трансформеров в compute-optimal режиме.

Попутно лишний раз подтвердили, что токенизация влияет -- модели с токенизатором от Llama 3 превосходят модели с токенизатором от Llama-2 на одинаковых данных.

В режиме beyond the compute optimal ratio BLT-Entropy обученная на 4.5T байт обошла Llama 3 на 1T токенов, при одинаковых FLOPS.

У BLT моделей появляется дополнительное измерение скейлинга, можно увеличивать размер модели одновременно с размером патча при том же бюджете. Большие патчи экономят компьют, и его можно направить на рост латентного трансформера, который будет вызываться реже. Кривая скейлинга у BLT сильно лучше BPE. На малых бюджетах BPE лучше, но BLT быстро обгоняет.

На задачах про устойчивость к шуму на уровне байтов BLT рулит, иногда очень сильно перебивая Llama 3.1, обученную на в 16 раз больше токенов. На переводе в 6 распространённых языков и 21 низкоресурсных BLT тоже лучше по BLEU.

Ещё интересный эксперимент с инициализацией глобального трансформера в BLT из предобученной (на токенах) Llama 3.1. Такой BLT существенно превосходит BLT или Llama 3, обученные с нуля (соответственно на байтах и токенах). Всё с тем же бюджетом FLOPS. В принципе это можно использовать для конвертирования моделей с токенизатором в BLT. Жду волны конвертаций-файнтюнов известных моделей. Ещё это наверное что-то говорит про универсальность вычислений в стволе трансформера, которые в общем к токенам не супер сильно привязаны, получается.

В общем это всё очень интересно. Мне нравится такая движуха, токенизатор всегда для меня выглядел костылём, прикрученным сбоку. Я думаю, переход на такие модели должен дать буст мультиязычности, когда из-за плохих токенизаторов, не обученных на редких языках, эти языки сильно проседали, хотя могли бы и не. И совместимость разных моделей, наверное, тоже возрастёт. И наконец будет меньше дурацких примеров типа strawberry.

С прайсингом коммерческих моделей только непонятно, за что теперь чаржить будут, не за латентные патчи же, народ не поймёт. Неужели наконец за понятные байты или ещё лучше символы?
👍3113🔥12