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

16.4 Учебные примеры вопроса и ответа

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

Вопрос остаётся входным контекстом. Настройка по ответам может измерять ошибку только на токенах ответа — это обучение по размеченным диалогам.

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

Prompt задаёт контекст, answer задаёт supervised targets

SFT обучает модель на demonstrations: instruction и дополнительный context подаются слева, ожидаемый answer расположен справа. В распространённом response-only контракте loss prompt-токенов маскируется, но они остаются во входе и участвуют в causal attention при предсказании ответа. Это отличается от удаления prompt. F03.

LSFT=−1∣A∣∑i∈Alog⁡pθ(ti∣t<i),A={i:token i принадлежит answer}.L_{SFT}=-\frac{1}{|A|}\sum_{i\in A}\log p_\theta(t_i\mid t_{<i}), \qquad A=\{i:\text{token }i\text{ принадлежит answer}\}.

Chat template, роли, separators и EOS являются частью model contract. Если training использует один template, а serving — другой, IDs и позиции меняются до первого model layer. Packing нескольких dialogues допустим только с явными boundaries и корректной attention/loss mask. Mean нужно делить на число answer targets, иначе длинный padding меняет масштаб gradient.

Что показывает модель. В визуальной модели prompt cells окрашены как context-only, answer cells — как targets. Переключатель all tokens/answer only должен менять только loss mask, а не историю, которую видит ответ. Data collator показывает labels после shift, чтобы последняя prompt-позиция могла предсказывать первый answer token.

Граница применимости. Demonstrations отражают политику составителей и могут содержать ошибки. SFT учит имитировать conditional distribution примеров, но не проверяет факты во внешнем мире. Скрытие prompt loss — инженерный выбор, не универсальный закон; pretraining, continued pretraining и некоторые template objectives используют другие masks.

from math import log
labels_16d=[-100,-100,4,1]; target_probs_16d=[0.5,0.25]
active_16d=[label for label in labels_16d if label!=-100]
sft_loss_16d=-sum(log(p) for p in target_probs_16d)/len(active_16d)
assert active_16d==[4,1] and abs(sft_loss_16d-log(8)/2)<1e-12

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

Prompt участвует в forward, а supervised loss начинается на response.

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

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