Skip to content

Вопросы на собеседовании: AI ресерч-инженер

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.

Смотреть пример резюме: AI ресерч-инженер

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

Хороший исследовательский вопрос называет воздействие, измеряемый результат и условия сравнения.

  • Здесь воздействие состоит в добавлении заданного количества синтетических данных определённого типа.
  • Результатом может быть macro-F1 на фиксированном нетронутом test split, а не расплывчатое улучшение качества.
  • В условиях нужно зафиксировать модель, реальные training data, compute-бюджет и протокол оценки, чтобы на вопрос можно было ответить.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы превращать общую идею в точный и измеримый исследовательский вопрос.

optimizationadamwhypothesis-testing

Я бы заранее сформулировал направленное и измеримое предсказание.

  • Например, AdamW достигнет validation loss ниже 0,40 за меньшее число шагов, чем SGD, при одинаковых данных и compute-бюджете.
  • Оптимизатор выступает изменяемым фактором, а порог и число шагов делают результат наблюдаемым.
  • Утверждение можно опровергнуть, потому что AdamW может не достичь порога первым или не достичь его вообще.

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

hypothesis-testingfundamentals

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

  • Если результатом служит validation loss, нулевая гипотеза может утверждать, что средняя разница loss по нескольким seed равна нулю.
  • Небольшая наблюдаемая разница всё ещё может объясняться случайной вариативностью в рамках этой гипотезы.
  • Альтернативная гипотеза задаёт ожидаемый ненулевой или направленный эффект, который должен подтвердить эксперимент.

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

Утверждение представляет вывод, который авторы предлагают принять, а доказательства состоят из измерений в его поддержку.

  • Прирост accuracy на два пункта становится доказательством только после указания split датасета, метрики, baseline и протокола оценки.
  • Утверждение может быть узким, например улучшение на одном benchmark, или более широким, например лучшая генерализация между задачами.
  • При внимательном чтении нужно проверить, поддерживают ли таблицы, неопределённость и ablation заявленную широту вывода.

Зачем это спрашивают: Это проверяет, умеете ли вы читать статьи критически, а не считать главный результат самодостаточным доказательством.

replication

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

  • Для воспроизведения можно запустить авторский код на том же датасете и сравнить заявленную метрику.
  • Для репликации можно взять новую реализацию, новую выборку или другой benchmark, проверяющий ту же гипотезу.
  • Термины различаются между областями, поэтому в отчёте нужно точно указать, какой код, данные и протокол были переиспользованы.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы, что совпадение одного прогона и независимая проверка утверждения дают разные доказательства.

experiments

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

  • Предиктор мажоритарного класса или стандартная опубликованная модель могут служить baseline.
  • Oracle может выбирать правильного кандидата по ground-truth labels, поэтому он полезен для анализа, но не является допустимым рабочим методом.
  • Если предложение едва обходит baseline и сильно отстаёт от oracle, эти ориентиры показывают и прирост, и оставшийся потенциал.

Зачем это спрашивают: Сильный ответ объясняет разные роли нижнего ориентира и верхней границы, а не называет baseline любое сравнение.

experimentsforms

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

  • Оба прогона должны использовать одинаковые размер модели, data split, training-бюджет и код оценки.
  • Контролем может быть принятый training recipe, а в экспериментальном условии меняется только предложенный метод.
  • Повторение обоих условий на совпадающем наборе seed помогает отделить эффект метода от случайности обучения.

Зачем это спрашивают: Интервьюер оценивает, умеете ли вы строить честное сравнение, изолирующее одну причину.

optimizationvalidationexperiments

Learning rate является независимой переменной, а validation loss является зависимой переменной.

  • Исследователь намеренно задаёт для независимой переменной значения вроде 0,001, 0,0003 и 0,0001.
  • Validation loss наблюдают после обучения, и он может изменяться в ответ на эти настройки.
  • Архитектуру модели, split, batch size и число шагов нужно контролировать, а не превращать в дополнительные независимые переменные.

Зачем это спрашивают: Это проверяет, умеете ли вы определять, что эксперимент меняет, что измеряет и что сохраняет постоянным.

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

  • Если модель A обучают 10 000 шагов, а модель B 20 000, training-бюджет смешивается с влиянием архитектуры.
  • Тогда более высокую accuracy модели B нельзя приписать только её архитектуре.
  • Одинаковый бюджет по шагам или compute устраняет это альтернативное объяснение из сравнения.

Зачем это спрашивают: Интервьюер хочет увидеть, замечаете ли вы альтернативные причины кажущегося экспериментального прироста.

experiments

Несколько seed показывают, сохраняется ли результат при обычной случайности процесса обучения.

  • Seed может влиять на инициализацию параметров, порядок данных, dropout masks и сэмплированные ответы.
  • Публикация только лучшего из пяти seed даёт оптимистичное и смещённое представление о методе.
  • Среднее и разброс на одном наборе seed для обоих методов делают сравнение убедительнее.

Зачем это спрашивают: Сильный ответ рассматривает seed как источник вариативности для измерения, а не как волшебную гарантию воспроизводимости.

dispersionvalidation

Разброс показывает, что измеренная accuracy частично зависит от стохастики обучения, а не только от recipe.

  • Среднее равно 80%, но отдельные прогоны отличаются от него на величину до двух процентных пунктов.
  • Одного результата 81% для нового метода недостаточно на фоне такой межпрогонной вариативности.
  • Большее число повторных прогонов точнее оценивает типичный результат и его неопределённость.

Зачем это спрашивают: Интервьюер проверяет, учитываете ли вы вариативность до объявления небольшой разницы в метрике прогрессом.

confidence-intervalsconfidencecommunication

95-процентный доверительный интервал описывает точность оценки при допущениях использованного метода расчёта.

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

Зачем это спрашивают: Это проверяет, умеете ли вы обсуждать неопределённость, не превращая доверительный интервал в гарантию.

significance

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

  • При достаточно большой выборке прирост accuracy на 0,05 пункта может быть статистически значимым, но не иметь научной ценности.
  • Абсолютная разница метрики или стандартизированная мера вроде Cohen's d делает величину эффекта явной.
  • Полезность результата оценивают вместе по величине, неопределённости и цене или значимости полученного прироста.

Зачем это спрашивают: Интервьюер проверяет, отличаете ли вы обнаруживаемое свидетельство от достаточно крупного и полезного результата.

hypothesis-testingtesting

При множестве сравнений растёт вероятность случайно найти результат, который выглядит значимым.

  • При пороге 0,05 каждое сравнение с верной нулевой гипотезой имеет 5-процентный риск ложноположительного результата в рамках своих допущений.
  • Выбор наименьшего p-value после просмотра всех 20 результатов скрывает масштаб проведённого поиска.
  • Предварительная фиксация главного сравнения или поправка вроде Bonferroni делает доказательства честнее.

Зачем это спрашивают: Сильный ответ распознаёт базовую проблему множественных сравнений и называет простой способ её контроля.

causalbatchtokens

Loss mask упакованного causal-LM batch должна учитывать реальные next-token targets и исключать padding и искусственные переходы между независимыми документами.

  • После causal shift валидные целевые токены участвуют в loss, а игнорируемые позиции labels получают значение вроде -100.
  • Если документ B идёт сразу после A, можно оставить целевой EOS, но первый токен B нужно замаскировать, если переход A-to-B не входит в objective.
  • Loss mask не запрещает B обращать attention к A, поэтому независимым документам также нужна segment-aware или block-diagonal causal attention mask.

Зачем это спрашивают: Интервьюер проверяет, отличаете ли вы маскирование targets на границах упакованных документов от causal attention mask.

normalizationbatchtokens

Нормализация по sequences даёт одинаковый вес каждой последовательности, а нормализация по nonpadding tokens даёт одинаковый вес каждому валидному target token.

  • При token normalization последовательность с 400 targets вносит до усреднения в четыре раза больший вклад, чем последовательность со 100 targets.
  • При sequence normalization сначала считается средний loss по валидным токенам каждой последовательности, поэтому короткие и длинные примеры одинаково влияют на batch.
  • Padding и ignored labels не должны входить ни в числитель, ни в знаменатель, а выбранное правило должно совпадать во всех сравниваемых runs.

Зачем это спрашивают: Сильный ответ объясняет, как знаменатель нормализации меняет веса примеров и результат эксперимента.

distributionsprobability

KL divergence измеряет дополнительную стоимость в log-probability при представлении выборок из одного распределения другим.

  • KL(P || Q) взвешивает log отношения P к Q вероятностями из P.
  • Она равна нулю при совпадении распределений, но асимметрична, поэтому KL(P || Q) обычно не равна KL(Q || P).
  • В distillation с её помощью можно учить распределение student совпадать с вероятностями teacher, а не только с жёсткими labels.

Зачем это спрашивают: Интервьюер оценивает понимание KL как направленного сравнения распределений и умение назвать исследовательское применение.

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

  • Logits 2, 1 и 0 задают предпочтение классов, но сами не являются вероятностями.
  • Softmax экспоненцирует относительные оценки и нормализует их, поэтому добавление одной константы ко всем logits не меняет вероятности.
  • Реализации cross-entropy обычно принимают logits напрямую, потому что объединённое вычисление численно устойчивее.

Зачем это спрашивают: Сильный ответ связывает исходные выходы модели, нормализацию и устойчивый интерфейс loss в исследовательском коде.

Grad=None означает, что autograd не нашёл дифференцируемого пути от total loss к этому параметру.

  • Я проверю, что в backward передаётся total_loss = main_loss + aux_weight * aux_loss, потому что одно логирование aux_loss не подключает его к graph.
  • Я проверю parameter.requires_grad, detach, item, переход в NumPy, no_grad и условия, пропускающие auxiliary head, а затем проверю, что aux_loss.requires_grad имеет значение true.
  • torch.autograd.grad с allow_unused=True на маленьком batch поможет найти неиспользуемые параметры; наличие параметра в optimizer влияет на update, но не на вычисление gradient.

Зачем это спрашивают: Интервьюер проверяет, отличаете ли вы разорванный computation graph от просто малого или нулевого gradient.

optimizationjax

PyTree градиентов должно иметь те же paths и совместимые leaves, что и PyTree параметров, а зависящая от параметров часть optimizer state должна отслеживать те же leaves.

  • Dict keys, вложенность tuple или list и leaves определяют treedef, поэтому добавление или переименование параметра меняет структуру, ожидаемую при updates.
  • Внешняя структура optimizer state может отличаться, но subtrees для momentum или variance должны совпадать с paths и shapes отслеживаемых параметров.
  • После изменения архитектуры я сравню tree structures и списки path-shape, затем заново создам optimizer state и masks из точного PyTree параметров.

Зачем это спрашивают: Сильный ответ понимает структурное соответствие и не утверждает ошибочно, что вся внешняя структура optimizer state совпадает с PyTree параметров.

Закрытые вопросы

  • 21

    Почему jitted training step в JAX может перекомпилироваться при изменении shapes batch и как это предотвратить?

    batchjax
  • 22

    Что такое weight decay и зачем его используют с AdamW?

    adamw
  • 23

    Что делает gradient clipping, когда на шаге обучения возникает очень большой градиент?

    grad-clip
  • 24

    Как изменение batch size может повлиять на эксперимент с нейросетью?

    experimentsbatch
  • 25

    Что такое tokenizer fertility и как сравнить её между языками?

    tokenstokenizer
  • 26

    Как embedding layer представляет token IDs?

    nlptokens
  • 27

    Почему каждое скалярное произведение query-key делят на sqrt(d_k) перед attention softmax?

    queries
  • 28

    Зачем decoder-only Transformer использует causal attention mask?

    nlpcausal-masktransformer
  • 29

    Что добавляет multi-head attention по сравнению с одним вычислением attention?

  • 30

    Зачем вокруг подслоёв Transformer используют residual connections?

    nlptransformer
  • 31

    Что нормализует LayerNorm внутри Transformer?

    nlptransformernormalization
  • 32

    Какова роль подслоя MLP в блоке Transformer?

    nlptransformer
  • 33

    Как RoPE делает attention score пары query-key зависимым от относительной позиции?

    queriesrope
  • 34

    Почему инициализация параметров важна при обучении нейросети?

    neural-nets
  • 35

    Что нужно зафиксировать в benchmark protocol до начала model selection?

    typing
  • 36

    Как команда может переобучиться на public leaderboard, если benchmark examples не попадают в training или gradients?

  • 37

    Почему важно дедуплицировать датасет до разбиения или обучения?

    dedupqueries
  • 38

    Что такое контаминация бенчмарка в исследованиях языковых моделей?

    contamination
  • 39

    Как обнаружить bias к порядку вариантов ответа в multiple-choice benchmark языковой модели?

  • 40

    Зачем до эксперимента регистрировать одну primary metric и guardrail metrics?

    experimentsmonitoringguardrails
  • 41

    Что измеряет perplexity языковой модели и какое важное ограничение есть у её сравнения?

    perplexity
  • 42

    Что означает pass@k на benchmark для генерации кода?

  • 43

    Что меняется при переключении PyTorch-модели между train mode и eval mode?

    pytorch
  • 44

    Чем PyTorch autograd и detach различаются в обработке тензора?

    pytorchautograd
  • 45

    Чем no_grad отличается от inference_mode в PyTorch?

    pytorchinference
  • 46

    Какие задачи выполняет PyTorch DataLoader в небольшом training-эксперименте?

    pytorchdataloaderexperiments
  • 47

    Что должен содержать исследовательский checkpoint помимо model state_dict?

    checkpoint
  • 48

    Что такое mixed-precision training на концептуальном уровне?

    training-efficiencymixed-precision
  • 49

    Зачем при evaluation сохранять per-item predictions и вклады в метрику, а не только aggregate score?

    aggregationmonitoring
  • 50

    Что делают zero_grad, forward pass, backward и optimizer.step в небольшом training loop на PyTorch?

    pytorchoptimization
  • 51

    В статье указана accuracy 76%, а ваше воспроизведение достигает только 71%. Как вы будете искать причину разрыва?

  • 52

    Авторы выпустили код, но не записали точный commit и версии зависимостей. Что вы сделаете?

    dependencies
  • 53

    Архитектура модели совпадает со статьёй, но воспроизведённый score ниже, и вы подозреваете preprocessing. Как это проверить?

    architecture
  • 54

    Выпущенный checkpoint загружается, но его outputs отличаются от статьи, и вы подозреваете tokenizer или vocabulary. Что вы проверите?

    checkpointtokenstokenizer
  • 55

    Вы преобразовали checkpoint в другой формат, и новая модель перестала совпадать с исходной. Как вы будете искать ошибку?

    checkpoint
  • 56

    Ваш eval-score отличается от статьи из-за возможной разницы в prompt, shot count или decoding. Как вы это выясните?

  • 57

    Один seed совпадает со статьёй, но ещё четыре seed дают большой разброс. Как вы представите воспроизведение?

  • 58

    Новый метод выглядит сильным только потому, что в статье его сравнивают со слабым baseline. Какой baseline вы запустите?

  • 59

    Результат объединяет изменения A, B и C. Какую ablation matrix вы запустите и когда пяти arms недостаточно?

  • 60

    Предложенное изменение attention повышает accuracy, но вы подозреваете скрытый confound. Как его найти?

  • 61

    Как организовать в W&B четыре метода с тремя seeds каждый, включая их artifacts?

    artifacts
  • 62

    Hydra override указан в команде, но training-run использует default value. Как вы найдёте причину?

  • 63

    Как доказать, что вы использовали ту же версию датасета, что и другое воспроизведение?

  • 64

    Validation-score выглядит слишком высоким, и вы подозреваете утечку между train и development. Что вы проверите?

    leakagevalidation
  • 65

    Как провести базовую проверку contamination до оценки языковой модели на публичном benchmark?

  • 66

    Какие настройки sampling должны совпасть при воспроизведении pass@k?

    samplingconfig
  • 67

    У вас только 80 eval-примеров. Как оценить неопределённость с помощью bootstrap?

    samplingbootstrapestimation
  • 68

    Один checkpoint получает 72,4 при eval batch size 1 и 71,8 при batch size 16. Как это отладить?

    checkpointbatch
  • 69

    Как применить проверку переобучения на 32 примерах для валидации нового training loop?

    overfittingvalidation
  • 70

    Main loss остаётся конечным, но auxiliary loss равен NaN. Как изолировать причину?

  • 71

    Gradient norms быстро растут несколько шагов, после чего обучение расходится. Что вы сделаете?

  • 72

    FP16-run почти не обучается из-за underflow многих gradients. Как вы примените GradScaler для проверки?

    precisiongradscaler
  • 73

    Learning-rate schedule выглядит сдвинутым на тысячи steps. Как проверить подсчёт шагов?

  • 74

    Run использует microbatch 4 на 8 GPU и 16 шагов accumulation. Как token counters для разной длины уточняют effective batch?

    tokensbatch
  • 75

    Небольшой эксперимент получает out-of-memory на одной GPU. Что вы измените сначала?

    memoryhardwareexperiments
  • 76

    GPU ждёт данные большую часть training steps. Как вы исследуете DataLoader?

    hardwaredataloader
  • 77

    GPU utilization низок, хотя training-job не упирается в память. Что вы проверите?

    memoryhardware
  • 78

    Как запустить 24 Hydra configs через Slurm job array, сохранив каждый resolved config, seed и output неизменными?

    configslurmimmutability
  • 79

    Какие состояния генераторов случайных чисел нужно восстановить для точного resume обучения?

    generators
  • 80

    Slurm-job остаётся pending и не запускается. Как выяснить причину?

    slurm
  • 81

    Ваш Slurm training-job может прерваться из-за preemption. Как настроить checkpoint и requeue?

    checkpointslurm
  • 82

    Базовый DDP-job падает при инициализации NCCL из-за разных настроек ranks. Что вы проверите?

    conflictncclddp
  • 83

    Один DDP-rank завис на collective, пока остальные ждут. Как найти базовую причину?

    ddp
  • 84

    Вы включили FSDP, но ожидали большего снижения памяти. Какое базовое поведение sharding вы проверите?

    shardingmemoryfsdp
  • 85

    Как измерить компромисс activation checkpointing между памятью и step time?

    memoryact-checkpointactivation
  • 86

    Как захватить и прочитать базовый trace PyTorch profiler для медленного training step?

    pytorch
  • 87

    Как проверить parity новой операции между PyTorch и JAX на маленьком tensor?

    pytorchjax
  • 88

    Hugging Face model даёт другие outputs, чем reference script с тем же checkpoint. Что вы проверите?

    checkpoint
  • 89

    Как написать unit-test для custom eval-метрики до её использования в воспроизведении статьи?

    hypothesis-testingmonitoring
  • 90

    Как добавить простой task adapter в lm-evaluation-harness?

  • 91

    Eval-датасет содержит malformed records. Как обработать их до scoring?

  • 92

    Candidate model улучшает eval на 0,2 пункта. Как решить, реален ли lift?

  • 93

    Как оценить GPU-hours до запуска небольшого sweep гиперпараметров?

    hyperparametersestimationhardware
  • 94

    Что вы включите в reproducibility README для реализации статьи?

  • 95

    Как вести experiment notebook и decision log, не делая notebook единственным источником истины?

    experiments
  • 96

    Как построить plot по seeds, чтобы не путать разброс с неопределённостью среднего effect?

    spread
  • 97

    Аккуратный эксперимент не нашёл улучшения от предложенного метода. Как вы представите negative result?

    experiments
  • 98

    Что делает небольшой open-source PR по research engineering сильным?

    code-review
  • 99

    Статья делает сильное утверждение, которое, похоже, не подтверждается таблицей. Как вы его оспорите?

  • 100

    Как передать воспроизведение так, чтобы другой исследователь точно продолжил работу?