Авторы: Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика. Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Интересный talk про использование нейросетевых моделей для интерпретации данных и открытия физических законов. В этой парадигме данные сначала обучают нейронку (происходит сжатие), а затем обученная нейронка дистиллируется в теорию (через символьную регрессию, например https://github.com/MilesCranmer/PySR этого же автора).
Вторая часть рассказа про важность foundation models и про проект Polymathic AI (https://polymathic-ai.org/) нацеленный на обучение foundation models для физики. Из прикольного, рандомная инициализация — очень плохой prior. Даже предобучение на видео котиков даёт сильно лучший результат.
В целом я тоже до сих пор восхищаюсь, как задача "всего лишь" предсказания следующего токена даёт нам такие офигительные модели.
https://www.simonsfoundation.org/event/the-next-great-scientific-theory-is-hiding-inside-a-neural-network/
We evaluated 3 systems (ELIZA, GPT-3.5 and GPT-4) in a randomized, controlled, and preregistered Turing test. Human participants had a 5 minute conversation with either a human or an AI, and judged whether or not they thought their interlocutor was human. GPT-4 was judged to be a human 54% of the time, outperforming ELIZA (22%) but lagging behind actual humans (67%).
https://arxiv.org/abs/2405.08007
:)
В последние дни много разговоров про исход AI-safety related людей из OpenAI. Вчера ушли руководители направления Superalignment (https://www.businessinsider.com/openai-leadership-shakeup-jan-leike-ilya-sutskever-resign-chatgpt-superalignment-2024-5) Суцкевер и Лейке, до этого ушли другие люди (https://www.businessinsider.com/openai-safety-researchers-quit-superalignment-sam-altman-chatgpt-2024-5), работавшие над governance, в частности Daniel Kokotajlo, написавший про это "Quit OpenAI due to losing confidence that it would behave responsibly around the time of AGI".
Пользуясь случаем, расшарю прикольный прогноз Daniel Kokotajlo "What 2026 looks like", сделанный в 2021-м:
https://www.alignmentforum.org/posts/6Xgy6CAf2jqHhynHL/what-2026-looks-like
Мы как раз в середине, можете сами оценить.
https://www.youtube.com/watch?v=XEzRZ35urlk
Читать полностью…Пока ждём обещанных новостей, немного лёгкого жанра.
Промпт-инженеры, приготовиться на выход!
https://spectrum.ieee.org/prompt-engineering-is-dead
Потом проверили перплексию и качество на различных downstream задачах. xLSTM почти везде лидирует. На языковых задачах из PALOMA (https://arxiv.org/abs/2312.10523) тоже лучше Мамбы, Ламы и RWKV-4.
Скейлится на 300B токенов тоже хорошо. Интересно, конечно, было бы что-то гигантское обучить, скажем 175B. Но я понимаю, что не у всех бюджеты как у OpenAI или Гугла.
Из главных ограничений пока скорость. sLSTM не параллелится, но быстрая имплементация всего в 1.5 раза медленнее параллельного mLSTM. Этот в свою очередь не оптимизирован и примерно в 4 раза медленнее FlashAttention или реализации через scan в Mamba. Но наверняка можно всё ускорить. Есть ещё некоторые тонкости, перечислены в разделе 5 статьи. По оптимизации и поиску хороших гиперпараметров явно ещё поле непаханое.
Официального кода вроде нет, но вот начались народные попытки воспроизвести, например, mLSTM (https://github.com/andrewgcodes/xlstm).
В общем имеем RNN, которая выглядит не хуже трансформеров и SSM. Ждём продолжений! И кода.
Long live RNN!
xLSTM: Extended Long Short-Term Memory
Maximilian Beck, Korbinian Pöppel, Markus Spanring, Andreas Auer, Oleksandra Prudnikova, Michael Kopp, Günter Klambauer, Johannes Brandstetter, Sepp Hochreiter
Статья: https://arxiv.org/abs/2405.04517
Новый улучшенный LSTM от автора старого LSTM! Вэлкам extended LSTM, xLSTM!
Цель авторов — понять, докуда можно прокачать языковое моделирование на LSTM, если отскейлить их до миллиардов параметров, перенять все передовые наработки из LLM и устранить известные узкие места.
LSTM оказались суперуспешны и выдержали проверку временем. “The most cited NN of the 20th century” (https://people.idsia.ch/~juergen/most-cited-neural-nets.html) как никак.
Напомню, что LSTM в оригинале (1997, https://direct.mit.edu/neco/article-abstract/9/8/1735/6109/Long-Short-Term-Memory) создавался для борьбы с затухающими (или взрывающимися) градиентами. В отличие от обычной RNN (где было только скрытое состояние h) в LSTM добавлена скалярная ячейка памяти (и здесь теперь одновременно есть c и h) и то что называлось constant error carousel (CEC) для обновления её состояния, изначально это было рекуррентное соединение с весом 1.0 на своё же прошлое состояние. В изначальной модели также были два управляющих процессом гейта, input и output. Input gate защищал память от влияния нерелевантных данных, output gate защищал другие ячейки от нерелевантного состояния текущей. Чуть позже (через три года, https://direct.mit.edu/neco/article-abstract/12/10/2451/6415/Learning-to-Forget-Continual-Prediction-with-LSTM) добавился forget gate для сбрасывания состояния памяти, когда надо.
Но у LSTM есть три основных ограничения:
1. Неспособность пересмотреть решение о сохранении данных внутри ячейки памяти. Это демонстрируют на простой задаче поиска ближайшего соседа (Nearest Neighbor Search), где сначала даётся референсный вектор, а далее сканируется последовательность других векторов, и модель должна найти наиболее похожий вектор и вернуть связанное с ним значение, когда последовательность закончится. Когда в последовательности попадается ещё более подходящий вектор, то модель не справляется.
2. Ограниченная память — всё надо впихнуть внутрь скаляра, который хранится в ячейке памяти LSTM. Это демонстрируют на задаче предсказания редкого токена (Rare Token Prediction), где перплексия на токенах из редкого бакета на Wikitext-103 особенно плоха.
3. Плохая параллелизация в силу последовательной обработки скрытых состояний ячейки между соседними временными отсчётами. Состояние зависит от предыдущего через hidden-hidden связи, это так называемый memory mixing.
Авторы предлагают Extended Long Short-Term Memory (xLSTM) с двумя основными модификациями базового уравнения, описывающего работу стандартного LSTM. Одно изменение -- экспоненциальные гейты, другое — новые структуры памяти.
Отсюда рождаются два новых члена семьи LSTM: sLSTM со скалярной памятью, скалярным обновлением и memory mixing, и mLSTM с матричной памятью, covariance update rule через outer product и без memory mixing. Оба варианта с экспоненциальным гейтингом.
В sLSTM добавляются экспоненциальные функции активации на input и forget gate. Также появляется отдельное состояние нормализатора, и чтобы от экспоненты всё не разнесло ещё и состояние стабилизатора. Память — по-прежнему скаляр.
Как и LSTM, sLSTM может иметь множество ячеек памяти (состояние памяти — вектор), где возможен memory mixing через рекуррентные соединения скрытого состояния (h) и гейтов со входами ячейки памяти. Также sLSTM может иметь множество голов с memory mixing внутри головы, но не между головами. Я так понял, что головы задаются структурой блочно-диагональной матрицы, через которую прогоняются все входы, и диагональные блоки задают отдельные головы.
Майские новости
https://blog.google/technology/ai/google-deepmind-isomorphic-alphafold-3-ai-model/
Microsoft что-то замышляет
https://arstechnica.com/information-technology/2024/05/microsoft-developing-mai-1-language-model-that-may-compete-with-openai-report/
Функция активации является суммой базисной функции (играет роль аналогичную residual connection) и сплайна: ϕ(x) = w (b(x) + spline(x)). В качестве базисной функции взяли silu(x), а сплайн -- это линейная комбинация B-сплайнов с обучаемыми коэффициентами. Обучаемый коэффициент w поверх всего как бы избыточен, но его оставили для удобства. Инициализируется w через Xavier initialization, а коэффициенты сплайна — так, чтобы вся функция сплайна на старте была около нуля. Сплайн определяется на ограниченной области, но активации в принципе могут за неё вылезти. Поэтому сетка узлов для сплайна обновляется на лету в соответствии со входными активациями.
Для KAN глубины L (слоёв) и со слоями одинаковой ширины N, а также сплайна степени k (обычно 3) заданного на G интервалах (G+1 точка) общее число параметров O(N^2*L*(G + k)) ∼ O(N^2*L*G). Для MLP такой же ширины и глубины нужно только O(N^2*L) параметров, что получается эффективнее. Но хорошая новость в том, что KAN обычно требует меньших N, что не только экономит параметры, но и улучшает генерализацию (я, кстати, не уверен, почему) и интерпретируемость.
Для повышения точности можно делать grid extension — в уже обученной KAN зафитить более тонкий сплайн в предыдущий более грубый, сделав сетку узлов сплайна более детальной.
У KAN есть внутренние и внешние степени свободы. Внешние -- это структура вычислительного графа, внутренние -- это сетка узлов сплайна внутри функции активации. Внешние отвечают за выучивание композиционной структуры нескольких переменных, а внутренние за выучивание функций одной переменной.
KAN могут быть полезны для интерпретируемости. Если мы не знаем внутреннюю структуру датасета (какова природа данных), можно начать с большого KAN, затем обучать его с регуляризацией для разреженности и затем сделать прунинг. Полученный KAN лучше интерпретировать. Сочетание спарсификации, визуализации, прунинга, символизации могут помочь в этом деле. В каком-то смысле это замена символьной регрессии, которая может помочь найти символьную формулу, описывающую данные. У KAN здесь есть преимущество, пользователь может интерактивно его отлаживать и направлять в нужное русло.
Интересная экспериментальная часть. На задачах регрессии и PDE solving авторы показали, что KAN более эффективны, чем MLP. Учитывая точность решения задачи и число параметров модели, у KAN более хороший Парето фронт.
Сначала проверили на пяти функциях, про которые известно, что для них есть гладкое KA представление. Теоретически лосс для KAN скейлится по степенному закону для -4 степени. В реальности на графиках где-то он к нему приближается (для простых функций), где-то далековат, но всё равно сильно опережает MLP. Особенно огромна разница на многомерном случае с функцией ста переменных.
Затем проверили на специальных функциях, для которых KA представление заранее не известно. KAN снова намного более точны и эффективны. Какие-то компактные KAN-репрезентации находятся, что само по себе интересно и может где-то заменить многомерные look-up таблицы на набор одномерных.
После этого проверили middle ground, когда точная KA-репрезентация неизвестна, но мы можем что-то набросать от руки исходя из природы датасета, пусть и неоптимально. Здесь можно сравнить сконструированные человеком KAN и автоматически обнаруженные через прунинг KAN. Для этого взяты функции из Фейнмановского датасета, собранного из уравнений из его книг. Автоматически обнаруженные KAN в среднем оказались лучше (меньше) ручных. Но вообще явного лидера нет, где-то рулит MLP, где-то KAN. Авторы считают, что датасет простоват для этого.
Во всех трёх задачах, кстати, и KAN, и MLP обучали через LBFGS, то есть метод второго порядка, который для обучения больших сетей обычно не очень применим.
На решении PDE KAN тоже демонстрирует лучшие кривые скейлинга по сравнению с MLP. Меньшая ошибка с меньшей сетью и меньшим числом параметров.
Прекрасное на ночь.
https://www.sscardapane.it/alice-book
Book: Alice’s Adventures in a differentiable wonderlandPermalink
Neural networks surround us, in the form of large language models, speech transcription systems, molecular discovery algorithms, robotics, and much more. Stripped of anything else, neural networks are compositions of differentiable primitives, and studying them means learning how to program and how to interact with these models, a particular example of what is called differentiable programming.
This primer is an introduction to this fascinating field imagined for someone, like Alice, who has just ventured into this strange differentiable wonderland. I overview the basics of optimizing a function via automatic differentiation, and a selection of the most common designs for handling sequences, graphs, texts, and audios. The focus is on a intuitive, self-contained introduction to the most important design techniques, including convolutional, attentional, and recurrent blocks, hoping to bridge the gap between theory and code (PyTorch and JAX) and leaving the reader capable of understanding some of the most advanced models out there, such as large language models (LLMs) and multimodal architectures.
Table of contents
1. Foreword and introduction
2. Mathematical preliminaries
3. Datasets and losses
4. Linear models
5. Fully-connected layers
6. Automatic differentiation
7. Convolutive layers
8. Convolutions beyond images
9. Scaling up models
10. Transformer models
11. Transformers in practice
12. Graph layers
13. Recurrent layers
14. Appendix A: Probability theory
15. Appendix B: Universal approximation in 1D
Book draft: https://arxiv.org/abs/2404.17625
Dejavu Transformers
TransformerFAM: Feedback attention is working memory
Dongseong Hwang, Weiran Wang, Zhuoyuan Huo, Khe Chai Sim, Pedro Moreno Mengibar
Статья: https://arxiv.org/abs/2404.09173
Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention
Tsendsuren Munkhdalai, Manaal Faruqui, Siddharth Gopal
Статья: https://arxiv.org/abs/2404.07143
От Гугла вышли две в чём-то близкие статьи, написанные разными множествами людей, но вероятно всё-таки одной группой, потому что многие из них пересекаются в ещё одной близкой публикации https://arxiv.org/abs/2403.19709.
Обе статьи про трансформеры, которые могут работать с неограниченными по длине последовательностями.
Первая работа про трансформер с Feedback Attention Memory (FAM) применяет механизм внимания к своим собственным латентным репрезентациям через обратную связь. Репрезентации каждого слоя подаются ему же при работе со следующим токеном. Авторы считают, что это ведёт к возникновению рабочей памяти в трансформере.
Про что они пишут, это как бы Block Sliding Window Attention (BSWA) по аналогии с Longformer (/channel/gonzo_ML/292), где в каждый блок добавлены виртуальные активации FAM. Механизм внимания смотрит теперь на текущий блок, предыдущие несколько сегментов (память) и предыдущий FAM (рабочая память, где потенциально всё может накапливаться бесконечно). Затем для текущего блока по его выходам и предыдущему FAM через внимание вычисляется новый FAM, то есть как бы происходит компрессия и обновление памяти. Это идейно напоминает memory tokens предложенные Мишей Бурцевым ещё давно, только с более хитрым механизмом расчёта.
Это похоже на много что известное. Transformer-XL тоже имел память в виде предыдущих сегментов и умел обращаться к активациям более низких уровней из прошлого. TransformerBSWA это практически то же самое, только в отличие от XL, здесь не используется ”stop gradient” на сегменте с памятью. А в TransformerFAM мы уже как бы обращаемся к активациям того же самого уровня.
Реализация этого достигается без добавления новых весов в трансформерные слои, всё работает на конкатенации входных данных блока и FAM, а также модификацией маски внимания, чтобы реализовать FAM. Ну если я правильно всё понял. Экспериментировали с блоками длины 1024 + FAM длины 64. Отдельная хитрая тема, как инициализировать начальный FAM. Сделали это через prompt tuning
Для экспериментов брали модели Flan-PaLM (1B, 8B, 24B). К ней добавляли BSWA или FAM и файнтюнили через LoRA. Для сравнения сделали ещё Transformer-XL, но он по результатам оказался неотличим от BSWA.
Проверяли на retrieval задаче PassKey, сравнивали с BSWA с разным количеством блоков памяти (M1-M12, от 1 до 12 блоков соответственно), FAM всех побил. Также проверили на куче требующих длинного контекста задач, использовавшихся при оценке Gemini. Тут FAM везде бьёт BSWA, где-то заметно, где-то не очень.
Ну то есть типа как бы работает. Но есть вопросы, и их много.
В дополнение к TSMix используется метод KernelSynth, генерящий искусственные данные через гауссовские процессы, где задаётся библиотека ядер (линейное ядро для тренда, RBF для гладких локальных изменений, периодические ядра для сезонных трендов). Ядра сэмплятся (с возвращением) из библиотеки и комбинируются через сложение или умножение. Итоговое ядро используется для генерации последовательности заданной длины.
Датасетов собрано много (всего 55 штук) и разной природы. Часть используется для обучения, другие для оценки.
Обучили модели T5 четырёх размеров (в репе есть и пятый Tiny на 8M): Mini (20M), Small (46M), Base (200M) и Large (710M), а также GPT-2 base (90M). Обучено на 10M TSMix аугментаций из 28 обучающих датасетов и 1M синтетических последовательностей, сгенерённых через Gaussian processes. Смешиваются в пропорции 9:1. Оригинальные данные включались в TSMix с вероятностью ⅓. Батч в обучении был 256 последовательностей. Размер контекста у моделей 512, длина предсказания 64. Обучалось 200K шагов, AdamW. Это одна из первых работ, где я вижу репортинг реальной цены за обучение, от ~250$ и ~8 часов на p4d.24xlarge (8xA100 40GB) для малой модели до 2066$ и 63 часов.
Для сравнения много бейзлайнов, статистических и нейросетевых. Бейзлайны разделены на группы:
1) Локальные модели, оценивающие параметры для каждой последовательности индивидуально
2) Задаче-специфичные, обучаемые (или файнтюн) для каждой задачи отдельно
3) Предобученные модели без задаче-специфичного дообучения, одна модель для всего.
Оценивали как вероятностные (weighted quantile loss, WQL) так и точечные предсказания (mean absolute scaled error, MASE). Всего оценивалось на 42 датасетах разбитых на Benchmark I (In-domain, 15 датасетов) и Benchmark II (Zero-shot, 27 датасетов).
На in-domain Chronos прям хорош. Не только лучше локальных моделей, но и лучше задаче-специфичных. На zero-shot тоже хорош, 2-3 места. Бьёт модели, которые видели в обучении эти задачи. Это прям круто для zero-shot, когда модель такого вообще не видела. А если ещё и зафайнтюнить на эти задачи, то вообще хорошо, лучше остальных.
Интересно, кстати, что декодерная Chronos GPT-2 с 90М параметров отстаёт по качеству от энкодер-декодерных Small (46M) и Mini (20M). Незначительно, но стабильно.
Судя по кривым лосса и метрик, ещё большие модели ещё улучшат результаты. Рандомная инициализация чуть получше старта с предобученных на языке (датасет C4) весов. TSMix + KernelSynth в обучении лучше, чем без одного или обоих, особенно на zero-shot. С увеличением контекста модель предсказывает лучше. С увеличением размера словаря тоже.
Качественно модель неплохо предсказывает различные паттерны: шумовой процесс, тренд, сезонность, комбинированный паттерн, AR-процесс.
Может быть потеря точности из-за квантования или скейлинга (например, на разреженных данных, где среднее низкое, но есть выбросы; или на сильно сдвинутых данных с малой дисперсией), но на реальных данных модель работает хорошо.
Есть ограничения: модель фокусируется на univariate time series и не учитывает никакую дополнительную информацию, которая может иметься. Также отдельная проблема -- скорость инференса. Здесь Chronos ощутимо проигрывает специализированным лёгким моделькам. Зато нет необходимости деплоить 100500 отдельных моделей если что.
В общем интересная модель получилась, надо попробовать на какой-нибудь реальной задаче. Выглядит полезно. Классно что любые свежие архитектурные наработки из NLP могут быть легко перенесены сюда, ибо архитектурных изменений не требуется. Отдельно интересно, что там ценного в выученных репрезентациях, и где они могут быть полезны.
Напоминаю, что поддержать проект можно тут patreon.com/GonzoML
На GPQA тоже есть улучшение до 125 примеров, потом идёт просадка. Unsupervised ICL ведёт себя очень по-разному, закономерности нет, то лучше, то хуже, и обычно хуже Reinforced ICL. Как SoTA здесь заявлен Claude-3 Opus (я только не понял, в режиме zero-shot?), лучший из 125-shot к нему приближается.
Ещё проверили на восьми задачах из Big-Bench Hard. Reinforced ICL превзошёл человеческий 3-shot CoT промпт практически на всех задачах и в целом качество монотонно растёт с ростом числа примеров.
В работе есть анализ поведения модели в режиме ICL при переходе от few-shot к many-shot режиму.
Например, many-shot позволяет устранить bias’ы (сделать unlearning) предобучения за счёт множества примеров. В работе воспроизвели сеттинг другой работы, где метки классов были изменены ротацией ([‘negative’, ‘neutral’, ‘positive’] в [‘neutral’, ‘positive’, ‘negative’]) либо заменены на абстрактные ([‘A’, ‘B’, ‘C’]). Во few-shot режиме качество сильно проседает относительно оригинальных меток, но с ростом числа примеров сильно растёт и догоняет. Model confidence тоже выравнивается.
На других задачах неязыковой природы надо выучивать абстрактные математические функции с числовыми входами. Авторы сфокусировались на функциях чётности и линейной классификации в пространстве высокой размерности. Классификация с ростом числа примеров приближается к бейзлайну в лице kNN. Чётность также заметно улучшается.
Из интересных наблюдений то, что от порядка примеров в промпте очень многое зависит. Причём лучший порядок на одной задаче не факт что будет лучшим на другой.
Также поизучали как связан negative log-likelihood с перформансом модели в режиме ICL. Там существенно полезных для предсказания результатов не обнаружено.
Отдельным непонятным вопросом остался почему иногда при увеличении числа примеров качество ухудшается.
Такие дела. С одной стороны результат ожидаем, с другой -- хорошо, что он широко подтверждён и подкреплён. В реальной жизни, вероятно, многое будет определяться экономикой (как соотносятся затраты на дообучение против затрат на большой контекст) и перформансом (где нужно быть ближе к рилтайму, длинные контексты будут проигрывать, потому что требуют большего времени на обработку -- но тут могут появиться множество оптимизаций). Возможно, это будет хорошим методом для генерации синтетики, где разовые затраты ок, а дальше файнтюним другую модель. Reinforced ICL и Unsupervised ICL тоже могут где-то пригодиться.
В любом случае ICL даёт дополнительную гибкость и универсальность, что должно открыть дорогу новым применениям моделей.
Из других свежих интересностей, HF опубликовал свою открытую реимплементацию Gato (/channel/gonzo_ML/966) под названием Jack of All Trades (JAT).
Пост: https://huggingface.co/blog/jat
И вот этот его пост трёхмесячной давности тоже интересен:
https://www.lesswrong.com/posts/cxuzALcmucCndYv4a/daniel-kokotajlo-s-shortform?commentId=LKThjEJ6W8eQEJiXG
Если совсем кратко, мне понравилось
* про обновления Gemini (улучшенный 1.5 + контекст 2M, Flash, мультимодальный Nano)/Gemma (на подходе 2 + PaliGemma: Open Vision-Language Model)
https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/#exploration
* Veo https://deepmind.google/technologies/veo/
* Project Astra https://www.youtube.com/watch?v=nXVvvRhiGjI
* Железо: Trillium TPU (v6, https://cloud.google.com/blog/products/compute/introducing-trillium-6th-gen-tpus) + Arm-based Axion CPU
GPT-4o looks promising
https://twitter.com/LiamFedus/status/1790064963966370209
Если вы ещё не забили календарь на ближайшую неделю, то напоминаю, что
1. В понедельник 13 мая OpenAI сделает какие-то свои анонсы (https://techcrunch.com/2024/05/10/openais-chatgpt-announcement-what-we-know-so-far/)
2. А во вторник 14 мая будет Google I/O, где Гугл наверняка сделает свои (https://io.google/2024/)
mLSTM (не путать с multiplicative LSTM из https://arxiv.org/abs/1609.07959) выглядит похитрее. Здесь память не скаляр, а матрица C размерности d×d. Авторы описывают работу с памятью в трансформерных терминах с query, key, value. Вытаскивание из памяти реализовано матричным умножением C на q. Для сохранения k,v (каждый из которых вектор размерности d) используется covariance update rule: C_t = C_{t−1} + v_t * k^⊤_t. Используется LayerNorm для k и v, чтобы среднее было нулевым. Как и в sLSTM здесь есть экспоненциальные гейты, отдельное состояние нормализатора и такая же стабилизация.
У mLSTM тоже может быть множество ячеек памяти. Memory mixing здесь нет и множественные головы равнозначны множественным ячейкам. И так как нет рекуррентных hidden-hidden соединений, то возможна формулировка вычислений в параллельной форме.
Если полученные новые варианты вставить в residual blocks (с pre-LayerNorm), то получаются xLSTM блоки, которые можно стыковать. Есть два варианта xLSTM блока: с post up-projection и pre up-projection. Первый (post, как в трансформерах) делает нелинейную суммаризацию прошлого в своём оригинальном пространстве, затем линейно преобразует его в пространство более высокой размерности, применяет там нелинейную функцию активации и переводит обратно в пространство поменьше. Второй (pre, как в SSM) сначала переводит в пространство размерности побольше, там делает суммаризацию, и переводит обратно. См. картинки. Для первого обычно используется sLSTM, для второго mLSTM (в высокоразмерном пространстве матричная память лучше работает).
В отличие от стандартных трансформеров относительно длины последовательности сложность по вычислениям у xLSTM линейная, и по памяти константа. Рекомендуют для edge вычислений, потому что память compressive. mLSTM хорошо параллелится, sLSTM не параллелится.
Главный вопрос — что это всё даёт. В экспериментальной части сосредоточились на языковом моделировании.
В экспериментах используется нотация xLSTM[a:b], где отношение a/b отвечает за количества mLSTM/sLSTM блоков. Так, если всего в xLSTM 48 блоков, то для xLSTM[7:1] это значит, что есть 42 mLSTM и 6 sLSTM.
Сначала проверили на задачах с формальными языками, где должна быть видна способность решать state tracking problems. Бейзлайны достойные: Llama, Mamba, Retention, Hyena, RWKV-4/5/6. Результаты подтверждают, что трансформеры и SSM фундаментально менее мощные, чем RNN (полезное видео для интересующихся https://www.youtube.com/watch?v=4-VXe1yPDjk и статья https://arxiv.org/abs/2404.08819; также см /channel/gonzo_ML/1049 про иерархии Хомского). Также видно, что sLSTM обходит mLSTM.
Затем потестили на Multi-Query Associative Recall task, когда демонстрируются до 256 key,value пар в последовательности и они должны быть запомнены для последующего retrieval’а. Трансформер тут золотой стандарт, из всех нетрансформерных (Mamba, RWKV-5, RWKV-6, xLSTM[1:1], xLSTM[1:0]) лучше оказалась xLSTM[1:1].
На задачах из Long Range Arena (Retrieval, ListOps, Image, Pathfinder) чуть лучше Мамбы и ещё лучше RWKV.
Наконец языковое моделирование. Обучали на 15B токенов из SlimPajama, сравнивали со многими свежими моделями (GPT-3, Llama, H3, Mamba, Hyena, RWKV, RetNet, HGRN, HGRN2, GLA), сходу нет только какого-нибудь Griffin (но его официальной открытой имплементации так понимаю нет). Модели сопоставимы с GPT-3 с 350M параметров. По итоговой перплексии в топе xLSTM[1:0] и xLSTM[7:1].
Кривая скейлинга (до 2.7B) выглядит хорошо, лучше Llama, Mamba, RWKV-4.
Сделали абляции постепенно трансформируя ванильный LSTM в xLSTM. Экспоненциальные гейты и матричная память сильно добавляют качества.
Далее увеличили объём обучающих данных до 300B токенов (такие же числа использовались в Mamba и Griffin). В сравнении участвовали xLSTM, RWKV-4, Llama, Mamba как лучшие представители в своих классах. Обучали модели размеров 125M, 350M, 760M, 1.3B.
На обученном контексте в 2048 проверили экстраполяцию на большую длину, до размера 16384 у xLSTM всё хорошо.
В продолжение зарождения бурно развивающейся области :)
Обновляемая подборка ресурсов по KAN
https://github.com/mintisan/awesome-kan
Любопытное развитие KAN (/channel/gonzo_ML/2598) с заменой B-сплайнов на полиномы Чебышёва
https://github.com/SynodicMonth/ChebyKAN
Интересный эксперимент с continual learning и catastrophic forgetting. На игрушечном датасете с пятью последовательными гауссовыми импульсами, которые предъявляются один за другим, KAN не забывает прошлое, ремоделируя только новый регион с данными, а MLP разносит в попытке ремоделировать всё.
Отдельная глава посвящена интерпретируемости KAN.
На простых supervised игрушечных функциях типа f(x, y) = xy и несколько посложнее KAN после прунинга находит подходящую структуру.
На unsupervised игрушечных задачах KAN тоже может найти группы зависимых переменных, что полезно для исследования.
Этот подход применили к той же задаче из теории узлов, к которой подходил DeepMind (https://www.nature.com/articles/s41586-021-04086-x). KAN переоткрыл те же результаты с более мелкой сетью и в более автоматизированном режиме. Хорошая новость для автоматизированной науки.
Авторы идут дальше оригинальной статьи DeepMind предлагая концепцию “AI for Math”, где они целятся в более широкое применение KAN в unsupervised режиме для обнаружения большего числа математических отношений. В теории узлов я не специалист (и даже не начинающий), комментировать нормально это не смогу. Вроде как KAN переоткрыл сколько-то известных вещей, но не открыл нового. Авторы надеются в будущем на более глубокие KANы.
Другая практическая научная задача из физики, к которой применили KAN, это Anderson localization. В этом я тоже пока не разбираюсь, но вроде как KAN весьма неплох.
Кроме KAN авторы предложили ещё LANs, Learnable activation networks. В целом learnable activations это уже довольно старая тема, здесь было много работ. LAN — это упрощённый вариант KAN, или скорее усложнённый вариант MLP с обучаемыми функциями активации, заданными сплайнами. Функции активации сидят в узлах вычислительного графа как в MLP, не на рёбрах как в KAN. LAN менее интерпретируемы, чем KAN в силу наличия матриц весов.
В общем работа мне нравится, это выглядит как интересное и полезное развитие архитектур и реально что-то новое в отличие от 100500 может быть важных, но всё равно минорных модификаций трансформеров. Другое новое, что тоже уже давно происходит — это развитие SSM (/channel/gonzo_ML/2148) и воскрешение RNN (/channel/gonzo_ML/2500).
KAN пока ещё только в начале пути, математическое понимание их ещё очень ограничено. Теорема Колмогорова-Арнольда соответствует KAN структуры [n, 2n+1, 1], что очень ограниченный подкласс всех KAN’ов (часть из которых показала интересные результаты в данной работе). Ожидаю вала работ по углублению понимания и применения. В то же время ожидаю работ в стиле “MLPs strike back”, где очередные изменения в MLP улучшат их результаты на перечисленных задачах.
Авторы собрали код в библиотеку с забористым названием pykan (https://github.com/KindXiaoming/pykan). Есть набор туториалов (https://github.com/KindXiaoming/pykan/tree/master/tutorials) и ноутбук для старта (https://github.com/KindXiaoming/pykan/blob/master/hellokan.ipynb). Доки тут (https://kindxiaoming.github.io/pykan/).
Пока главная практическая проблема с KAN — это медленное обучение, обычно в десяток раз медленнее MLP с тем же количеством параметров. Другое дело, что для качественного решения многих задач из работы параметров для KAN нужно сильно меньше. Ну и инженерные наработки тоже скоро подоспеют. Уже есть efficient-kan (https://github.com/Blealtan/efficient-kan) и FourierKAN (https://github.com/GistNoesis/FourierKAN). Это только начало!
Напоминаю, что поддержать проект можно тут patreon.com/GonzoML
KAN: Kolmogorov-Arnold Networks
Ziming Liu, Yixuan Wang, Sachin Vaidya, Fabian Ruehle, James Halverson, Marin Soljačić, Thomas Y. Hou, Max Tegmark
Статья: https://arxiv.org/abs/2404.19756
Код: https://github.com/KindXiaoming/pykan
Docs: https://kindxiaoming.github.io/pykan/
Twitter: https://x.com/zimingliu11/status/1785483967719981538 Yes, we GAN! Yes, we KAN!
Свежую статью про KAN не расшарил за последние дни только ленивый (я — ленивый). Но обзоров по сути при этом довольно мало. Попробуем.
Авторы предлагают альтернативы классическим многослойным персептронам (MLP) под названием сети Колмогорова-Арнольда (Kolmogorov-Arnold Networks, KANs). Идея в том, что фиксированная для нейрона в MLP функция активации в KAN переезжает в изменяемую часть и становится обучаемой функцией (параметризуется сплайном) вместо веса. Это вроде бы небольшое изменение приводит к большой разнице.
Если отойти на шаг назад, то классические MLP опираются на Универсальную теорему аппроксимации (Universal Approximation Theorem, UAT), она же Теорема Цыбенко (https://web.njit.edu/~usman/courses/cs675_fall18/10.1.1.441.7873.pdf), говорящая, что однослойная сеть прямого распространения с сигмоидальной функцией активации может аппроксимировать любую непрерывную функцию многих переменных с любой заданной точностью при условии достаточного количества нейронов и правильного выбора весов. После этой теоремы было и много других её вариаций (https://en.wikipedia.org/wiki/Universal_approximation_theorem). Сам Джордж Цыбенко, кстати, ныне здравствующий американский математик и инженер (https://engineering.dartmouth.edu/community/faculty/george-cybenko) в том самом Дартмуте, где родился искусственный интеллект. Ну, полезная в общем теорема, даёт нам надёжный базис для использования нейросетей.
Есть на свете другая интересная теорема, Теорема Колмогорова-Арнольда (Kolmogorov-Arnold representation theorem, KART) или Теорема суперпозиции (https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem). Эта теорема гласит, что непрерывная функция многих переменных может быть представлена суперпозицией непрерывных функций одной переменной. То есть как бы все функции многих переменных можно записать с использованием функций одной переменной и сложения. Из интересного, в UAT равенство приближённое, а в KART строгое.
Если посмотреть на графы активаций, текущие через сеть, то в случае MLP они текут через обучаемые веса (находятся на рёбрах графа) и попадают в фиксированные функции активации (находятся в узлах). В случае KAN они текут через обучаемые функции активации на рёбрах (линейных весов как таковых уже нет), а в узлах просто суммируются.
Обучаемые одномерные функции активации на рёбрах графа параметризуются B-сплайнами. Для простого двуслойного KAN для n входов есть 2n+1 скрытых узлов, где происходят суммирования двух функций на рёбрах, которые затем суммируются в одно число через другие обучаемые рёбра. На картинке это проще, чем текстом.
Эту архитектуру KAN авторы обобщают до произвольных глубины и ширины сети. Оригинальная версия теоремы Колмогорова-Арнольда соответствует двухуровневой KAN (может быть описана списком размерностей слоёв [d, 2d+1, 1]), более общей версии теоремы для более глубоких сетей вроде как неизвестно, поэтому до конца не ясно как именно углублять и расширять. Но по аналогии с MLP они предлагают рецепт — simply stack more KAN layers! Кто хочет более технической нотации, в работе расписаны матрицы функций, описывающие слои KAN, а также композиция нескольких слоёв.
Все операции внутри KAN дифференцируемы, так что его можно обучать бэкпропом.
Во-первых, три года назад такое уже было (Анжела Фан, Эдуард Грейв и ко, /channel/gonzo_ML/508), но авторы относят эту работу (как и Recurrent memory transformer, RMT, Миша Бурцев и ко) к категории, где верхний уровень залинкован на нижний, и нету связи между промежуточными нейронами. В случае RMT это наверное верно (Миша, поправь меня если что), но для работы Анжелы Фан это вообще говоря не так, так агрегируются репрезентации всех уровней и агрегат получают тоже все уровни (см. картинку тут /channel/gonzo_ML/510). То есть в текущей работе как бы то же самое, но без агрегации всех уровней, только с агрегацией внутри уровня. Ещё это похоже на другую ещё более старую работу того же Эдуарда Грейва про Continuous Cache (/channel/gonzo_ML/516), тогда это применялось ещё к RNN. Ещё одно, на что это всё похоже, это DeepMind’овский Compressive Transformer (/channel/gonzo_ML/165), где память копилась внутри каждого слоя (см. /channel/gonzo_ML/166). Выглядит всё в общем как вариация на тему и непонятно, почему этим работам отведено так мало места или они описаны как сильно другие. Про работу Анжелы Фан в двух местах вообще сказаны разные вещи (и обе неправильные):
“The first approach is linking the topmost layer to the bottommost (Fan et al., 2020; Bulatov et al., 2022). However, this cannot model feedback between interneurons, and this has only one global working memory.”
“There have been attempts to incorporate feedback mechanisms into the Transformer, but most of them involve feeding the output activations from the top layer to the bottom (Bulatov et al., 2022; Chevalier et al., 2023) or to intermediate layers (Fan et al., 2020).”
Во-вторых, ну классно, что сравнили с BSWA, но было бы реально интересно сравнить со всем перечисленным. Я ставлю на то, что оно не лучше, ибо и относительно BSWA разница не везде заметная. Уж Compressive Transformer то можно было бы проверить, как никак тоже внутри Гугла сделан. Про него сказано так:
“There were papers that compressed information blockwise (Rae et al., 2019; Guo et al., 2019; Gupta & Berant, 2020; Mohtashami & Jaggi, 2023; Mu et al., 2023). However, in those papers, the information was not propagated infinitely“
Я честно говоря не понимаю, почему в Compressive Transformer информация распространяется менее infinitely. В деталях предложенный механизм конечно отличается, но я не удивлюсь, если математически он сводится к тому же, не чувствуется концептуальной разницы. Если кто более умный видит разницу, подсветите плиз.
Вторая работа “Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention” (https://arxiv.org/abs/2404.07143) делает что-то очень похожее. Она прям явно добавляет compressive memory к механизму внимания. Глубоко разбирать не хочется, вот тут есть готовый разбор: /channel/quant_prune_distill/247.
Про Compressive Transformer в статье сказано:
“However, the previous segment-level compression methods, including Compressive Transformers (Rae et al., 2019) still discard the memory entries of old segments in order to free up space for the new ones, limiting their context window to the most recent segments. This is in contrast to our Infini-attention that computes incremental memory updates to a fixed amount of memory parameters in a recurrent fashion.“
При этом в самой работе про Compressive Transformer явно написано:
“The TransformerXL discards past activations when they become sufficiently old (controlled by the size of the memory). The key principle of the Compressive Transformer is to compress these old memories, instead of discarding them, and store them in an additional compressed memory.”
Сравнения с ним тоже конечно нет, даже на его родном датасете PG19.
Я не понял прикола. Такое чувство, что у авторов размер контекста относительно предыдущих работ стал ограниченным, и мы теперь пересказываем старые работы с небольшими изменениями. Это какие-то дежавю трансформеры, ей богу. Просветите меня, если я чего-то важного в этих работах не понимаю.
Свежий обзор PEFT (Parameter-Efficient Fine-Tuning) алгоритмов для LLM.
Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey
Zeyu Han, Chao Gao, Jinyang Liu, Jeff Zhang, Sai Qian Zhang
https://arxiv.org/abs/2403.14608
Пересказывать не буду, читайте как справочник :)
Chronos: Learning the Language of Time Series
Abdul Fatir Ansari, Lorenzo Stella, Caner Turkmen, Xiyuan Zhang, Pedro Mercado, Huibin Shen, Oleksandr Shchur, Syama Sundar Rangapuram, Sebastian Pineda Arango, Shubham Kapoor, Jasper Zschiegner, Danielle C. Maddix, Michael W. Mahoney, Kari Torkkola, Andrew Gordon Wilson, Michael Bohlke-Schneider, Yuyang Wang
Статья: https://arxiv.org/abs/2403.07815
Код: https://github.com/amazon-science/chronos-forecasting
TLDR: Предобученная трансформерная языковая модель для временных рядов с представлением ряда в виде последовательности токенов. Модель Chronos основана на T5, размеры от 20M до 710M.
Временные ряды -- большая и интересная тема, работ в ней поменьше чем в NLP или CV, но регулярно попадаются. Раньше была очень популярная тема с RNN (она отчасти возрождается сейчас с SSM, /channel/gonzo_ML/2148), ещё раньше были модели типа ARIMA и т.п. Есть фейсбучная библиотека Prophet (https://github.com/facebook/prophet). Было много подходов со специальными архитектурами, в частности можно вспомнить, например, использовавшиеся для предсказания погоды и не только Temporal Convolutional Networks (TCN, https://arxiv.org/abs/1608.08242), или околотрансформерный Informer (https://arxiv.org/abs/2012.07436). Но это далеко не всё.
За последний год-два валом повалили попытки так или иначе использовать LLM, от совсем прямолинейных типа через GPT-3 (https://arxiv.org/abs/2310.07820), Time-LLM (https://arxiv.org/abs/2310.01728) или PromptCast (https://arxiv.org/abs/2210.08964) до более специальных, например, Lag-Llama (https://arxiv.org/abs/2310.08278) или TimesFM (https://arxiv.org/abs/2310.10688). Было и есть и много всего другого, вот свежий обзор по теме (https://arxiv.org/abs/2401.13912).
Текущая работа делает шаг назад от LLM и пытается внести специфичные для временных рядов модификации в LLM, эти изменения сосредотачиваются в районе токенизации, а также в аугментации при обучении.
Представленный в работе Chronos -- это по сути фреймворк для адаптации LLM к вероятностному предсказанию временных рядов. Цель -- добиться этого минимальными изменениями.
Одна из очевидных проблем -- временные ряды обычно состоят из вещественных чисел, а не токенов из конечного словаря, поэтому чтобы работать с LLM надо временной ряд токенизировать. Для этого он сначала скейлится (делим на среднее, но можно при желании и другую схему реализовать), а затем квантуется на B бинов (использовалось B = 4094), при деквантовании возвращается центр бина. Бины (их границы и центры) могут быть равномерно распределёнными или зависимыми от данных. Кроме B временных токенов добавлены ещё два специальных PAD (для пропущенных значений и паддинга) и EOS (для обозначения конца последовательности). Никакая другая информация (например, время или частота) к данным не добавляется.
В основном в работе фокусируются на энкодере-декодере T5, экспериментально проверяют и чисто декодер в стиле GPT-2. Целевая функция -- обычная кросс-энтропия при предсказании квантованного токена. Важно, что при таком подходе по факту происходит регрессия через классификацию, в этой функции никак не учтена близость соседних бинов. Плюс в этом тот, что архитектура или процедура обучения LLM никак не меняется, можно брать готовый код из коробки. Также это не накладывает никаких ограничений на выходное распределение, а у датасетов из разных доменов они могут быть разными.
Предсказание такой моделью делается обычным авторегрессионным способом, сэмплим следующий токен, деквантизуем и скейлим обратно.
Для обучения time series моделей такого количества качественных данных, как для NLP, нету. Поэтому авторы активно использовали синтетику через mixup аугментацию в дополнение к реальным данным.
Mixup использовался для изображений, там создавалась синтетическая картинка через взвешенную комбинацию двух реальных. Авторы предложили TSMix, обобщающий Mixup до более чем двух точек -- здесь это взвешенная комбинация k последовательностей. Веса сэмплятся из симметричного распределения Дирихле, Dir(α).
Many-Shot In-Context Learning
Rishabh Agarwal, Avi Singh, Lei M. Zhang, Bernd Bohnet, Stephanie Chan, Ankesh Anand, Zaheer Abbas, Azade Nova, John D. Co-Reyes, Eric Chu, Feryal Behbahani, Aleksandra Faust, Hugo Larochelle
Статья: https://arxiv.org/abs/2404.11018
Развитие темы про очень большие контексты (/channel/gonzo_ML/2415), с которыми модели теперь поддерживают many-shot in-context learning (ICL) или ICL с очень большим числом примеров (сотни и больше). Во времена контекстов размера 2-4k об этом сложно было думать, туда и единицы примеров не всегда нормально влезали, но с контекстом в 1M жизнь меняется. В отличие от файнтюнинга, в режиме ICL не требуется оптимизировать параметры модели и подстраиваться под задачу можно прямо во время инференса. Остаётся правда вопрос цены и скорости инференса.
В работе авторы показали, что many-shot ICL неплохо скейлится и качество решения различных задач растёт при подаче большего числа примеров в промпте. За основу взяли Gemini 1.5 Pro, использовали greedy decoding. Для более надёжных результатов для каждого промпта несколько раз сэмплили примеры с разными сидами. Сделали так, чтобы каждый K-shot промпт включал все примеры из промптов с меньшим K.
На задаче машинного перевода в низкоресурсный язык (в курдский или тамильский) в режиме few-shot от 1 до 10 примеров улучшение незначительное, зато при дальнейшем увеличении до почти тысячи (997) примеров качество (по метрике chrF) растёт на 4.5% для курдского и 1.5% для тамильского относительно 1-shot режима. В результате побили продакшн Google Translate и достигли новой SoTA для этих языков.
В принципе, это не сильно отличается от примеров из работы про Gemini 1.5 (https://arxiv.org/abs/2403.05530), когда чем большую порцию учебника языка Kalamang в неё подаёшь, тем лучше она переводит (/channel/gonzo_ML/2358).
На abstractive суммаризации и оценке на XSum итоговое качество довольно близко к специальным зафайнтюненным моделям (PEGASUS и mT5). На XSum качество растёт примерно до 50 примеров, потом ухудшается (модель начинает выдумывать даты и времена). На XLSum растёт монотонно до 500 примеров (из XSum), что говорит о положительном трансфере.
На генерации планов в области логистики (сгенерили датасет с задачами с 2-3 городами, 1-2 посылками, одним грузовиком и самолётом на город) есть сильное улучшение до десятка примеров, затем слабое до 400 и скачок к 800. До специализированных планировщиков далеко, но результат интересный.
Также попробовали сделать LLM-верификатор для предсказания корректности решения задач из GSM8K. На 16 и выше примерах (не путать с 16+!) best-of-4 начинает превосходить pass@1.
Проблема с таким many-shot ICL в том, что получить кучу хороших человеческих примеров может быть сложно, например для задач со сложным reasoning типа GPQA (Google-Proof Q&A Benchmark, https://arxiv.org/abs/2311.12022). Авторы предложили два подхода, которые могут помочь.
Reinforced ICL генерит объяснения через chain-of-thought prompt и оставляет только те, что дают правильный ответ. Они затем добавляются как примеры в ICL. Могут быть проблемы с false positive, когда неправильный вывод привёл к правильному результату.
Unsupervised ICL идёт дальше и убирает сгенерённые объяснения, оставляя только примеры задач без ответа. В таком случае промпт состоит из трёх частей: 1) преамбулы типа “You will be provided questions similar to the ones below:”, 2) амбулы списка задач без решения и 3) zero-shot инструкции или few-shot промпта с желаемым форматом ответа.
Проверили эти методы на датасете MATH. И reinforced и unsupervised ICL побили ICL с ground-truth решениями. Особенно прикольно, что метод только с задачами хорошо работает. Видимо, такие задачи модель выучила в предобучении. Кроме того промпты, полученные на MATH, приводят к лучшему решению GSM8K. Особенно хорошо работает Reinforced ICL.
Надоело уже писать про новые LLM, но сегодня ещё и Snowflake выкатил свою enterprise-focused модель Arctic.
Arctic — это Dense-MoE гибрид с 480B параметров, из которых в каждый момент активны 17B. Заявлен лучший перформанс среди открытых моделей на энтерпрайзных бенчмарках. Лицензия Apache 2.0.
Пост: https://www.snowflake.com/blog/arctic-open-efficient-foundation-language-models-snowflake/
HF: https://huggingface.co/Snowflake/snowflake-arctic-instruct