Как человек, который некоторое время уже активно пытается заботать алгосы на собесы, очень рекомендую репу/курс
Понравилось, что есть краткая выжимка теории в тексте и сложность, чтобы не сидеть вечерами за просмотром получасовых видева
P.S. Главное помнить, что наименьшая сложность алгоритма при подходе «из центра-наружу»
Понравилось, что есть краткая выжимка теории в тексте и сложность, чтобы не сидеть вечерами за просмотром получасовых видева
P.S. Главное помнить, что наименьшая сложность алгоритма при подходе «из центра-наружу»
🔥22👍5❤3
Forwarded from AbstractDL
NoPE: лучший позишн энкодинг — это тот, которого нет
Правда ли, что позиционное кодирование критически необходимо трансформерам? Оказывается, это справедливо только для энкодеров, а вот декодеры (GPT, LLaMA и тд) могут прекрасно работать и без него!
Похоже, что каузальные маски внимания (которые не позволяют заглядывать в правый контекст) сами по себе являются отличным источником информации о позиции токенов. И более того, трансформер БЕЗ позиционного кодирования лучше обобщается на размер контекста, выходящий за длину примеров из обучения, даже по сравнению с такими мудрёными методами, как Rotary или ALiBi.
P.S. Eсли вас на собеседовании спросят зачем нужнен позишн энкодинг в GPT — можете говорить, что не особо он и нужен 💁♂️
Статья, GitHub
Правда ли, что позиционное кодирование критически необходимо трансформерам? Оказывается, это справедливо только для энкодеров, а вот декодеры (GPT, LLaMA и тд) могут прекрасно работать и без него!
Похоже, что каузальные маски внимания (которые не позволяют заглядывать в правый контекст) сами по себе являются отличным источником информации о позиции токенов. И более того, трансформер БЕЗ позиционного кодирования лучше обобщается на размер контекста, выходящий за длину примеров из обучения, даже по сравнению с такими мудрёными методами, как Rotary или ALiBi.
P.S. Eсли вас на собеседовании спросят зачем нужнен позишн энкодинг в GPT — можете говорить, что не особо он и нужен 💁♂️
Статья, GitHub
🤯14🔥6👍5❤3😁2👎1
Forwarded from Knowledge Accumulator
LlamaRec: Two-Stage Recommendation using Large Language Models for Ranking [2023] - о том, как рекомендации превратили в ЕГЭ
Итак, какой пайплайн применения LLM для ранжирования придумали товарищи из NVIDIA:
1) Кандидатогенерация без LLM - сначала рекуррентная модель под названием LRURec кушает историю пользователя и в конце выдаёт распределение на следующий документ, из которого берётся топ-20. Обучается такая модель просто с помощью next item prediction.
2) На последней стадии работает уже языковая модель в формате теста.
В качестве промпта в модель подают список названий документов, с которыми взаимодействовал пользователь. Далее модель просят предсказать наилучший следующий документ.
Мы бы хотели получать от модели распределение на следующий документ, чтобы по нему можно было отсортировать выдачу, а также иметь возможность файнтюнить LLM, максимизируя вероятность верного айтема. Чтобы этого добиться, авторы кодируют каждый возможный айтем одной буквой. Таким образом, от модели требуется написать только 1 токен в качестве ответа, на вероятности которого мы и будем смотреть.
Имеет ли смысл применять такой подход в реальной рекомендательной системе? Давайте посмотрим, чем отличается данная нейросеть от того, что мы используем у нас. Если в нашем рекомендательном трансформере вместо мешка токенов будем брать их последовательность, и склеим все эти последовательности из истории в одну, мы получим такой же формат входа, как у LlamaRec. При этом сам трансформер от LLM на порядок больше, чем тот, что мы используем у нас.
Таким образом, подобная модель стала бы неподъёмной для использования на том же размере пользовательской истории, и её пришлось бы применять на очень короткой истории. Дало ли бы это значимый ортогональный сигнал засчёт претрейна на данных из интернета? Не знаю, на мой взгляд проект выглядит слишком дорого и есть много более низковисящих фруктов.
@knowledge_accumulator
Итак, какой пайплайн применения LLM для ранжирования придумали товарищи из NVIDIA:
1) Кандидатогенерация без LLM - сначала рекуррентная модель под названием LRURec кушает историю пользователя и в конце выдаёт распределение на следующий документ, из которого берётся топ-20. Обучается такая модель просто с помощью next item prediction.
2) На последней стадии работает уже языковая модель в формате теста.
В качестве промпта в модель подают список названий документов, с которыми взаимодействовал пользователь. Далее модель просят предсказать наилучший следующий документ.
Мы бы хотели получать от модели распределение на следующий документ, чтобы по нему можно было отсортировать выдачу, а также иметь возможность файнтюнить LLM, максимизируя вероятность верного айтема. Чтобы этого добиться, авторы кодируют каждый возможный айтем одной буквой. Таким образом, от модели требуется написать только 1 токен в качестве ответа, на вероятности которого мы и будем смотреть.
Имеет ли смысл применять такой подход в реальной рекомендательной системе? Давайте посмотрим, чем отличается данная нейросеть от того, что мы используем у нас. Если в нашем рекомендательном трансформере вместо мешка токенов будем брать их последовательность, и склеим все эти последовательности из истории в одну, мы получим такой же формат входа, как у LlamaRec. При этом сам трансформер от LLM на порядок больше, чем тот, что мы используем у нас.
Таким образом, подобная модель стала бы неподъёмной для использования на том же размере пользовательской истории, и её пришлось бы применять на очень короткой истории. Дало ли бы это значимый ортогональный сигнал засчёт претрейна на данных из интернета? Не знаю, на мой взгляд проект выглядит слишком дорого и есть много более низковисящих фруктов.
@knowledge_accumulator
👍5
Forwarded from ds girl
работа со стартапом из кремниевой долины чек:
- CTO дропаут из стенфорда, скорее всего младше тебя. говорят, умеет в фит-предикт
- инновационная разработка имеет мало общего с наукой. просто почему-то получилось
- аутсорс на ребятах из СНГ
- почему мы решили делать так? а мы просто believe so
- документация для лохов
- аутсорс на индийских ребятах
- после встречи присылаешь картинки с иллюстрацией подходов, про которые ты распинался, потому что так понятнее СТО
- в штате есть mle с опытом 30+ лет (Can you change the username on that AWS machine from “ubuntu” to my name? All my absolute paths in all my projects are broken because of this 👉🏻👈🏻)
- огромные счета за с3, который не заполнен даже наполовину
- при этом отчитываешься за использование гпу, где один час выходит 2-3 доллара
- никто не должен знать, какая модель от OpenAI лежит в основе всего решения
- метрики без хьюман эвала тоже для лохов
- ты прокачался в английском
- ты прокачался влизании жопы вежливых дипломатичных ответах в письменном английском
- все жалеют юного СТО, потому что верят в продукт
- через год ты всё это повторишь, потому что “да ладно, не так плохо всё было”
- CTO дропаут из стенфорда, скорее всего младше тебя. говорят, умеет в фит-предикт
- инновационная разработка имеет мало общего с наукой. просто почему-то получилось
- аутсорс на ребятах из СНГ
- почему мы решили делать так? а мы просто believe so
- документация для лохов
- аутсорс на индийских ребятах
- после встречи присылаешь картинки с иллюстрацией подходов, про которые ты распинался, потому что так понятнее СТО
- в штате есть mle с опытом 30+ лет (Can you change the username on that AWS machine from “ubuntu” to my name? All my absolute paths in all my projects are broken because of this 👉🏻👈🏻)
- огромные счета за с3, который не заполнен даже наполовину
- при этом отчитываешься за использование гпу, где один час выходит 2-3 доллара
- никто не должен знать, какая модель от OpenAI лежит в основе всего решения
- метрики без хьюман эвала тоже для лохов
- ты прокачался в английском
- ты прокачался в
- все жалеют юного СТО, потому что верят в продукт
- через год ты всё это повторишь, потому что “да ладно, не так плохо всё было”
🔥15🤡7😁5👍1
Пост создан при поддержке того, что я задолбалась писать токен в ссылке копирования репозитория с гитхаба перед собачкой
@@@@@@ github , блин
We sent you a verification request on your GitHub Mobile app. Enter the digits shown below to enter sudo mode
Гитхаб, верни пароли🗿
@@@@@@ github , блин
We sent you a verification request on your GitHub Mobile app. Enter the digits shown below to enter sudo mode
Гитхаб, верни пароли
Please open Telegram to view this post
VIEW IN TELEGRAM
😁25💯4 3
Интересное решение по генерации продолжения 3д сцен LucidDreamer использованием Гауссова сплэтинга и SD. Может и по тексту, и по RGB, и по RGBD. Короче, из всего, по чему пожелаете. Вот до чего дошел прогресс... 🤖
Что такое вообще этот ваш 3д Гауссов сплэтинг?❔
Если кратко, то это метод растеризации. У нас есть данные, описывающие сцену и мы ее отображаем в виде множества гауссиан, они сортируются по глубине и для каждого выполняется front-to-back, при этом гауссианы смешиваются друг с другом. На выходе сцена. На эту тему можно посмотреть видос. Ну и еще неплохой пост на hf
Как работает полный пайплайн в статье?
👉 На первом этапе создается облако точек из входного изображения, для продолжения сцен используется Stable Diffusion inpainting и монокулярная оценка глубины(то есть оценка расстояния относительно камеры каждого пикселя для одного (монокулярного) RGB-изображения).
👉 После этого, используются алгоритмы ‘Dreaming’1️⃣ (устанавливает облако точек в качестве геометрического ориентира для каждого поколения изображений) и ‘Alignment’2️⃣ (гармонично интегрирует сгенерированные изображения в единую 3D-сцену).
1️⃣ В ‘Dreaming’ оценивается оптимальный коэффициент для минимизации расстояния между 3д точками сгенерированного изображения и исходного, чтобы создать карту глубины. На основе этого "поднимаются" пиксели в 3д пространство
2️⃣ В ‘Alignment’ вычисляется вектор перемещения, но из-за наивного подхода точки из облака точек могут могут не совпадать с нарисованным изображением. Но это решается с помощью ограничения на перемещение точек и использование алгоритма интерполяции.
👉 Затем, пустые пространства заполняются с помощью Gaussian splats (про это говорили в начале) в случае несоответствия глубины. (Обучаем на сгенерированом облаке точек и исходных изображениях). Что интересно, позволяет менять входные данные в процессе генерации. На выходе получаем 3д сцену неплохого качества 😳
🖥 их блогпост, обещают код
Что такое вообще этот ваш 3д Гауссов сплэтинг?
Если кратко, то это метод растеризации. У нас есть данные, описывающие сцену и мы ее отображаем в виде множества гауссиан, они сортируются по глубине и для каждого выполняется front-to-back, при этом гауссианы смешиваются друг с другом. На выходе сцена. На эту тему можно посмотреть видос. Ну и еще неплохой пост на hf
Как работает полный пайплайн в статье?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Пока все всполошились на moe mistral, и не задумываются о том как затюнить это мое в сумме 50b, я ожидаю новые способы сокращения обучаемых параметров уже на moe-tvoe, а пока поговорим за жессссткие вещи 😶🌫️
Нашла метод LASP, кторый позволяет учить CLIP в большее проявление zeroshot свойств. Получается так: берем soft prompts, но с ними есть проблема в мультимодальном dssm, потому что классы, которые уже встречались при обучении естественно будут превосходить по метрике классы, которые мы еще не встречали и сетка переобучиться. Если раньше с таким эффектом боролись с помощью KL, внедрения визуального представления в текст и других хаков, то в этот раз авторы предложили модифицировать лосс (text-to-text loss)
Общая идея в том, что можно подавать soft prompts, как мы делали бы изначально, затем после головы текстового энкодера не давать отклоняться выученным представлениям от бакета вручную написанных подсказок. При этом, мы можем разделять подсказки и формировать некоторые центроиды групп, которые будут обеспечивать zero-shot эффект и добавления виртуальных классов в обучение
🖥 Код
#PEFT
Нашла метод LASP, кторый позволяет учить CLIP в большее проявление zeroshot свойств. Получается так: берем soft prompts, но с ними есть проблема в мультимодальном dssm, потому что классы, которые уже встречались при обучении естественно будут превосходить по метрике классы, которые мы еще не встречали и сетка переобучиться. Если раньше с таким эффектом боролись с помощью KL, внедрения визуального представления в текст и других хаков, то в этот раз авторы предложили модифицировать лосс (text-to-text loss)
Общая идея в том, что можно подавать soft prompts, как мы делали бы изначально, затем после головы текстового энкодера не давать отклоняться выученным представлениям от бакета вручную написанных подсказок. При этом, мы можем разделять подсказки и формировать некоторые центроиды групп, которые будут обеспечивать zero-shot эффект и добавления виртуальных классов в обучение
#PEFT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍7🔥2 2 1
Forwarded from Love. Death. Transformers.
Спустя три месяца (!) Вышел скейл phi1.5 - phi2.
Теперь 2.7В(было 1.5) параметров, перфоманс на бенчах лучше мистраля и лучше 13В моделей, возможно выйдет папир и я напишу нормальный обзор.
Обзор на phi1.5
Model
Теперь 2.7В(было 1.5) параметров, перфоманс на бенчах лучше мистраля и лучше 13В моделей, возможно выйдет папир и я напишу нормальный обзор.
Обзор на phi1.5
Model
❤10
Проект от Alibaba для примерки одежды на виртуальной модели. Нет ни тех деталей, ни кода, конечнО жЕЕЕЕ. Зато есть картинка и space на hf к которому можно ходить по API для своих проектов или нужд. Выглядит прям огонь по качеству
🤗space
🤓 Blog (если конечно хотите просто почитать описание картинки словами)))
🤗space
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18
Apple выложили код к обучению их трансформера с измененной параметризацией весов для достижения стабильной энтропии на каждом слое внимания.
Я уж очень люблю внутренние способы стабилизации показателей во время обучения или инференса. Примечательно для меня и то, что затрагивается несколько модальностей в их работе (не одновременно). Минус для меня, что нет весов (по крайней мере я не нашла), да и то, что написано на jax, но для кого-то это может оказаться плюсом))
🤓 Статья (аларм, много формул)
😆 Дискорд, через который генерила картинку
Я уж очень люблю внутренние способы стабилизации показателей во время обучения или инференса. Примечательно для меня и то, что затрагивается несколько модальностей в их работе (не одновременно). Минус для меня, что нет весов (по крайней мере я не нашла), да и то, что написано на jax, но для кого-то это может оказаться плюсом))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Тут буквально на днях Microsoft выложили код огромной проделанной работы. Речь идет о LongNet представленном в июне этого года. Очередная попытка побороться с квадратичной сложностью внимания и заскелить длину последовательности до (просто вдумайтесь) 1B токенов (см график на срине 1) 😳
Звучит круто, на деле механизм следующий: будем делить последовательность на сегменты, а внутри еще на уровень разреженности (ну типо как sparse attention). Посмотреть визуализацию можно на скрине 2.
Но это еще не все. Это дело все можно распараллелить на гпушки следующим образом: возьмем длину последовательности, разделим объем последовательность на сегменты, количество которых равно количеству карт. Дальше на каждой карте будут свои матрицы Q, K, V. Но объеденим далее мы в одну только матрицы K, V, а Q будет на каждой карте своя в итоговой формуле. (Скрин 3)
Так вот. Для всего этого дела теперь есть код в открытом доступе. Вот репа (заходим в директорию torchscale/model и наслаждаемся)
НО ЭТО ТОЖЕ ЕЩЕ НЕ ВСЕ. Также в начале декабря они зарелизели LongVIT, который представляет из себя такой же алгоритм, только картинка будет разделена на патчи (скрин 4), что и представит последовательность (код можно найти в той же репе, но директория examples/longvit)
🖥 Еще раз. Код весь туть
Звучит круто, на деле механизм следующий: будем делить последовательность на сегменты, а внутри еще на уровень разреженности (ну типо как sparse attention). Посмотреть визуализацию можно на скрине 2.
Но это еще не все. Это дело все можно распараллелить на гпушки следующим образом: возьмем длину последовательности, разделим объем последовательность на сегменты, количество которых равно количеству карт. Дальше на каждой карте будут свои матрицы Q, K, V. Но объеденим далее мы в одну только матрицы K, V, а Q будет на каждой карте своя в итоговой формуле. (Скрин 3)
Так вот. Для всего этого дела теперь есть код в открытом доступе. Вот репа (заходим в директорию torchscale/model и наслаждаемся)
НО ЭТО ТОЖЕ ЕЩЕ НЕ ВСЕ. Также в начале декабря они зарелизели LongVIT, который представляет из себя такой же алгоритм, только картинка будет разделена на патчи (скрин 4), что и представит последовательность (код можно найти в той же репе, но директория examples/longvit)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥6👍2 2
This media is not supported in your browser
VIEW IN TELEGRAM
PowerInfer, aka как гонять LLM-ки быстрее lamma.cpp (по крайней мере на Linux авторы демонстрируют заметное ускорение, чего нельзя пока сказать о Mac OS). Такой эффект происходит за счет предзагрузки на GPU только так называемых hot-activated нейронов, и расчета на CPU cold-activated нейронов. В общем то основная суть деления на такие холодные и горячие – это то, как при генерации активируются разные нейроны в трансформере исходя из входной последовательности токенов ⏰
🖥 Репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍7🔥1
Forwarded from КПД
SwitchHead: Accelerating Transformers with Mixture-of-Experts Attention
[Статья] [Код]
Смеси экспертов для MLP блоков были неоднократно с успехом применены в больших языковых моделях (в частности в недавно вышедшей Mixtral, и GPT-4 по слухам тоже ей является). Однако, кроме MLP в трансформере можно добиться ускорения за счет использования за счет части голов в MultiHeadAttention. На больших последовательностях Attention слои требуют много вычислений и памяти, и использование части голов даст некоторую экономию.
Даже если бы статья была анонимной, то по цитированиям Шмидхубера при каждом упоминании Attention, можно было бы угадать одного из авторов)
Метод
Наивный подход был бы следующий - иметь предиктор, который предсказывает скор для каждой головы и берет только с наибольшим скором. Однако, проблема в том, что при авторегрессивной генерации могут активироваться разные эксперты и в итоге придется все равно хранить кэш keys и values на все головы (проблема, правда, нынче лечится MultiQueryAttention).
Авторы предлагают следующее - иметь экспертов внутри каждой головы и активировать только часть экспертов на прямом проходе. В этом по сути и вся суть метода.
Эксперименты
Подход валидируют на TransformerXL, который обучают на С4/peS2o 100к шагов. Не самый типичный setting для 2023. Качество замеряют по перплексии на WikiText103, C4, peS2o.
В бейзлайновом трансформере 2 или 10 голов (с одинаковым числом параметров), в предложенном SwitchHead 2 головы с 5 экспертами. Во всех случаях смесь экспертов имеет столько же параметров, сколько и исходная модель. В разных конфигурациях Q, K, V и O проекции могут быть как разбиты на экспертов, так и нет. Перплексия везде примерно +/- одинаковая и будто бы метод не проигрывает сильно в качестве исходному трансформеру с 10 головами (и уверенно опережает двуглавый). Вопрос в том, правда, насколько хорош бейзлайн.
Сравниваются с работой MoA, при том же качестве их подход гораздо экономичнее по памяти, с экономией в ~4-5 раз, в то время, как у MoA выходит ~1.5-3 раза.
Далее, можно сделать MLP тоже экспертами и получить Switch-All модель.
И Switch-All при примерно той же перплексии расходует снова заметно меньше памяти.
Выводы
Специализация attention в трансформере - полезное направление, однако эксперименты выглядят не слишком убедительно. Нет и замеров ускорения, а лишь сравнение MACs между SwitchHead(All) и бейзлайном. Да и в популярном нынче MultiQueryAttention можно было бы активировать часть query проекций и иметь профит в плане памяти и вычислений.
[Статья] [Код]
Смеси экспертов для MLP блоков были неоднократно с успехом применены в больших языковых моделях (в частности в недавно вышедшей Mixtral, и GPT-4 по слухам тоже ей является). Однако, кроме MLP в трансформере можно добиться ускорения за счет использования за счет части голов в MultiHeadAttention. На больших последовательностях Attention слои требуют много вычислений и памяти, и использование части голов даст некоторую экономию.
Даже если бы статья была анонимной, то по цитированиям Шмидхубера при каждом упоминании Attention, можно было бы угадать одного из авторов)
Метод
Наивный подход был бы следующий - иметь предиктор, который предсказывает скор для каждой головы и берет только с наибольшим скором. Однако, проблема в том, что при авторегрессивной генерации могут активироваться разные эксперты и в итоге придется все равно хранить кэш keys и values на все головы (проблема, правда, нынче лечится MultiQueryAttention).
Авторы предлагают следующее - иметь экспертов внутри каждой головы и активировать только часть экспертов на прямом проходе. В этом по сути и вся суть метода.
Эксперименты
Подход валидируют на TransformerXL, который обучают на С4/peS2o 100к шагов. Не самый типичный setting для 2023. Качество замеряют по перплексии на WikiText103, C4, peS2o.
В бейзлайновом трансформере 2 или 10 голов (с одинаковым числом параметров), в предложенном SwitchHead 2 головы с 5 экспертами. Во всех случаях смесь экспертов имеет столько же параметров, сколько и исходная модель. В разных конфигурациях Q, K, V и O проекции могут быть как разбиты на экспертов, так и нет. Перплексия везде примерно +/- одинаковая и будто бы метод не проигрывает сильно в качестве исходному трансформеру с 10 головами (и уверенно опережает двуглавый). Вопрос в том, правда, насколько хорош бейзлайн.
Сравниваются с работой MoA, при том же качестве их подход гораздо экономичнее по памяти, с экономией в ~4-5 раз, в то время, как у MoA выходит ~1.5-3 раза.
Далее, можно сделать MLP тоже экспертами и получить Switch-All модель.
И Switch-All при примерно той же перплексии расходует снова заметно меньше памяти.
Выводы
Специализация attention в трансформере - полезное направление, однако эксперименты выглядят не слишком убедительно. Нет и замеров ускорения, а лишь сравнение MACs между SwitchHead(All) и бейзлайном. Да и в популярном нынче MultiQueryAttention можно было бы активировать часть query проекций и иметь профит в плане памяти и вычислений.
❤9👍4
Находка прошлой недели. Опять эти Microsoft релизнули что-то хайповое. Взяли мистраль, поучили 1000 шагов на контрастив, померили в сравнении с их E5 претреновой моделькой, целенаправленно обученной в виде dssm
Получился небольшой прирост, но много подводных камней. Нужны обязательно инструкции, да и в мультияз авторы не рекомендуют мистраль использовать. Но если вы хотите поморочиться с руссификацией и данные ваши подразумевают инструкции. По-моему очень крутое решение может получится
🤗Модель на hf
Получился небольшой прирост, но много подводных камней. Нужны обязательно инструкции, да и в мультияз авторы не рекомендуют мистраль использовать. Но если вы хотите поморочиться с руссификацией и данные ваши подразумевают инструкции. По-моему очень крутое решение может получится
🤗Модель на hf
❤18👍2
Forwarded from grokaem себя (Milana)
Unlimiformer c NeurIPS
github
paper
0️⃣ Проблемы?
Длинные последовательности, поэтому невозможность тренировки/долгого тюнинга
1️⃣ Решение?
Меняем cross-attention на индексирование с KNN, knn distances теперь станут как раз attention dot-product scores. В тестовом режиме главная задача заугментировать уже натренированную модель на последовательности разной длинны.
2️⃣ В чем плюсы?
generic approach: Не нужно тюнить. Не нужно добавлять веса. Индексы можно держать и на CPU. Авторы также предлагают разные способы тренировки и тюнинга. Например, юзать unlimformer только на инференсе и делать по нему early stopping.
3️⃣ Как делаем?
KNN на hidden States всех инпут токенов. Каждый блок с cross-attention обращается к KNN и берет только top-K input tokens.
Пайплайн:
- последовательности, что больше заданной длины, пилим на чанки с window size, берем вектора из серединки. Эта техника была тут предложена (’22).
- Создаем KNN index на encoded inputs, юзаем для этого Faiss. Dot-product это similarity metric для KNN index.
- На каждую cross attention head в декодере мы будем делать retrieval top-k.
5️⃣ Что с памятью?
Если у нас теперь задача это вылавливать Kbest set of keys, чтобы максимизировать attention, то, как и самурая у нас два пути(вебкам и айти):
- создать индексы для keys, HeWk, но Wk - head and layer specific, тогда нам нужно создать не один сет векторов, а сеты для keys и для values (2*L*H: L - кол-во декодер слоев, H - кол-во голов), больно и слишком дорого
- поменять порядок подсчета, теперь мы считаем (Hd * Wq * Wk)* He, то есть нам не нужно хранить и создавать отдельно head-layer индексы для keys, мы будем держать только encoder вектора.
Как говорят авторы: на 1млн 16 битных эмбеддингов 1024dim нам нужно будет 2gb памяти, та еще и на cpu можно.
6️⃣ Что по скорости? Ведь у нас дополнительно появляется индексирование.
Важно понимать, что на двух стульях тяжело усидеть и поэтому есть трейд-офф между памятью и speed. (Картинка внизу)
C Бартом реализовано все и буквально любую модель можете включить, а вот с T5 у меня завести пока что не вышло...
#grokaem_nlp
github
paper
0️⃣ Проблемы?
Длинные последовательности, поэтому невозможность тренировки/долгого тюнинга
1️⃣ Решение?
Меняем cross-attention на индексирование с KNN, knn distances теперь станут как раз attention dot-product scores. В тестовом режиме главная задача заугментировать уже натренированную модель на последовательности разной длинны.
2️⃣ В чем плюсы?
generic approach: Не нужно тюнить. Не нужно добавлять веса. Индексы можно держать и на CPU. Авторы также предлагают разные способы тренировки и тюнинга. Например, юзать unlimformer только на инференсе и делать по нему early stopping.
3️⃣ Как делаем?
KNN на hidden States всех инпут токенов. Каждый блок с cross-attention обращается к KNN и берет только top-K input tokens.
Пайплайн:
- последовательности, что больше заданной длины, пилим на чанки с window size, берем вектора из серединки. Эта техника была тут предложена (’22).
- Создаем KNN index на encoded inputs, юзаем для этого Faiss. Dot-product это similarity metric для KNN index.
- На каждую cross attention head в декодере мы будем делать retrieval top-k.
5️⃣ Что с памятью?
Если у нас теперь задача это вылавливать Kbest set of keys, чтобы максимизировать attention, то, как и самурая у нас два пути
- создать индексы для keys, HeWk, но Wk - head and layer specific, тогда нам нужно создать не один сет векторов, а сеты для keys и для values (2*L*H: L - кол-во декодер слоев, H - кол-во голов), больно и слишком дорого
- поменять порядок подсчета, теперь мы считаем (Hd * Wq * Wk)* He, то есть нам не нужно хранить и создавать отдельно head-layer индексы для keys, мы будем держать только encoder вектора.
Как говорят авторы: на 1млн 16 битных эмбеддингов 1024dim нам нужно будет 2gb памяти, та еще и на cpu можно.
6️⃣ Что по скорости? Ведь у нас дополнительно появляется индексирование.
Важно понимать, что на двух стульях тяжело усидеть и поэтому есть трейд-офф между памятью и speed. (Картинка внизу)
C Бартом реализовано все и буквально любую модель можете включить, а вот с T5 у меня завести пока что не вышло...
#grokaem_nlp
🔥8❤2👍1