alterna ai
ALTERNA AI / ГЛАВА 16 · 03

16.3 Исправляем и независимо проверяем

На предыдущей странице: ошибка и влияние весов.

После шага измерим учебную и проверочную ошибку. Проверка сама веса не изменяет.

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

Одно исправление модели

Градиент и правило обновления — разные объекты

Backward вычисляет gradient при старых parameters; optimizer хранит собственное состояние и только затем меняет parameters. В Adam используются экспоненциальные moments и bias correction. AdamW добавляет decoupled weight decay непосредственно в update, а не смешивает его с gradient перед adaptive normalization. F02, F06.

mt=β1mt−1+(1−β1)gt,vt=β2vt−1+(1−β2)gt2,m_t=\beta_1m_{t-1}+(1-\beta_1)g_t,\quad v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2,
θt=θt−1−ηt(mt/(1−β1t)vt/(1−β2t)+ϵ+λθt−1).\theta_t=\theta_{t-1}-\eta_t\left( \frac{m_t/(1-\beta_1^t)}{\sqrt{v_t/(1-\beta_2^t)}+\epsilon} +\lambda\theta_{t-1}\right).

Learning-rate schedule определяется по optimizer steps, а при gradient accumulation один step может включать несколько micro-batches. Checkpoint для продолжения должен содержать не только weights, но и moments, scheduler position, scaler mixed precision, step, RNG states и идентичность данных/config. Сохранение одних weights подходит для inference, но не воспроизводит продолжение training.

Что показывает модель. Пошаговая модель разделяет zero_grad → forward → masked loss → backward → clip → optimizer → scheduler. При accumulation параметры не должны обновляться после каждого micro-batch. Weight decay обычно не применяют автоматически ко всем tensors: bias и normalization gains часто получают отдельную parameter group, что обязано быть записано в config.

Граница применимости. Один scalar fixture не отражает распределение tensor gradients, mixed precision и distributed reduction. Одинаковый seed не гарантирует bitwise reproducibility между hardware/kernels. Checkpoint из недоверенного источника может быть исполняемым контейнером в некоторых форматах; безопасная загрузка и проверка hash являются отдельной обязанностью.

from math import sqrt
w_16c,g_16c,lr_16c,b1_16c,b2_16c,eps_16c,wd_16c=1.0,0.2,0.1,0.9,0.99,1e-8,0.01
m_16c=(1-b1_16c)*g_16c; v_16c=(1-b2_16c)*g_16c*g_16c
w_next_16c=w_16c-lr_16c*((m_16c/(1-b1_16c))/(sqrt(v_16c/(1-b2_16c))+eps_16c)+wd_16c*w_16c)
assert abs(w_next_16c-0.899000005)<1e-9

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Validation измеряет фиксированное состояние и не выполняет update.

Учебные примеры вопроса и ответа. Как этот вопрос продолжает полученный результат?

Python-примеры главы 16 Академическая база →