Alterna · учебный материал
Когда модель действительно учится
Пока программа только вычисляет ответ, веса остаются прежними. Обучение начинается с их изменения по ошибке.
Что в этом материале
- Критерий превращает ошибку в число
- Вывод градиента без чёрного ящика
- Один полностью проверяемый шаг
- Почему большой шаг способен ухудшить loss
- Нулевой training loss не доказывает закон мира
- Training и inference — разные ветви вычисления
- Прозрачный Python: один update
Содержание и основные понятия
На предыдущей странице: вход и правило преобразования.
Пока программа только вычисляет ответ, веса остаются прежними. Обучение начинается с их изменения по ошибке.
Модель рассчитывает ответ по числовым настройкам. Программа вокруг неё готовит вход и может вызывать поиск или инструменты.
Для интерактивного эксперимента нужен JavaScript. Теория, модель и ручные расчёты выше доступны без него.
Критерий превращает ошибку в число
Пусть
x=2
, известный target
y*=6
, а модель с
w=1
,
b=0
выдаёт
y=2
. Для автоматической настройки недостаточно сказать «ответ плохой». Нужно определить objective. Возьмём squared error одного примера:
e
=
y
−
y
∗
,
L
=
1
2
e
2
.
e=y-y^*,\qquad L=\frac12e^2.
e
=
y
−
y
∗
,
L
=
2
1
e
2
.
Loss неотрицателен и равен нулю при точном совпадении. Множитель
1/2
сокращает двойку в производной. Это учебный regression objective, а не универсальная мера для любой модели.
Для dataset из
N
примеров empirical risk может быть средним:
L
D
(
θ
)
=
1
N
∑
a
=
1
N
1
2
(
f
θ
(
x
a
)
−
y
a
∗
)
2
.
L_D(\theta)=\frac1N\sum_{a=1}^{N}\frac12\left(f_\theta(x_a)-y_a^*\right)^2.
L
D
(
θ
)
=
N
1
a
=
1
∑
N
2
1
(
f
θ
(
x
a
)
−
y
a
∗
)
2
.
Оптимизатор видит этот критерий на выбранных данных. Он не минимизирует напрямую «разумность», безопасность или качество на всех возможных будущих inputs.
Вывод градиента без чёрного ящика
Для
y=wx+b
увеличим
w
на малое
δ
, сохраняя
x
и
b
. Новая ошибка равна
e+xδ
, поэтому
L
(
w
+
δ
,
b
)
−
L
(
w
,
b
)
δ
=
e
x
+
1
2
x
2
δ
.
\frac{L(w+\delta,b)-L(w,b)}{\delta}
=ex+\frac12x^2\delta.
δ
L
(
w
+
δ
,
b
)
−
L
(
w
,
b
)
=
e
x
+
2
1
x
2
δ
.
При
δ→0
получаем
∂L/∂w=ex
. Аналогично
∂L/∂b=e
. Градиент
∇
θ
L
=
[
e
x
,
e
]
\nabla_\theta L=[ex,e]
∇
θ
L
=
[
e
x
,
e
]
указывает направление локального роста в координатах
(w,b)
. Gradient descent использует противоположное направление:
w
n
e
w
=
w
−
η
e
x
,
b
n
e
w
=
b
−
η
e
,
w_{new}=w-\eta ex,\qquad b_{new}=b-\eta e,
w
n
e
w
=
w
−
ηe
x
,
b
n
e
w
=
b
−
ηe
,
где
η>0
— learning rate. Оба gradient values относятся к одному старому состоянию и должны применяться одновременно. Если сначала обновить
w
, пересчитать
e
, а потом обновить
b
, получится другой алгоритм.
Один полностью проверяемый шаг
Для
x=2
,
w=1
,
b=0
,
y*=6
,
η=.1
:
Стадия
Вычисление
Значение
Forward
y=1·2+0
2
Error
e=2−6
−4
Loss
.5·(−4)²
8
Gradient
[ex,e]
[−8,−4]
Update
(1,0)−.1·(−8,−4)
(1.8,.4)
Новый forward
1.8·2+.4
4
Новый loss
.5·(4−6)²
2
Почему большой шаг способен ухудшить loss
Подставим update в новую ошибку для того же примера:
e
n
e
w
=
[
1
−
η
(
x
2
+
1
)
]
e
.
e_{new}=\left[1-\eta(x^2+1)\right]e.
e
n
e
w
=
[
1
−
η
(
x
2
+
1
)
]
e
.
При
x=2
множитель равен
1−5η
. Для
η=.1
модуль ошибки уменьшается вдвое. При
η=.2
этот единственный пример попадает точно на линию
2w+b=6
. При
η=.4
ошибка меняет знак, но сохраняет модуль, поэтому loss остаётся 8. При
η=.5
модуль становится в 1.5 раза больше, а loss вырастает до 18.
Условие уменьшения ненулевого loss в этой конкретной одномерной по данным задаче:
∣
1
−
5
η
∣
<
1
⟺
0
<
η
<
0.4.
|1-5\eta|<1\quad\Longleftrightarrow\quad0<\eta<0.4.
∣1
−
5
η
∣
<
1
⟺
0
<
η
<
0.4.
Это не универсальный допустимый диапазон для нейросетей. Он выведен из выбранного
x
, objective и одновременного update двух параметров.
Нулевой training loss не доказывает закон мира
Для одного примера любой parameter pair на прямой
2w+b=6
даёт loss 0. Например,
(3,0)
,
(2,2)
и
(1,4)
одинаково объясняют единственную точку, но дают разные predictions при
x=3
. Оптимизация training objective и обобщение — разные вопросы. Нужны отдельные данные, предположения о задаче и оценка на неиспользованных примерах.
Training и inference — разные ветви вычисления
Процесс
Нужен target
Вычисляет gradient
Обновляет parameters
Training step
Да для supervised примера
Да
Да, на стадии update
Inference / forward
Нет
Не требуется
Нет
Добавление примера в prompt меняет input. Это может изменить activations и output при тех же weights. Few-shot режим GPT-3 описан без gradient updates во время запроса [
S05
]. Название in-context learning не следует автоматически интерпретировать как запись новых коэффициентов в parameter store.
Отдельно от model forward приложение может сохранять историю, а будущий training pipeline — использовать разрешённые данные. Утверждение «обычный inference не обновляет weights» не является обещанием, что конкретный сервис нигде не хранит сообщения. Это разные границы системы, политики и операции.
Прозрачный Python: один update
def train_step(eta=.1):
x,w,b,target = 2,1,0,6
y = w*x+b
error = y-target
loss = .5*error**2
gw,gb = error*x,error
new_w,new_b = w-eta*gw,b-eta*gb
new_y = new_w*x+new_b
return {'y':y,'loss':loss,'gradient':[gw,gb],
'updated':[new_w,new_b],'new_y':new_y,'new_loss':.5*(new_y-target)**2}
В библиотеке autograd эти производные вычислит граф операций. В этой главе они выписаны вручную; NumPy/PyTorch и autograd подробно появятся после математического фундамента.
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Forward и loss вычисляют значения по старым параметрам. Только update присваивает новые значения параметрам.
Как выбирается продолжение. Как этот вопрос продолжает полученный результат?
Академическая база →