Ebout Data Science | Дима Савелко
2K subscribers
140 photos
11 videos
86 links
Ebout Data Science by @ngmdite
Download Telegram
Как не обкакаться при старте ML-проекта (Часть 1/2)

Пространство проблем и пространство решений
Когда к вам приходит бизнес и говорит "Нам нужна система рекомендаций!", то вы не должны бежать и, сломя голову, искать новые алгоритмы для решения задачи. Вы должны выдохнуть и спросить:
- Зачем она нам нужна?
- Как именно система рекомендаций будет приносить нам деньги?
- Что мы будем рекомендовать?
- Какую проблему она решает?


После ответа на данные вопросы может возникнуть такая ситуация, когда ML-алгоритм совершенно не нужен, достаточно всего лишь какого-нибудь алгоритма или эвристики, что значительно сокращает время на разработку 🍑

Перед разработкой любой ML-системы мы задаём вопрос из пространства проблем - определяется вопросами "Что?" и "Зачем?", а затем переходим в пространство решений - определяется вопросом "Как?" - средства реализации проблемы 🚶‍♀️

Пример из жизни 🤵‍♂️
Мы пилили проект по генерации коротких роликов на основе текста. Мы не залезли в пространство проблем, и как итог мы потратили кучу времени и денег, чтобы переделать проект под новые требования. Не было уточнений множества деталей и как итог, бизнес ожидал одно, а рзрабы делали совершенно другое

Итог 💪
Во время проектирования ML-системы задавайтесь вопросом "Что?" и "Зачем?", а уже после "Как?"

Материалы взяты из книги Валерия Бабушкина 😯
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🍌5
Как не обкакаться при старте ML-проекта (Часть 2/2)

Очень часто в компаниях так бывает, что команды делают ML-продукт ради ML-продукта, не понимая того, что хотел заказчик, и зачем модель в целом нужна бизнесу. Обычно это происходит из-за того, что разработчики и заказчики не слышат друг друга

И тут встаёт вопрос:
А как определить проблему так, чтобы обе стороны максимально понимали друг друга? 👀

А
лгоритм для того, чтобы наконец-то начать понимать и слышать друг друга:
Алгоритм похож на перевёрнутую пирамиду, которая начинается с понимания самых примитивных вещей и заканчивается более глубинными понятиями

1️⃣ Общая формулировка 💡
В самом начале мы формулируем проблему, формулировка которой будет понятна любому руководителю уровня C (СTO, CEO, ...).
Например: "В нашем приложении есть мошенники, которые пытаются атаковать наших пользователей. Если определять мошенников, то мы сможем обеспечить более надёжную безопасность приложения."

2️⃣ Задаём уточняющие вопросы 🔔
Это нужно, чтобы погрузиться в детали и конкретные проблемы, которые может решить наша система, также нужно стараться найти несоответствия в ответах и противоречия, так как это наш самый главный враг.
Например: "Что такое мошенник?", "Как он вредит?", "Вредит ли он вообще?"...

3️⃣ Задавать более узкоспециализированные вопросы 💪
Погружаемся ещё глубже и вычленяем подробную информацию и технические детали по имплементации решения.
Например: "Как мы технические определяем, что это мошенник?"

Итог 🎲
Перед написанием кода уточните с помощью данного алгоритма следующее:
- что вы хотите в целом делать
- зачем вы хотите делать
- что означают сущности, с которыми вы будете работать
И всеми возможными способами мучайте бизнес, чтобы расставить все точки над И.

Лучше потратить несколько дней на эти вопросы, нежели 3 месяца обучать модель и выкинуть её в окно (P.S. Джейсон Стейтем) 💪

Материалы взяты из книги Валерия Бабушкина 😯
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌9👍7🌭21
Дайджест ресурсов или как стать гуру в LLM, устройстве тензорах и DL парадигм 💪

1️⃣ LLM 🗯
На YouTube от 3Blue1Brown вышла понятная и короткая серия лекций LLM. В них рассказывают всю базу про их устройство, наглядно визуализируя основные механизмы.
➡️ Что такое GPT
➡️ Визуализация в трансформеров
➡️ Как работает механизм внимания, где ИИ хранит воспоминания
Вследствие этого обновил RoadMap по уничтожению LLM

2️⃣ Устройство PyTorch 👩‍💻
➡️ Доклад инженера из Facebook AI Research Эдварда Янга, который состоит из двух частей. Первая - рассматриваются различные типы данных, используемые в PyTorch, и особенности их внутренней реализации, вторая - раскрываются принципы написания собственного ядра на базе PyTorch.
➡️The Tensor Cookbook - книга с математической базой по тензорам, там есть как и жёсткий матан, так и для людей с личной жизнью. Для людей, которые знают, что такое личная жизнь, то вам подойдут главы:
1.
Introduction
(определения, важные теоремы и общие понятия)
10.
Machine Learning Applications
(про то, как тензоры работают в привычной нам среде, оптимизацию лоссов и атеншен)
12.
Tensorgrad
(более глубоко про производные, градиенты и операции над тензорами)


3️⃣ DL-парадигмы

Ребята c Reddit пару выпустили книгу "Illustrated book to learn about Transformers & LLMs" с объяснением главных DL-парадигм в картинках. Там рассказывается про:

- База нейросетей:
(перцептроны, backprop, dropout и тд)
- Эмбеддинги, токенизация, word2vec, RNN, LSTM, GRU
- Трансформеры: BERT, GTP, T5, self-attention, Encoder`ы, Decoder`ы и рекомендации по ускорению вычисления
- LLM: SFT, RLHF, промпт-инжиниринг
- бонусом рассказ про классические задачи: машинный перевод, sentiment extraction и RAG

‼️ Ещё больше материалов находится тут, также чекайте закреп, там много полезных ссылок, например RoadMap по уничтожению LLM‼️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🍌6🍾2❤‍🔥11👍1
Оффер на 250к за месяц в СберДевайсы 💪

На моём менторстве был ученик с небольшим количеством опыта, и он пришёл с запросом найти новую работу. Спустя ОДИН месяц работы он получил оффер на 250к в СберДевайсы на жёсткую CV позицию.

Как мы с ним это сделали
1️⃣ Я ему рассказал про всю базу получения оффера:
- как составлять резюме
- как вести себя с HR`ом
- как правильно готовиться к собесу
- где, как, какую и сколько информации учить
- как правильно торговаться
- как побороть страхи и не боятся ошибок и собесов

2️⃣ Сделал ему новое резюме, чтобы увеличить конверсию прохождения на HR-скриннинги
3️⃣ Провёл несколько мок-интервью по ClassicML, DL и резюме, подсветив его ошибки и дав
4️⃣ Помогал ему в теоретических и практических вопросах в Classic ML, DL и тд

По итогу моих и его усилий он прошёл несколько собесов, заучил всё про трансформеры и во снах вспоминал про изменяемые типы данных. Спустя все тяжести он стал гигачадом и получил оффер на 250к 🚶‍♀️

Конечно же, он сам бы мог пойти и искать работу, и я уверен, что нашёл бы. Но со мной его процесс ускорился в разы, помог убрать страхи и стать гигачадом, также я дал ему гарантию того, что он получит оффер, если будет прислушиваться к моим советам... Выводы делайте сами 💪

❗️ Ссылка на менторство ❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌20🤡751🔥1
Как устроен этот ваш BERT 👀

В первую очередь, этот пост расчитан для новичков, для тех кто только входит в мир DS ✏️

Верхнеуровнего BERT превращает текст в цифры, то есть хавает "Я хочу пиццу", а на выходе даёт что-то типо [0.21, 0.19, 0.14, 0.12]. Эти цифры позволяют комьютеру "понимать" текст на комьютерном языке.

Теперь немного глубже. BERT основан на архитектуре, называемой трансформером. У трансформера две части: энкодер и декодер (1 картинка)
➡️ Энкодер берет текст и превращает его в числа (вектора). Это нужно для анализа текста и понимания его смысла.
➡️ Декодер берет числа и снова превращает их в текст. Например, такие модели используются для генерации ответов, как в ChatGPT.

BERT использует энкодер, что делает его топовым инструментом для таких задач как:
1️⃣ Определение тональности текста
2️⃣ Поиск похожих по смыслу предложений
3️⃣ Ответы на вопросы на основе текста

BERT обучался на двух ключевых задачах, которые помогли ему стать такой мощной моделью: (2 картинка)
1️⃣ Masked Language Modeling (MLM) — задача, при которой некоторые слова в предложении маскируются, и модель должна предсказать эти скрытые слова. Например, если мы берем предложение "Я [MASK] пиццу", модель должна угадать, что на месте [MASK] стоит слово "хочу". Это учит модель понимать контекст и связи между словами. Если угадала, то мы её хвалим, если нет, то пинаем по голове, шобы такого больше не было. 😕
2️⃣ Next Sentence Prediction (NSP) — задача предсказания следующего предложения. Модели дают два предложения, и она должна определить, логически ли они связаны. Например, если предложения: "Я хочу пиццу. Я съел деда.", модель должна понять, что они связаны по смыслу. Это учит BERT анализировать связи между предложениями и целыми текстами. Опять же, угадала - хвалим, не угадала - бьём. 💥

Модель произвела большой скачок в сфере, так как модель принесла 💪
1️⃣ Двустороннее (bidirectional) понимание контекста - Word2Vec, FastText, RNN не обладали таким же глубоким понимаем контекста, как BERT.
2️⃣ Transfer Learning - когда можешь взять эту базовую модель, заморить первые слои и обучить последние слои на свои задачи
3️⃣ Универсальность - модель способна обучаться на любых задачах связанной с текстом.

Ссылки для более глубоко понимания BERT:
- Transformer, explained in detail | Igor Kotenkov | NLP Lecture (in Russian) - советую посмотреть весь видос
- BERT Neural Network - EXPLAINED!
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- Оригинальная статья BERT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11🍌4🔥2
Уничтожение Алгоритмов v2 🤨

На собесах вам могут спросить как и обычный алгос с LeetCode, так и попросить заебенить линейную регрессию на numpy или self-attention на torch, или на чистом питоне... 😂

Вот роадмапик для низведения до нуля алгоритмов и структур данных 😊
1️⃣ RoadMap от NeedCode`a - необходимая и нерушимая база каждого лайвкодера, на начальном этапе необходимо убить easy задачи тех тем, которые помечены на картинке красным кружком.
2️⃣ Практика по ML - это та самая классика, которую спрашивают на собесах: от реализации градиентного спуска до реализации GPT. Делайте тот объём, который вам комфортен, но я советую сделать всё.
3️⃣ Параллельно с практикой по ML углубляемся в RoadMap от NeedCode`a, там добиваем medium задачки в красном кружочке.
4️⃣ Когда вы прошли предыдущие пункты и точно поняли концепции и техники в решаемых задачах, то можете порешать задачки из файла, в котором есть ссылки на наиболее часто встречающиеся вопросы из собесов в Яшку (файл приложил в комментариях)

Как стоит подходить к изучению материалов 🔫
Решайте алгос 30-40 минут, если ничего не получилось, то смотрите разбор от NeetCode или другого челика. Поняли концепцию и после этого повторили код самостоятельно с этой же концепцией.

Также кидаю дополнительные ресурсы 😘
1️⃣ NeetCode - работник гугла, очень много рассказывает про алгоритмы
2️⃣ RoadMap от NeedCode`a - необходимая и нерушимая база каждого лайвкодера, необходимо убить все эти задачи
3️⃣ Для закрепления ваших знаний и ещё большего погружения в мир алгосов
а) Тренировки по алгоритмам от Яндекса 1.0
б) Тренировки по алгоритмам от Яндекса 2.0
в) Тренировки по алгоритмам от Яндекса 3.0
4️⃣ Алгоритмы, Часть I
5️⃣ Специализация Data Structures and Algorithms
6️⃣ LeetCode - святило всех алгоритмов
7️⃣ Сложность алгоритмов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🍌41👍1🤣1
Уничтожение Self-Attention

Self-Attention или механизм внимания - это такой механизм, который используется сейчас во всех современный LLMках. До него многие задачи решались с помощью рекуррентных нейросетей (RNN), но они обладали некоторыми недостатками:
- сложность в учёте длинных последовательностей
- проблема взрыва/затухание градиентов
- нельзя параллелить вычисления
- сложная в интерпретации

Как итог гугл выкладывает статью Attention Is All You Need. В ней гугл показывает концепцию, которая может решить данные недостатки 💥

Как устроен Self-Attention 💪
1️⃣ Векторизация и создание матриц Query, Key, Value.
На вход подаётся векторные представления слов (зелёные матрицы с 1 картинки). Каждая "строка" в этой матрице - это векторное представление слова. Входящие матрица умножаются на матрицы весов Key, Query, Values. После умножение уже получается матрицы Query, Key, Values (розовая, оранжевая и голубая матрица справа на первой картинке).

2️⃣ Подсчёт значимости между токенами
Умножается матрица Query на транспонированную матрицу Key (Q*K.T). Мы получаем промежуточную матрицу, отражающую значимость токенов друг для друга.

3️⃣ Нормировка
Для нормировки матрицы Q*K.T, матрица делится на корень из значения размерности векторов модели (например, на sqrt(512) для модели с размерностью 512). Нам нужно делить, так как при умножении Q на K.T у нас увеличивается дисперсия на sqrt(размерность).

4️⃣ Применение softmax для вычисления внимания
Потом применяется функция softmax для, чтобы нормализовать значения и получить attention-матрицу. На картинке 3 предложение "Life is short eat desert first", допусти каждое слово - это токен. Проделав шаги 1 - 4 у нас получится примерно такая attention-матрица, как на картинке 3, где каждый с каждым токеном имеет свою оценку "внимания" между собой. Если скор большой, то эти токены как-то связаны между собой, возможно они вместе образуют какую-то общую информацию.

5️⃣ Маскирование (при необходимости)
Зависит от задачи (например обучение генеративной модели), но на attention-матрицу может наложиться маска, например как на картинке 4

6️⃣ Получение итоговых значений
attention-матрица
умножается на матрицу Values по итогу получается матрица, которая идёт в последующие слои.

Почему выбор сделан на self-attention или его преимущества, которые вас обязательно спросят на собесе 💪
1️⃣ Self-Attention может учитывать зависимость между дальними токенами, так как скоры между токенами считаются непосредственно друг с другом
2️⃣ С помощью Multi-Head-Attention достигается параллельный расчёт, что позволяет вычислять всё более большой объём данных.
3️⃣ Self-Attention легче интерпретировать в отличие от RNN

Это была краткая сводка материала, чтобы понять концепцию Self-Attention и рассказать на собесе. Если вы хотите больше узнать более подробно про Self-Attention, то прошу к прочтению 😊
- Всем смотреть базу от Котенкова, здесь мы с ручкой и листком переписываем архитектуру, чтобы в полной мере понимать, как она работает
- Трансформеры в картинках - эту статью прочитать в качестве закрепления материала от Котенкова
- Transformers Explained Visually (Part 3): Multi-head Attention, deep dive
- Attention Networks: A simple way to understand Self-Attention
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌16👍6🔥4
Уничтожение LLM System Design 😎

Как отвечать на собеседовании, если вас спросят: «Постройка мне чат-бота с помощью LLM»? Разберем основные шаги на конкретной задаче.

Основываясь на этот пост, пройдёмся по пунктам.

1️⃣ Нужно чётко сформулировать цель, задачу, ограничения и ресурсы. Прям пытайте интервьювера, чтобы выдал все исходные данные 🍗

Задача: создать чат-бота, который отвечает на финансовые запросы.

Исходные условия:
- В продакшене уже используется API GigaChat (временное решение).
- Доступен API ChatGPT.
- Есть два ассессора.
- Ответы предоставляются без контекста.

Ограничения:
- Ответ за максимум 2 минуты.
- Аппаратные ресурсы: 4 GPU (80 ГБ каждая, A100).

2️⃣ Теперь нужно определиться с метрик. Обычно в задачах построения дизайна система выделяют три вида метрик

Бизнесовые метрики 💸
- Уровень автоматизации — процент запросов, обработанных ботом без операторов.
- Снижение затрат — экономия на поддержке
- Удержание клиентов — сколько пользователей продолжают пользоваться услугами после общения с ботом. Но эту метрику сложно определить, поэтому для простоты стоит поделить на тех пользовался чат-ботом, а кто не пользовался.

Онлайн-метрики:
- Удовлетворенность клиентов (CSAT) — пользовательская оценка (1–5).

Оффлайн-метрики:
- Loss — насколько хорошо обучена модель.
G-Eval — метод «LLM as Judge», когда одна модель оценивает ответы другой по качеству (например, от 1 до 5).
Оценка ассессоров — реальные люди оценивают ответы по техническому заданию. Это ключевая метрика, с которой можно проверить корреляцию с G-Eval.
Бенчмарки — открытые или специально созданные под задачу бизнеса.

3️⃣ Теперь нужно определиться с данными, откуда и сколько их получить, а также как поделить на Train/Test 🕺

Выделяем ключевые сущности:
У нас есть диалог, а в диалоге:
- Запрос пользователя
- Ответ модели
- Маркер начала диалога
- Идентификаторы запроса, ответа, пользователя и т.д.

Способы получения данных:
➡️ Синтетика — быстро и дешево, но требует проверки (например, через G-Eval).
➡️ Открытые датасеты — бесплатны, но их нужно очищать (GPT или предобученные модели).
➡️ Собственные данные — качественно, но дорого и долго (нужны четкие ТЗ для копирайтеров).

Объем данных: Для обучения LoRA потребуется хотя бы 10 тысяч примеров для тренировки и около 700 для тестирования.
Для упрощения пока исключаем поиск контекста, работу с контекстом распишу в следующей части)

4️⃣ Построение пайплайна обучения 😺

Бейзлайн: предположим, что у нас уже есть метрики для текущего решения (например, на GigaChat).

Входные данные:
X — запрос пользователя.
Y — эталонный ответ.

Модели:
llama3.1 400b. Пробуем сначала запромпить модель и смотрим на результаты бенчмарков.
saiga_llama3.1 70b. Сначала промптим, затем обучаем под конкретную задачу.
Loss: Используем CrossEntropyLoss — простой и надежный метод для обучения LoRA на основе SFT.

Метрики:
На тренировочной выборке оцениваем Loss.
На тестовой — G-Eval, оценки ассессоров (на 500 случайных примерах) и бенчмарки.
Деплой: Для деплоя используем vllm.

5️⃣ Потенциальные улучшения 🐒

- Добавить контекст в ответы для повышения точности модели (реализуем в следующей части).
-Применить ORPO-метод, чтобы модель лучше понимала, какие ответы допустимы, а какие нет.
- Квантизация или дистилляция для того, чтобы уменьшить latency
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
14🍌7❤‍🔥32👍2🥰1
Forwarded from ML Baldini • Nikita Boyandin (Nikita Boyandin)
#Коллабы #road1k

ML system design - это та вещь, с которой я столкнулся только когда уже был на стажировке, причем сразу с книжки Валерия Бабушкина(кстати, он подписался на меня в Linkedin😭). У Димы есть невероятно классный пост про старт в mlsd и как их побеждать на собесах, а я постараюсь чуть расширить область и дать реальных кейсов.

В своем посте я разберу типовой кейс из классического мл "Обнаружение вредоносного контента🤨 в социальных сетях"

1. Формулировка проблемы😲
Уточняющие вопросы точно помогут сделать задачу понятнее и проще, поэтому стоит их задавать по максимуму, даже если они кажутся глупыми

Цель: отслеживать публикации, выявлять вредоносный контент и понижать его в должности / удалять

Примеры категорий вредоносного контента: насилие, обнаженная натура, разжигание ненависти

Цель ML: определить, является ли публикация вредоносной

Входные данные: Публикация (текст, изображение, видео)
Выходные данные: P(вредная) или P(насильственная), P (обнаженная натура), P (ненависть) и т.д
Категория ML: Мультимодальная (с несколькими ярлыками) классификация

2. Метрики😐
Оффлайн-метрики: F1, PR-AUC, ROC-AUC
Онлайн-метрики: распространенность (процент вредоносных сообщений, которые не были предотвращены, по сравнению со всеми публикациями), количество показов вредоносных сообщений, процент обоснованных (отмененных) обращений, показатель активности (соотношение обнаруженных систем к обнаруженным пользователями)

3. Архитектурные компоненты🤨
Мультимодальный ввод (текст, изображения, видео и т.д.):
Методы мультимодального слияния
Раннее слияние: сначала объединяются модальности, а затем делается единый прогноз
Позднее слияние: модальности обрабатываются независимо друг от друга, прогнозируется слияние
минусы: отдельные обучающие данные для модальностей, подборка индивидуально безопасного контента может быть вредной


Классификация с несколькими метками/многозадачностью
Один бинарный классификатор для каждой категории вреда (p (насилие), p (обнаженная натура), p (ненависть))
несколько моделей, которые обучаются и обслуживаются отдельно, правда стоят дорого
Один классификатор с несколькими метками - сложная задача для изучения

Многозадачный классификатор: изучайте несколько задач одновременно
на отдельных общих слоях (изучайте сходство между задачами) -> преобразованные объекты
уровни, относящиеся к конкретной задаче: главы классификации
плюсы: единая модель, общие уровни предотвращают избыточность, обучающие данные для каждой задачи можно использовать и для других задач (ограниченные данные)

4. Сбор и подготовка данных☺️
Основные участники, по которым доступны данные:
Идентификатор пользователя, возраст, пол, местоположение, контакты

Элементы(сообщения): идентификатор публикации, идентификатор автора, контекст текста, изображения, видео, ссылки, временная метка

Взаимодействие пользователя с публикацией: user_id, post_id, тип взаимодействия, значение, временная метка


5. Разработка функций😠
Особенности: Содержание публикации (текст, изображение, видео) + Взаимодействие с публикацией (текст + структурированный) + Информация об авторе + Контекст сообщений
Текст:
Предварительная обработка (нормализация + токенизация)
Кодирование (векторизация):
Статистические (BoW, TF-IDF)
Кодеры на основе ML (BERT)
Изображения / видео:
Предварительная обработка и извлечение объектов
Изображения:
Clip, SImCLR
Видео:
VideoMoCo
Взаимодействие с публикациями:
Количество лайков, комментариев, репостов, сообщений (масштаб)
Комментарии (текст):
Аналогично тексту публикации (совокупные вложения в комментарии)
Пользователи:
Используйте только демографические данные автора публикации, характеристики учетной записи (количество подписчиков, возраст учетной записи).


6. Разработка модели и автономная оценка🕺
7. Онлайн-тестирование и внедрение🕺
8. Масштабирование, мониторинг и обновления😠

Ресурсы для лучшего понимая🫡:
1. Куча примеров кейсов
2. Разница МЛСД в проде и ресерче

Если понравился пост, то обязательно ставь лайк, а я пока буду дальше трудится над каналом💗
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🍌6🔥2🤝1
Тотальное Уничтожение Multihead-Attention 😎

Для начала вам стоит прочитать пост про Self-Attention для более лучшего понимания данного поста. Если ты действительно хочешь понять MHA, то к данному посту нужно подходить ни один раз, спрашивая в комментах или у GPT.

Главная суть MHA - Multihead Attention 🤨
- Распараллеливание: Каждая голова в MHA обрабатывается независимо, что позволяет эффективно использовать вычислительные ресурсы (например, GPU).
- Интерпретация разных смыслов: Разные головы фокусируются на различных аспектах текста, что помогает модели "замечать" важные связи между словами с разных точек зрения.

Детальный разбор 😎
Представим, что batch_size=1, seq_len=4, embedding_dim=6, heads=3 (количество голов).
На вход поступает последовательность ["Я", "Хочу", "Пиццу", "<eos>"]. Каждый токен - это слово, которое преобразуется в эмбеддинг (вектор). На выходе имеем матрицу эмбеддингов X, смотрите на картинку 1

1️⃣ Генерация матриц Q, K, V
Картинка 1:
- На вход в MHA поступает матрица эмбеддингов X.
- Имеем веса Wq, Wk, Wv, которые обучаются.
- Путём матричного умножения X на Wq, Wk, Wv получаем три матрицы: Q, K, V.

Размерности:
- X → (batch_size, seq_len, embedding_dim)
- Wq, Wk, Wv → (embedding_dim, embedding_dim)
- Q, K, V → (batch_size, seq_len, embedding_dim)

2️⃣ Деление на головы
Картинка 2:
Вот у нас получились матрицы Q, K, V. Важно понимать, что MHA — это не создание новых отдельных матриц Q, K, V, а деление каждой из них на головы.
Условно, для каждого токена мы уменьшаем длину его вектора, разделяя его между головами. Например, на картинке 2 токен "пиццу" изначально представлен эмбеддингом длиной 6 → [13,14,15,16,17,18]. Если количество голов равно 3, то теперь этот токен преобразуется в 3 вектора по 2 элемента каждый → [[13,14],[15,16],[17,18]], теперь токен "пиццу" представили как три вектора с размером вектора два. Для этого выполняются операции reshape и swap, у нас появляется новая переменная head_dim = embedding_dim/heads 😐

Размерности:
- Q, K, V(batch_size, seq_len, embedding_dim) = (1, 4, 6)
- Q, K, V после reshape(batch_size, seq_len, heads, head_dim) = (1, 4, 3, 2)
- Q, K, V после swap(batch_size, heads, seq_len, head_dim) = (1, 3, 4, 2)

3️⃣ Self-Attention по каждой голове
Картинки 3-5:
Теперь происходит обычная формула Self-Attention по каждой голове: softmax((Q x K.T)/sqrt(head_dim)) * V
И основная суть, что каждая голова обрабатывается параллельно на одном устройстве (например, GPU), что обеспечивает эффективное распараллеливание вычислений ☝️

Размерности:
Attention Output для каждой головы имеет размерность → (batch_size, seq_len, head_dim) = (1, 4, 2).

4️⃣ Объединение голов
Картинки 6-8:

Вот мы посчитали для каждой головы Attention Output, а теперь время всё конкатить, восстанавливая исходную размерность эмбеддингов. Делаем обратные операции что и на втором шаге. Сначала reshape, а потом swap 🤪

Размерности:
- Attention Output каждой головы → (batch_size, text, seq_len, head_dim) = (1, 3, 4, 2)
- После swap(batch_size, seq_len, heads, head_dim)=(1, 4, 3, 2)
- После reshape(batch_size, seq_len, heads×head_dim)=(1, 4, 6)

5️⃣ Финальная обработка
Картинка 9:

Ну и наконец-то получаем наш Attention Output, который матрично умножается на матрицу весов Wo: Attention Output x Wo. По итогу получается FinalOutput, которая идёт в следующие слои 😋

Размерности:
- Wo → (embedding_dim, embedding_dim) = (6, 6)
- Attention Output → (batch_size, seq_len, embedding_dim) = (1, 4, 6)
- FinalOutput → (batch_size, seq_len, embedding_dim) = (1, 4, 6)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌14🔥136👍2👏1