У линейной регрессии короткая формула, но за ней скрывается сразу несколько вопросов. Откуда берутся веса? Зачем возводить ошибки в квадрат? Почему производная подсказывает, как улучшить прогноз? И что на самом деле делает цикл обучения в программе?
Разберём это на прогнозе погоды: попробуем по сегодняшней температуре предсказать завтрашнюю. Пройдём от таблицы наблюдений и прямой на графике до производных, одного шага обучения вручную и работающего Python-кода без библиотек машинного обучения. Каждую формулу сначала прочитаем словами и проверим на числах.
Данные в статье вымышленные и специально подобраны для понятной арифметики. Мы прогнозируем один показатель погоды — температуру через 24 часа. Четыре наблюдения нужны для разбора алгоритма; точность настоящего метеопрогноза по ним оценить нельзя. В конце отдельно обсудим, как проверять модель на будущих днях.
1. Сначала наблюдения, потом модель
Представим, что мы записываем температуру воздуха на одной станции каждый день в 12:00. В момент сегодняшнего измерения хотим получить прогноз на 12:00 завтра.
Для обучения возьмём несколько примеров из прошлого. У каждого уже известны оба измерения: температура в день прогноза и температура через 24 часа.
|
Пример |
Температура сегодня, °C |
Температура на следующий день, °C |
|---|---|---|
|
А |
2 |
4 |
|
Б |
3 |
5 |
|
В |
4 |
7 |
|
Г |
5 |
8 |
Строки показывают отдельные выбранные пары дней. Это не четыре последовательных дня: завтрашнее значение одной строки не обязано совпадать с сегодняшним значением следующей. В настоящем непрерывном ряду измерений такое совпадение, конечно, было бы.
Рисунок 1. По горизонтали — известная температура в момент прогноза. По вертикали — температура, которую позднее действительно измерили через 24 часа.
Для этих четырёх примеров более тёплому сегодняшнему дню соответствует более тёплый следующий день. Если сегодня окажется 4,5 °C, можно ожидать ответ где-то между 7 и 8 °C. Пока мы прикинули его на глаз. Модель должна превратить такую прикидку в определённое вычисление.
Назовём элементы задачи:
|
Термин |
Что он означает в нашем примере |
|---|---|
|
Объект, или пример |
Одна историческая пара «сегодня — следующий день» |
|
Данные |
Собранные измерения температуры |
|
Признак |
Температура сегодня, известная до получения прогноза |
|
Целевая переменная, или метка |
Температура завтра, которую хотим предсказывать |
|
Обучающий набор |
Исторические примеры с известными признаками и метками |
|
Прогноз |
Число, вычисленное моделью для заданной сегодняшней температуры |
При обучении ответ уже известен: иначе не с чем сравнивать прогноз. При применении модели завтрашнее измерение ещё неизвестно. Именно ради этой ситуации мы её и обучаем.
2. Почему появляется прямая
Положим на график линейку так, чтобы она проходила рядом с точками. Полученная прямая задаёт правило: выбираем сегодняшнюю температуру на горизонтальной оси, поднимаемся до прямой и читаем прогноз на вертикальной оси.
Разные положения линейки дают разные прогнозы.
Рисунок 2. Слева модель заметно занижает температуру, в центре слишком быстро увеличивает прогноз, справа проходит ближе к наблюдениям. Оранжевые отрезки показывают промахи.
Что означает «рядом с точками»? Возьмём пример В. Сегодня было 4 °C, а завтра оказалось 7 °C. Если прямая на этом входе даёт 6 °C, прогноз промахнулся на один градус.
Сегодняшнюю температуру мы не меняем. Сравниваем две высоты при одном и том же значении признака: высоту наблюдения и высоту прямой. Поэтому в обычной линейной регрессии измеряется вертикальный промах.
Кратчайшее наклонное расстояние до прямой отвечало бы другой постановке: при таком измерении мы разрешили бы изменяться и входной температуре, и ответу.
Прямая предполагает, что изменение признака на одну единицу связано с одинаковой прибавкой к прогнозу. Это свойство выбранной модели. Настоящие наблюдения могут заметно отклоняться от такого правила: на температуру влияют и другие обстоятельства, которых в нашей таблице нет.
3. Формула прогноза, вес и смещение
Начнём с простого правила:
Возьми сегодняшнюю температуру, умножь на 1 и прибавь 2.
При сегодняшних 4 °C получим:
1 · 4 + 2 = 6.
Заменим названия величин буквами:
ŷ = wx + b.
|
Обозначение |
Смысл |
Значение в примере |
|---|---|---|
|
x |
Признак: температура сегодня |
4 °C |
|
ŷ |
Прогноз температуры завтра |
6 °C |
|
w |
Вес: изменение прогноза при увеличении x на единицу |
1 |
|
b |
Смещение: постоянное слагаемое |
2 °C |
Запись wx означает умножение w на x. «Игрек со шляпкой» ŷ обозначает прогноз. Обычная буква y дальше будет обозначать известный ответ из данных.
Вес задаёт наклон
При w = 1 и b = 2 сегодняшние 3 °C дают прогноз 5 °C, а 4 °C — прогноз 6 °C. Вход увеличился на один градус, ответ тоже увеличился на один градус.
Если взять w = 1,5, увеличение входа на один градус будет увеличивать прогноз на полтора градуса. Поэтому вес называют наклоном прямой.
В этой задаче вход и выход измеряются в градусах Цельсия. Вес описывает отношение изменений температуры: градус изменения прогноза на градус изменения признака. Численно это безразмерный коэффициент. Смещение измеряется в градусах Цельсия.
Смещение поднимает или опускает прямую
Если заменить b = 2 на b = 3, к каждому прогнозу добавится один градус:
1 · 3 + 3 = 6,
1 · 4 + 3 = 7.
Наклон сохранился. Все ответы увеличились одинаково.
Рисунок 3. В верхнем ряду меняется только вес, в нижнем — только смещение. Пунктир показывает исходную модель. При изменении веса пересечение с вертикальной осью остаётся на месте.
При x = 0 формула даёт ŷ = b. Это математический смысл смещения: высота прямой при нулевом входе. Он не означает, что при сегодняшних 0 °C завтра обязательно будет ровно b градусов. К тому же в нашем наборе входы лежат между 2 и 5 °C, а ноль находится за пределами этого диапазона.
Для отрицательной температуры эффект изменения веса нужно читать внимательно. При фиксированном b увеличение w уменьшает прогноз, если x < 0. Например, 1 · (−2) + 2 = 0, а 1,5 · (−2) + 2 = −1. При x = 0 вес вообще не влияет на ответ.
4. Откуда компьютер берёт параметры
Компьютер не знает заранее, какую прямую провести. Он начинает с некоторой пары w и b, вычисляет прогнозы, сравнивает их с наблюдениями и изменяет параметры.
Первые значения можно выбрать вручную или случайно. Для обычной линейной регрессии допустим и старт с нулей: случайность здесь не является обязательным условием обучения.
В программе ниже мы используем фиксированный генератор случайных чисел. Он даёт начальные значения примерно w = 0,648 и b = 0,603. При сегодняшних 4 °C такая модель прогнозирует около 3,19 °C, хотя в соответствующем учебном примере завтра было 7 °C.
Рисунок 4. Настоящие снимки выполнения программы из статьи. Изменяются параметры и прямая; четыре исходных наблюдения остаются прежними. MSE — общая оценка промахов, которую разберём ниже.
«Компьютер подбирает параметры» означает вполне конкретные действия: считает прогнозы, находит ошибки, вычисляет поправки, изменяет числа и повторяет расчёт.
Каждый шаг в нашем примере учитывает все четыре наблюдения. Он может улучшить общую оценку, даже если прогноз для одной строки станет хуже. Мы ищем подходящее правило для всего набора, а не по очереди добиваемся идеального попадания в каждую точку.
5. Прогноз, метка и ошибка
Вернёмся к правилу ŷ = x + 2 и примеру В:
-
температура сегодня: x = 4 °C;
-
известная температура завтра: y = 7 °C;
-
прогноз: ŷ = 6 °C.
Прогноз оказался ниже фактического значения на один градус.
Договоримся считать ошибку со знаком как прогноз минус факт:
e = ŷ − y = 6 − 7 = −1.
Рисунок 5. Отрезок соединяет прогноз и наблюдение при одном и том же входе. Его длина равна одному градусу, а ошибка со знаком равна минус одному градусу.
При таком соглашении:
|
Ошибка |
Что произошло |
|---|---|
|
e > 0 |
Модель завысила температуру |
|
e < 0 |
Модель занизила температуру |
|
e = 0 |
Прогноз совпал с наблюдением |
Иногда остатком, или residual, называют обратную разность: факт минус прогноз. Тогда для того же примера получится + 1. Это не другая величина промаха, а другое соглашение о знаке. Перед расчётом нужно проверить порядок вычитания.
Смещение b и ошибка e выполняют разные задачи. Смещение входит в правило прогноза. Ошибка появляется после того, как прогноз сравнили с известной меткой.
6. Почему нельзя просто сложить ошибки
Допустим, для двух исторических примеров модель предсказала 6 °C. В первом случае фактически было 4 °C, во втором — 8 °C.
e1 = 6 − 4 = +2,
e2 = 6 − 8 = −2.
Сложим ошибки:
2 + (−2) = 0.
Получился ноль, хотя оба прогноза неверны.
Рисунок 6. Завышение на два градуса и занижение на два градуса уравновесились. Величина каждого промаха от этого не уменьшилась.
Такая сумма сообщает о балансе завышений и занижений. Она может быть полезна для поиска систематического перекоса, но не заменяет оценку величины ошибок.
Чтобы промахи не сокращались, превратим каждый из них в неотрицательное число до сложения. Есть два привычных способа: взять модуль или возвести в квадрат.
Сам знак при этом не становится бесполезным. Он ещё понадобится при вычислении направления обновления параметров.
7. Модуль ошибки и MAE
Модуль показывает расстояние числа от нуля. Направление исчезает, величина остаётся:
|+2| = 2,
|−2| = 2,
|0| = 0.
Вертикальные черты означают «возьми модуль». Сначала вычисляем выражение внутри, затем убираем знак результата:
|ŷ − y|.
Для нашей основной таблицы правило ŷ = x + 2 даёт:
|
Пример |
Факт, °C |
Прогноз, °C |
Ошибка, °C |
Модуль ошибки, °C |
|---|---|---|---|---|
|
А |
4 |
4 |
0 |
0 |
|
Б |
5 |
5 |
0 |
0 |
|
В |
7 |
6 |
−1 |
1 |
|
Г |
8 |
7 |
−1 |
1 |
Сложим модули и разделим на количество примеров:
MAE = (0 + 0 + 1 + 1) / 4 = 0,5 °C.
MAE, mean absolute error, — средняя абсолютная ошибка. Она показывает среднюю величину промаха на выбранном наборе.
Рисунок 7. Слева ошибки разных знаков превращаются в одинаковую величину. Справа усредняются абсолютные ошибки четырёх учебных примеров.
В общем виде:
MAE = (1 / n) · ∑i = 1n|ŷi − yi|.
Здесь n — число примеров, а индекс i выбирает конкретную строку. Символ ∑ означает последовательное сложение. Подробно прочитаем такую запись в разделе про MSE.
MAE в полградуса не обещает ошибку ровно в полградуса каждый день. В нашей таблице нет ни одного такого промаха: два прогноза точные, ещё два ошиблись на градус. Среднее описывает набор целиком.
Если продублировать весь набор, сумма абсолютных ошибок удвоится. MAE останется прежней: делитель тоже увеличится вдвое.
8. Зачем возводить ошибку в квадрат
Второй способ убрать знак — умножить ошибку саму на себя:
(+2)2 = 4,
(−2)2 = 4,
02 = 0.
Маленькая двойка сверху означает степень. Это не умножение числа на два. Скобки показывают, что в квадрат возводится вся ошибка:
(ŷ − y)2.
Квадрат меняет не только знак, но и относительное влияние промахов.
|
Величина ошибки, °C |
Квадрат ошибки, °C² |
|---|---|
|
1 |
1 |
|
2 |
4 |
|
3 |
9 |
|
5 |
25 |
|
10 |
100 |
Промах в 10 градусов в пять раз больше промаха в 2 градуса. Но его вклад в сумму квадратов больше уже в 25 раз: 100 / 4 = 25.
Рисунок 8. Чем дальше ошибка от нуля, тем быстрее растёт её квадрат. Поэтому крупные промахи сильнее влияют на квадратическую оценку.
Иногда говорят, что квадрат «сильнее наказывает» большие ошибки. Здесь наказание — просто больший вклад в численную оценку качества. У этого выбора есть следствие: редкое очень большое отклонение или ошибочное измерение может заметно повлиять на найденную прямую.
При этом квадрат не любого числа больше самого числа: 0,52 = 0,25. Речь об относительном росте вкладов больших и маленьких ошибок.
9. MSE: сначала арифметика, потом символы
Получим одно число для всей модели. Для каждого наблюдения вычислим прогноз, вычтем факт, возведём разность в квадрат. Затем сложим квадраты и разделим на количество наблюдений.
Проверяем то же правило ŷ = x + 2:
|
Сегодня x, °C |
Факт y, °C |
Прогноз ŷ, °C |
Ошибка e, °C |
Квадрат e2, °C² |
|---|---|---|---|---|
|
2 |
4 |
1 · 2 + 2 = 4 |
0 |
0 |
|
3 |
5 |
1 · 3 + 2 = 5 |
0 |
0 |
|
4 |
7 |
1 · 4 + 2 = 6 |
−1 |
1 |
|
5 |
8 |
1 · 5 + 2 = 7 |
−1 |
1 |
Сумма квадратов равна 0 + 0 + 1 + 1 = 2. Примеров четыре:
MSE = 2 / 4 = 0,5 (°C)2.
MSE, mean squared error, — среднее квадратов ошибок. Делим на все четыре наблюдения, а не только на два примера с ненулевым промахом.
Рисунок 9. Слева показаны промахи в температуре, справа — их квадраты. Пунктир находится на уровне среднего значения столбцов.
В нашей таблице числа MAE и MSE случайно совпали: ненулевые модули ошибок равны единице, а 12 = 1. Единицы измерения у показателей разные. Если одна ошибка будет равна 2 °C, в MAE она внесёт 2 до усреднения, а в MSE — 4.
Как прочитать формулу
Запишем выполненные действия короче:
MSE = (1 / n) · ∑i = 1n(ŷi − yi)2.
|
Часть записи |
Что нужно сделать |
|---|---|
|
n |
Взять количество примеров; у нас 4 |
|
i |
Выбрать номер текущего примера |
|
ŷi |
Получить прогноз для этого примера |
|
yi |
Взять фактическую метку из данных |
|
ŷi − yi |
Вычесть факт из прогноза |
|
(ŷi − yi)2 |
Возвести полученную разность в квадрат |
|
∑i = 1n |
Повторить вычисление для всех примеров и сложить результаты |
|
1/n |
Разделить итоговую сумму на количество примеров |
Сигма ∑ не добавляет новой операции. Она заменяет длинное сложение:
∑i = 14 ei2 = e12 + e22 + e32 + e42.
Индекс — номер строки, не степень. Буква yi обозначает данные: алгоритм не меняет фактическую температуру, чтобы получить удобный ответ. Меняются параметры, а вместе с ними — прогнозы ŷi.
MSE равна нулю, только если каждый прогноз на оцениваемом наборе совпал со своей меткой. При сравнении моделей на одном и том же наборе меньшая MSE означает лучший результат по этому критерию.
10. RMSE: возвращаем градусы
Температура и ошибка измеряются в градусах Цельсия. После возведения ошибки в квадрат получаются квадратные градусы. Для интерпретации удобно вернуться к единицам исходной величины.
Извлечём квадратный корень из MSE:
RMSE = √(MSE).
Квадратный корень отвечает на вопрос: какое неотрицательное число нужно умножить само на себя, чтобы получить исходное? Например, 3 · 3 = 9, поэтому √(9) = 3.
У нас:
RMSE = √(0,5) ≈ 0,7071 °C.
|
Показатель |
Что считаем |
Результат для исходного правила |
|---|---|---|
|
MAE |
Среднее модулей ошибок |
0,5 °C |
|
MSE |
Среднее квадратов ошибок |
0,5 °C² |
|
RMSE |
Корень из среднего квадратов |
≈ 0,7071 °C |
Порядок действий существенен. Для RMSE сначала усредняем квадраты и только потом извлекаем один корень. Если взять корень из каждого квадрата и затем усреднить, получится MAE.
RMSE снова выражена в градусах, но крупные промахи по-прежнему имеют повышенное влияние. Значение 0,7071 °C не означает, что каждый прогноз ошибётся не больше чем на 0,7071 градуса. Это также не готовый доверительный или прогнозный интервал.
Корень монотонно возрастает на неотрицательных числах. Поэтому минимум MSE и минимум RMSE достигаются при одних и тех же параметрах на одном и том же наборе.
11. Что минимизирует компьютер и при чём здесь функция
Одна пара параметров задаёт одну модель. Сравним несколько пар на наших четырёх наблюдениях:
|
Вес w |
Смещение b |
Прогнозы для x = 2, 3, 4, 5 |
MSE, °C² |
|---|---|---|---|
|
0,4 |
1 |
1,8; 2,2; 2,6; 3 |
14,26 |
|
2 |
0 |
4; 6; 8; 10 |
1,5 |
|
1 |
2 |
4; 5; 6; 7 |
0,5 |
|
1,4 |
1,1 |
3,9; 5,3; 6,7; 8,1 |
0,05 |
Для последней строки ошибки равны −0,1, + 0,3, −0,3 и + 0,1. Их квадраты дают:
(0,01 + 0,09 + 0,09 + 0,01) / 4 = 0,05.
Слово «функция» означает правило, которое по входу выдаёт выход. Например, f(x) = 2x удваивает вход: из 3 получается 6.
В нашем рассуждении есть две разные функции:
|
Функция |
Что подаём на вход |
Что получаем |
|---|---|---|
|
Модель прогноза |
Сегодняшнюю температуру при выбранных w и b |
Прогноз завтрашней температуры |
|
Функция ошибки |
Параметры w и b при фиксированных обучающих данных |
Общую оценку промахов |
Поэтому можем написать:
L(w,b) = (1 / n) · ∑i = 1n(wxi + b − yi)2.
Буквой L будем обозначать функцию потерь, в данном случае обычную MSE. Она строит прогнозы с предложенными параметрами и возвращает одно число. Данные тоже участвуют в вычислении, но во время поиска параметров остаются фиксированными.
Обучение ищет такие w и b, при которых L(w,b) минимальна. Оно меняет настройки правила, а не наблюдения в таблице.
12. Производная с нуля
Теперь нужен способ понять, как изменение параметров влияет на ошибку. Начнём с более простого вопроса: насколько быстро меняется выход функции, если немного изменить её вход?
Скорость изменения
За две секунды автомобиль проехал 30 метров. Средняя скорость на этом промежутке равна 30 / 2 = 15 метров в секунду. Мы разделили изменение пути на изменение времени.
Если автомобиль разгоняется, скорость на разных промежутках различается. Уменьшая промежуток около выбранного момента, приближаемся к скорости в этот момент. Производная описывает такое местное изменение.
Для графика это местный наклон. При движении вправо функция растёт — производная положительна. Убывает — отрицательна. Если в выбранной точке касательная горизонтальна, производная равна нулю.
Квадрат на конкретных числах
Возьмём функцию f(t) = t2. При t = 3 её значение равно 9. Немного увеличим вход и посмотрим на отношение изменений:
|
Старый вход |
Новый вход |
Изменение выхода |
Изменение выхода / изменение входа |
|---|---|---|---|
|
3 |
3,1 |
9,61 − 9 = 0,61 |
0,61/0,1 = 6,1 |
|
3 |
3,01 |
9,0601 − 9 = 0,0601 |
0,0601/0,01 = 6,01 |
|
3 |
3,001 |
9,006001 − 9 = 0,006001 |
0,006001/0,001 = 6,001 |
Шаг по входу уменьшается, а отношение приближается к 6. Поэтому производная квадрата в точке 3 равна 6:
f′(3) = 6.
Штрих после имени функции обозначает производную. Здесь значение функции равно 9, а её производная равна 6. Это ответы на разные вопросы.
Если увеличить вход примерно на 0,01, выход изменится примерно на 6 · 0,01 = 0,06. Точный прирост — 0,0601. При уменьшении шага приближение становится точнее.
Рисунок 10. Оранжевые отрезки показывают касательные: местный наклон квадрата при входах −2, 0 и 2. Производная зависит от точки, в которой мы её считаем.
Откуда получается 2t
Новый вход — старое число t плюс небольшая ненулевая прибавка h. Раскроем квадрат:
(t + h)2 = (t + h)(t + h)
(t + h)(t + h) = t2 + th + ht + h2
t2 + th + ht + h2 = t2 + 2th + h2.
Двойка появилась из двух одинаковых перекрёстных произведений: th и ht.
Вычтем старое значение функции:
(t + h)2 − t2 = 2th + h2.
Разделим изменение выхода на изменение входа:
((t + h)2 − t2) / h = (2th + h2) / h
(2th + h2) / h = 2t + h, h ≠ 0.
Когда h стремится к нулю, выражение 2t + h стремится к 2t. Мы не делили на ноль: деление выполнялось при ненулевом шаге, а затем рассматривался предел.
Получили:
f(t) = t2 ⇒ f′(t) = 2t.
При t = 3 это 6, при t = −2 это −4, при t = 0 это 0. Формула описывает те же местные наклоны, которые видны на графике.
13. Почему производная помогает обучать модель
У квадрата в точке 3 производная положительна. Если сделать небольшой шаг влево, значение уменьшится:
32 = 9,
2,92 = 8,41.
Шаг вправо, напротив, увеличит значение:
3,12 = 9,61.
Производная показывает местное направление роста. Чтобы уменьшать функцию, нужно двигаться в противоположном направлении с подходящим размером шага.
В обучении мы хотим уменьшить L(w,b), а изменяем два входа этой функции — вес и смещение. Поэтому нужны две производные:
-
как меняется ошибка при изменении w, если b фиксировано;
-
как меняется ошибка при изменении b, если w фиксировано.
Такие производные называют частными. Их упорядоченный список называется градиентом:
∇ L = (∂L / ∂w,∂L / ∂b).
Знак ∂ напоминает, что меняем одну из нескольких переменных. Символ ∇ — обозначение градиента.
Рисунок 11. По осям теперь отложены вес и смещение. Одна точка соответствует целой модели. Линии уровня соединяют пары параметров с одинаковой MSE; оранжевый путь показывает обучение.
Это другой график, чем график температуры. Там точка была наблюдением, а прямая — моделью. Здесь точка уже сама представляет модель с конкретными параметрами.
Например, градиент (+6;−2) означает: при небольшом увеличении веса ошибка локально растёт, а при небольшом увеличении смещения — уменьшается. Для спуска нужно уменьшить вес и увеличить смещение.
В обычных евклидовых координатах градиент указывает направление наибольшего местного роста функции. Для уменьшения берут отрицательный градиент. Слишком большой шаг даже в этом направлении способен увеличить ошибку.
У линейной регрессии с квадратической функцией потерь поверхность выпуклая: у неё нет отдельных плохих локальных минимумов. В нашем примере значения входа различаются, поэтому минимум по w и b единственный. В вырожденных задачах, например при одинаковом входе у всех строк, могут существовать целые наборы одинаково хороших параметров.
14. Градиентный спуск
Градиентный спуск — повторяющаяся процедура обновления параметров:
-
Выбрать начальные значения параметров.
-
Вычислить прогнозы и функцию ошибки.
-
Найти производные ошибки по параметрам.
-
Сделать шаг против градиента.
-
Пересчитать прогнозы и ошибку с новыми параметрами.
-
Повторить процесс.
Сначала проверим механику на одной переменной. Пусть минимизируем f(t) = t2, а сейчас t = 3.
Значение функции равно 9, производная равна 6. Возьмём 0,2 от производной и вычтем из текущего числа:
tnew = 3 − 0,2 · 6 = 1,8.
Новое значение функции:
f(1,8) = 1,82 = 3,24.
Оно меньше 9. Сделаем следующий шаг: производная теперь равна 2 · 1,8 = 3,6.
tnew = 1,8 − 0,2 · 3,6 = 1,08.
Рисунок 12. После каждого обновления мы оказываемся в новой точке и заново определяем наклон. Это иллюстрация механики спуска на квадрате, а не формула прогноза температуры.
Множитель 0,2 называется скоростью обучения, или learning rate. Обозначим его греческой буквой η — «эта».
Общая запись шага:
tnew = t − η f′(t).
|
Часть формулы |
Роль |
|---|---|
|
t |
Текущее значение параметра |
|
f′(t) |
Местная скорость изменения функции |
|
η |
Множитель, задающий масштаб поправки |
|
Минус |
Разворот в сторону, противоположную росту |
|
tnew |
Значение параметра после обновления |
Нельзя один раз посчитать производную 6 и вычитать одну и ту же поправку на всех следующих шагах. Производная относится к текущему положению, которое изменилось.
15. Почему скорость обучения так важна
Скорость обучения не равна длине шага. Поправка получается после умножения η на производную. При одном и том же η большой градиент даст большую поправку, маленький — маленькую.
Сравним три первых шага из точки t = 3 для функции f(t) = t2:
|
η |
Новый параметр |
Новое значение функции |
|---|---|---|
|
0,05 |
3 − 0,05 · 6 = 2,7 |
7,29 |
|
0,3 |
3 − 0,3 · 6 = 1,2 |
1,44 |
|
1,1 |
3 − 1,1 · 6 = −3,6 |
12,96 |
При η = 1,1 мы направились в сторону минимума, но перелетели настолько далеко, что функция выросла.
Рисунок 13. Во всех трёх случаях старт одинаковый. Малый шаг продвигает медленно, подходящий быстро приближает к минимуму, слишком большой приводит к растущим колебаниям.
Само пересечение минимума ещё не означает ошибку: затухающие колебания совместимы со сходимостью. Проблема возникает, когда шаги не дают устойчивого уменьшения функции.
Универсального значения η нет. Оно зависит от функции ошибки и масштаба признаков. Например, температура в градусах и давление в паскалях имеют разные числовые масштабы. В многопризнаковых задачах масштабирование часто делает обучение удобнее. Параметры такого преобразования определяют по обучающей части и затем применяют без повторного подбора к проверочным данным.
В нашем базовом алгоритме η задаёт человек. Это гиперпараметр процедуры обучения. Вес и смещение — параметры модели: именно они изменяются по данным. В программе ниже не будет отдельного механизма, который сам подбирает скорость обучения.
16. Как получить производные по весу и смещению
У нас есть прогноз:
ŷi = wxi + b,
ошибка:
ei = wxi + b − yi,
и квадрат этой ошибки:
ei2.
Нужно понять, как изменение w или b проходит через эту цепочку до функции потерь.
Что происходит при маленькой поправке
Возьмём наблюдение x = 4, y = 7 и исходные параметры w = 1, b = 2. Прогноз равен 6, ошибка −1, её квадрат 1.
Увеличим по одному параметру:
|
Изменение |
Новый прогноз |
Новая ошибка |
Квадрат ошибки |
|---|---|---|---|
|
Только b: 2 → 2,01 |
6,01 |
−0,99 |
0,9801 |
|
Только w: 1 → 1,01 |
6,04 |
−0,96 |
0,9216 |
Одинаковая прибавка 0,01 к смещению увеличила прогноз на 0,01, а к весу — на 0,04. Разница возникла из умножения веса на x = 4.
Посмотрим на изменение квадрата ошибки на единицу изменения параметра:
(0,9801 − 1) / 0,01 = −1,99,
(0,9216 − 1) / 0,01 = −7,84.
При всё меньшей прибавке эти отношения стремятся к −2 для смещения и −8 для веса. Именно такие частные производные получаются у квадрата ошибки этого одного наблюдения в исходной точке.
Рисунок 14. Для наглядности здесь показаны более крупные, вручную выбранные изменения. Изменение веса поворачивает прямую, смещения — сдвигает, обоих параметров — совмещает эффекты. Это не результаты одного вычисленного шага обучения.
Цепное правило без пропусков
У квадрата производная равна удвоенному входу. Здесь вход квадрата — ошибка ei, поэтому сначала появляется 2ei.
Но ошибка тоже зависит от параметров:
-
при изменении b на небольшую величину прогноз и ошибка изменяются на ту же величину: множитель равен 1;
-
при изменении w прогноз и ошибка изменяются в xi раз сильнее: множитель равен xi.
Перемножаем эти скорости изменений. Это и есть цепное правило:
(∂ei2) / ∂w = 2ei · xi,
(∂ei2) / ∂b = 2ei.
Для нашего наблюдения e = −1, x = 4:
2 · (−1) · 4 = −8,
2 · (−1) = −2.
MSE усредняет квадраты по всем примерам. Поэтому её производная усредняет производные этих квадратов:
gw = ∂L / ∂w = (2 / n) · ∑i = 1nei · xi,
gb = ∂L / ∂b = (2 / n) · ∑i = 1nei.
Буква g — короткое имя вычисленной производной. Двойка пришла от квадрата, ei хранит знак и размер промаха, xi описывает влияние веса на прогноз, сумма и деление на n собирают среднее по набору.
Обновление параметров
Теперь применяем знакомое правило «вычесть скорость обучения, умноженную на производную»:
wnew = w − η gw,
bnew = b − η gb.
Обе производные считаются по одной и той же старой паре параметров. Сначала вычисляем gw и gb, затем обновляем w и b. Если изменить вес и только после этого заново вычислить производную по смещению, получится уже другая последовательность действий.
Почему иногда в формулах нет двойки
Можно минимизировать не MSE, а половину MSE:
J(w,b) = (1 / (2n)) · ∑i = 1nei2.
Тогда двойка от производной квадрата сокращается с 1/2. Сам минимум не перемещается: все значения функции умножились на одно положительное число. Но градиент становится вдвое меньше.
Чтобы получить ту же поправку, для половины MSE потребуется вдвое больший η. В этой статье и в коде используется обычная MSE без множителя 1/2.
17. Один полный шаг обучения вручную
Соберём все действия на основной таблице погоды. Начнём с знакомых параметров:
w = 1,
b = 2,
η = 0,02,
n = 4.
Это удобный ручной старт. Позже программа начнёт со случайных значений, поэтому её первый шаг будет численно другим, хотя операции останутся такими же.
Считаем прогнозы и ошибки
|
x |
y |
Прогноз wx + b |
Ошибка e |
Квадрат e2 |
|---|---|---|---|---|
|
2 |
4 |
4 |
0 |
0 |
|
3 |
5 |
5 |
0 |
0 |
|
4 |
7 |
6 |
−1 |
1 |
|
5 |
8 |
7 |
−1 |
1 |
MSE до обновления:
L = (0 + 0 + 1 + 1) / 4 = 0,5.
Считаем вклад каждого примера в производные
|
x |
Ошибка e |
По весу: 2ex |
По смещению: 2e |
|---|---|---|---|
|
2 |
0 |
0 |
0 |
|
3 |
0 |
0 |
0 |
|
4 |
−1 |
−8 |
−2 |
|
5 |
−1 |
−10 |
−2 |
Усредняем:
gw = (0 + 0 − 8 − 10) / 4 = −4,5,
gb = (0 + 0 − 2 − 2) / 4 = −1.
Пока ничего не меняли: только измерили, как функция потерь реагирует на параметры в текущем положении.
Обновляем оба параметра
wnew = 1 − 0,02 · (−4,5) = 1 + 0,09 = 1,09,
bnew = 2 − 0,02 · (−1) = 2 + 0,02 = 2,02.
Минус перед отрицательной производной превратил поправку в прибавление. Получилась новая модель:
ŷ = 1,09x + 2,02.
Снова считаем прогнозы и MSE
|
x |
Факт |
Новый прогноз |
Новая ошибка |
Её квадрат |
|---|---|---|---|---|
|
2 |
4 |
4,20 |
+0,20 |
0,0400 |
|
3 |
5 |
5,29 |
+0,29 |
0,0841 |
|
4 |
7 |
6,38 |
−0,62 |
0,3844 |
|
5 |
8 |
7,47 |
−0,53 |
0,2809 |
Сумма квадратов равна 0,7894:
Lnew = 0,7894 / 4 = 0,19735.
За один шаг MSE уменьшилась с 0,5 до 0,19735 °C².
Заметим деталь: первые два прогноза раньше были точными, а теперь ошибаются. При этом общая ошибка снизилась, потому что улучшение последних двух прогнозов перевесило ухудшение первых. Это нормальное поведение обучения общей модели.
Для следующего шага нужны новые ошибки: 0,20; 0,29; −0,62; −0,53. Использовать старые четыре числа было бы неверно.
Наши наблюдения не лежат точно на одной прямой. Поэтому даже лучшая пара параметров оставит ненулевую MSE. При w = 1,4 и b = 1,1 она равна 0,05 °C².
18. Что меняется, когда признаков несколько
Одна сегодняшняя температура даёт очень ограниченную информацию. Можно добавить температуру вчера, скорость ветра или другие доступные измерения. При этом правило прогноза остаётся суммой вкладов.
Для примера возьмём:
|
Признак |
Значение |
Вес |
Вклад в прогноз |
|---|---|---|---|
|
Температура сегодня |
4 °C |
0,8 |
3,2 °C |
|
Температура вчера |
3 °C |
0,4 |
1,2 °C |
|
Скорость ветра сейчас |
5 м/с |
−0,2 °C на м/с |
−1 °C |
|
Смещение |
— |
3 °C |
3 °C |
Веса здесь назначены вручную только для объяснения вычислений. Мы не обучали эту многопризнаковую модель и не утверждаем, что такие коэффициенты описывают настоящую погоду.
Формула:
ŷ = w1x1 + w2x2 + w3x3 + b.
Подставим числа:
ŷ = 0,8 · 4 + 0,4 · 3 + (−0,2) · 5 + 3
ŷ = 3,2 + 1,2 − 1 + 3 = 6,4 °C.
Рисунок 15. Вклады отдельных признаков складываются, затем добавляется смещение. Отрицательный вклад уменьшает промежуточную сумму.
Теперь у каждого признака собственный вес. Нижний индекс у xj выбирает признак внутри одного примера. Чтобы не смешивать его с номером наблюдения i, полную запись можно читать так:
ŷi = ∑j = 1mwjxij + b.
Здесь m — количество признаков, а xij — значение признака j в наблюдении i.
Производная по каждому весу устроена так же:
∂L / ∂wj = (2 / n) · ∑i = 1nei · xij.
Вес показывает, как меняется прогноз при изменении одного признака при фиксированных остальных. Это связь внутри модели. Отрицательный коэффициент у ветра не доказывает, что усиление ветра всегда вызывает похолодание.
Численные размеры весов тоже нельзя напрямую считать рейтингом важности. Один признак измеряется в градусах, другой — в метрах в секунду. Если поменять единицы, изменится коэффициент, хотя прогнозы могут остаться теми же.
19. Скалярное произведение без матриц
Вектор в нашем примере — упорядоченный список чисел. Скаляр — одно число.
Возьмём два списка одинаковой длины:
(1,2,3) и (4,5,6).
Умножим соответствующие элементы и сложим:
1 · 4 + 2 · 5 + 3 · 6 = 4 + 10 + 18 = 32.
Это скалярное произведение, или dot product:
(1,2,3) · (4,5,6) = 32.
Перемножаются элементы на одинаковых позициях. Мы не умножаем каждое число первого списка на все числа второго.
Рисунок 16. Три попарных произведения дают три вклада, а после сложения — одно число. Смещение добавляется отдельно.
В примере с погодой:
w = (0,8;0,4;−0,2),
x = (4;3;5).
Их скалярное произведение равно:
w · x = 3,2 + 1,2 − 1 = 3,4.
Добавим смещение b = 3 и получим те же 6,4 °C. Поэтому многопризнаковую линейную модель часто записывают компактно:
ŷ = w · x + b.
Порядок обязателен: вес температуры должен умножаться на температуру, вес ветра — на ветер. Перестановка признаков без соответствующей перестановки весов меняет смысл расчёта.
Есть ещё полезное применение. Скалярное произведение вектора ошибок с самим собой равно сумме квадратов:
e · e = e12 + e22 + … + en2.
Значит, MSE можно записать как (e · e)/n.
20. Полный цикл обучения
Соберём связи между всеми частями:
Рисунок 17. После обновления параметры возвращаются в модель. Следующий проход заново вычисляет прогнозы, ошибки и производные.
На вход обучения поступают признаки и известные ответы из прошлого. Внутри цикла изменяются параметры. На выходе остаётся найденная пара w и b или список весов и смещение для нескольких признаков.
Когда обучение завершено, для прогноза на новый день достаточно подставить доступные признаки в формулу. Не нужно заново вычислять MSE и градиент ради каждого ответа.
Завтрашняя метка для получения прогноза не требуется. Когда пройдёт 24 часа и появится измерение, можно оценить промах. Позже этот пример можно включить в обновлённый обучающий набор.
Один пример, пакет или весь набор
Есть несколько способов выбирать данные для одного обновления:
|
Вариант |
Какие данные используются в шаге |
|---|---|
|
Полный градиентный спуск, batch |
Весь обучающий набор |
|
Стохастический градиентный спуск, SGD |
Один выбранный пример |
|
Мини-пакетный спуск, mini-batch |
Небольшая часть набора |
В статье используется первый вариант. При подходящей скорости обучения полная MSE уменьшается. У шага по одному примеру или мини-пакету общая ошибка на всём наборе может временно вырасти: направление рассчитано по части наблюдений.
Итерация здесь означает одно обновление параметров. Эпоха — полный проход по обучающему набору. В нашем варианте одно обновление использует весь набор, поэтому 5000 обновлений соответствуют 5000 эпохам. Запись начальной ошибки перед первым обновлением отдельной эпохой не является.
21. Один прогноз на Python
Сначала напишем короткий пример без обучения. Параметры задаём сами:
x = 4w = 1b = 2prediction = w * x + blabel = 7error = prediction - labelsquared_error = error ** 2print(prediction, error, squared_error)
Вывод:
6 -1 1
|
Строка или выражение |
Что делает |
|---|---|
|
|
Сохраняет известную сегодняшнюю температуру |
|
|
Задают параметры модели |
|
|
Вычисляет прогноз: 6 |
|
|
Сохраняет фактическое завтрашнее измерение из исторических данных |
|
|
Находит ошибку: −1 |
|
|
Возводит ошибку в квадрат: 1 |
|
|
Показывает результат |
В Python знак = означает присваивание: вычислить справа и сохранить слева. Для умножения используется *, для степени — **. Знак ^ в Python не возводит в степень.
В русском тексте десятичные дроби записаны с запятой, а в коде нужна точка: 0.02, 1.09.
Это применение заранее заданного правила. Настоящее обучение начинается там, где программа сама вычисляет поправки и изменяет параметры.
22. Обучаем модель на Python
Вернёмся к четырём историческим наблюдениям. Программа начинает со случайных параметров, делает 5000 обновлений по всему набору и сохраняет историю.
Код использует только стандартную библиотеку Python 3. Его можно целиком сохранить в weather_demo.py и запустить командой python3 weather_demo.py.
import random# Учебные, вымышленные пары:# (температура сегодня, температура через 24 часа).data = [(2, 4), (3, 5), (4, 7), (5, 8)]rng = random.Random(7)w = rng.uniform(0, 2)b = rng.uniform(0, 4)rate = 0.02n = len(data)history = []for step in range(5001): errors = [] for x, y in data: error = w * x + b - y errors.append(error) mse = sum(e * e for e in errors) / n history.append((step, w, b, mse)) # Финальную оценку записываем, но лишний шаг не делаем. if step == 5000: break dw = 0.0 db = 0.0 for i in range(n): x, y = data[i] e = errors[i] dw += 2 * e * x / n db += 2 * e / n # Оба градиента уже посчитаны по старой модели. w = w - rate * dw b = b - rate * dbprint(f"w = {w:.4f}, b = {b:.4f}")print(f"MSE на обучении = {history[-1][3]:.4f}")today = 4.5prediction = w * today + bprint(f"Прогноз на завтра: {prediction:.2f} °C")
Результат выполнения:
w = 1.4000, b = 1.1000MSE на обучении = 0.0500Прогноз на завтра: 7.40 °C
Полученная модель:
ŷ = 1,4x + 1,1.
Если в новый день в 12:00 измерили 4,5 °C, прогноз на 12:00 завтра равен:
1,4 · 4,5 + 1,1 = 6,3 + 1,1 = 7,4 °C.
Завтрашний факт в этот расчёт не входит. Число 7,4 °C — ответ учебной модели, а не фактический прогноз для конкретного города и даты.
Разбираем программу
|
Фрагмент |
Смысл |
|---|---|
|
|
Список пар: сначала признак, затем метка |
|
|
Генератор с фиксированным начальным состоянием для повторяемого старта |
|
|
Выбирает начальные вес и смещение из указанных диапазонов |
|
|
Задаёт скорость обучения η |
|
|
Считает количество примеров: 4 |
|
|
Создаёт пустой список для сохранения хода обучения |
|
|
Перебирает номера от 0 до 5000 включительно |
|
|
По очереди берёт признак и метку каждого примера |
|
|
Добавляет ошибку в новый список текущего шага |
|
|
Вычисляет MSE |
|
|
Сохраняет номер шага, параметры и MSE |
|
|
После записи финального состояния завершает цикл |
|
|
Заново создают накопители производных на каждом шаге |
|
|
Добавляет вклад примера в производную по весу |
|
|
Добавляет вклад в производную по смещению |
|
|
Вычисляют новые параметры |
|
|
Берёт MSE из последней записи истории |
+= означает «прибавить к текущему значению». Отступы показывают, какие команды относятся к циклу или условию. Индексы Python начинаются с нуля; математическую сумму мы записывали начиная с единицы. Это разные способы нумерации одних и тех же элементов.
В истории 5001 запись: исходное состояние плюс 5000 обновлений. Это не ошибка на один шаг. Последняя запись нужна, чтобы увидеть качество после последнего изменения параметров.
Как менялась ошибка
Все числа ниже получены выполнением приведённого кода; значения округлены:
|
Выполнено обновлений |
Вес w |
Смещение b |
MSE, °C² |
|---|---|---|---|
|
0 |
0,647666 |
0,603397 |
10,552994 |
|
1 |
1,123451 |
0,728588 |
1,939418 |
|
5 |
1,460854 |
0,820759 |
0,059018 |
|
20 |
1,468436 |
0,837727 |
0,056372 |
|
500 |
1,412908 |
1,050530 |
0,050227 |
|
5000 |
1,400000 |
1,100000 |
0,050000 |
Рисунок 18. Слева — обученная прямая и новый прогноз. Справа — MSE из истории программы: вертикальная шкала логарифмическая, горизонтальная линейна до 10 шагов и затем логарифмическая. Это позволяет одновременно увидеть первые обновления и длинный участок уточнения параметров.
По вертикальной логарифмической шкале равные расстояния соответствуют одинаковым изменениям в разах. В начале прямая быстро приблизилась к точкам, а затем параметры продолжали уточняться. Вес при этом не обязан монотонно приближаться к своему конечному значению: на разных этапах вес и смещение компенсируют друг друга.
Чтобы построить эту историю у себя, установите Matplotlib:
python3 -m pip install matplotlib
И добавьте после обучающего кода:
import matplotlib.pyplot as pltsteps = [row[0] for row in history]losses = [row[3] for row in history]plt.plot(steps, losses)plt.xscale("symlog", linthresh=10)plt.yscale("log")plt.xlabel("Training updates")plt.ylabel("Training MSE, deg C squared")plt.grid(True, alpha=0.3)plt.show()
5000 шагов выбраны для наглядного фиксированного запуска. В других задачах используют лимит итераций, малое изменение функции потерь, малый градиент или контроль качества на валидационной выборке. Конкретный критерий остановки зависит от постановки.
23. Как проверять именно прогноз погоды
Пока мы измеряли качество на тех же четырёх примерах, по которым искали параметры. Такой расчёт показывает, насколько хорошо модель подогналась под обучающую таблицу. Он не отвечает на вопрос, насколько точным будет прогноз следующего дня.
Для этого нужны другие данные и ясное описание момента прогноза.
Сначала фиксируем время
Наша постановка: в день t в 12:00 получить прогноз температуры на день t + 1 в 12:00. Значит, входные признаки должны быть доступны к моменту t, а ответ относится к будущему.
|
Величина |
Можно ли использовать как признак в этой постановке? |
|---|---|
|
Температура сегодня в 12:00 |
Да, после получения измерения |
|
Температура вчера в 12:00 |
Да |
|
Текущая измеренная скорость ветра |
Да, если измерение уже доступно |
|
Среднее последних трёх доступных измерений |
Да |
|
Фактическая температура завтра в 12:00 |
Нет: это ответ, которого в момент прогноза нет |
|
Фактический максимум температуры за весь сегодняшний день |
Нет: в 12:00 день ещё не закончился |
|
Среднее в окне, захватывающем завтрашнее измерение |
Нет: в расчёт попало будущее |
Если при обучении или проверке использовать сведения, которых при настоящем прогнозе ещё не было бы, получится утечка данных. Метрика может стать красивее, но она будет оценивать другую, более лёгкую задачу.
Обучаемся на прошлом, проверяем на более поздних периодах
Для архива последовательных измерений разумная начальная схема такая: ранний период — для обучения, следующий — для выбора настроек, самый поздний — для итогового теста.
Например, при наличии нескольких лет данных можно обучаться на 2022–2024 годах, подбирать настройки на 2025-м и один раз оценить итоговую модель на 2026-м. Это условный пример разбиения: конкретные периоды зависят от длины архива и задачи, а не от учебной таблицы из четырёх строк.
Для нескольких проверок границу можно последовательно двигать вперёд. Такое разбиение реализует, например, TimeSeriesSplit в scikit-learn: обучение использует предыдущие блоки, проверка — следующий. Для сопоставимой длительности проверочных окон этот инструмент предполагает равномерно расположенные по времени наблюдения.
Рисунок 19. Схема нескольких временных окон. Синие блоки помогают выбирать настройки, оранжевые оставляют для итоговой проверки. Это схема разбиения, а не результаты эксперимента с реальными метеоданными.
При разбиении нужно смотреть и на время признаков, и на время меток. Если модель обучают к определённому моменту, все использованные обучающие ответы должны уже быть известны к этому моменту. Для горизонта 24 часа это может потребовать убрать пограничные пары, чьи метки ещё относятся к будущему. Одного формального разделения строк по индексу недостаточно.
Масштабирование, заполнение пропусков и другие преобразования тоже настраивают на обучающей части. Для валидации и теста используют уже найденные значения. Тест не должен участвовать в подборе весов, скорости обучения, состава признаков или критериев остановки.
Сравниваем с простым ориентиром
Для нашей задачи можно взять базовый прогноз:
T̂t + 1 = Tt.
То есть «завтра в это же время будет столько же градусов, сколько сегодня». Это заранее заданный ориентир, с которым удобно сравнить обученную модель на одних и тех же отложенных днях.
Если сложность не даёт выигрыша относительно такого правила, стоит пересмотреть признаки, данные или модель. Одного красивого графика обучения для вывода об успехе недостаточно.
Почему четырёх точек мало
В наших вымышленных примерах все сегодняшние температуры лежат между 2 и 5 °C. По ним нельзя проверить работу модели в жару, при сильном морозе или при резкой смене погоды. Нельзя даже достоверно оценить её среднюю ошибку для похожих дней.
Прогноз для 4,5 °C находится внутри учебного диапазона. Прогноз для −20 °C уже будет экстраполяцией — продолжением прямой далеко за пределы наблюдений. Формула технически выдаст число, но данных в пользу его качества у нас нет.
В настоящем эксперименте понадобятся временной архив, описание станции и измерений, проверка пропусков, несколько периодов оценки и сравнение по MAE или RMSE на отложенных данных. Полезно также смотреть, как ошибки различаются по сезонам и при разных погодных условиях.
Ни MSE = 0,05 °C², ни соответствующая RMSE ≈ 0,224 °C из нашего учебного примера не являются обещанием точности настоящего прогноза.
24. Связываем обозначения с действиями
|
Обозначение или термин |
Что означает |
Что делает в примере |
|---|---|---|
|
x, feature |
Признак |
Хранит сегодняшнюю температуру |
|
y, label, actual |
Целевая величина из данных |
Хранит известную температуру через 24 часа |
|
ŷ, prediction |
Прогноз |
Результат вычисления wx + b |
|
w, weight |
Вес |
Задаёт наклон прямой |
|
b, intercept, bias |
Смещение |
Добавляет одинаковое слагаемое к прогнозам |
|
e |
Ошибка со знаком |
В этой статье равна «прогноз минус факт» |
|
n |
Количество наблюдений |
Задаёт число слагаемых и делитель при усреднении |
|
i |
Индекс наблюдения |
Выбирает строку данных |
|
m, j |
Количество признаков и индекс признака |
Нужны для модели с несколькими входами |
|
∑ |
Суммирование |
Складывает вклад каждого наблюдения или признака |
|
MAE |
Среднее модулей ошибок |
Оценивает величину промаха в градусах |
|
MSE, L |
Среднее квадратов ошибок |
Служит функцией потерь для обучения |
|
RMSE |
Корень из MSE |
Возвращает оценку в единицы температуры |
|
f′(t) |
Производная |
Описывает местную скорость изменения функции |
|
∂L/∂w |
Частная производная |
Показывает изменение потерь при изменении веса |
|
∇ L |
Градиент |
Собирает частные производные в упорядоченный список |
|
η, learning rate |
Скорость обучения |
Умножает градиент при вычислении поправки |
|
Gradient descent |
Градиентный спуск |
Повторяет обновления против градиента |
|
w, x |
Векторы |
Хранят веса и признаки в согласованном порядке |
|
w · x |
Скалярное произведение |
Попарно умножает элементы и складывает результаты |
|
Параметр |
Обучаемая настройка модели |
Вес или смещение |
|
Гиперпараметр |
Настройка процедуры или структуры |
Например, скорость обучения |
|
Валидационная выборка |
Данные для выбора настроек |
Помогает сравнивать варианты до итогового теста |
|
Тестовая выборка |
Отложенные данные для финальной оценки |
Показывает качество после завершения выбора модели |
Шпаргалка: от данных до нового прогноза
|
Этап |
Действие |
|---|---|
|
Данные |
Берём прошлые пары «температура сегодня — температура завтра» |
|
Параметры |
Выбираем начальные w и b |
|
Прогнозы |
Для каждого примера считаем ŷi = wxi + b |
|
Ошибки |
Вычисляем ei = ŷi − yi |
|
Потери |
Считаем L = (1 / n) · ∑ ei2 |
|
Градиент |
Находим gw = (2 / n) · ∑ ei · xi и gb = (2 / n) · ∑ ei |
|
Обновление |
Заменяем параметры на w − η gw и b − η gb |
|
Повторение |
С новыми параметрами заново считаем прогнозы и ошибки |
|
Проверка |
Оцениваем выбранную модель на более поздних отложенных наблюдениях |
|
Применение |
Подставляем доступные признаки нового дня в обученную модель |
В ручном примере один шаг изменил параметры с (1;2) на (1,09;2,02) и уменьшил MSE с 0,5 до 0,19735 °C². Программа повторила тот же механизм много раз и получила ŷ = 1,4x + 1,1.
За обучением стоят обычные вычисления: прогноз, сравнение с фактом, оценка чувствительности ошибки и поправка к параметрам. Линейная регрессия позволяет проследить эту цепочку целиком — от нескольких чисел в таблице до нового прогноза.
ссылка на оригинал статьи https://habr.com/ru/articles/1082678/