Тотальное Уничтожение 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:
- На вход в 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:
Вот у нас получились матрицы 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-5:
Теперь происходит обычная формула Self-Attention по каждой голове: softmax((Q x K.T)/sqrt(head_dim)) * V
И основная суть, что каждая голова обрабатывается параллельно на одном устройстве (например, GPU), что обеспечивает эффективное распараллеливание вычислений
Размерности:
Attention Output для каждой головы имеет размерность → (batch_size, seq_len, head_dim) = (1, 4, 2).
Картинки 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)Картинка 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🔥13❤6👍2👏1
Forwarded from ML-легушька
Тоже хотите собрать полный комплект яблочной техники? Тогда покупайте мои курсы изучайте статистику.
Сегодня полезный пост, в котором мы начнем собирать статистический словарик для начинающих ML-щиков и аналитиков.
0. Центральная предельная теорема.
Святой грааль теории вероятностей, из которого статистика как наука практически родилась. Что говорит ЦПТ? Если у нас есть много независимых случайных величин из одного распределения, то их среднее (как случайная величина) будет распределена нормально, причем математическое ожидание совпадет с мат.ожиданием одной случайной величины, а дисперсия будет дисперсией одной случайной величины, деленной на кол-во наблюдений. В частности, ошибки измерений и случайный шум часто распределены нормально, что позволяет использовать MSE-loss для моделей, приближающих данные, но про это в другом посте (поддержите активностью, если вам интересно!!!).
1. Статистические гипотезы.
Статистическая гипотеза представляет из себя утверждение о параметрах модели. В тестах обычно используется два вида гипотез - нулевая и альтернативная, обозначаются H0 и H1 соответственно. Нулевая гипотеза - та, которую мы примем, если не соберем достаточных доказательств ее неправильности. Соответственно, ее можно составить по формуле "при отсутствии данных принимаем такое же решение, как если бы было верно...".
Альтернативная гипотеза - гипотеза, требующая доказательств, то есть данных, свидетельствующих о ее правильности и о том, что нулевая гипотеза неверна. Пример: вы - банк, нормальный банк, не МФО, и на основе данных хотите принять решение, является ли заемщик надежным? Тут нулевой гипотезой будет то, что заемщик - ненадежный, ибо зачем без доказательств выдавать кредит кому попало? Это экономически невыгодно.
2. Статистические тесты, уровень значимости, мощность.
После того, как мы определились с гипотезами, нужно их проверить - для этого и нужны статистические тесты. Статистические тесты вычисляют функцию от наблюдений, называемую статистику, и проверяют, попало ли это значение в "критический регион" - множество значений, при которых мы отклоняем нулевую гипотезу. Критический регион основан на знании о том, как распределена тестовая статистика. Тесты бывают односторонние и двусторонние. При одностороннем тесте вы сравниваем тестовую статистику только с одним числом, в двустороннем тесте - с двумя числами. Подробнее с этим мы разберемся в практическом примере.
Однако, помимо формулирования гипотез, перед проведением теста необходимо определиться с уровнем значимости. Уровень значимости показывает, как часто наш тест неверно отклоняет нулевую гипотезу. Более формально - это вероятность отклонить H0 при условии ее правильности. В примере с банком - как часто мы выдаем кредит ненадежным заемщикам. От уровня значимости будет зависеть критический регион теста. Обычно используется значение 0.05 - то есть мы позволяем тесту ошибочно отвергать H0 не более чем в 5% случаев.
Почему же мы не можем поставить уровень значимости очень маленьким, скажем, 0.01%, чтобы почти никогда неверно не отклонять H0? Пострадает мощность. Мощность показывает, как часто мы правильно отклоняем H0, для случая с банком - как часто мы выдаем кредит надежным заемщикам. Если поставить уровень значимости очень низким, то почти все заемщики вернут нам кредит, но самих заемщиков станет сильно меньше! При уменьшении уровня значимости мощность обычно падает, и итоговая значимость будет зависеть от наших бизнес-целей.
Сегодня полезный пост, в котором мы начнем собирать статистический словарик для начинающих ML-щиков и аналитиков.
0. Центральная предельная теорема.
Святой грааль теории вероятностей, из которого статистика как наука практически родилась. Что говорит ЦПТ? Если у нас есть много независимых случайных величин из одного распределения, то их среднее (как случайная величина) будет распределена нормально, причем математическое ожидание совпадет с мат.ожиданием одной случайной величины, а дисперсия будет дисперсией одной случайной величины, деленной на кол-во наблюдений. В частности, ошибки измерений и случайный шум часто распределены нормально, что позволяет использовать MSE-loss для моделей, приближающих данные, но про это в другом посте (поддержите активностью, если вам интересно!!!).
1. Статистические гипотезы.
Статистическая гипотеза представляет из себя утверждение о параметрах модели. В тестах обычно используется два вида гипотез - нулевая и альтернативная, обозначаются H0 и H1 соответственно. Нулевая гипотеза - та, которую мы примем, если не соберем достаточных доказательств ее неправильности. Соответственно, ее можно составить по формуле "при отсутствии данных принимаем такое же решение, как если бы было верно...".
Альтернативная гипотеза - гипотеза, требующая доказательств, то есть данных, свидетельствующих о ее правильности и о том, что нулевая гипотеза неверна. Пример: вы - банк, нормальный банк, не МФО, и на основе данных хотите принять решение, является ли заемщик надежным? Тут нулевой гипотезой будет то, что заемщик - ненадежный, ибо зачем без доказательств выдавать кредит кому попало? Это экономически невыгодно.
2. Статистические тесты, уровень значимости, мощность.
После того, как мы определились с гипотезами, нужно их проверить - для этого и нужны статистические тесты. Статистические тесты вычисляют функцию от наблюдений, называемую статистику, и проверяют, попало ли это значение в "критический регион" - множество значений, при которых мы отклоняем нулевую гипотезу. Критический регион основан на знании о том, как распределена тестовая статистика. Тесты бывают односторонние и двусторонние. При одностороннем тесте вы сравниваем тестовую статистику только с одним числом, в двустороннем тесте - с двумя числами. Подробнее с этим мы разберемся в практическом примере.
Однако, помимо формулирования гипотез, перед проведением теста необходимо определиться с уровнем значимости. Уровень значимости показывает, как часто наш тест неверно отклоняет нулевую гипотезу. Более формально - это вероятность отклонить H0 при условии ее правильности. В примере с банком - как часто мы выдаем кредит ненадежным заемщикам. От уровня значимости будет зависеть критический регион теста. Обычно используется значение 0.05 - то есть мы позволяем тесту ошибочно отвергать H0 не более чем в 5% случаев.
Почему же мы не можем поставить уровень значимости очень маленьким, скажем, 0.01%, чтобы почти никогда неверно не отклонять H0? Пострадает мощность. Мощность показывает, как часто мы правильно отклоняем H0, для случая с банком - как часто мы выдаем кредит надежным заемщикам. Если поставить уровень значимости очень низким, то почти все заемщики вернут нам кредит, но самих заемщиков станет сильно меньше! При уменьшении уровня значимости мощность обычно падает, и итоговая значимость будет зависеть от наших бизнес-целей.
🔥7🍌4⚡2
Почему ты получаешь отказы после прохождения собеса? Или Алгоритм прохождения собесов
Проблема:
Очень часто такое бывает, что человек проходит 1000 скринингов с HR`ом, 500 техничек и 100 финалок, но всё равно не получает оффер. А почему? Всё очень просто, нужно всего лишь попросить фидбек и исправить свои ошибки
Вроде бы это простая истина, но много моих учеников не понимают такого простого алгоритма:
Чтобы получить оффер, нам нужно уметь проходить собеседования (оффер = вкачанный навык прохождения собеседования). Поэтому на данном этапе наша цель получить как можно больше приглашений на скрининг и попасть на следующие этапы собеседования.
Если мы проебали на каком-то определённом этапе собеседования, то нам обязательно нужно попросить фидбек. Прям не бойтесь мучить HR`ом своими вопросами. Запомните, глупый вопрос это тот вопрос, который не спросили.
Независимо от этапа пишите сообщение вида:
Здравствуйте! Подскажите, пожалуйста, почему мне дали отказ? Для меня очень важно понять, где мои ошибки и пробелы в знаниях, поэтому прошу вас дать фидбек. Буду благодарен)
Также будет ОГРОМНЫМ плюсом, если вы будете записывать собеседование и потом его пересматривать. Хоть это и на первых порах будет вызывать дискомфорт, но результат не заставит долго ждать, если вы будете грамотно анализировать свои ошибки.
Тут мы получили фидбек и поняли, что мы не знаем, что такое 'операция умножения и сколько существует цифр'. Теперь мы рассматриваем это не как проблему, а как задачу и задать себе следующий вопрос: "А что я могу сделать, чтобы на следующем собеседовании не допустить такую ошибку?". Нужно понять, как мы можем это исправить.
Нам нужно найти материалы, статьи, видео в ютубе, которые помогут нам в решение данной задачи. Выучить это, сделать конспект, шпаргалку, но не допустить, чтобы это повторилось не повторилось на следующем собесе.
Мой пример: Я очень часто могу забыть какую-нибудь формулу, поэтому на собесах использую шпаргалку. Тогда стоит мне чуть взглянуть на неё, я сразу понимаю какой элемент за что отвечает.
Итог
Повторю, получение оффера = навык проходить собесы; навык проходит собесы = повторение шагов 1-4. Выполняя эти простые действия, вы точно получите оффер!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21🍌6⚡4💯2❤1❤🔥1
Итоги of the year и планы на next year
Чем ещё я буду вас радовать в следующем году
Было проделано не мало работы над качеством и структурой постов и в целом над каналом
- выработал собственный стиль постов: заголовок, подзаголовки, смайлики и смехуюшечки
- определился со своей ЦА в тг-канале: в основном я делаю контент для начинающий ребят, перекатунов и мидлов. В основном посты про найм, как/где/зачем найти работу в DS, выкладываю посты с объяснением материалов из серии "уничтожение" с надеждой, что их кто-то сохраняет и действительно читает
- по цифрам достиг ~930 подписоты к НГ, а в планах было 1к..., но ничего мы ещё добьём!
Надеюсь, что ваши цели в этом году были достигнуты, и вы уже поставили цели на следующий год! Буду вам очень благодарен, если напишите в комментах:
- Свою цель на 2024
- Насколько вы выполнили её в 2024
- И цель на 2025 год
Не стесняйтесь, давайте вместе подведём итоги года)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34🍌9👍5❤🔥1🎉1💩1
Вопросы, которые вам обязательно зададут на типичном собесе по ClassicML ч1
Все вопросы вы можете посмотреть в моём личном сборнике вопросов, там также есть вопросы не только по ClassicML, но и по NLP, CV и вопросы с компаний)
Линейная регрессия — это метод прогнозирования, который ищет линейную зависимость между зависимой переменной y и независимыми переменными x. Модель описывается уравнением: y = w*x + b, где w - веса модели, а b - смещение.
Обучение заключается в подборе коэффициентов w, b, минимизируя функцию потерь, например, среднеквадратичную ошибку (MSE). Методы оптимизации: градиентный спуск или аналитическое решение через нормальное уравнение.
Плюсы: может в тенденцию, интерпретируемость, быстрое обучение
Минусы: не работает с нелинейными зависимостями, чувствительна к выбросам
Переобучение — это ситуация, когда модель слишком хорошо подстраивается под обучающие данные, теряя способность обобщать на новые данные. Есть вероятность переобучения, если высокая точность на трейне, и низкая не тесте, а также сильно расходятся кривые обучения.
Картинка 1, 2
Регуляризация — это метод добавления штрафа в функцию потерь для уменьшения сложности модели.
L1-регуляризация (Lasso): добавляет штраф на сумму модулей коэффициентов.
L2-регуляризация (Ridge): добавляет штраф на сумму квадратов коэффициентов.
Графическая интерпретация:
L1-регуляризация (Lasso): штраф создает ромбовидный контур ограничений. Это приводит к тому, что веса некоторых признаков могут становиться равными нулю, делая модель разреженной.
L2-регуляризация (Ridge): штраф формирует круговые контуры ограничений. Это приводит к тому, что веса уменьшаются равномерно, сохраняя все признаки в модели, но снижая их вклад.
Почему помогает: Уменьшает влияние нерелевантных признаков и сложных моделей.
- Регуляризация (L1, L2).
- Уменьшение сложности модели путём отбора фичей
- Добавление больше чистых данных.
- Кросс-валидация.
Картинка 3, 4
Кросс-валидация (CV) — метод оценки качества модели через разбиение данных на тренировочные и валидационные наборы (например, K-Fold).
TimeSeries-CV: используется для временных рядов, учитывает временную зависимость. Пример: sliding window или expanding window.
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌13❤🔥9👍2🔥2❤1
Вопросы, которые вам обязательно зададут на типичном собесе по ClassicML ч2
Все вопросы вы можете посмотреть в моём личном сборнике вопросов, там также есть вопросы не только по ClassicML, но и по NLP, CV и вопросы с компаний)
Картинка 1
Логистическая регрессия - Модель для классификации, прогнозирующая вероятность принадлежности объекта к классу.
Чтобы получить логистическую регрессию, в функцию сигмоиду (картинка) подставляют линейную комбинацию признаков z = w*x+b. Таким образом, линейная модель используется как вход для сигмоидной функции, чтобы спрогнозировать вероятность.
Отступ — это значение wx+b, то есть отступ в логистической регрессии m = wx+b. Он показывает, на сколько далеко (в терминах линейного пространства) точка находится от гиперплоскости. Если m > 0, то точка относится к классу 1, если m < 0, то точка относится к классу 0. Это означает, что точки, которые дальше от гиперплоскости, дают более вероятностные предсказания (ближе к 0 или 1).
Картинка 2
MSE (Mean Squared Error) — Среднеквадратичная ошибка:
Плюсы: Сильно штрафует большие ошибки, что полезно, если они критичны.
Минусы: Чувствительна к выбросам.
MAE (Mean Absolute Error) — Средняя абсолютная ошибка:
Плюсы: Менее чувствительна к выбросам, чем MSE.
Минусы: Сложнее оптимизировать, так как модуль функции не дифференцируем в нуле.
R² (Коэффициент детерминации) - Показывает, какая доля дисперсии целевой переменной объясняется моделью. Значение от 0 до 1, где 1 — идеальная модель.
RMSE (Root Mean Squared Error) — Корень из среднеквадратичной ошибки:
Интерпретируемость выше, так как метрика имеет те же единицы измерения, что и целевая переменная.
MAPE (Mean Absolute Percentage Error) — Средняя абсолютная процентная ошибка.
MAPE измеряет среднюю относительную ошибку в процентах, показывая, насколько сильно предсказание модели отклоняется от реальных значений.
Картинка 3
Метрики: Accuracy, Precision, Recall, F1-Score, ROC-AUC, PR-AUC
Картинка 4
- ROC-AUC показывает, насколько хорошо модель может отличить один класс от другого, другими словами, это вероятность того насколько модель может хорошо отранжировать один класс от другого. Чем ближе значение к 1, тем лучше. Если ROC-AUC = 0.5, модель угадывает случайно, ROC-AUC = 0, то модель предсказывает все положительные классы как нули, а нули как положительные. Чувствительна к дисбалансу классов.
- PR-AUC показывает, как хорошо модель находит положительные объекты и насколько точно она это делает. Особенно полезна, если положительных объектов мало (несбалансированные данные).
- Recall важен, когда ошибки FN критичны (определение рака, нам страшно, если модель сказала, что человек здоров (y_pred=0), но на самом деле он болен раком (y_true = 1)).
- Precision важен, когда ошибки FP критичны (поиск спама в почте, нам страшно, если модель сказала, что сообщение спам (y_pred=1), но на самом деле это не спам (y_true=0), тога важное сообщение уйдёт в корзину).
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌6❤🔥4👍3❤1🥰1