#вопрос_дня
#python
Вопрос с собеса на DL Engineer в российский банк: В чем разница между мультипоточностью и мультипроцессорностью в Python?
Начнем с базы!
Процессор (CPU) - это «железка», физическое устройство, которое выполняет вычисления. Современные процессоры состоят из нескольких ядер, каждое из которых может работать с отдельной своей задачей.
Поток (thread) - это последовательность выполнения инструкций внутри одной программы. Один процесс может иметь несколько потоков, которые делят общую память.
Идем дальше.
⭐ Мультипоточность - это запуск нескольких потоков внутри одного процесса. Но! В Python есть GIL (Global Interpreter Lock) — штука, которая не даёт реально выполнять код нескольких потоков одновременно. Поэтому многопоточность эффективна только для задач с I/O (ожидание сети, файлов, API).
Пример:
⭐ Мультипроцессорность - это запуск нескольких процессов, каждый со своим интерпретатором Python и памятью. Здесь GIL не мешает, и это работает круто для CPU-bound задач (численные расчёты, непосредственно ML и т.д.).
Пример:
Читай и запоминай, чтобы не завалить собес👍
#python
Вопрос с собеса на DL Engineer в российский банк: В чем разница между мультипоточностью и мультипроцессорностью в Python?
Начнем с базы!
Процессор (CPU) - это «железка», физическое устройство, которое выполняет вычисления. Современные процессоры состоят из нескольких ядер, каждое из которых может работать с отдельной своей задачей.
Поток (thread) - это последовательность выполнения инструкций внутри одной программы. Один процесс может иметь несколько потоков, которые делят общую память.
Идем дальше.
Пример:
Мы обучаем модель на большом датасете изображений.
Чтобы не ждать, пока данные последовательно подгрузятся с диска, DataLoader из PyTorch может использовать num_workers > 0. В этом случае потоки параллельно читают файлы, подготавливая тензоры.
train_loader = DataLoader(dataset, batch_size=64, shuffle=True, num_workers=4)
Пример:
Мы запускаем несколько моделей (или несколько экспериментов с разными гиперпараметрами) одновременно. Каждый процесс работает независимо, использует своё ядро CPU и не ограничен GIL.
from multiprocessing import Process
def train_model(config):
# CPU-bound training
...
processes = []
for cfg in configs:
p = Process(
target=train_model,
args=(cfg,)
)
p.start()
processes.append(p)
for p in processes:
p.join()
Читай и запоминай, чтобы не завалить собес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5🤓4
#MLbasics
#python
Задача на кодинг?💻
Бывает на собеседованиях в секции решения задач дают совсем не алгос, а что-то МЛное. Это может быть любой базовый алгоритм из классического ML, а может и класс для self-attention.
Как закодить ЛИНЕЙНУЮ РЕГРЕССИЮ
Начнем с подходов к задаче. Линейная регрессия - это метод моделирования зависимости, в котором мы подбираем веса к нашим признакам, чтобы приблизить функцию распределения нашей целевой величины.
Чтобы подобрать оптимальные веса - нам нужна функция потерь. Обычно используется MSE, так как она гладкая и выпуклая -> производная определена во всех точках -> удобно оптимизировать!
Для поиска весов можно привести аналитическое (точное) решение - оно будет в виде уравнения, где нужно найти обратную матрицу (конечно же по всему датасету). Такое нам не подходит, так как это долгая и вычислеительно затратная операция на больших данных.
В дело вступает численный метод оптимизации - градиентный спуск. Он позволяет найти точку минимума (желательно глобального) итеративно, используя не весь датасет в вычслениях, а определенную его часть на каждой итерации, спускаясь в направлении антиградиента (направление наискорейшего убывания функции).
Показал реализацию модели Линейной регрессии и ее оптимизацию градиентным спуском в ноутбуке с комментариями и формулами.
Будет полезно разобраться в коде для собесов в classic ML и даже в DL, так как часто спрашивают, как устроен Adam (модификация градиентного спуска).
Пиши в комментариях, что бы еще добавил в такую реализацию❔
#python
Задача на кодинг?
Бывает на собеседованиях в секции решения задач дают совсем не алгос, а что-то МЛное. Это может быть любой базовый алгоритм из классического ML, а может и класс для self-attention.
Как закодить ЛИНЕЙНУЮ РЕГРЕССИЮ
Начнем с подходов к задаче. Линейная регрессия - это метод моделирования зависимости, в котором мы подбираем веса к нашим признакам, чтобы приблизить функцию распределения нашей целевой величины.
Чтобы подобрать оптимальные веса - нам нужна функция потерь. Обычно используется MSE, так как она гладкая и выпуклая -> производная определена во всех точках -> удобно оптимизировать!
Для поиска весов можно привести аналитическое (точное) решение - оно будет в виде уравнения, где нужно найти обратную матрицу (конечно же по всему датасету). Такое нам не подходит, так как это долгая и вычислеительно затратная операция на больших данных.
В дело вступает численный метод оптимизации - градиентный спуск. Он позволяет найти точку минимума (желательно глобального) итеративно, используя не весь датасет в вычслениях, а определенную его часть на каждой итерации, спускаясь в направлении антиградиента (направление наискорейшего убывания функции).
Показал реализацию модели Линейной регрессии и ее оптимизацию градиентным спуском в ноутбуке с комментариями и формулами.
Будет полезно разобраться в коде для собесов в classic ML и даже в DL, так как часто спрашивают, как устроен Adam (модификация градиентного спуска).
Пиши в комментариях, что бы еще добавил в такую реализацию
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9✍5👍5
#MLbasics
#metrics
#python
Пишем метрики ручками Часть 1
Для лучшего понимания любой темы самый эффективный способ - воспроизвести ее самостоятельно, нарисовать/закодить и так далее.
Прежде чем разбираться в моделях, важно понимать, как мы вообще оцениваем их качество.
Метрики регрессии — это линейка, которой мы измеряем, насколько близко модель предсказывает к реальности.
Ниже — шесть базовых метрик регрессии, которые стоит уметь не только интерпретировать, но и написать с нуля.
1. Root Mean Squared Error (RMSE)
📏 Измеряет насколько сильно в среднем предсказания отличаются от реальных значений, при этом большие ошибки наказываются сильнее.
💡 Особенно подходит, если важно штрафовать крупные промахи, например, при прогнозе цен или спроса.
2. Mean Absolute Error (MAE)
📏 Измеряет среднее отклонение предсказаний от реальных значений, в тех же единицах, что и исходные данные.
💡 Удобно, когда все ошибки одинаково важны — не нужно наказывать большие ошибки сильнее, чем маленькие.
3. Mean Absolute Percentage Error (MAPE)
📏 Измеряет средний процент ошибки относительно истинного значения.
⚠️ Плохо работает, если реальные значения близки к нулю (деление на маленькие числа → огромные проценты). Также она несимметрично оценивает перепрогноз и недопрогноз -> можно посмотреть на SMAPE.
💡 Полезно, когда важно понимать ошибку в процентах, например, «на сколько процентов промахнулся прогноз продаж».
4. Mean Squared Logarithmic Error (MSLE)
📏 Измеряет насколько близки логарифмы предсказаний и реальных значений.
💡 Подходит, когда важна относительная ошибка (во сколько раз промахнулся), а не абсолютная. Например, прогнозы роста, трафика, количества пользователей.
5. R^2(коэффициент детерминации)
📏 Измеряет насколько хорошо модель объясняет изменчивость данных. Грубо говоря, насколько лучше модель, чем просто “среднее значение”.
💡 Хороша, когда хочешь оценить долю объяснённой моделью дисперсии — то есть, насколько хорошо модель “понимает” зависимость между X и Y.
6. Adjusted R^2 (скорректированный коэффициент детерминации)
📏 Измеряет то же, что и R², но с поправкой на количество признаков (фич).
💡 Можно использовать при сравнении моделей с разным числом признаков. Помогает понять, стоит ли усложнение модели своих результатов.
🧭 Главное — не просто подставлять метрику, а понимать, что именно она показывает и в каких единицах измеряет ошибку. Это позволит выбирать правильную метрику под конкретную задачу, а не просто смотреть на все и теряться.
*Картинка взята с сайта loginom.ru
#metrics
#python
Пишем метрики ручками Часть 1
Для лучшего понимания любой темы самый эффективный способ - воспроизвести ее самостоятельно, нарисовать/закодить и так далее.
Прежде чем разбираться в моделях, важно понимать, как мы вообще оцениваем их качество.
Метрики регрессии — это линейка, которой мы измеряем, насколько близко модель предсказывает к реальности.
Ниже — шесть базовых метрик регрессии, которые стоит уметь не только интерпретировать, но и написать с нуля.
1. Root Mean Squared Error (RMSE)
📏 Измеряет насколько сильно в среднем предсказания отличаются от реальных значений, при этом большие ошибки наказываются сильнее.
💡 Особенно подходит, если важно штрафовать крупные промахи, например, при прогнозе цен или спроса.
2. Mean Absolute Error (MAE)
📏 Измеряет среднее отклонение предсказаний от реальных значений, в тех же единицах, что и исходные данные.
💡 Удобно, когда все ошибки одинаково важны — не нужно наказывать большие ошибки сильнее, чем маленькие.
3. Mean Absolute Percentage Error (MAPE)
📏 Измеряет средний процент ошибки относительно истинного значения.
⚠️ Плохо работает, если реальные значения близки к нулю (деление на маленькие числа → огромные проценты). Также она несимметрично оценивает перепрогноз и недопрогноз -> можно посмотреть на SMAPE.
💡 Полезно, когда важно понимать ошибку в процентах, например, «на сколько процентов промахнулся прогноз продаж».
4. Mean Squared Logarithmic Error (MSLE)
📏 Измеряет насколько близки логарифмы предсказаний и реальных значений.
💡 Подходит, когда важна относительная ошибка (во сколько раз промахнулся), а не абсолютная. Например, прогнозы роста, трафика, количества пользователей.
5. R^2(коэффициент детерминации)
📏 Измеряет насколько хорошо модель объясняет изменчивость данных. Грубо говоря, насколько лучше модель, чем просто “среднее значение”.
💡 Хороша, когда хочешь оценить долю объяснённой моделью дисперсии — то есть, насколько хорошо модель “понимает” зависимость между X и Y.
6. Adjusted R^2 (скорректированный коэффициент детерминации)
📏 Измеряет то же, что и R², но с поправкой на количество признаков (фич).
💡 Можно использовать при сравнении моделей с разным числом признаков. Помогает понять, стоит ли усложнение модели своих результатов.
🧭 Главное — не просто подставлять метрику, а понимать, что именно она показывает и в каких единицах измеряет ошибку. Это позволит выбирать правильную метрику под конкретную задачу, а не просто смотреть на все и теряться.
*Картинка взята с сайта loginom.ru
👍4✍3🔥3