AI[ex]Time – Telegram
AI[ex]Time
2.72K subscribers
64 photos
1 video
104 links
Канал с новостями про Machine Learning, Engineering, Time Management, ...
Делаю обзоры на статьи, рассказываю кейсы из опыта, делюсь мыслями. Больше информации смотри в первом сообщении канала

Контакт для связи: @alex_golubev13
Download Telegram
Продолжение

Reformer:

В этой работе используется очень известный алгоритм LSH хэширования. Сделаем Q=K и будем с помощью LSH находить кластеры похожих эмбеддингов. В таком случае attention скоры нам нужно будет посчитать только внутри этих кластеров. С одной стороны, сложность уменьшается до логлинейной (n * logn), но на практике внутри О большого сидит константа 128^2. Кстати, похожий метод используется в одном из алгоритмов ANN.

Performer:

Авторы доказывают, что результат attention (softmax(Q x K^T) можно аппроксимировать произведением двух матриц. И собственно эту аппроксимацию модель и выучивает. Доказательство не самое простое, но идея заключается в использовании kernel methods. Если такая аппроксимация у нас есть (softmax(Q x K^T) ~ Q1 x K1^T), то мы можем сначала умножить K и V, а потом их результат умножить на Q (сложность из-за порядка таких умножений изменится, посмотрите картинку или выпишите размерности на листочке). Здесь линейная зависимость по времени и по памяти.

Не стоит забывать, что сложность attention зависит не только от длины контекста, но и от размера эмбеддинга. Здесь мы говорили только про первое. Метрики не привожу, их можно поглядеть в самих статьях, если интересно. Я написал далеко не про все работы, посвященные этим темам, — есть еще MEGA, Sparse Transformers, Longformer, MQA, GQA и другие. О них — возможно в следующих постах.
🔥102
Наверное, каждый, кто использовал chatGPT для решения задач или просто общения приходил к мысли, что сформулированный запрос (промпт) довольно сильно влияет на результат. В этом направлении есть огромное кол-во работ, где люди пытались придумать текст, который повлияет на ответ модели в лучшую сторону.

И вот несколько дней назад вышла любопытная статья о применении эволюционных алгоритмов совместно с LLM для поиска наилучшего промпта под конкретную задачу. Для тех, кто никак не может решить, использовать “Think step by step” или “Take a deep breath”. Алгоритм максимально простой: у нас есть популяция из N промптов, путем скрещиваний и мутаций мы можем получить набор их потомков. Далее считаем метрики для новых вариантов на отложенном датасете и из всего множества промптов оставляем top N. Эту операцию повторяем T эпох. Интересным здесь, на мой взгляд, является вопрос, как сделать операции скрещивания и мутации в дискретном пространстве текстов, при этом сохранив их читаемость и осмысленность. Тут и приходят на помощь LLMки, которые берут это на себя. Авторы рассмотрели два наиболее популярных алгоритма — Genetic Algorithm и Differential Evolution и адаптировали их для работы с промптами. На почти каждом из 9 датасетов из валидации удалось добиться лучших результатов по сравнению с другими методами, в том числе и ручной настройкой.

Отличительная черта этого метода заключается в том, что мы взаимодействуем с моделью как с black box — нам не нужен доступ к ее параметрам, градиентам и прочему. Это позволяет нам подбирать промпты, например, для gpt-3.5/4. Никакого файнтюнинга! 💃

Примеры для разных задач можно посмотреть на картинке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤯1
В продолжение предыдущего поста: если интересна тема промптов в целом, советую посмотреть Prompt Engineering Guide. Там разбираются сначала базовые вещи для генерации моделей и составления промптов, а дальше идет обзор существующих методов (CoT, Self-Consistency, ToT, ReAct, RAG и много чего еще), которые можно брать на вооружение. Причем это уже не только про промпты, а вообще про подходы к решению различных задач (RAG, например, активно используется для построения всяких Retrieval систем). Здорово, что авторы периодически обновляют материалы, в прошлый раз, когда смотрел, там не было Tree of Thoughts. В конце для особо интересующихся есть классная секция Risk & Misuses про различные атаки на модель (Prompt Injection, Prompt Leaking, Waluigi Effect и так далее)
👍111
Начитался тут слухов про появление AGI, послушал выступление Andrej Karpathy и пошел читать исследования на тему Autonomous LLM-based Agents. На данный момент есть две большие работы (в сумме на 80 страниц 😢), обе вышли совсем недавно (август и сентябрь этого года): A Survey on Large Language Model based Autonomous Agents и The Rise and Potential of Large Language Model Based Agents: A Survey. Мне кажется направление очень интересное, и, как только LLM станут чуть сильнее, мы сможем оценить возможности агентов в полной мере, скорее всего без особых изменений в коде. Поэтому держим руку на пульсе. В скором времени хочу сделать обзор этой области: почему многие специалисты интересуются темой, что мы знаем сейчас о построении агентов, какие есть основные трудности, подходы к валидации и так далее. А пока поделюсь примерами, над которыми уже ведутся работы и идея которых мне нравится:

— Research Assistant. Агент, который может не просто полноценно анализировать статьи и делиться инсайтами, но и сам вести ресерч в некоторой области. Кстати говоря, это то, над чем активно работают OpenAI в направлении SuperAlignment.

— Personal Tutor. Уже сейчас есть помощники, которые помогают изучать материал. Хороший пример, который можно получить только за счет промптов — Ranedeer AI Tutor. А теперь представьте, что у агента помимо этого есть доступ к БД с полезными материалами, где-то он может объяснить тему на картинке, где-то — построить график, где-то — написать код. И объясняет он еще наиболее подходящим под ваш уровень образом.

— Social Simulation. Думаю, идея понравится социологам и вообще людям, которым интересны всякие социальные феномены. С помощью симуляций можно наблюдать за ситуациями, которые тяжело воспроизвести в реальной жизни (из-за самой ситуации или, например, из-за размера выборки).

— Embodied Intelligence. Просто знакомая всем идея про роботов, выполняющих определенные задачи. Tesla недавно показала прогресс по Optimus и, на мой взгляд, это очень крутые результаты для такого маленького срока (~1 год).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍1
Вчера Meta презентовали Meta Quest 3 — VR девайс последнего поколения, который поступит в продажу с 10 октября. Сегодня утром увидел ролик о колабе Meta и Kurzgesagt — команда собирается сделать образовательную игру, в которой игроки переносятся между пятью уровнями масштаба нашего мира (молекулярный, клеточный и т.д.), взаимодействуют с формами жизни и свойствами каждого измерения. Для тех, кто не знает, Kurzgesagt — канал на ютубе, уже 10 лет выпускающий классные ролики на тему медицины, космоса, философии и много чего еще. Очень неожиданный проект, на мой взгляд, но надеюсь, игра получится интересной, задумка крутая.
🔥9👍2💩2
Недавно пользователям стала доступна мультимодальная модель от OpenAI, которая может принимать на вход картинки - GPT-4V(ision). Захотелось потестить ее с разных сторон: как работает в плане OCR, может ли дететировать объекты, считать их, отвечать на детальные вопросы по текстовому промпту и так далее. А тут добрые люди скинули статью от Microsoft, где авторы упоролись и выкатили 150-страничную работу с детальным анализом модели: проверили на детекцию, анализ медицинских снимков, ориентацию в пространстве, мультимодальные знания, понимание доменных областей, понимание видео по серии кадров и мнооого чего еще. Можно залипнуть вечерком на пару часиков 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Небольшой обзор Mistral-7B.

Моделька сейчас на слуху, поэтому вот вам краткое саммари. Ребята из французского стартапа выкатили модель (лицензия Apache 2.0), которая побила LLaMa-2 7/13B на многих бенчмарках. Интересные особенности:

— Grouped-Query Attention (GQA). Прием, использующий 1 матрицу K и V на группу матриц Q. Это некоторое среднее между Multi-Head Attention и Multi-Query Attention.
— Sliding Window Attention (SWA). Модификация attention, при которой мы смотрим только на window_size (W) токенов назад. Важно, что токены за пределами окна тоже влияют на генерацию следующего, здесь можно провести аналогию с receptive field классических сверток.
— Rolling buffer cache. Изменение классического KV-cache для работы с SWA. Теперь кэш размера W и (key, value) для позиции i кладется на i % W позицию в кэше.
— Pre-fill and chunking. Оптимизация с предзаполнением кэша для токенов из промпта, который известен с самого начала.

Все эти трюки — про скорость инференса/экономию памяти.

Есть также Instruct версия, дообученная на открытых датасетах с инструкциями. И совсем недавно вышла fine-tuned версия в стиле Orca, который бьет уже практически все 13B.

Что такое Orca? Это подход (и модель, полученная в результате такого подхода) к обучению на синтетических данных. Заключается он в следующем:

1. Берем большой датасет с различными заданиями (user query): суммаризация текста, ответы на сложные вопросы, решение математических задач и т.д.
2. Для каждого задания в начало помещаем специальный system prompt, чтобы LFM (Large Foundation Model) генерировала ответ в определенном формате. Таким образом мы можем контролировать длину генерации, стиль, рассуждения и так далее.
3. Используем LFM (например, ChatGPT, GPT-4) для выполнения составленных заданий.

В итоге собранный датасет представляет тексты вида <system prompt, user query, gpt answer>. Цель — собрать не просто датасет от сильной модели, но сделать его разнообразным и детальным с точки зрения рассуждений и вариантов ответов. Получившиеся примеры в датасете можно посмотреть тут.
🔥12👍3
6
Emerging architectures for LLM applications

Посмотрел недавний доклад, посвященный ограничениям LLM и способам борьбы с ними. Подготовил небольшую выжимку по основным тезисам авторов:

1. Hallucinations. Известно, что модели часто могут выдавать неправильную информацию, когда в них нет какого-то знания. Чтобы бороться с этим, придумали много методов, например, Retrieval Augmented Generation. RAG заключается в том, что из базы с документами извлекаются релевантные куски текста и помещаются в контекст модели, чтобы у нее была ценная информация для генерации финального ответа. Авторы рассказывают про модифицированный метод FLARE: Forward-Looking Active REtrieval augmented generation: a method which iteratively uses a prediction of the upcoming sentence to anticipate future content, which is then utilized as a query to retrieve relevant documents to regenerate the sentence if it contains low-confidence tokens.

2. Orchestration. Размер контекста в LLM — ограниченная величина. В GPT-4 есть вариация с 32к токенов (примерно 50 страниц текста), а в Claude 2 — 100к токенов, но:
a. Зачастую качество генерации на таких длинных контекстах будет проседать.
b. В open-source моделях стандартом является 4к токенов в контексте.

Если нужно действительно обрабатывать огромные контексты, то можно использовать следующее: разбиваем текст на кусочки поменьше и параллельно прогоняем через несколько инстансов модели. Далее накладываем Merging алгоритм (может быть опять LLM), который выдаст уже результат. Своего рода Map-Reduce в мире LLM.

3. Monitoring. В классическом ML мы отслеживаем распределение данных, чтобы вовремя детектировать distribution shift и переобучить модель. С LLM это сложнее, но можно смотреть на распределение промптов, их типы и классы, схожести извлеченных документов и через это пытаться уловить изменение данных. Переобучать или даже файнтюнить языковую модель не всегда есть возможность, поэтому на помощь приходит изменение промптов (+ их версионирование) или процесса ретривала.
👍11🔥21
Наглядная иллюстрация FLARE: если какие-то токены имеют низкую вероятность согласно модели, то мы формриуем новый запрос в базу для уточнения.
6👍1🤔1
Продолжаем серию постов про архитектуры и методы, позволяющие бороться с квадратичной сложностью attention в трансформерах. В прошлый раз мы говорили про Linformer, Reformer, Performer и AFT, сегодня — про Sparse Transformers, Longformer, MEGA. Не стоит забывать про всякие hardware оптимизации (например, FlashAttention), но это находится за пределами этого поста.

Sparse Transformers:

Sparse Transformers предлагает метод подсчета attention между подмножеством токенов: Factorized Self-Attention. Основной идеей является использование p голов с разными паттернами, за счет которых каждый i-ый токен может “посмотреть” на j-ый не более чем за p+1 шагов. Для p=2 мы можем использовать следующую комбинацию (fixed pattern): первая голова смотрит на все предыдущие k токенов, вторая — на токены с фиксированных позиций, обеспечивая протекание информации из прошлого. Такой паттерн позволяет снизить сложность до n корень из n. Метод используется в GPT-3, и возможно какая-то его модификация — GPT-3.5/4. SWA из Mistral напоминает этот же принцип.

Longformer:

Идея похожа на Sparse Transformers. Разница в следующем: Longformer создавался для задач с длинными последовательностями, поэтому авторы добавили global attention pattern, когда мы смотрим на токены важные для конкретной задачи: в классификации — CLS токен, в задачах QA — токены из вопроса. В итоге имеем комбинацию локального и глобального вниманий. Ну и дополнительно используются всякие трюки, которые подобрали эмпирически: разный размер окна в зависимости от слоя, dilated окна для глубоких слоев и тд. Тут получаем даже линейную сложность, потому что глобальное внимание привносит только константное число доп. токенов.

MEGA:

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

1. Используем экспоненциальное сглаживание эмбеддингов для дальнейшего получения матриц Q и K. EMA позволяет агрегировать локальный контекст с настраиваемыми весами.
2. Добавляем два gating mechanisms: первый для протекания изначального эмбеддинга X, второй — для протекания EMA эмбеддинга X’.
3. Gated Attention имеет всего одну голову, но показывается, что за счет гейтингов и EMA он эквивалентен Multi-Head Attention.

Данные модификации не меняют сложность, они больше про inductive bias. Но есть вариация MEGA chunked, которая снижает сложность до линейной.
🔥9👍1
6
Говорят ли вам о чем-то слова GGML, GGUF, GPTQ, AWQ? За последнее время появился целый ряд форматов для того, чтобы инференсить LLM с ограниченными ресурсами, будь то CPU или GPU. Наткнулся на обзор, где совсем верхнеуровнево проходят по определениям и рассказывают про юзкейсы, для ознакомления думаю подойдет. А если интересно чуть подробнее посмотреть на методы квантизации (RTN, AWQ, GPTQ), то есть еще одно видео от того же автора.

GPTQ Paper
AWQ Paper
6🔥6
3
В продолжение поста про Mistral и его различные модификации (Instruct, Orca) хочется также упомянуть модель Zephyr-7b-alpha. Это файнтюн модели Mistral на пользовательские предпочтения, чтобы сделать модель в роли helpful assistant. Для таких целей сейчас популярно использовать RLHF. Подход заключается в том, что сначала мы учим Reward Model (RM) на отсортированных по предпочтению ответах (то есть в итоге RM по тексту может дать ему некоторую оценку), а затем дообучаем основную модель в режиме RL, обычно используя алгоритм PPO. Задача обучения — максимизировать награду из RM, при этом не сильно меняя исходные веса модели, чтобы не переобучиться. Проблема в том, что это слишком нестабильный подход (RM может найти скрытые фичи, которые негативно будут влиять на генерализацию, например, давать текстам, где есть код, выше оценку. PPO может научиться обманывать RM и получать высокую награду, генерируя бессмысленные тексты и т.д. Вот, кстати, неплохая статья на тему). В мая 2023 вышла интересная работа: Direct Preference Optimization: Your Language Model is Secretly a Reward Model. Авторы показали, что двухэтапное обучение RLHF можно с некоторыми допущениями заменить на выражение, зависящее только от pi и pi_ref (см. картинку). Это означает, что 1) Нам не нужна RM и 2) Нам не нужен RL. Лосс в DPO считается максимально просто и в TRL занимает всего 7 строчек. Единственное, нужно иметь размеченные данные с упорядоченными ответами, то есть пары вида text1|x > text2|x. Именно DPO и применили к модели Zephyr.

По отзывам ребят, кто заводил DPO у себя, работает этот алгоритм действительно хорошо и намного стабильнее PPO.
🔥9👍5
Позалипал какое-то время на autogen от Microsoft — фреймворк для разработки приложений с использованием сразу нескольких агентов для взаимодействия друг с другом и совместного поиска решения задач. Один из примеров — Figure Creator: набор из трех агентов: Coder (пишет код для визуализации), Critic (мультимодальная модель, по картинке дающая фидбэк, что нужно исправить/улучшить) и Commander (координирует работу + общается с пользователем). В качестве мультимодальной модели выступает LLaVa, о ней и хочется сегодня рассказать, тем более, что она точно заслуживает внимания, которого не получила на волне хайпа других моделей.

Статья называется Visual Instruction Tuning, вышла в апреле 2023 и рассказывает о модели, которая одновременно хорошо понимает и картинки, и текст. Основных вещей здесь 2: архитектура и сбор данных. Архитектура довольно простая:

1. Картинку прогоняем через CLIP encoder (ViT-L) + дополнительную проекцию W, которая отображает эмбеддинги токенов изображения в пространство эмбеддингов токенов текста: Hv. На первом этапе обучения как раз учится только матрица W, чтобы уметь алайнить изображения и текст.

2. Объединяем это с эмбеддингами текстового промпта (Hq) и отдаем в руки декодера, который сгенерирует ответ, в данном случае — LLaMa. На втором этапе учим уже W + Decoder правильно генерировать ответы к запросам (например, описание изображения или более детальные вопросы).

3. Vision Encoder заморожен на всем этапе обучения.

Но особое внимание здесь хочется уделить методу сбора данных. О нем — следующий пост
🔥4👍2
Сбор данных, на мой взгляд, представляет собой самое ценное в этой статье. Авторы захотели адаптировать Instruction Tuning подход к обучению, который так популярен в языковых моделях, к мультимодальным. Разметку для этого они получили с помощью генерации моделями по типу ChatGPT/GPT-4. Еще одна работа в аргументы того, что обучение на хорошо подготовленных синтетических данных может давать очень сильные результаты. Пайплайн выглядит следующим образом:

1. Для того чтобы использовать модели по типу GPT (которая обрабатывает только текст) нам нужно научиться передавать информацию о картинке именно в текстовом формате. Для этого используют два типа промптов: Captions (описывают картинку с разных точек зрения) и Bounding boxes (описывают объекты на изображении и их местонахождение). Уже по ним GPT генерирует различные инструкции для обучения. Делается это в формате few-shot learning, то есть предварительно помещая в контекст вручную отобранные примеры ответов.

2. Для обучения Multimodal Chatbot всего используются три вида инструкций: Conversation, Detailed denoscription, Complex reasoning.

На этапе обучения мы семплируем такие single/multi-turn диалоги из сгенерированных данных и учим модель предсказывать только ответы ассистента. Под обучением здесь понимается классическая постановка авторегрессионной модели, то есть по входным данным мы предсказываем ответы в стиле Next Token Prediction.

На картинке представлены примеры инструкций, запроса в GPT и финального датасета.
🔥6👍3
Рассказывали мне тут про редкие вопросы с интервью, с которыми мало кто справляется, вспомнил, что и сам на такой натыкался в прошлом, поделюсь с вами. В целом есть идея изредка выносить что-то подобное с тегом #interview_questions, дайте знать, если полезно.

Вопрос: мы решаем задачу классификации и до софтмакса получаем вектор логитов, скажем [0.81, 3, 10, 15, 90]. В операции софтмакса есть возведение экспоненты в степень, то есть в данном случае нужно будет посчитать e^90. Это очевидно приведет к переполнению любого используемого типа, а в некоторых имплементациях получим значение inf -> 1.0 после софтмакса. Что делать в этом случае?

Ответ: До софтмакса нужно вычесть максимум из логитов, то есть в данном примере 90. Операция вычитания числа из всех элементов вектора не поменяет результат софтмакса (можете проделать ее на бумажке и убедиться) или просто прикинуть в уме, что e^max(logit) сократится из-за того, что он присутствует и в числителе, и в знаменателе. Экспоненту же от большого отрицательного числа посчитать можно, значение будет близко к 0.
👍18🔥13
3
Controlled Decoding from Language Models

Сегодня разбираем недавнюю статью от авторов из Google (один из которых уже успел перейти в OpenAI 😅), посвященную новому алгоритму алайнмента. Давайте разбираться, но прежде немного контекста для лучшего понимания.

1. Речь идет про заключительный этап файнтюнинга LLM, когда мы хотим настроить модель под helpful/harmless/respective/… ответы. То есть альтернативами здесь являются, например, RLHF (PPO) и DPO (не RL, подробнее писал здесь).
2. PPO/DPO алгоритмы меняют веса основной модели.
3. При использовании наиболее популярного сейчас алгоритма PPO, мы применяем on-policy RL, то есть для обновления весов модели каждый раз требуются свежие данные, полученные от самой этой модели. В таком случае схема выглядит как “генерируем ответы моделью → считаем лосс и делаем шаг оптимизатором → генерируем ответы уже обновленной моделью → считаем лосс …”. PPO позволяет делать несколько оптимизационных шагов за одно наблюдение, но все равно это накладывает свои ограничения.

В данной статье авторы предлагают другой подход к той же задаче:

1. Обучение отдельной модели Prefix Scorer (PS) в off-policy режиме, то есть нам не требуется генерировать ответы основной моделью. Мы можем использовать любые доступные данные и обучаться на них.
2. Так как PS представляет из себя отдельную модель, веса основной LLM остаются неизменны.

Основная идея метода — обучить PS для аппроксимации Value функции текущего состояния. Value функция по определению — средняя награда, которая может быть получена из состояния s (в данном случае s — любой момент на этапе генерации ответа). Делается это путем минимизации MSE ошибки между предсказанием PS и наградой, полученной из Reward Model (с оговоркой, посмотрите, как обрабатывается кейс при y ≠ EOS на картинке). Имея аппроксимацию Value функции, можно корректировать финальные предсказания модели в сторону бОльших наград. Авторы предлагают два способа:

1. Token-wise. На этапе генерации каждого токена прогоняем текущее выходное распределение через Prefix Scorer и изменяем предсказания модели.
2. Block-wise. Семплируем несколько продолжений ответа длины M (например, семплируем 5 вариантов, каждый из которых состоит из 4 токенов) и далее оставляем то, у которого оценка Value функции максимальна.

Также можно использовать несколько разных Prefix Scorer для оптимизации сразу нескольких наград. Хотелось бы видеть больше наглядных примеров работы алгоритма, а не просто графиков типа win rate, но все равно работа интересная.
🔥7