Шпаргалка формул нейросетей · Потери — регрессия

RMSE: корень из среднеквадратичной ошибки

Самая популярная метрика регрессии — и одна из самых неверно читаемых. Разбираем её по косточкам: зачем корень, что означает разрыв между RMSE и MAE, почему RMSE — это расстояние между векторами, как она раскладывается на смещение и разброс и чем её градиент отличается от градиента MSE при общем минимуме.

Javharbek Abdulatipov · 35 мин чтения
$$\mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}\bigl(y_i-\hat{y}_i\bigr)^2}$$

Зачем она нужна

Модель предсказывает цену квартиры, спрос на товар, температуру завтра. Как одним числом сказать, насколько она ошибается? Простое среднее ошибок не годится: промахи вверх и вниз гасят друг друга. MSE возводит ошибки в квадрат — но тогда ответ получается в «рублях в квадрате» или «градусах в квадрате», и фраза «MSE равна 1 417 000» заказчику ничего не скажет. RMSE извлекает корень и возвращает ошибку в единицы целевой переменной, сохраняя всё, за что любят MSE.

Где она встречается:

  • оценка регрессионных моделей — одна из самых распространённых метрик в отчётах, статьях и соревнованиях Kaggle;
  • прогнозирование временных рядов — погода, спрос, энергопотребление; рядом с ней обычно стоят MAE и MAPE;
  • рекомендательные системы — знаменитый Netflix Prize (2006–2009) оценивал предсказания рейтингов именно по RMSE;
  • физика и метрология — среднеквадратичная погрешность измерений, точность GPS, «RMS»-значение сигнала;
  • обучение моделей — минимизация RMSE и MSE даёт одну и ту же модель, но градиенты у них разные (об этом — в разделе про производную).
Главное за минуту

RMSE — это MSE под корнем: ошибка в единицах $y$, которая, как и MSE, сильнее наказывает крупные промахи. Всегда $\mathrm{MAE}\le\mathrm{RMSE}\le\sqrt n\,\mathrm{MAE}$, а $\mathrm{RMSE}^2=\bar r^{\,2}+\sigma_r^2$ — квадрат смещения плюс дисперсия остатков. Минимум RMSE совпадает с минимумом MSE, а её градиент — это градиент MSE, делённый на $2\,\mathrm{RMSE}$.

Интуиция: сторона среднего квадрата

Нарисуем каждую ошибку $r_i=y_i-\hat y_i$ квадратом со стороной $|r_i|$. Его площадь $r_i^2$ — это вклад объекта в MSE. Сложим площади и разделим на $n$ — получится средняя площадь, то есть MSE. А RMSE — это сторона квадрата, площадь которого равна средней площади.

Потяните синие точки — прогнозы. Справа квадраты всех ошибок вложены в один угол: синий квадрат имеет сторону RMSE, бирюзовый пунктирный — сторону MAE.

Рисунок 1. Сквозной пример: $y=(3;\,5;\,8)$, $\hat y=(2{,}5;\,5;\,10)$. Ошибка $-2$ даёт квадрат площадью 4, ошибка $0{,}5$ — площадью $0{,}25$; средняя площадь $\mathrm{MSE}\approx1{,}417$, её сторона $\mathrm{RMSE}\approx1{,}190$. Сторона MAE меньше — $0{,}833$.
Что заметить

Большой квадрат тянет среднюю площадь сильнее, чем длинная сторона тянет среднюю длину: на ошибку $-2$ приходится $80\%$ суммы модулей, но $94\%$ суммы квадратов. Поэтому RMSE больше MAE — и тем больше, чем неравномернее ошибки. Сделайте все три ошибки одинаковыми по модулю — и синий квадрат совпадёт с бирюзовым.

Формула по косточкам

Название, прочитанное справа налево, и есть рецепт: root (корень) из mean (среднего) от squared error (квадрата ошибки).

$$r_i=y_i-\hat y_i\;\xrightarrow{\;(\cdot)^2\;}\;r_i^2\ge0\;\xrightarrow{\;\frac1n\sum\;}\;\mathrm{MSE}\;\xrightarrow{\;\sqrt{\cdot}\;}\;\mathrm{RMSE}$$
$y_i$
истинное значение $i$-го объекта (факт);
$\hat y_i$
прогноз модели для этого объекта;
$r_i=y_i-\hat y_i$
ошибка, или остаток (residual); знак показывает, недооценили мы ($r_i>0$) или переоценили ($r_i<0$);
$r_i^2$
квадрат убирает знак и делает крупные ошибки непропорционально тяжёлыми: вдвое большая ошибка весит вчетверо больше;
$\frac1n\sum_{i=1}^n$
среднее по всем $n$ объектам — это MSE, в квадратных единицах;
$\sqrt{\cdot}$
корень возвращает исходные единицы: если $y$ в рублях, то и RMSE в рублях.

Сквозной пример по шагам:

$i$$y_i$$\hat y_i$$r_i$$r_i^2$$|r_i|$
132,50,50,250,5
255000
3810−242
среднее−0,51,4170,833
$$\mathrm{RMSE}=\sqrt{\frac{0{,}25+0+4}{3}}=\sqrt{1{,}417}\approx1{,}190,\qquad \mathrm{MAE}=\frac{0{,}5+0+2}{3}\approx0{,}833$$

Ту же величину полезно узнавать в других записях:

$$\mathrm{RMSE}=\sqrt{\mathrm{MSE}}=\frac{\|y-\hat y\|_2}{\sqrt n}=M_2\bigl(|r_1|,\dots,|r_n|\bigr)$$

Вторая запись — евклидово расстояние между вектором фактов и вектором прогнозов, делённое на $\sqrt n$ (к ней мы вернёмся в 3D). Третья — среднее квадратичное (quadratic mean, степенное среднее порядка 2) модулей ошибок. MAE — их среднее арифметическое $M_1$, а наибольшая ошибка — предельный случай $M_\infty$. Неравенство о степенных средних сразу даёт $\mathrm{MAE}\le\mathrm{RMSE}\le\max_i|r_i|$.

Почему квадрат, а не модуль

Можно усреднять модули — это MAE. Квадрат выбирают потому, что он гладкий (дифференцируем везде), связан с дисперсией и нормальным распределением (минимизация MSE — это метод максимального правдоподобия при гауссовом шуме) и даёт явные формулы (метод наименьших квадратов). Корень сверху нужен только для чтения: на порядок моделей он не влияет.

Свойства

  • Неотрицательность: $\mathrm{RMSE}\ge0$, и $\mathrm{RMSE}=0$ только при идеальном прогнозе $\hat y=y$.
  • Единицы измерения — те же, что у $y$. Перевели цены из тысяч рублей в рубли — RMSE выросла ровно в 1000 раз: $\mathrm{RMSE}(c\,y,\,c\,\hat y)=|c|\,\mathrm{RMSE}(y,\hat y)$.
  • Сдвиг не влияет: прибавив одно и то же число к фактам и прогнозам, получим ту же RMSE. Поэтому RMSE не говорит, велика ли ошибка относительно уровня ряда — для этого есть MAPE и нормированные варианты.
  • Тот же порядок, что у MSE: корень строго возрастает, поэтому сравнение моделей по RMSE и по MSE всегда даёт один и тот же порядок, а минимум у них в одной точке.
  • Чувствительность к выбросам: одна ошибка величины $E$ даёт RMSE не меньше $E/\sqrt n$, сколько бы идеальных прогнозов ни было вокруг.
  • Неаддитивность: RMSE всей выборки — не среднее RMSE её частей. Складываются квадраты: $\mathrm{RMSE}^2=\sum_g \tfrac{n_g}{n}\,\mathrm{RMSE}_g^2$.
  • Это норма (с точностью до множителя $1/\sqrt n$): для векторов ошибок $a$ и $b$ выполняется неравенство треугольника $\mathrm{RMSE}(a+b)\le\mathrm{RMSE}(a)+\mathrm{RMSE}(b)$.

Смещение и разброс: теорема Пифагора для ошибок

Остатки можно разделить на систематическую часть — среднее $\bar r$ (модель в среднем завышает или занижает) — и случайную, разброс вокруг среднего $\sigma_r$. Тогда

$$\mathrm{RMSE}^2=\underbrace{\bar r^{\,2}}_{\text{смещение}^2}+\underbrace{\sigma_r^2}_{\text{дисперсия остатков}},\qquad \bar r=\frac1n\sum_i r_i,\quad \sigma_r^2=\frac1n\sum_i\bigl(r_i-\bar r\bigr)^2$$
Вывод разложения

Запишем $r_i=\bar r+(r_i-\bar r)$ и раскроем квадрат:

$$\frac1n\sum_i r_i^2=\frac1n\sum_i\Bigl(\bar r^{\,2}+2\bar r\,(r_i-\bar r)+(r_i-\bar r)^2\Bigr)=\bar r^{\,2}+\frac{2\bar r}{n}\underbrace{\sum_i(r_i-\bar r)}_{=\,0}+\sigma_r^2$$

Средний член исчезает: отклонения от среднего в сумме дают ноль. Это та же алгебра, что в формуле $\operatorname{Var}X=\mathbb E X^2-(\mathbb E X)^2$.

Рисунок 2. Слева — 40 остатков со смещением $\bar r$ и разбросом $\sigma_r$, справа — прямоугольный треугольник с катетами $|\bar r|$ и $\sigma_r$: его гипотенуза и есть RMSE. При $\bar r=1$ и $\sigma_r=1{,}5$ получаем $\mathrm{RMSE}=\sqrt{1+2{,}25}\approx1{,}80$.

В сквозном примере $\bar r=-0{,}5$ (модель в среднем завышает на $0{,}5$), $\sigma_r\approx1{,}080$, и $0{,}25+1{,}167=1{,}417=\mathrm{MSE}$. Практический вывод: смещение убирается бесплатно — прибавьте $\bar r$ ко всем прогнозам, и на тех данных, где оно оценено, RMSE снизится ровно до $\sigma_r$ (здесь — с $1{,}190$ до $1{,}080$). На практике $\bar r$ оценивают на валидации, а выигрыш проверяют на тесте.

RMSE и стандартное отклонение

Если среднее остатков равно нулю (так всегда бывает у линейной регрессии со свободным членом на обучающей выборке), RMSE совпадает со стандартным отклонением остатков. Отсюда её родство со «стандартной ошибкой регрессии» из статистики — только там сумму квадратов остатков делят не на $n$, а на число степеней свободы $n-p$ ($p$ — число параметров модели). Если к тому же ошибки нормальны, около $68\%$ остатков лежат в пределах $\pm\mathrm{RMSE}$ и около $95\%$ — в пределах $\pm2\,\mathrm{RMSE}$.

RMSE против MAE: что говорит разрыв

MAE отвечает на вопрос «на сколько в среднем ошибаемся», RMSE — «каков типичный размер ошибки с учётом крупных». Их отношение $\mathrm{RMSE}/\mathrm{MAE}$ безразмерно и не зависит от масштаба: оно описывает только форму распределения ошибок.

ОшибкиMAERMSERMSE / MAE
равномерное на $[-a;\,a]$$a/2$$a/\sqrt3$$2/\sqrt3\approx1{,}155$
нормальное $N(0,\,\sigma^2)$$\sigma\sqrt{2/\pi}$$\sigma$$\sqrt{\pi/2}\approx1{,}253$
Лапласа с масштабом $b$$b$$\sqrt2\,b$$\sqrt2\approx1{,}414$
все $|r_i|$ равны $c$$c$$c$$1$
одна ошибка $E$, остальные $n-1$ нулевые$E/n$$E/\sqrt n$$\sqrt n$
Откуда √(π/2) для нормальных ошибок

Для $r\sim N(0,\sigma^2)$ имеем $\mathbb E\,r^2=\sigma^2$, а среднее модуля — интеграл по положительной полуоси, умноженный на 2:

$$\mathbb E|r|=2\int_0^\infty \frac{x}{\sigma\sqrt{2\pi}}\,e^{-x^2/2\sigma^2}\,dx=\frac{2\sigma^2}{\sigma\sqrt{2\pi}}=\sigma\sqrt{\frac{2}{\pi}}$$

Отсюда $\sigma/\bigl(\sigma\sqrt{2/\pi}\bigr)=\sqrt{\pi/2}\approx1{,}2533$. На конечной выборке это верно приближённо: на рисунке 3 при $n=2000$ получается $1{,}248$.

Рисунок 3. 2000 ошибок с единичной дисперсией (фиксированное зерно генератора). Для нормальных ошибок отношение $1{,}248$ (теория $1{,}253$), для лапласовских — $1{,}392$ ($1{,}414$), для равномерных — $1{,}153$ ($1{,}155$). Добавьте выбросы: каждая ошибка с вероятностью $\varepsilon$ умножается на 10. Уже при $\varepsilon=5\%$ RMSE вырастает с $1{,}009$ до $2{,}817$, а MAE — только с $0{,}809$ до $1{,}258$.

Для такой смеси MSE растёт в $1+99\varepsilon$ раз ($(1-\varepsilon)\cdot1+\varepsilon\cdot100$), а MAE — лишь в $1+9\varepsilon$ раз, поэтому теоретическое отношение равно $\sqrt{1+99\varepsilon}\,/\bigl((1+9\varepsilon)\,\mathrm{MAE}_0\bigr)$, где $\mathrm{MAE}_0$ — MAE исходного распределения.

Границы: MAE ≤ RMSE ≤ √n · MAE

$$\mathrm{MAE}\;\le\;\mathrm{RMSE}\;\le\;\sqrt n\;\mathrm{MAE}$$

Левое равенство достигается, только когда все $|r_i|$ одинаковы; правое — когда вся ошибка сосредоточена в одном объекте, а остальные прогнозы идеальны. В сквозном примере отношение $1{,}190/0{,}833\approx1{,}43$ при максимуме $\sqrt3\approx1{,}73$: ошибки заметно неравномерны.

Доказательство обеих границ

Левая граница — неравенство Коши — Буняковского для векторов $(|r_1|,\dots,|r_n|)$ и $(1,\dots,1)$:

$$\sum_i|r_i|\cdot1\le\sqrt{\sum_i r_i^2}\cdot\sqrt n\quad\Longrightarrow\quad\frac1n\sum_i|r_i|\le\sqrt{\frac1n\sum_i r_i^2}$$

Равенство — когда векторы пропорциональны, то есть все $|r_i|$ равны. Правая граница следует из того, что сумма квадратов неотрицательных чисел не больше квадрата их суммы:

$$\sum_i r_i^2\le\Bigl(\sum_i|r_i|\Bigr)^2\quad\Longrightarrow\quad\sqrt{\frac1n\sum_i r_i^2}\le\frac{1}{\sqrt n}\sum_i|r_i|=\sqrt n\,\mathrm{MAE}$$

Равенство — когда все произведения $|r_i|\,|r_j|$ при $i\ne j$ равны нулю, то есть ненулевая ошибка не больше чем одна. Если общая абсолютная ошибка поровну разделена между $k$ объектами из $n$, отношение равно ровно $\sqrt{n/k}$.

Рисунок 4. Слева — две ошибки $(r_1;\,r_2)$. Точки с одинаковой MAE лежат на ромбе $|r_1|+|r_2|=2\,\mathrm{MAE}$, с одинаковой RMSE — на окружности радиуса $\sqrt2\,\mathrm{RMSE}$. Ромб зажат между окружностями $\mathrm{RMSE}=\mathrm{MAE}$ (касается её при $|r_1|=|r_2|$) и $\mathrm{RMSE}=\sqrt2\,\mathrm{MAE}$ (проходит через вершины на осях). Для точки $(0{,}5;\,-2)$: $\mathrm{MAE}=1{,}25$, $\mathrm{RMSE}\approx1{,}458$. Справа — отношение $\sqrt{n/k}$, когда ошибка поровну разделена между $k$ объектами из $n$.
Как читать разрыв

$\mathrm{RMSE}\approx\mathrm{MAE}$ — ошибки примерно одного размера. $\mathrm{RMSE}/\mathrm{MAE}\approx1{,}25$ — типично для нормального шума. Заметно больше $1{,}4$ — тяжёлые хвосты или несколько крупных промахов: посмотрите на самые большие остатки, прежде чем доверять средним.

Геометрия: RMSE как расстояние

Запишем факты и прогнозы как точки $n$-мерного пространства: $y=(y_1,\dots,y_n)$ и $\hat y=(\hat y_1,\dots,\hat y_n)$. Сумма квадратов ошибок — квадрат обычного евклидова расстояния между ними, поэтому

$$\mathrm{RMSE}(y,\hat y)=\frac{\|y-\hat y\|_2}{\sqrt n}$$

Деление на $\sqrt n$ делает расстояние сравнимым для выборок разного размера: если каждая ошибка равна $c$, то $\|y-\hat y\|=c\sqrt n$, а RMSE равна ровно $c$. Все прогнозы с одной и той же RMSE образуют сферу радиуса $\sqrt n\,\mathrm{RMSE}$ с центром в $y$. При $n=3$ это можно нарисовать.

Рисунок 5. Сквозной пример в $\mathbb R^3$: факт $y=(3;\,5;\,8)$, прогноз $\hat y=(2{,}5;\,5;\,10)$; оранжевый отрезок — вектор ошибки длиной $\sqrt{4{,}25}\approx2{,}062$, и $\mathrm{RMSE}=2{,}062/\sqrt3\approx1{,}190$. Серая сфера — все прогнозы с той же RMSE. Пунктирная диагональ — константные прогнозы $(c;\,c;\,c)$; ближайшая к $y$ точка на ней — $\bar y\cdot\mathbf 1$, $\bar y=16/3$. Двигайте ползунки и вращайте сцену.

Лучшая константа — среднее, а её RMSE — стандартное отклонение

Какой константный прогноз $\hat y_i=c$ минимизирует RMSE? Геометрически — ортогональная проекция $y$ на диагональ, то есть $c=\bar y$. Её RMSE — стандартное отклонение целевой переменной:

$$\min_c\,\mathrm{RMSE}(y,\,c\mathbf 1)=\mathrm{RMSE}(y,\,\bar y\mathbf 1)=\sqrt{\frac1n\sum_i\bigl(y_i-\bar y\bigr)^2}=\sigma_y$$

Это главный ориентир при чтении RMSE: модель, у которой RMSE не меньше $\sigma_y$, ничем не лучше прогноза «всегда среднее». В примере $\sigma_y\approx2{,}055$, а модель даёт $1{,}190$. Отсюда же коэффициент детерминации:

$$R^2=1-\frac{\mathrm{MSE}}{\sigma_y^2}=1-\frac{\mathrm{RMSE}^2}{\sigma_y^2}=1-\frac{1{,}417}{4{,}222}\approx0{,}66$$

Производная и градиент

Пусть прогнозы зависят от параметров модели $\theta$. Производная корня $\sqrt u$ равна $1/(2\sqrt u)$, поэтому по цепному правилу градиент RMSE — это градиент MSE, делённый на $2\,\mathrm{RMSE}$:

$$\nabla_\theta\,\mathrm{RMSE}=\frac{\nabla_\theta\,\mathrm{MSE}}{2\,\mathrm{RMSE}}$$
Вывод по шагам

Возьмём производную по одному прогнозу $\hat y_j$. От него зависит только слагаемое $(y_j-\hat y_j)^2$:

$$\frac{\partial\,\mathrm{MSE}}{\partial\hat y_j}=\frac1n\cdot2\,(y_j-\hat y_j)\cdot(-1)=-\frac{2}{n}\,r_j$$

Цепное правило для $\mathrm{RMSE}=\sqrt{\mathrm{MSE}}$:

$$\frac{\partial\,\mathrm{RMSE}}{\partial\hat y_j}=\frac{1}{2\sqrt{\mathrm{MSE}}}\cdot\Bigl(-\frac{2}{n}\,r_j\Bigr)=-\frac{r_j}{n\,\mathrm{RMSE}}=\frac{\hat y_j-y_j}{n\,\mathrm{RMSE}}$$

Для параметра $\theta$ добавляется ещё один множитель цепного правила, $\partial\hat y_j/\partial\theta$:

$$\frac{\partial\,\mathrm{RMSE}}{\partial\theta}=\frac{1}{n\,\mathrm{RMSE}}\sum_{j=1}^{n}(\hat y_j-y_j)\,\frac{\partial\hat y_j}{\partial\theta}$$
$$\frac{\partial\,\mathrm{RMSE}}{\partial\hat y_j}=\frac{\hat y_j-y_j}{n\,\mathrm{RMSE}}$$

Что из этого следует:

  • Направление то же, длина другая. Градиенты RMSE и MSE отличаются только положительным множителем $1/(2\,\mathrm{RMSE})$. Поэтому у функций одни и те же стационарные точки и один минимум.
  • Длина градиента по прогнозам постоянна: $\|\nabla_{\hat y}\mathrm{RMSE}\|=1/\sqrt n$ при любых ошибках (сумма квадратов компонент равна $\sum_j r_j^2/(n^2\,\mathrm{MSE})=1/n$). Градиент RMSE указывает только направление к $y$, а его длина не зависит от того, насколько мы далеко.
  • В сквозном примере $\partial\,\mathrm{RMSE}/\partial\hat y=(-0{,}140;\;0;\;0{,}560)$, а у MSE — $(-0{,}333;\;0;\;1{,}333)$, ровно в $2\cdot1{,}190=2{,}380$ раза больше.
  • В нуле производной нет. При $\hat y=y$ функция $\|y-\hat y\|/\sqrt n$ имеет излом, как $|x|$ в нуле (вершина конуса), а формула делит на $\mathrm{RMSE}=0$. В автоматическом дифференцировании это превращается в NaN (см. раздел с кодом).

Одномерный разрез: константный прогноз

Возьмём модель-константу $\hat y_i=c$ на данных примера $y=(3;\,5;\,8)$. Тогда $\mathrm{MSE}(c)=(c-\bar y)^2+\sigma_y^2$ — парабола, а RMSE — гипербола:

$$\mathrm{RMSE}(c)=\sqrt{(c-\bar y)^2+\sigma_y^2},\qquad \mathrm{RMSE}'(c)=\frac{c-\bar y}{\sqrt{(c-\bar y)^2+\sigma_y^2}}\in(-1;\,1)$$

Возле минимума гипербола похожа на параболу (RMSE ведёт себя как MSE), вдали — на прямые $|c-\bar y|$ (как MAE). Производная плавно меняется от $-1$ до $1$ и никогда не выходит за эти пределы, а производная MSE растёт линейно и неограниченно.

Рисунок 6. Вверху — RMSE, MSE и MAE константного прогноза $c$ (точки на оси — данные), внизу — производные. При $c=8$: $\mathrm{RMSE}\approx3{,}367$, $\mathrm{RMSE}'\approx0{,}792$, $\mathrm{MSE}'\approx5{,}333$; их отношение $2\,\mathrm{RMSE}\approx6{,}733$. Минимумы RMSE и MSE — в $\bar y\approx5{,}333$, минимум MAE — в медиане 5.

Вторая производная $\mathrm{RMSE}''(c)=\sigma_y^2/\mathrm{RMSE}(c)^3>0$: функция строго выпукла, пока $\sigma_y>0$. В общем случае RMSE выпукла по прогнозам (как норма), а значит, и по параметрам линейной модели: у линейной регрессии нет локальных минимумов ни для MSE, ни для RMSE.

Ландшафт RMSE(w, b) и обучение

Линейная модель $\hat y=wx+b$ на 14 точках. Над плоскостью параметров $(w,\,b)$ RMSE образует чашу. Переключите поверхность на MSE: линии уровня останутся теми же (уровень $\mathrm{RMSE}=1{,}5$ — это уровень $\mathrm{MSE}=2{,}25$), изменится только высота: MSE растёт квадратично, а RMSE вдали от минимума — почти линейно, как конус.

Рисунок 7. Слева — поверхность (вращается), справа — вид сверху с линиями уровня RMSE, внизу — RMSE по шагам. Перетащите чёрную стартовую точку: стрелки показывают первый шаг $-\eta\nabla$ для MSE (синяя) и для RMSE (оранжевая) — направление одно, но оранжевая короче в $2\,\mathrm{RMSE}\approx5{,}4$ раз. Нажмите «Пуск»: при $\eta=0{,}1$ спуск по MSE подходит к минимуму $0{,}904$ с точностью $0{,}01$ за 61 шаг, спуск по RMSE — за 140. Поставьте $\eta=0{,}14$: спуск по MSE разойдётся, а спуск по RMSE дойдёт до цели за 100 шагов.

Почему так. Шаг по RMSE — это шаг по MSE с переменным темпом обучения (learning rate):

$$\theta\leftarrow\theta-\eta\,\nabla\mathrm{RMSE}=\theta-\underbrace{\frac{\eta}{2\,\mathrm{RMSE}(\theta)}}_{\eta_{\text{эфф}}}\,\nabla\mathrm{MSE}$$

Пока ошибки велики, эффективный шаг мал — поэтому спуск по RMSE устойчивее к слишком большому $\eta$. Возле минимума $\eta_{\text{эфф}}\to\eta/(2\,\mathrm{RMSE}_{\min})$; здесь $\mathrm{RMSE}_{\min}\approx0{,}904$, и шаг почти вдвое меньше, чем у MSE, — отсюда медленный финиш. Спуск по MSE устойчив лишь при $\eta<2/\lambda_{\max}\approx0{,}133$, где $\lambda_{\max}\approx15{,}0$ — наибольшее собственное значение гессиана MSE.

RMSE на мини-батчах

Корень из среднего по батчу — не корень из среднего по всей выборке: $\mathbb E\sqrt{\mathrm{MSE}_{\text{batch}}}\le\sqrt{\mathbb E\,\mathrm{MSE}_{\text{batch}}}$ (неравенство Йенсена). Средняя по батчам RMSE систематически занижена, а шаги SGD по батчевой RMSE оптимизируют именно это среднее, а не RMSE всей выборки. Обычно учат на MSE, а RMSE считают по всей валидационной выборке.

RMSE в оценке моделей

Как метрика качества RMSE отвечает на вопрос «на сколько единиц $y$ типично ошибается модель, с упором на крупные промахи». Чтобы число что-то значило, его сравнивают:

  • с бейзлайном — у прогноза «всегда среднее» RMSE равна $\sigma_y$, у прогноза «как вчера» во временных рядах — своя; модель должна быть заметно лучше;
  • с масштабом задачи — ошибка в 5000 рублей отлична для квартир и ужасна для чашек кофе. Безразмерный вариант — $\mathrm{NRMSE}=\mathrm{RMSE}/\sigma_y=\sqrt{1-R^2}$ (иногда делят на размах или среднее $y$);
  • с MAE — по отношению $\mathrm{RMSE}/\mathrm{MAE}$ видно, есть ли крупные промахи;
  • только на одних и тех же данных — RMSE на разных тестовых выборках несравнимы, если у них разный разброс $y$.

Кросс-валидация: усредняйте квадраты

При $K$ фолдах часто берут среднее RMSE по фолдам. Это не RMSE по всем объектам: среднее корней не больше корня из среднего. Общая оценка — корень из взвешенного среднего MSE:

$$\mathrm{RMSE}_{\text{CV}}=\sqrt{\sum_{k=1}^{K}\frac{n_k}{n}\,\mathrm{MSE}_k}\;\ge\;\sum_{k=1}^{K}\frac{n_k}{n}\,\mathrm{RMSE}_k$$

Например, два фолда равного размера с RMSE $1$ и $3$: среднее равно $2$, а общая RMSE — $\sqrt{(1+9)/2}=\sqrt5\approx2{,}24$.

Netflix Prize

В 2006 году Netflix пообещал миллион долларов команде, которая улучшит RMSE их рекомендательной системы Cinematch на тестовых оценках на $10\%$ — с $0{,}9525$ до $0{,}8572$ по пятизвёздочной шкале. Приз в 2009 году получила команда BellKor’s Pragmatic Chaos с RMSE $0{,}8567$. Ради десятой доли «звезды» участники три года строили ансамбли из сотен моделей — хорошая иллюстрация того, что метрика определяет, что именно оптимизируют.

Варианты: RMSLE, взвешенная и нормированная RMSE

RMSLE (root mean squared logarithmic error) — RMSE в логарифмической шкале:

$$\mathrm{RMSLE}=\sqrt{\frac1n\sum_{i=1}^{n}\bigl(\ln(1+\hat y_i)-\ln(1+y_i)\bigr)^2}$$

Логарифм превращает отношения в разности: ошибка определяется тем, во сколько раз $1+\hat y$ отличается от $1+y$, а не на сколько. Поэтому RMSLE подходит для неотрицательных целей с большим разбросом масштабов (цены, продажи, просмотры) и наказывает недобор сильнее, чем перебор на ту же абсолютную величину. В сквозном примере $\mathrm{RMSLE}\approx0{,}139$.

Рисунок 8. Квадрат логарифмической ошибки при факте $y=10$. Прогноз 5 (недобор на 5) стоит $0{,}367$, прогноз 15 (перебор на те же 5) — $0{,}140$, в $2{,}6$ раза меньше. Пунктир — зеркальное отражение кривой, точки — квадратичная ошибка в долях $1+y$ для сравнения. Внизу — производная по $\hat y$: на недоборе она круче.

Ещё две полезные модификации:

  • взвешенная RMSE $\sqrt{\sum_i w_i r_i^2/\sum_i w_i}$ — когда объекты неравноценны (дорогие товары, свежие наблюдения);
  • NRMSE $=\mathrm{RMSE}/\sigma_y=\sqrt{1-R^2}$ — безразмерная версия для сравнения задач разного масштаба.
RMSLE — это RMSE на логарифмах

RMSLE равна RMSE между $\ln(1+y)$ и $\ln(1+\hat y)$. Поэтому, если метрика соревнования — RMSLE, разумно обучать модель на MSE по цели $\ln(1+y)$, а прогноз возвращать через $e^{z}-1$.

В коде

В NumPy RMSE — одна строка; ниже заодно проверяются формулы этой страницы на сквозном примере.

pythonimport numpy as np

y     = np.array([3.0, 5.0, 8.0])
y_hat = np.array([2.5, 5.0, 10.0])

r    = y - y_hat                   # остатки: [ 0.5  0.  -2. ]
mse  = np.mean(r ** 2)             # ≈ 1.4167
rmse = np.sqrt(mse)                # ≈ 1.1902
mae  = np.mean(np.abs(r))          # ≈ 0.8333

# То же через евклидову норму: ‖y − ŷ‖ / √n
print(round(np.linalg.norm(r) / np.sqrt(len(r)), 4))   # 1.1902

# Разложение: RMSE² = смещение² + дисперсия остатков
print(round(r.mean() ** 2 + r.var(), 4), round(mse, 4))   # 1.4167 1.4167

# Градиент по прогнозам: ∂RMSE/∂ŷ = (ŷ − y) / (n · RMSE)
print(np.round((y_hat - y) / (len(y) * rmse), 4))       # [-0.14    0.      0.5601]

# Бейзлайн «всегда среднее»: его RMSE — стандартное отклонение y
print(round(np.std(y), 4))                               # 2.0548

В scikit-learn есть готовые функции (с версии 1.4; раньше писали mean_squared_error(..., squared=False), а в 1.6 параметр squared удалён). Обратите внимание на разницу между средним RMSE фолдов и RMSE по всем объектам:

pythonfrom sklearn.metrics import root_mean_squared_error, root_mean_squared_log_error
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold, cross_val_score, cross_val_predict

# y, y_hat — из листинга выше; функции есть в scikit-learn ≥ 1.4
print(round(root_mean_squared_error(y, y_hat), 4))       # 1.1902
print(round(root_mean_squared_log_error(y, y_hat), 4))   # 0.1392 — RMSLE

X, t = make_regression(n_samples=200, n_features=5, noise=10.0, random_state=0)
cv = KFold(5, shuffle=True, random_state=0)
# scorer «чем больше, тем лучше», поэтому RMSE идёт со знаком минус
scores = cross_val_score(LinearRegression(), X, t, cv=cv,
                         scoring="neg_root_mean_squared_error")
print(round(-scores.mean(), 3))                # 10.56 — среднее RMSE фолдов
pred = cross_val_predict(LinearRegression(), X, t, cv=cv)
print(round(root_mean_squared_error(t, pred), 3))   # 10.614 — RMSE по всем объектам

В PyTorch RMSE как функция потерь требует осторожности в нуле:

pythonimport torch

y     = torch.tensor([3.0, 5.0, 8.0])
y_hat = torch.tensor([2.5, 5.0, 10.0], requires_grad=True)

rmse = torch.sqrt(torch.mean((y_hat - y) ** 2))
rmse.backward()
print(round(rmse.item(), 4), y_hat.grad)   # 1.1902 tensor([-0.1400,  0.0000,  0.5601])

# Идеальный прогноз: производная √u в нуле бесконечна → градиент NaN
p = y.clone().requires_grad_(True)
torch.sqrt(torch.mean((p - y) ** 2)).backward()
print(p.grad)                    # tensor([nan, nan, nan])

def rmse_loss(pred, target, eps=1e-8):
    """RMSE как функция потерь: eps под корнем убирает NaN."""
    return torch.sqrt(torch.mean((pred - target) ** 2) + eps)
Правило

Для обучения нейросети обычно минимизируют MSE: минимум тот же, градиент гладкий в нуле, нет деления на RMSE. RMSE считают для отчёта — по всей валидационной выборке сразу, а не как среднее по батчам.

Частые ошибки

  1. Среднее RMSE по батчам или фолдам как итоговая RMSE. Корень нелинеен: усредняйте MSE, а корень берите в конце.
  2. Сравнение RMSE на разных данных. RMSE зависит от масштаба и разброса $y$; сравнивайте модели на одной тестовой выборке или используйте нормированную RMSE.
  3. «Модель ошибается в среднем на RMSE». Средняя абсолютная ошибка — это MAE; RMSE не меньше её, а на тяжёлых хвостах заметно больше.
  4. RMSE как потеря без защиты нуля. Производная $\sqrt u$ в нуле бесконечна: идеальный батч даёт NaN в градиентах. Добавляйте $\varepsilon$ под корень или учите на MSE.
  5. Игнорирование выбросов. Одна ошибка в 100 единиц среди 99 идеальных прогнозов даёт $\mathrm{RMSE}=10$ при $\mathrm{MAE}=1$. Если выбросы — шум, а не важные события, смотрите MAE, Huber или квантили ошибок.
  6. RMSE по логарифмам вместо исходной шкалы. Если модель учится на $\ln(1+y)$, её RMSE — это RMSLE исходной задачи, а не RMSE в рублях; переводите прогнозы обратно, прежде чем считать RMSE.
  • MSE: $\mathrm{RMSE}=\sqrt{\mathrm{MSE}}$ — тот же минимум и тот же порядок моделей, а градиент делится на $2\,\mathrm{RMSE}$.
  • MAE: $\mathrm{MAE}\le\mathrm{RMSE}\le\sqrt n\,\mathrm{MAE}$; лучшая константа для MAE — медиана, для RMSE — среднее.
  • Huber: квадратичная возле нуля и линейная на хвостах — компромисс между MSE (а значит, RMSE) и MAE.
  • MAPE: относительная ошибка вместо абсолютной; RMSLE — её квадратичный родственник в логарифмической шкале.
  • SGD: спуск по RMSE — это спуск по MSE с темпом обучения $\eta/(2\,\mathrm{RMSE})$.
  • Adam: делит шаг на корень из скользящего среднего квадратов градиента — та же идея «корня из среднего квадрата» (RMS), что и в RMSE.

Итоги

1) $\mathrm{RMSE}=\sqrt{\mathrm{MSE}}$ — типичный размер ошибки в единицах $y$ с упором на крупные промахи. 2) $\mathrm{MAE}\le\mathrm{RMSE}\le\sqrt n\,\mathrm{MAE}$; отношение RMSE/MAE — индикатор хвостов ($\approx1{,}25$ для нормального шума). 3) $\mathrm{RMSE}^2=\bar r^{\,2}+\sigma_r^2$ — смещение и разброс как катеты. 4) Геометрически это расстояние $\|y-\hat y\|/\sqrt n$; лучшая константа — среднее, её RMSE равна $\sigma_y$. 5) $\nabla\mathrm{RMSE}=\nabla\mathrm{MSE}/(2\,\mathrm{RMSE})$: минимум общий, шаг другой, в нуле производной нет.

Проверь себя

1. Ошибки модели: $(1;\,-1;\,1;\,-1)$. Чему равны MAE и RMSE?
2. На 100 объектах 99 прогнозов идеальны, а один ошибается на 50. Чему равна RMSE?
3. Средний остаток модели $\bar r=3$, стандартное отклонение остатков $\sigma_r=4$. Чему равна RMSE?
4. Как связаны градиенты RMSE и MSE по параметрам модели?
5. Пять фолдов одинакового размера дали RMSE $1$, $1$, $1$, $1$ и $3$. Какова RMSE по всем объектам?