Перейти к содержимому

Формулы обновления — компакт

Эта глава — краткий справочник. Подробное «откуда берётся» — в главе 5, интерактивный пример — в главе 7.

После каждой попытки сначала вычисляем posterior — обновлённую оценку, принимая в расчёт наблюдение (правильно / неправильно):

P(Lcorrect)=P(L)(1P(S))P(L)(1P(S))+(1P(L))P(G)P(L \mid \text{correct}) = \frac{P(L) \cdot (1 - P(S))}{P(L) \cdot (1 - P(S)) + (1 - P(L)) \cdot P(G)} P(Lwrong)=P(L)P(S)P(L)P(S)+(1P(L))(1P(G))P(L \mid \text{wrong}) = \frac{P(L) \cdot P(S)}{P(L) \cdot P(S) + (1 - P(L)) \cdot (1 - P(G))}

Затем добавляем шанс «доучиться» в этой попытке:

P(Lnew)=Pposterior+(1Pposterior)P(T)P(L_{\text{new}}) = P_{\text{posterior}} + (1 - P_{\text{posterior}}) \cdot P(T)

С P(T)=0.1P(T) = 0.1 ученик всегда хоть немного учится, даже на ошибке.

Когда нужно решить, какую задачу дать дальше, нам нужно знать сейчас — с какой вероятностью ученик решит конкретную задачу:

P(solve)=P(L)(1P(S))+(1P(L))P(G)P(\text{solve}) = P(L) \cdot (1 - P(S)) + (1 - P(L)) \cdot P(G)

Это «знает И не оплошает» плюс «не знает, но угадает».

Эти три формулы — целиком сердце адаптивного движка. В коде они умещаются в 15 строк:

export function pSolve(pL: number, params: BktParams = DEFAULT_BKT): number {
return pL * (1 - params.pSlip) + (1 - pL) * params.pGuess;
}
export function bktUpdate(
pL: number,
observedCorrect: boolean,
params: BktParams = DEFAULT_BKT
): number {
const { pSlip, pGuess, pTransit } = params;
const posterior = observedCorrect
? (pL * (1 - pSlip)) / (pL * (1 - pSlip) + (1 - pL) * pGuess)
: (pL * pSlip) / (pL * pSlip + (1 - pL) * (1 - pGuess));
return posterior + (1 - posterior) * pTransit;
}
ЧтоФормулаЗа что отвечает
Update (correct)P(L)(1P(S))P(L)(1P(S))+(1P(L))P(G)\frac{P(L)(1-P(S))}{P(L)(1-P(S)) + (1-P(L))P(G)}«правильный ответ → больше уверенности»
Update (wrong)P(L)P(S)P(L)P(S)+(1P(L))(1P(G))\frac{P(L)P(S)}{P(L)P(S) + (1-P(L))(1-P(G))}«ошибка → меньше уверенности (но не паника)»
LearningPpost+(1Ppost)P(T)P_{\text{post}} + (1-P_{\text{post}}) \cdot P(T)«можно научиться по ходу»
PredictP(L)(1P(S))+(1P(L))P(G)P(L)(1-P(S)) + (1-P(L))P(G)«какая вероятность решить?»

Все четыре — детерминированные. Никакой стохастики, никаких черных ящиков, никаких нейронов. Просто арифметика 8-го класса.