Machine learning Interview
24.4K subscribers
1.04K photos
69 videos
12 files
701 links
Разбираем вопросы с собеседований по Machine Learning, Data Science, Deep Learning и Нейронным сетям, Python.

Вопросы - @notxxx1


@itchannels_telegram -🔥лучшие it каналы

РКН: clck.ru/3FmwRz
Download Telegram
Задача про градиентный спуск

С помощью градиентного спуска, как известно, можно обучать различные модели машинного обучения. Верно ли, что классический градиентный спуск всегда найдет глобальный минимум функции потерь и выдаст оптимальные параметры?

Ответ: нет, неверно.

Решение
Посмотрим на формулу градиентного спуска (картинка 1)

По основному свойству градиента с каждым следующим шагом метода мы будем двигаться все ближе и ближе к минимуму функции потерь Q, что хорошо. Но нет гарантии, что мы придем именно в глобальный минимум, а не застрянем в локальном(картинка 2).

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

Еще одна причина неудачи метода — неверный выбор градиентного шага.

Например, при очень маленьком градиентном шаге метод будет идти в сторону минимума слишком медленно и остановится просто из-за ограничения на число итераций, не дойдя до него. А при слишком большом градиентном шаге метод может не попасть в минимум и «прыгать» вокруг него до тех пор, пока не остановится из-за ограничения на число итераций. Иногда метод при большом градиентном шаге может даже разойтись.

В классическом машинном обучении мы почти не сталкиваемся с описанными проблемами, но вот в Deep Learning этих проблем достаточно. Для их решения придумано множество модификаций градиентного спуска.

@machinelearning_interview
📖 Introduction to Machine Learning Interviews Book

Книга для подготовки к собеседованию по машинному обучению.
В качестве соискателя автор прошел собеседования в десятке крупных компаний и стартапов и получил предложения на должности в области машинного обучения в таких компаниях, как Google, NVIDIA, Snap, Netflix, Primer AI и Snorkel AI. Полезная книга для для закрепления теоретических и практических знаний в области машинного обучения.

📚 Книга

@machinelearning_interview
Kubeflow Pipelines оптимизирует обучение ML-моделей

Свой опыт в статье на Хабре описывает инженер по машинному обучению в ML-команде проектов для бизнесов и покупателей ВКонтакте. Она расскажет, чем Kubeflow Pipelines может быть полезен ML-специалисту и как в нём без потери существующей кодовой базы можно запускать готовые пайплайны.

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

@machinelearning_interview
🚀 Что такое Fine Tuning ? Какие шаги включает ? Что дает Fine Tuning ?

В отличие от feature extraction, суть дообучения (Fine Tuning) заключается в размораживании последних слоев нейронной сети (Neural Net) и их обучении. Таким образом, корректируются слои, которые имеют наиболее абстрактные представления. Производя дообучение только нескольких слоев, мы уменьшаем риск переобучения (overfitting). И самое главное, это позволяет сделать текущую модель ещё более подходящей к нашей задаче.

Если верхние слои следует дообучить, то полносвязные слои нужно заменить на свои и тоже обучить.

Fine-tuning экономит ресурсы и время. Чтобы качественно обучить нейросеть, всей структуре языка нужны огромные вычислительные мощности,а также корпус всех текстов, которые удастся собрать с Интернета.

Эта задача достаточно сложна, и обычному исследователю вряд ли удастся в одиночку создать целую языковую модель. Fine-tuning позволяет нам не изобретать велосипед, а разрабатывать что-то новое на основе уже полученных навыков.

Процедура Fine tuning состоит в следующем:

Заморозить все слои предварительно обученной модели.
Добавить свои слои к обученной модели.
Обучить добавленные слои.
Разморозить несколько верхних слоев.
Обучить эти слои и добавленную часть вместе.

@machinelearning_interview
У вас есть данные о продолжительности звонков в колл-центр. Создайте план того, как вы будете анализировать эти данные. Объясните вероятный сценарий того, как может выглядеть распределение этих длительностей.
Как вы можете проверить, даже графически, оправдались ли ваши ожидания?

Так как данные достаточно простые: звонок – длительность, то нет необходимости делать их нормализацию (искать пропуски, заполнять их и т.д.). Нулевые значения надо просто удалить. Имеет смысл построить гистограмму продолжительности звонков, чтобы увидеть базовое распределение.

Обычно такие данные должны следовать логарифмически нормальному распределению.

Пример логнормального распределения (смотри картинку).

Для графического подтверждения этого предположения возможно использовать график Q-Q. Это позволит подтвердить, соответствует ли длительность вызовов логнормальному распределению или нет.

В статистике график Q – Q (квантиль-квантиль) – это график вероятности, который представляет собой графический метод для сравнения двух распределений вероятности путем построения их квантилей друг против друга.

Сначала выбирается набор интервалов для квантилей. Точка (x, y) на графике соответствует одному из квантилей второго распределения (координата y), нанесенному на тот же квантиль первого распределения (координата x).

Таким образом, линия является параметрической кривой с параметром, который является номером интервала для квантиля.

Если сравниваемые два распределения похожи, точки на графике Q – Q будут приблизительно лежать на линии y = x. Если распределения линейно связаны, точки на графике Q – Q будут приблизительно лежать на линии, но не обязательно на линии y = x.

@machinelearning_interview
📌 Вы составляете отчет о чет о пользовательском контенте, загружаемом каждый месяц, и отмечаете всплеск загрузок в октябре. В частности, всплеск загрузок изображений. Как вы думаете, что может быть причиной этого, и как вы это проверите?

Существует несколько возможных причин скачка загрузок фотографий:

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

•Точно так же возможно, что процесс загрузки фотографий ранее не был интуитивно понятным и был улучшен в октябре.

•Возможно, имело место вирусное движение в социальных сетях, которое занималось загрузкой фотографий, которые длились весь октябрь.

•Возможно, что всплеск произошел из-за того, что люди выкладывают свои фотографии в костюмах к Хэллоуину.
Метод тестирования зависит от причины скачка. В общем случае вы должны провести проверку гипотез, чтобы выяснить причину всплеска. Надо задать нулевую и альтернативную гипотезы, порог уровня значимости (альфа – обычно 5%), и посчитать уровень значимости (p-value). Если p-value меньше альфа, то нулевая гипотеза отклоняется в пользу альтернативной.

Это позволит определить, что является действительной причиной всплеска загрузок фотографий.

@machinelearning_interview
Что такое утечка данных в машинном обучении

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

Так вот, команда VK Cloud перевела статью о том, какими могут быть подобные утечки и как с ними бороться на примере реальных датасетов.

@machinelearning_interview
Что такое Gated Recurrent Unit (GRU)? Где используется ?

Закрытый рекуррентный блок (GRU) является частью конкретной модели рекуррентной нейронной сети, которая намеревается использовать соединения через последовательность узлов для выполнения задач машинного обучения, связанных с памятью и кластеризацией, например, в распознавании речи.

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

Еще закрытые рекуррентные блоки используются в машинном переводе. Они отличаются от LSTM, хотя тоже являются расширением для нейросетевого машинного обучения. В GRU на один гейт меньше, и работа строится по-другому: вместо входного, выходного и забывания, есть гейт обновления (update gate). Он определяет, сколько информации необходимо сохранить c последнего состояния и сколько информации пропускать с предыдущих слоев.

Функции сброса гейта (reset gate) похожи на затвор забывания у LSTM, но расположение отличается. GRU всегда передают свое полное состояние, не имеют выходной затвор. Часто эти затвор функционирует как и LSTM, однако, большим отличием заключается в следующем: в GRU затвор работают быстрее и легче в управлении (но также менее интерпретируемые). На практике они стремятся нейтрализовать друг друга, так как нужна большая нейросеть для восстановления выразительности (expressiveness), которая сводит на нет приросты в результате. Но в случаях, где не требуется экстра выразительности, GRU показывают лучше результат, чем LSTM.

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

@machinelearning_interview
Хабр Карьера опубликовали статистику с зарплатами айтишников по городам.

@machinelearning_interview
Расскажите про методы увеличения производительности СУБД?

СУБД очень часто становится «узким местом» в производительности веб‑приложений, влияющим на общее быстродействие и устойчивость к высоким нагрузкам.

Масштабирование «железа» и адекватная настройка

Первое, что стоит сделать, если скорость работы базы данных не удовлетворяет требованиям, это проверить адекватность настройки СУБД относительно имеющихся ресурсов, а также убедиться, что при проектировании БД были учтены используемые запросы. Если, например, для СУБД работает с настройками «из коробки», а при обработке запросов не используются индексы, то надо не масштабировать СУБД, достаточно просто откорректировать конфигурацию работы сервера баз данных и обновить схему используемой базы данных под профиль нагрузки.
Иногда также проще увеличить выделение ресурсов под сервер баз данных — количество оперативной памяти и скорость работы дисковой подсистемы оказывают существенное воздействие на скорость работы СУБД. Нередко даже небольшое увеличение RAM и переход на SSD увеличивает производительность в разы.

Масштабирование через партиционирование, репликацию и шардинг

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

Партиционирование (partitioning)
Партиционирование — это разбиение таблиц, содержащих большое количество записей, на логические части по неким выбранным администратором критериям. Партиционирование таблиц делит весь объем операций по обработке данных на несколько независимых и параллельно выполняющихся потоков, что существенно ускоряет работу СУБД. Для правильного конфигурирования параметров партиционирования необходимо, чтобы в каждом потоке было примерно одинаковое количество записей.

Например, на новостных сайтах имеет смысл партиционировать записи по дате публикации, так как свежие новости на несколько порядков более востребованы и чаще требуется работа именно с ними, а не со всех архивом за годы существования новостного ресурса.

Репликация (replication)
Репликация — это синхронное или асинхронное копирование данных между несколькими серверами. Ведущие серверы часто называют мастерами (master), а ведомые серверы — слэйвами (slave). Более политкорректные современные названия — Лидер и Фолловер (leader & follower).

Ведущие сервера используются для чтения и изменения данных, а ведомые — только для чтения. В классической схеме репликации обычно один мастер и несколько слэйвов, так как в большей части веб‑проектов операций чтения на несколько порядков больше, чем операций записи. Однако в более сложной схеме репликации может быть и несколько мастеров.

Например, создание нескольких дополнительных slave‑серверов позволяет снять с основного сервера нагрузку и повысить общую производительность системы, а также можно организовать слэйвы под конкретные ресурсоёмкие задачи и таким образом, например, упростить составление серьёзных аналитических отчётов — используемый для этих целей slave может быть нагружен на 100%, но на работу других пользователей приложения это не повлияет.

Шардинг (sharding)
Шардинг — это прием, который позволяет распределять данные между разными физическими серверами. Процесс шардинга предполагает разнесения данных между отдельными шардами на основе некого ключа шардинга. Связанные одинаковым значением ключа шардинга сущности группируются в набор данных по заданному ключу, а этот набор хранится в пределах одного физического шарда. Это существенно облегчает обработку данных.

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

@machinelearning_interview
🏋️‍♀️ Упражнения для продвинутого использования NumPy

https://uproger.com/prodvinutyj-numpy-ottachivajte-tryuki-s-shagami/

@machinelearning_interview
📌C какими проблемами может столкнуться нейронный алгоритм в работе с временными рядами? Какую архитектуру можно выбрать, чтобы решить такие проблемы?

Первое, что приходит на ум - это, конечно, рекуррентные нейросети(картинка 1).

Одна из идей, сделавшая RNN неоправданно эффективными - "авторегрессия" (auto-regression), это значит, что созданная переменная добавляется в последовательность в качестве входных данных. В машинном обучении часто применяется эта техника, особенно в работе с временными рядами.

Хотя рекуррентная сеть и должна работать со всей последовательностью, к сожалению, присутствует проблема "затухающего градиента"(vanishing gradient problem). Что значит, что более старые входы не влияют на текущий выход. Такие модели, как LSTM пытаются решить эту проблему, добавляя дополнительные параметры (картинка 2).

Такие модели считывают ввод данных последовательно.

Архитектура, в которой обработка последовательности производится сразу, что практически не оставляет места для потери информации, реализована в кодировщике модели Transformer. Эта характеристика позволяет модели изучать контекст переменной на основе всего его окружения. Кроме того, по сравнению с рекуррентными нейросетями, чаще всего они быстрее.

@machinelearning_interview
Как создавать качественные ML-системы

Команда VK Cloud перевела серию из двух статей, посвященных ML-системам. В первой статье разобрались, почему каждый проект надо начинать с плана, обсудили жизненный цикл ML-проекта, выяснили, как определять его ценность для бизнеса и собирать требования, а заодно поговорили о важности проектной документации на этом этапе.

Во второй статье остановились на Data-centric ИИ, данных для обучения, разметке и очистке, синтетических данных и еще немного о Data Engineering и ETL.

@machinelearning_interview
📌 Почему длина контекста так важна при работе с большими языковыми моделями? Как обходить ограничения длины контекста?

Длина контекста – один из важнейших лимитирующих факторов при работе с большими языковыми моделями. Увеличить контекст до 100K – это уже невероятное достижение, ставшее реальностью (занятно, как этот тезис будет восприниматься через год).

Вот как выглядит один из важных практических случаев, в которых желательно применять большие языковые модели: «забросить в LLM целую кучу пользовательских данных (документов, касающихся работы компании либо конкретной задачи; также это могут быть различные разнородные тексты, т.д.) и задавать вопросы по этим конкретным данным, а не по какой-нибудь взятой из Интернета отвлечённой информации, которую LLM видела на этапе обучения.

В настоящее время обходить это ограничение пробуют по-разному, а именно:

При помощи приёмов резюмирования и изощрённых сцепленных затравок

Ведя векторные базы данных, в которых хранятся векторы для пользовательских документов с последующим «поиском» по этому корпусу в соответствии с некоторой метрикой схожести

Когда это возможно – тонко настраивать LLM на данных, предоставляемых пользователем (такая возможность предоставляется не во всех коммерческих LLM, а для опенсорсных LLM это не самая тривиальная задача)

Разработка специализированных сравнительно небольших LLM для конкретных данных, которые нас интересуют (опять же, не самая тривиальная задача)

При наличии длинного контекстного окна уже имеющаяся в вашем распоряжении большая языковая модель (видевшая целый Интернет) может изучить имеющийся у вас контекст и данные, а затем взаимодействовать с вами на совершенно ином уровне, предполагающем более высокую персонализацию. Всё это – без изменения весов модели, когда всё «обучение» производится на лету, «в памяти». В целом, чем больше контекстное окно, тем более высокая точность, беглость и изобретательность приобретается моделью.

В качестве аналогии здесь можно рассмотреть ОЗУ компьютера, где операционная система хранит в режиме реального времени актуальный контекст для всех ваших приложений. LLM, располагая достаточно длинным контекстом, сравнима с «рассуждающим компьютером», учитывающим широкий контекст, предоставляемый пользователем.

Оригинальный трансформер и длина контекста
Важно отметить, что в архитектуре транмформеров формы всех весов матриц, доступных для обучения, не зависят от количества подаваемых на вход токенов n. Все параметры, поддающиеся обучению (поиск по векторам, слои проекций, слой softmax и слои внимания) не зависят от длины входного фрагмента и должны быть в состоянии обрабатывать такие фрагменты варьирующейся длины. Просто отлично, когда такое свойство в архитектуре предоставляется прямо «из коробки».

Это значит, что, если вы обучали трансформерную модель с контекстным окном длиной 2K, то можете экстраполировать её на последовательности токенов любой длины. Единственная проблема здесь в том, что в таком случае модель не сможет методом вывода дать осмысленных результатов на материале в 100K токенов, если её не обучали на окне контекста длиной 100K. В таком случае распределение учебных данных будет очень далеким от тех данных, которые приходится логически обрабатывать, поэтому модель потерпит фиаско, как и любая модель машинного обучения в таком сценарии.

Если требуется обучить трансформер на таком большом контексте, то можно, например, обучать его в два этапа: сначала базовую модель на окне контекста длиной 2K токенов, а потом продолжить обучение (в качестве тонкой настройки) на более длинных контекстах (например, 65K или 100K). Именно это и было сделано с моделью MosaicML. Но вот загвоздка: такой подход не сработает с оригинальной архитектурой Трансформеров, поэтому придётся прибегать к определённым ухищрениям.

@machinelearning_interview