Плотность вероятности 🌊
Ты обучил модель обнаружения аномалий на логах сервиса. Она выдаёт для каждого запроса число — и в отчёте ты видишь строчку: «плотность в этой точке равна $37{,}4$». Тридцать семь целых четыре десятых. Первая реакция человека, который помнит, что вероятность лежит между нулём и единицей: «Модель сломалась, вероятность не может быть больше единицы, где-то баг».
Бага нет. Тридцать семь — совершенно нормальное значение плотности. И более того, плотность бывает и три тысячи, и миллион, если величина сосредоточена в очень узком диапазоне. Потому что плотность вероятности — это не вероятность. Это совсем другой объект, с другой размерностью и другим смыслом, и путаница между ними — самая массовая ошибка во всей теории вероятностей. Её допускают студенты, её допускают инженеры, её допускают авторы туториалов по машинному обучению. Мы разберём её так подробно, чтобы ты больше никогда в неё не попал.
В уроке 234 мы познакомились со случайными величинами и увидели, что они бывают дискретные (счётное число значений, у каждого своя вероятность) и непрерывные (значения заполняют промежуток). В уроке 235 мы построили универсальный инструмент — функцию распределения $F(x) = P(X < x)$, которая работает и для тех, и для других. Но у непрерывной величины есть неприятная особенность: вероятность попасть в конкретную точку равна нулю. $P(X = 3) = 0$. И $P(X = 3{,}00001) = 0$. И вообще $P(X = a) = 0$ для любого $a$. Возникает законный вопрос: если каждое отдельное значение имеет нулевую вероятность, то чем вообще одно распределение отличается от другого? Где спрятана информация о том, что величина «чаще бывает около нуля, чем около десяти»?
Ответ — в плотности. Это производная функции распределения, и она описывает не вероятность точки, а «концентрацию вероятности» вокруг точки — сколько вероятностной массы приходится на единицу длины оси. Ровно так же, как физическая плотность вещества описывает не массу точки (она нулевая), а массу на единицу объёма. Из плотности вероятность добывается интегрированием: хочешь узнать $P(a \le X \le b)$ — посчитай площадь под графиком плотности от $a$ до $b$. Всё. Вся тема укладывается в эту одну фразу, но у неё столько важных следствий, что на них уходит целый урок.
А в машинном обучении плотность — это вообще главный герой. Правдоподобие, которое мы максимизируем при обучении почти любой вероятностной модели, — это плотность. Логарифм правдоподобия, который стоит в лоссе, — логарифм плотности. Генеративные модели типа normalizing flows буквально обучаются на плотностях и таскают за собой якобиан замены переменной. Детекторы аномалий ищут точки с низкой плотностью. Ядерная оценка плотности (KDE) — стандартный инструмент разведочного анализа. Так что этот урок — не абстрактная математика, а рабочий инструмент, который ты будешь использовать каждый день.
🎯 Ты узнаешь:
- Почему плотность $p(x)$ — это не вероятность, и почему $p(x) > 1$ — совершенно нормально
- Как связаны плотность и функция распределения: $p(x) = F'(x)$ и $F(x) = \int_{-\infty}^{x} p(t)\,dt$
- Как считать любые вероятности интегрированием и как находить нормировочную константу из условия $\int_{-\infty}^{+\infty} p(x)\,dx = 1$
- Что означает выражение $p(x)\,dx$ и почему именно оно — «настоящая» вероятность
- Как пересчитывается плотность при замене переменной $Y = g(X)$ и откуда там берётся якобиан
- Почему правдоподобие в ML — это плотность, зачем берут логарифм и как устроены KDE, детекторы аномалий и normalizing flows
История: откуда это взялось?
Идея плотности родилась не из чистой математики, а из астрономии и артиллерии — из задачи, которая мучила учёных весь XVIII век: как обращаться с ошибками измерений. Астроном измеряет положение звезды десять раз и получает десять разных чисел. Какое из них истинное? Среднее? А насколько можно доверять этому среднему? Чтобы ответить, нужно было описать, как именно ошибки разбросаны вокруг истинного значения — а ошибка это непрерывная величина, у которой отдельное значение встречается с нулевой вероятностью.
Первым к понятию функции, описывающей распределение ошибок, подошёл Абрахам де Муавр в 1733 году. Изучая, как ведёт себя биномиальное распределение при огромном числе испытаний, он обнаружил, что дискретные столбики выстраиваются вдоль плавной кривой $e^{-x^2/2}$. Это была первая в истории плотность вероятности, хотя сам термин появится только через век. Пьер-Симон Лаплас в 1774 году пошёл дальше и прямо поставил задачу: найти функцию $\varphi(x)$, описывающую закон ошибок, из разумных аксиом. Он же ввёл в оборот интеграл как способ добывать вероятность из такой функции. А Карл Фридрих Гаусс в 1809 году в работе «Theoria motus corporum coelestium» вывел нормальную плотность из принципа, который сегодня называется методом максимального правдоподобия: он потребовал, чтобы среднее арифметическое измерений было «наиболее вероятной» оценкой, и получил единственную функцию, при которой это выполняется, — колокол.
Обрати внимание на исторический порядок: правдоподобие как максимизация плотности появилось раньше, чем строгая теория плотности. Гаусс перемножал значения $\varphi(x_i)$ для наблюдений и искал максимум произведения — то есть делал ровно то, что сегодня делает nn.NLLLoss в PyTorch, только руками и без логарифма. Термин «likelihood» и осознание того, что это принципиально отдельный от вероятности объект, — заслуга Рональда Фишера (1912-1922). Именно Фишер настойчиво объяснял, что правдоподобие не вероятность, что его нельзя интегрировать по параметру и что складывать его надо в логарифмах.
Строгую основу под всё это подвёл Анри Лебег (1902) с новой теорией интеграла, и окончательно — Андрей Николаевич Колмогоров в 1933 году в «Основных понятиях теории вероятностей». У Колмогорова плотность определяется предельно чисто: это функция, интеграл от которой по множеству даёт вероятность попасть в это множество (в терминах теоремы Радона-Никодима — производная одной меры по другой). Именно из этого определения сразу видно, что плотность не обязана быть меньше единицы: ограничение накладывается на интеграл, а не на значения. Мостик в сегодня: когда в 2015-2018 годах появились normalizing flows (NICE, RealNVP, Glow), их авторы взяли ровно ту формулу замены переменной с якобианом, которую вывели в XIX веке, и построили на ней генеративные модели, обучаемые точным максимальным правдоподобием.
От дискретного к непрерывному: зачем вообще нужна плотность
Интуиция
Представь, что ты взвешиваешь верёвку. Верёвка неоднородная: где-то толстая, где-то тонкая, где-то с узлом. Спрашиваю: сколько весит точка верёвки в позиции $x = 1{,}7$ метра? Ответ — ноль. Точка не имеет длины, значит, не имеет и массы. Но верёвка-то весит килограмм! Вся масса есть, а в каждой точке — ноль. Парадокс?
Никакого парадокса. Просто характеристика точки — это не масса, а линейная плотность: сколько граммов на сантиметр в окрестности этой точки. Обозначим её $\rho(x)$. Тогда масса куска от $a$ до $b$ — это интеграл $\int_a^b \rho(x)\,dx$. Толстый участок — большая $\rho$, тонкий — маленькая. И плотность спокойно может быть $500$ г/м или $0{,}3$ г/м — это зависит от того, в каких единицах ты меряешь длину, и никакого «потолка» у неё нет.
С вероятностью история буквально та же самая. У непрерывной случайной величины $P(X = a) = 0$ для любой точки — мы это видели в уроке 235. Но вероятностная «масса» единица, и она как-то распределена по оси. Функция, которая говорит, сколько вероятностной массы приходится на единицу длины около точки $x$, — это и есть плотность вероятности $p(x)$.
Есть и второй способ прийти к плотности — через гистограмму. Представь, что ты собрал миллион замеров времени отклика API. Строишь гистограмму: разбиваешь ось на корзины ширины $h$ и считаешь долю замеров в каждой корзине. Получаются столбики. Теперь ты уменьшаешь $h$: корзин больше, каждый столбик ниже (в узкую корзину попадает меньше точек). Если рисовать по вертикали долю, столбики схлопнутся в ноль. А если рисовать долю, делённую на ширину корзины — то есть «долю на единицу длины», — столбики стабилизируются и выстроятся вдоль гладкой кривой. Эта кривая и есть плотность. Гистограмма с нормировкой на ширину корзины (density=True в matplotlib) — это грубая эмпирическая оценка плотности.
Строгое определение
Определение: Случайная величина $X$ называется непрерывной (абсолютно непрерывной), если существует такая неотрицательная функция $p(x)$, что для любых $a \le b$
$$P(a \le X \le b) = \int_a^b p(x)\,dx.$$Функция $p(x)$ называется плотностью распределения вероятностей (или просто плотностью) случайной величины $X$.
Обрати внимание на структуру определения. Плотность вводится не как «вероятность значения $x$», а как функция, чей интеграл даёт вероятность. Это принципиально: вероятность — характеристика промежутка, а не точки. Плотность — характеристика точки, но она не вероятность.
Из этого определения сразу следует, почему для непрерывной величины нестрогие и строгие неравенства не различаются:
$$P(a \le X \le b) = P(a < X < b) = P(a \le X < b) = P(a < X \le b),$$потому что добавление или удаление отдельной точки меняет интеграл на ноль. В дискретном мире это было бы грубой ошибкой (там $P(X \le 3)$ и $P(X < 3)$ различаются на $P(X = 3)$), а в непрерывном — обычное дело. Это первая из приятных особенностей непрерывных величин: можно не следить за строгостью знаков.
Сравнение дискретного и непрерывного случая:
| Что | Дискретная $X$ | Непрерывная $X$ |
|---|---|---|
| Описание закона | ряд распределения $p_i = P(X = x_i)$ | плотность $p(x)$ |
| Ограничение на значения | $0 \le p_i \le 1$ | $p(x) \ge 0$, сверху не ограничена |
| Нормировка | $\sum_i p_i = 1$ | $\int_{-\infty}^{+\infty} p(x)\,dx = 1$ |
| Вероятность точки | $p_i$, может быть $> 0$ | всегда $0$ |
| Вероятность промежутка | $\sum_{a \le x_i \le b} p_i$ | $\int_a^b p(x)\,dx$ |
| Связь с $F$ | $F(x) = \sum_{x_i < x} p_i$ (скачки) | $F(x) = \int_{-\infty}^x p(t)\,dt$ (непрерывна) |
Главная строчка здесь — вторая. У дискретной величины значения $p_i$ — это настоящие вероятности, и они обязаны лежать в отрезке $[0; 1]$. У непрерывной величины значения $p(x)$ — это не вероятности, и ограничение сверху на них не накладывается вообще. Ограничение накладывается только на интеграл.
Примеры с разбором
Пример 1 (простой): равномерное распределение на отрезке $[0; 4]$
Автобус приходит на остановку строго раз в $4$ минуты, но ты подходишь в случайный момент. Время ожидания $X$ распределено равномерно на $[0; 4]$. Найди плотность.
Решение:
Шаг 1. «Равномерно» означает, что все участки одинаковой длины равновероятны. Значит, плотность постоянна на отрезке и равна нулю вне его:
$$p(x) = \begin{cases} c, & 0 \le x \le 4, \\ 0, & \text{иначе}. \end{cases}$$Шаг 2. Константу $c$ находим из условия нормировки — полная вероятность равна единице:
$$\int_{-\infty}^{+\infty} p(x)\,dx = \int_0^4 c\,dx = c \cdot 4 = 1.$$Шаг 3. Отсюда $c = \dfrac14 = 0{,}25$.
Проверим наш ответ: вероятность прождать от $1$ до $3$ минут равна $\int_1^3 0{,}25\,dx = 0{,}25 \cdot 2 = 0{,}5$. Половина отрезка — половина вероятности. Логично ✅
Ответ: $p(x) = 0{,}25$ на $[0; 4]$ и $0$ вне отрезка.
Пример 2 (средний): та же логика на коротком отрезке — и плотность больше единицы
Датчик выдаёт ошибку измерения $X$, равномерно распределённую на отрезке $[0; 0{,}1]$ (в вольтах). Найди плотность.
Решение:
Шаг 1. Плотность постоянна на отрезке: $p(x) = c$ при $0 \le x \le 0{,}1$.
Шаг 2. Нормировка:
$$\int_0^{0{,}1} c\,dx = c \cdot 0{,}1 = 1.$$Шаг 3. Отсюда
$$c = \frac{1}{0{,}1} = 10.$$Плотность равна десяти. В десять раз больше единицы. И это абсолютно корректный результат — никакой ошибки в вычислениях нет.
Почему так вышло: вся вероятностная масса (единица) «утрамбована» в отрезок длины $0{,}1$. Концентрация массы на единицу длины — десять. Ровно как если килограмм металла сплющить в тонкую пластинку: плотность на единицу площади подскочит, хотя масса не изменилась.
Проверим наш ответ: посчитаем вероятность попасть в промежуток $[0{,}02;\ 0{,}05]$:
$$P(0{,}02 \le X \le 0{,}05) = \int_{0{,}02}^{0{,}05} 10\,dx = 10 \cdot 0{,}03 = 0{,}3.$$Вероятность $0{,}3$ — честное число из отрезка $[0;1]$ ✅ Плотность вылезла за единицу, вероятность — нет. Именно так это и работает.
Ответ: $p(x) = 10$ на $[0; 0{,}1]$, $0$ вне отрезка.
Пример 3 (сложный): плотность может уходить в бесконечность
Проверь, является ли плотностью функция
$$p(x) = \begin{cases} \dfrac{1}{2\sqrt{x}}, & 0 < x \le 1, \\[2mm] 0, & \text{иначе}. \end{cases}$$Решение:
Шаг 1. Проверим неотрицательность. При $0 < x \le 1$ имеем $\sqrt{x} > 0$, значит $p(x) > 0$ ✅
Шаг 2. Проверим нормировку. Интеграл несобственный (в нуле подынтегральная функция не ограничена), считаем как предел:
$$\int_0^1 \frac{dx}{2\sqrt{x}} = \frac12 \int_0^1 x^{-1/2}\,dx = \frac12 \cdot \left[ 2\sqrt{x} \right]_0^1 = \left[\sqrt{x}\right]_0^1 = 1 - 0 = 1.$$Шаг 3. Оба условия выполнены — да, это плотность.
Шаг 4. Но посмотри, что происходит около нуля: при $x \to 0^+$ значение $p(x) = \dfrac{1}{2\sqrt{x}} \to +\infty$. Например, $p(0{,}0001) = \dfrac{1}{2 \cdot 0{,}01} = 50$, а $p(10^{-8}) = \dfrac{1}{2 \cdot 10^{-4}} = 5000$.
Плотность не ограничена сверху вообще, а распределение при этом абсолютно нормальное. Если бы плотность была вероятностью, такое было бы немыслимо. Но это не вероятность — это «концентрация», и она может расти неограниченно, лишь бы площадь под графиком оставалась конечной и равной единице.
Проверим наш ответ: посчитаем какую-нибудь вероятность, например $P(X \le 0{,}25)$:
$$\int_0^{0{,}25} \frac{dx}{2\sqrt{x}} = \left[\sqrt{x}\right]_0^{0{,}25} = 0{,}5.$$Ровно половина. Отлично — вероятность в пределах нормы, хотя плотность на этом же участке доходит до бесконечности ✅
Ответ: да, это плотность; она не ограничена сверху, $p(x) \to +\infty$ при $x \to 0^+$.
Забегая вперёд: эта плотность возникает не искусственно. Если $U$ равномерна на $[0;1]$, то $X = U^2$ имеет ровно такую плотность — мы получим её в разделе про замену переменной.
Почему это важно
Переход от «вероятности значения» к «плотности» — это не техническая формальность, а смена всей оптики. В дискретном мире ты работаешь с таблицей: перечислил значения, приписал вероятности, сложил нужные. В непрерывном мире таблицы нет и быть не может — вместо неё функция, и любой ответ добывается интегрированием.
В машинном обучении почти все интересные величины непрерывны: веса нейросети, значения признаков, эмбеддинги, логиты, ошибки предсказания, времена отклика. Ни для одной из них нельзя спросить «какова вероятность, что вес равен $0{,}3172$» — ответ всегда ноль. Осмысленные вопросы формулируются либо через промежутки («какова вероятность, что вес по модулю больше $2$»), либо через плотность («насколько плотность в этой точке выше, чем в той»). Второе — как раз то, на чём строятся правдоподобие, детекция аномалий и генеративные модели.
🚨 Плотность — это НЕ вероятность
Это центральный раздел урока. Если ты запомнишь из всего текста одну вещь — пусть это будет он.
Интуиция: три способа почувствовать разницу
Способ первый — размерность. Пусть $X$ — время отклика сервера в секундах. Тогда вероятность $P(0{,}1 \le X \le 0{,}2)$ — безразмерное число (доля случаев). А что тогда $p(x)$? Из формулы $P = \int p(x)\,dx$ видно: $dx$ измеряется в секундах, произведение $p(x)\,dx$ безразмерно, значит, сама $p(x)$ имеет размерность «единица на секунду», то есть $\text{с}^{-1}$. Это скорость накопления вероятности, а не вероятность.
И тут же вылезает следствие: значение плотности зависит от единиц измерения. Если ты пересчитаешь то же самое время в миллисекунды, все значения плотности упадут в $1000$ раз. Была плотность $37$ на секунду — станет $0{,}037$ на миллисекунду. Распределение то же самое, вероятности те же самые, а число «плотность» изменилось в тысячу раз. Может ли настоящая вероятность зависеть от того, в чём ты меряешь ось? Разумеется, нет. Значит, плотность — не вероятность. Это железный аргумент, который стоит запомнить.
Способ второй — физическая аналогия. Плотность воды $1000$ кг/м³. Число большое — и что? Никто не пугается. Плотность золота $19\,300$ кг/м³. Тоже нормально. Плотность вероятности устроена так же: это масса на единицу «объёма», и её значение может быть любым положительным числом. Ограничена не плотность, а полная масса: $\int p = 1$.
Способ третий — «сплющивание». Возьми любое распределение и «сожми» его в $k$ раз по оси $x$. Вероятностная масса никуда не денется — она останется единицей, — но теперь она умещается в $k$ раз более узкий диапазон. Значит, плотность вырастет ровно в $k$ раз. Сжимай сколько хочешь — плотность взлетит сколь угодно высоко. Никакого запрета нет.
Ключевой факт: Плотность $p(x)$ — не вероятность и не обязана быть $\le 1$. Единственные требования: $p(x) \ge 0$ и $\int_{-\infty}^{+\infty} p(x)\,dx = 1$. Вероятностью является только интеграл плотности по промежутку, а он автоматически лежит в $[0; 1]$.
Разбираем главный пример: равномерное на отрезке длины 0,1
Мы уже посчитали его в примере 2, но давай развернём эту историю целиком, потому что она — эталонный контрпример к «плотность $\le 1$».
Возьмём семейство равномерных распределений на отрезке $[0; L]$. Плотность постоянна и равна $c$, из нормировки $c \cdot L = 1$, откуда
$$p(x) = \frac{1}{L}, \quad 0 \le x \le L.$$Посмотри, что происходит при разных $L$:
| Длина отрезка $L$ | Плотность $p = 1/L$ | $P$ попасть в весь отрезок |
|---|---|---|
| $10$ | $0{,}1$ | $0{,}1 \cdot 10 = 1$ |
| $2$ | $0{,}5$ | $0{,}5 \cdot 2 = 1$ |
| $1$ | $1$ | $1 \cdot 1 = 1$ |
| $0{,}1$ | $\mathbf{10}$ | $10 \cdot 0{,}1 = 1$ |
| $0{,}01$ | $\mathbf{100}$ | $100 \cdot 0{,}01 = 1$ |
| $10^{-6}$ | $\mathbf{10^6}$ | $10^6 \cdot 10^{-6} = 1$ |
Третья колонка везде равна единице — вероятность всегда честная. Вторая колонка растёт без границ. Отрезок длины $0{,}1$ даёт плотность $10$; отрезок длины микрон даёт плотность миллион.
Понимаешь механику? Чем уже диапазон, тем выше плотность — иначе площадь под графиком не наберёт единицу. Плотность и ширина — это как высота и основание прямоугольника фиксированной площади: сожми основание, и высота обязана вырасти.
Практический перевод: если твоя случайная величина — это, скажем, доля кликов, лежащая между $0{,}03$ и $0{,}04$, то её плотность неизбежно будет порядка сотни. И если библиотека выдала тебе pdf = 87.3, это не баг, а прямое следствие того, что величина живёт в узком диапазоне.
Тот же эффект в нормальном распределении
Плотность нормального распределения $N(\mu, \sigma^2)$:
$$p(x) = \frac{1}{\sigma\sqrt{2\pi}}\, e^{-\frac{(x-\mu)^2}{2\sigma^2}}.$$Максимум достигается в точке $x = \mu$, где экспонента равна единице:
$$p(\mu) = \frac{1}{\sigma\sqrt{2\pi}} \approx \frac{0{,}3989}{\sigma}.$$Смотри, что бывает при разных $\sigma$:
| $\sigma$ | $p(\mu) = 0{,}3989/\sigma$ | Больше $1$? |
|---|---|---|
| $2$ | $0{,}199$ | нет |
| $1$ | $0{,}399$ | нет |
| $0{,}5$ | $0{,}798$ | нет |
| $0{,}3989$ | $1{,}000$ | ровно $1$ |
| $0{,}2$ | $1{,}995$ | да |
| $0{,}05$ | $7{,}98$ | да |
| $0{,}01$ | $39{,}89$ | да |
| $0{,}001$ | $398{,}9$ | да |
Граница проходит по $\sigma = \dfrac{1}{\sqrt{2\pi}} \approx 0{,}3989$. Если стандартное отклонение меньше этого — плотность в вершине больше единицы. И это происходит постоянно: измерь что-нибудь точным прибором, и разброс окажется в сотых долях, а плотность — в десятках.
Классический сюжет из ML: ты обучаешь вероятностную регрессию (модель предсказывает не только среднее, но и разброс). Модель хорошо выучила данные, $\sigma$ упала до $0{,}01$ — и логарифм плотности стал положительным: $\ln 39{,}89 \approx 3{,}686$. Лосс, равный $-\ln p$, ушёл в минус. Многие видят отрицательный лосс и решают, что где-то ошибка знака. Ошибки нет: отрицательный negative log-likelihood для непрерывных величин абсолютно законен, потому что плотность больше единицы, а логарифм числа больше единицы положителен. Более того, у моделей с непрерывным выходом NLL обязан уходить в минус, если модель хорошая и данные сосредоточены плотно.
А чему тогда равна «вероятность точки»?
Строго — нулю. Но у плотности всё-таки есть смысл, привязанный к точке, и он такой:
$$P\!\left(x - \tfrac{\Delta}{2} \le X \le x + \tfrac{\Delta}{2}\right) \approx p(x)\cdot\Delta \quad \text{при малом } \Delta.$$То есть плотность — это вероятность на единицу длины: умножь её на ширину окошка, и получишь вероятность попасть в это окошко. Отсюда мгновенно понятно, почему $p(x)$ может быть больше единицы: множитель $\Delta$ маленький, и произведение всё равно не превысит единицу. При $p(x) = 10$ и $\Delta = 0{,}01$ получаем вероятность $0{,}1$ — всё в порядке.
Проверка здравого смысла на пальцах. Если тебе выдали значение плотности $p = 250$ и ты хочешь понять, «много это или мало», спроси себя: какова характерная ширина диапазона величины? Если величина живёт в диапазоне ширины $\sim 0{,}01$, то $250$ — обычное дело ($250 \cdot 0{,}01 = 2{,}5$, то есть в окне такой ширины сидит существенная доля массы). Если величина размазана по диапазону ширины $1000$, то плотность $250$ означала бы, что почти вся масса сидит в окне шириной в четыре тысячных — вот это уже подозрительно и заслуживает проверки.
Примеры с разбором
Пример 4 (простой): плотность в вольтах и милливольтах
Шум усилителя равномерно распределён на $[0; 0{,}002]$ вольта. Найди плотность в двух системах единиц: в $\text{В}^{-1}$ и в $\text{мВ}^{-1}$.
Решение:
Шаг 1. В вольтах длина отрезка $L = 0{,}002$, значит
$$p_{\text{В}} = \frac{1}{0{,}002} = 500 \ \text{В}^{-1}.$$Шаг 2. В милливольтах тот же отрезок — это $[0; 2]$ мВ, длина $L = 2$:
$$p_{\text{мВ}} = \frac12 = 0{,}5 \ \text{мВ}^{-1}.$$Шаг 3. Сравним вероятности. Вероятность попасть в первую половину диапазона:
- в вольтах: $500 \cdot 0{,}001 = 0{,}5$;
- в милливольтах: $0{,}5 \cdot 1 = 0{,}5$.
Одинаково ✅ Вероятность не зависит от единиц, а плотность отличается в $1000$ раз.
Ответ: $500\ \text{В}^{-1}$ и $0{,}5\ \text{мВ}^{-1}$; вероятности совпадают.
Пример 5 (средний): где плотность пересекает единицу
Пусть $X \sim N(0; \sigma^2)$. При каких $\sigma$ максимальное значение плотности превышает $1$? А при каких значение $p(1)$ превышает $1$?
Решение:
Шаг 1. Максимум плотности в нуле: $p(0) = \dfrac{1}{\sigma\sqrt{2\pi}}$.
Шаг 2. Условие $p(0) > 1$:
$$\frac{1}{\sigma\sqrt{2\pi}} > 1 \iff \sigma < \frac{1}{\sqrt{2\pi}} \approx 0{,}39894.$$Шаг 3. Теперь про точку $x = 1$. Здесь
$$p(1) = \frac{1}{\sigma\sqrt{2\pi}}\, e^{-\frac{1}{2\sigma^2}}.$$При маленьком $\sigma$ экспонента убивает всё: например, при $\sigma = 0{,}1$ получаем $e^{-50} \approx 2\cdot 10^{-22}$, и $p(1) \approx 8\cdot 10^{-22}$ — практически ноль. А при $\sigma = 0{,}39894$ имеем $p(1) = 1 \cdot e^{-3{,}1416} \approx 0{,}0432$.
Шаг 4. Численно максимум $p(1)$ по $\sigma$ достигается при $\sigma = 1$ (это можно увидеть, продифференцировав $\ln p(1) = -\ln\sigma - \tfrac12\ln 2\pi - \tfrac{1}{2\sigma^2}$ по $\sigma$: производная $-\tfrac1\sigma + \tfrac{1}{\sigma^3} = 0$ даёт $\sigma = 1$), и там $p(1) = 0{,}3989 \cdot e^{-0{,}5} \approx 0{,}242 < 1$.
Вывод: в точке $x = 1$ плотность никогда не превысит единицу — сколько ни крути $\sigma$. А в точке максимума — легко. Значение плотности зависит и от параметра, и от точки; универсального «потолка» нет, но и универсального «всегда больше единицы» тоже нет.
Ответ: $p(0) > 1$ при $\sigma < 1/\sqrt{2\pi} \approx 0{,}399$; $p(1)$ не превышает $1$ ни при каком $\sigma$ (максимум $\approx 0{,}242$ при $\sigma = 1$).
Пример 6 (сложный): смесь распределений и всплеск плотности
Время отклика кэша $X$ (в секундах) устроено так: с вероятностью $0{,}9$ запрос попадает в кэш и обслуживается за время, равномерное на $[0; 0{,}01]$; с вероятностью $0{,}1$ идёт в базу и обслуживается за время, равномерное на $[0; 1]$. Найди плотность и посчитай $P(X \le 0{,}01)$.
Решение:
Шаг 1. Плотность смеси — взвешенная сумма плотностей компонент с весами, равными вероятностям компонент:
$$p(x) = 0{,}9 \cdot p_1(x) + 0{,}1 \cdot p_2(x),$$где $p_1(x) = 100$ на $[0; 0{,}01]$ (потому что $1/0{,}01 = 100$), а $p_2(x) = 1$ на $[0; 1]$.
Шаг 2. Соберём по кускам:
$$p(x) = \begin{cases} 0{,}9 \cdot 100 + 0{,}1 \cdot 1 = 90{,}1, & 0 \le x \le 0{,}01, \\ 0{,}1 \cdot 1 = 0{,}1, & 0{,}01 < x \le 1, \\ 0, & \text{иначе}. \end{cases}$$Шаг 3. Проверим нормировку:
$$90{,}1 \cdot 0{,}01 + 0{,}1 \cdot 0{,}99 = 0{,}901 + 0{,}099 = 1 \ ✅$$Шаг 4. Считаем вероятность:
$$P(X \le 0{,}01) = \int_0^{0{,}01} 90{,}1\,dx = 90{,}1 \cdot 0{,}01 = 0{,}901.$$Интерпретация: плотность в области кэш-попаданий — девяносто с лишним. Это в $901$ раз больше, чем на «хвосте» базы. График такой плотности выглядит как узкий небоскрёб слева и длинная тонкая полоса справа. Именно так выглядят реальные распределения латентности в продакшене, и именно поэтому по гистограмме латентности почти невозможно ничего разглядеть без логарифмической шкалы.
Ответ: $p(x) = 90{,}1$ на $[0; 0{,}01]$, $0{,}1$ на $(0{,}01; 1]$, $0$ вне; $P(X \le 0{,}01) = 0{,}901$.
Почему это важно
Разделение «плотность vs вероятность» — это не педантизм, это защита от целого класса реальных багов.
Первое: не отбрасывай значения плотности, которые больше единицы. В коде детектора аномалий встречается конструкция вида if pdf > 1: raise ValueError — она гарантированно сломается на любых данных с малым разбросом. Второе: не сравнивай плотности величин, измеренных в разных единицах — сравнение бессмысленно, пока ты не привёл всё к одной шкале. Третье: не пугайся отрицательного NLL — для непрерывных моделей это норма и часто признак, что модель работает. Четвёртое: не интерпретируй значение плотности как «шанс» в отчёте для заказчика: фраза «вероятность этого значения 37» звучит как бред, потому что это и есть бред. Правильная формулировка — «плотность в этой точке в $37$ раз выше, чем средняя по данным» или «вероятность попасть в окно $\pm 0{,}005$ вокруг этого значения составляет $0{,}37$».
Связь плотности и функции распределения
Интуиция
В уроке 235 мы построили функцию распределения $F(x) = P(X < x)$ — «сколько вероятностной массы накопилось левее точки $x$». Плотность и функция распределения — это две стороны одной монеты, связанные ровно так же, как скорость и пройденный путь.
Представь, что $F(x)$ — это показания одометра, а $x$ — время. Тогда плотность $p(x)$ — это спидометр: мгновенная скорость накопления вероятности. Быстро растёт $F$ — значит, здесь вероятностная масса «валит валом», плотность высокая. $F$ стоит на месте — значит, в этой области величина не встречается, плотность нулевая. И обратно: чтобы узнать пройденный путь, надо проинтегрировать скорость — чтобы узнать $F$, надо проинтегрировать плотность.
Это и есть основная теорема анализа, приложенная к вероятности.
Теорема (связь $p$ и $F$): Если $X$ — непрерывная случайная величина с плотностью $p(x)$, то
$$F(x) = \int_{-\infty}^{x} p(t)\,dt,$$и в каждой точке, где $p$ непрерывна,
$$p(x) = F'(x).$$
Обрати внимание на переменную интегрирования: внутри интеграла стоит $t$, а не $x$, потому что $x$ занят — он верхний предел. Это стандартное соглашение, и путать эти две роли одной буквы нельзя.
Две формулы дают два рабочих направления:
- Есть $F$, нужна $p$ — дифференцируй. Это чаще всего быстрее.
- Есть $p$, нужна $F$ — интегрируй от минус бесконечности (на практике — от левого края носителя).
Ещё одно важное следствие: раз $F$ — интеграл с переменным верхним пределом от неотрицательной функции, то $F$ непрерывна и не убывает. Никаких скачков, в отличие от дискретного случая, где $F$ — лестница. Скачок у $F$ означал бы, что в точке сидит положительная вероятность, а у непрерывной величины такого не бывает.
И ещё: значение $p$ в отдельной точке можно менять как угодно (например, в точках стыка кусков) — интеграл от этого не изменится, а значит, не изменятся и вероятности. Поэтому не бери в голову, писать ли $p(x) = 1/4$ при $x \in [0;4]$ или при $x \in (0;4)$: обе записи задают одно и то же распределение. Это ещё одно доказательство, что плотность — не вероятность: настоящую вероятность нельзя переопределить в точке безнаказанно.
Формула для вероятности через $F$
Из связи мгновенно вытекает главная рабочая формула:
$$P(a \le X \le b) = \int_a^b p(x)\,dx = F(b) - F(a).$$То есть у тебя два эквивалентных пути посчитать вероятность промежутка: взять определённый интеграл от плотности или взять разность значений $F$ на концах. Второй способ обычно удобнее, если $F$ уже известна (например, для нормального распределения через таблицу или scipy.stats.norm.cdf).
Примеры с разбором
Пример 7 (простой): от $F$ к $p$
Дана функция распределения
$$F(x) = \begin{cases} 0, & x < 0, \\ \dfrac{x^2}{9}, & 0 \le x \le 3, \\ 1, & x > 3. \end{cases}$$Найди плотность.
Решение:
Шаг 1. Дифференцируем на каждом куске.
При $x < 0$: $F$ константа, значит $p(x) = 0$.
Шаг 2. При $0 < x < 3$:
$$p(x) = \left(\frac{x^2}{9}\right)' = \frac{2x}{9}.$$Шаг 3. При $x > 3$: $F \equiv 1$, значит $p(x) = 0$.
Шаг 4. Собираем:
$$p(x) = \begin{cases} \dfrac{2x}{9}, & 0 \le x \le 3, \\ 0, & \text{иначе}. \end{cases}$$Проверим наш ответ: нормировка
$$\int_0^3 \frac{2x}{9}\,dx = \frac{2}{9}\cdot\frac{x^2}{2}\Big|_0^3 = \frac{9}{9} = 1 \ ✅$$Ответ: $p(x) = \dfrac{2x}{9}$ на $[0;3]$, $0$ вне.
Пример 8 (средний): от $p$ к $F$ для показательного распределения
Время до отказа диска (в годах) имеет плотность $p(x) = 0{,}2\,e^{-0{,}2x}$ при $x \ge 0$ и $0$ при $x < 0$. Найди $F(x)$ и вероятность, что диск проживёт больше $5$ лет.
Решение:
Шаг 1. При $x < 0$ интегрируем нулевую функцию: $F(x) = 0$.
Шаг 2. При $x \ge 0$:
$$F(x) = \int_{-\infty}^{x} p(t)\,dt = \int_0^x 0{,}2\,e^{-0{,}2t}\,dt.$$Шаг 3. Первообразная функции $0{,}2 e^{-0{,}2t}$ — это $-e^{-0{,}2t}$ (проверим дифференцированием: $\left(-e^{-0{,}2t}\right)' = 0{,}2 e^{-0{,}2t}$ ✅). Тогда
$$F(x) = \left[-e^{-0{,}2t}\right]_0^x = -e^{-0{,}2x} + 1 = 1 - e^{-0{,}2x}.$$Шаг 4. Проверим свойства: $F(0) = 1 - 1 = 0$ ✅, $F(+\infty) = 1 - 0 = 1$ ✅, $F$ возрастает ✅
Шаг 5. Вероятность прожить больше $5$ лет:
$$P(X > 5) = 1 - F(5) = 1 - \left(1 - e^{-1}\right) = e^{-1} \approx 0{,}3679.$$Ответ: $F(x) = 1 - e^{-0{,}2x}$ при $x \ge 0$; $P(X > 5) = e^{-1} \approx 0{,}368$.
Пример 9 (сложный): кусочная плотность и склейка $F$
Найди $F(x)$ для «треугольной» плотности
$$p(x) = \begin{cases} x, & 0 \le x \le 1, \\ 2 - x, & 1 < x \le 2, \\ 0, & \text{иначе}. \end{cases}$$Решение:
Шаг 1. Сначала убедимся, что это плотность. Неотрицательность очевидна на обоих кусках. Нормировка:
$$\int_0^1 x\,dx + \int_1^2 (2-x)\,dx = \frac12 + \left[2x - \frac{x^2}{2}\right]_1^2 = \frac12 + \left(4 - 2\right) - \left(2 - \frac12\right) = \frac12 + 2 - 1{,}5 = 1 \ ✅$$Шаг 2. При $x < 0$: $F(x) = 0$.
Шаг 3. При $0 \le x \le 1$:
$$F(x) = \int_0^x t\,dt = \frac{x^2}{2}.$$В частности, $F(1) = 0{,}5$ — на первом куске накопилась ровно половина массы. Это ожидаемо: плотность симметрична относительно $x = 1$.
Шаг 4. При $1 < x \le 2$ надо добавить накопленное ранее:
$$F(x) = F(1) + \int_1^x (2 - t)\,dt = \frac12 + \left[2t - \frac{t^2}{2}\right]_1^x = \frac12 + \left(2x - \frac{x^2}{2}\right) - \frac32 = 2x - \frac{x^2}{2} - 1.$$Шаг 5. Проверим стыковку: при $x = 1$ вторая формула даёт $2 - 0{,}5 - 1 = 0{,}5$ ✅ — совпало с $F(1)$ из первой формулы. При $x = 2$: $4 - 2 - 1 = 1$ ✅
Шаг 6. Итого:
$$F(x) = \begin{cases} 0, & x < 0, \\ \dfrac{x^2}{2}, & 0 \le x \le 1, \\ 2x - \dfrac{x^2}{2} - 1, & 1 < x \le 2, \\ 1, & x > 2. \end{cases}$$Проверим наш ответ: посчитаем $P(0{,}5 \le X \le 1{,}5)$ двумя способами.
Через $F$: $F(1{,}5) - F(0{,}5) = \left(3 - 1{,}125 - 1\right) - 0{,}125 = 0{,}875 - 0{,}125 = 0{,}75$.
Через интеграл: $\int_{0{,}5}^{1} x\,dx + \int_1^{1{,}5}(2-x)\,dx = \left(0{,}5 - 0{,}125\right) + \left(3 - 1{,}125 - 2 + 0{,}5\right) = 0{,}375 + 0{,}375 = 0{,}75$ ✅
Совпало.
Ответ: формула выше; $P(0{,}5 \le X \le 1{,}5) = 0{,}75$.
Почему это важно
Связка $p \leftrightarrow F$ — это твой основной вычислительный мост. В библиотеках она реализована буквально: scipy.stats.norm.pdf и scipy.stats.norm.cdf — это $p$ и $F$ одного и того же распределения. Когда тебе нужна вероятность, ты почти никогда не интегрируешь численно — ты берёшь разность двух cdf. Когда тебе нужно правдоподобие для обучения, ты берёшь pdf (точнее, logpdf). Когда тебе нужно сгенерировать выборку — ты берёшь обратную функцию к $F$ (метод обратного преобразования, ppf), и это тоже прямое следствие связи.
Отдельно про численную устойчивость: разность $F(b) - F(a)$ при близких $a$ и $b$ страдает от катастрофической потери точности (вычитание почти равных чисел). Если тебе нужна вероятность узкого окна — надёжнее посчитать $p(x)\cdot(b-a)$ или воспользоваться специальными функциями вроде sf (survival function, $1 - F$), которые считают хвост напрямую.
Свойства плотности и условие нормировки
Интуиция
У плотности всего два «паспортных» свойства, и оба переводятся на человеческий язык одной фразой: «вероятностной массы не бывает отрицательной, и всего её ровно единица».
Первое свойство — неотрицательность. $p(x) \ge 0$ для всех $x$. Это следствие того, что $F$ не убывает: производная неубывающей функции неотрицательна. Содержательно: невозможно, чтобы попадание в какой-то промежуток имело отрицательную вероятность.
Второе — нормировка. $\int_{-\infty}^{+\infty} p(x)\,dx = 1$. Величина обязана принять какое-то значение, и суммарная вероятность всех возможных исходов равна единице. Геометрически: площадь под графиком плотности равна единице. Это единственное «глобальное» ограничение — и именно из-за того, что оно наложено на площадь, а не на высоту, плотность и может задирать голову выше единицы.
Свойства плотности:
- $p(x) \ge 0$ при всех $x$ (плотность неотрицательна).
- $\displaystyle\int_{-\infty}^{+\infty} p(x)\,dx = 1$ (условие нормировки).
- $\displaystyle P(a \le X \le b) = \int_a^b p(x)\,dx$ (вероятность промежутка — площадь под графиком).
- $\displaystyle F(x) = \int_{-\infty}^{x} p(t)\,dt$ и $p(x) = F'(x)$ в точках непрерывности $p$.
- $P(X = a) = 0$ для любой точки $a$; строгие и нестрогие неравенства эквивалентны.
- $p(x)$ не ограничена сверху: значения $> 1$ и даже $\to +\infty$ допустимы.
И обратная теорема, которая нам постоянно нужна на практике: любая функция, удовлетворяющая свойствам 1 и 2, является плотностью некоторой случайной величины. Это очень мощный факт — он означает, что для проверки «плотность ли это» достаточно двух пунктов, а для конструирования новой плотности достаточно взять любую неотрицательную функцию с конечным интегралом и поделить её на этот интеграл.
Нахождение нормировочной константы
Отсюда вырастает главный технический навык раздела. Формулировка задачи всегда одинаковая: дана функция вида $p(x) = C\cdot f(x)$, где $f$ известна, а $C$ — неизвестная константа. Найти $C$.
Алгоритм:
- Определи носитель — область, где $p$ ненулевая (обычно она задана в условии).
- Вычисли интеграл $I = \int f(x)\,dx$ по носителю.
- Из условия $C \cdot I = 1$ получи $C = \dfrac{1}{I}$.
- Проверь, что $C > 0$ и что $f(x) \ge 0$ на носителе — иначе плотности не существует.
Интуитивно это «деление на общий вес»: ты берёшь любую неотрицательную функцию, считаешь её полную площадь и масштабируешь так, чтобы площадь стала единичной. В машинном обучении эта операция называется нормализацией, а знаменатель $I$ — нормировочной константой или partition function (статистическая сумма). В байесовских моделях это тот самый «неберущийся знаменатель» формулы Байеса $p(\theta \mid D) = \dfrac{p(D\mid\theta)p(\theta)}{\int p(D\mid\theta)p(\theta)\,d\theta}$. Вся сложность байесовского вывода — ровно в том, что этот интеграл в реальных моделях не берётся аналитически, и приходится звать MCMC или вариационный вывод.
Примеры с разбором
Пример 10 (простой): степенная плотность
Найди $C$, если $p(x) = C x^2$ при $0 \le x \le 1$ и $0$ вне.
Решение:
Шаг 1. Носитель — отрезок $[0;1]$. Функция $x^2 \ge 0$ там ✅
Шаг 2. Интеграл:
$$\int_0^1 x^2\,dx = \frac{x^3}{3}\bigg|_0^1 = \frac13.$$Шаг 3. Из $C\cdot\frac13 = 1$ получаем $C = 3$.
Шаг 4. Значит, $p(x) = 3x^2$ на $[0;1]$. Заметь: $p(1) = 3 > 1$ — снова «запрещённое» значение, которое совершенно законно.
Проверим наш ответ: $\int_0^1 3x^2\,dx = x^3\big|_0^1 = 1$ ✅
Кстати, $F(x) = x^3$ на $[0;1]$ — красивая функция распределения.
Ответ: $C = 3$.
Пример 11 (средний): распределение Коши
Найди $C$, если $p(x) = \dfrac{C}{1 + x^2}$ на всей числовой прямой.
Решение:
Шаг 1. Функция положительна везде ✅ Носитель — вся прямая.
Шаг 2. Считаем несобственный интеграл. Первообразная от $\dfrac{1}{1+x^2}$ — это $\operatorname{arctg} x$:
$$\int_{-\infty}^{+\infty} \frac{dx}{1+x^2} = \lim_{b\to+\infty}\operatorname{arctg} b - \lim_{a\to-\infty}\operatorname{arctg} a = \frac{\pi}{2} - \left(-\frac{\pi}{2}\right) = \pi.$$Шаг 3. Из $C\pi = 1$ получаем $C = \dfrac{1}{\pi}$.
Шаг 4. Итог — плотность распределения Коши:
$$p(x) = \frac{1}{\pi(1+x^2)}.$$Проверим наш ответ: максимум в нуле, $p(0) = 1/\pi \approx 0{,}318 < 1$; функция чётная, значит $P(X > 0) = 0{,}5$. Посчитаем: $\int_0^{\infty}\frac{dx}{\pi(1+x^2)} = \frac{1}{\pi}\cdot\frac{\pi}{2} = 0{,}5$ ✅
Забавная деталь: у распределения Коши очень тяжёлые хвосты — настолько, что у него не существует математического ожидания (интеграл $\int x\,p(x)\,dx$ расходится). Мы вернёмся к этому в уроке 237. В ML это распределение всплывает как «робастная» альтернатива нормальному в лоссах и как ядро в t-SNE.
Ответ: $C = \dfrac{1}{\pi}$.
Пример 12 (сложный): гамма-подобная плотность
Найди $C$, если $p(x) = C x^2 e^{-x}$ при $x \ge 0$ и $0$ при $x < 0$. Затем найди точку максимума плотности.
Решение:
Шаг 1. Функция $x^2 e^{-x}$ неотрицательна при $x \ge 0$ ✅
Шаг 2. Считаем $I = \int_0^{\infty} x^2 e^{-x}\,dx$ двойным интегрированием по частям.
Первый заход: $u = x^2$, $dv = e^{-x}dx$, тогда $du = 2x\,dx$, $v = -e^{-x}$:
$$I = \left[-x^2 e^{-x}\right]_0^{\infty} + 2\int_0^{\infty} x e^{-x}\,dx = 0 + 2\int_0^{\infty} x e^{-x}\,dx.$$(Первое слагаемое обнуляется: при $x\to\infty$ экспонента давит многочлен, при $x = 0$ множитель $x^2$ равен нулю.)
Шаг 3. Второй заход: $u = x$, $dv = e^{-x}dx$:
$$\int_0^{\infty} x e^{-x}\,dx = \left[-x e^{-x}\right]_0^{\infty} + \int_0^{\infty} e^{-x}\,dx = 0 + \left[-e^{-x}\right]_0^{\infty} = 1.$$Шаг 4. Значит, $I = 2 \cdot 1 = 2$, и $C = \dfrac12$.
Это частный случай общей формулы $\int_0^{\infty} x^{n} e^{-x}\,dx = n!$ (гамма-функция в целых точках): при $n = 2$ получаем $2! = 2$ ✅
Шаг 5. Ищем максимум плотности $p(x) = \tfrac12 x^2 e^{-x}$. Дифференцируем:
$$p'(x) = \frac12\left(2x e^{-x} - x^2 e^{-x}\right) = \frac12 x e^{-x}(2 - x).$$Производная обращается в ноль при $x = 0$ и $x = 2$; на $(0;2)$ она положительна, на $(2;\infty)$ отрицательна — значит, $x = 2$ точка максимума.
Шаг 6. Значение максимума:
$$p(2) = \frac12 \cdot 4 \cdot e^{-2} = 2e^{-2} \approx 2 \cdot 0{,}1353 = 0{,}2707.$$Ответ: $C = \dfrac12$; максимум плотности в точке $x = 2$, значение $\approx 0{,}271$.
Почему это важно
Нормировочная константа — узкое место всей вероятностной части машинного обучения. В энергетических моделях (Energy-Based Models, RBM) плотность записывается как $p(x) = \dfrac{e^{-E(x)}}{Z}$, где $Z = \int e^{-E(x)}dx$ — и вот это $Z$ в пространстве размерности $10^6$ посчитать невозможно. Отсюда растут все хитрости: contrastive divergence, score matching, noise-contrastive estimation — методы, которые позволяют обучать модель, не считая $Z$.
А normalizing flows — это как раз архитектурный ответ на ту же проблему: они строятся так, чтобы нормировочная константа была известна точно (она равна единице по построению, потому что модель — это обратимое преобразование уже нормированной плотности). Отсюда и название: «нормализующие потоки» — потоки, сохраняющие нормировку. Мы разберём этот механизм в разделе про замену переменной.
Смысл $p(x)\,dx$: вероятность малой окрестности
Интуиция
Физики пишут $p(x)\,dx$ и называют это «вероятностью того, что величина лежит между $x$ и $x + dx$». Математически строго это оформляется так:
$$P(x \le X \le x + \Delta x) = \int_x^{x+\Delta x} p(t)\,dt \approx p(x)\cdot \Delta x \quad \text{при малом } \Delta x.$$Приближение работает, потому что на маленьком отрезке гладкая функция почти постоянна: площадь криволинейной трапеции ≈ площадь прямоугольника с высотой $p(x)$ и основанием $\Delta x$. Точнее, по теореме о среднем найдётся такая точка $\xi \in [x; x+\Delta x]$, что интеграл в точности равен $p(\xi)\Delta x$, а $p(\xi) \to p(x)$ при $\Delta x \to 0$.
Отсюда — самая честная формулировка того, что такое плотность:
$$p(x) = \lim_{\Delta x \to 0} \frac{P(x \le X \le x + \Delta x)}{\Delta x}.$$Читается: «плотность — это предел отношения вероятности попасть в окошко к ширине окошка». То есть вероятность на единицу длины. Всё, что мы говорили в предыдущих разделах, аккуратно упаковано в эту формулу.
Именно из неё видно, откуда берётся размерность $1/[x]$: числитель безразмерный, знаменатель в единицах $x$. И из неё же видно, почему $p(x)$ может быть больше единицы: числитель ограничен единицей, но знаменатель может быть сколь угодно мал, и отношение улетает вверх.
Определение (дифференциал вероятности): Выражение $p(x)\,dx$ называется элементом вероятности. Это вероятность того, что случайная величина попадёт в бесконечно малую окрестность точки $x$ шириной $dx$.
Сравнение плотностей: единственный корректный способ
Если $p(x_1) = 3\,p(x_2)$, это не значит, что «значение $x_1$ в три раза вероятнее» (оба имеют вероятность ноль). Это значит: окошко фиксированной малой ширины вокруг $x_1$ втрое вероятнее такого же окошка вокруг $x_2$:
$$\frac{P(X \in [x_1 - \tfrac{\Delta}{2};\, x_1 + \tfrac{\Delta}{2}])}{P(X \in [x_2 - \tfrac{\Delta}{2};\, x_2 + \tfrac{\Delta}{2}])} \approx \frac{p(x_1)\Delta}{p(x_2)\Delta} = \frac{p(x_1)}{p(x_2)} = 3.$$Заметь, что $\Delta$ сократилось. Вот почему отношение плотностей — величина осмысленная и не зависящая ни от ширины окна, ни от единиц измерения. А отдельно взятое значение плотности — величина, зависящая от единиц, и сама по себе мало что говорит.
Практическое следствие для ML огромное: правдоподобие имеет смысл только в сравнении. «Правдоподобие модели $A$ равно $0{,}003$» — бессмысленная фраза. «Правдоподобие модели $A$ в $12$ раз выше, чем модели $B$, на тех же данных» — осмысленная. Отношение правдоподобий (likelihood ratio) — фундаментальный объект статистики: на нём построены критерий Неймана-Пирсона, тест отношения правдоподобий, байесовский фактор.
Примеры с разбором
Пример 13 (простой): вероятность узкого окна
Для нормального распределения $N(0;1)$ оцени вероятность попасть в окно $[-0{,}01;\ 0{,}01]$.
Решение:
Шаг 1. Плотность в нуле: $p(0) = \dfrac{1}{\sqrt{2\pi}} \approx 0{,}3989$.
Шаг 2. Ширина окна $\Delta = 0{,}02$.
Шаг 3. Оценка:
$$P \approx p(0)\cdot\Delta = 0{,}3989 \cdot 0{,}02 \approx 0{,}00798.$$Проверим наш ответ: точное значение через функцию распределения: $\Phi(0{,}01) - \Phi(-0{,}01) = 2\left(\Phi(0{,}01) - 0{,}5\right)$. Табличное $\Phi(0{,}01) \approx 0{,}50399$, значит точное значение $\approx 0{,}00798$ — совпало до пятого знака ✅ На таком узком окне линейное приближение практически точное.
Ответ: $\approx 0{,}008$.
Пример 14 (средний): отношение плотностей и его смысл
Для $X \sim N(0;1)$ во сколько раз плотность в точке $0$ больше плотности в точке $2$? Проверь этот вывод через вероятности окон ширины $0{,}1$.
Решение:
Шаг 1. Отношение плотностей:
$$\frac{p(0)}{p(2)} = \frac{\frac{1}{\sqrt{2\pi}}e^{0}}{\frac{1}{\sqrt{2\pi}}e^{-2}} = e^{2} \approx 7{,}389.$$Множитель $\frac{1}{\sqrt{2\pi}}$ сократился — при сравнении плотностей одного распределения нормировочная константа не нужна вообще. Это важный практический трюк.
Шаг 2. Теперь проверим через окна. Окно вокруг нуля: $[-0{,}05;\ 0{,}05]$, вероятность $\approx 0{,}3989\cdot 0{,}1 = 0{,}03989$.
Шаг 3. Окно вокруг двойки: $p(2) = 0{,}3989\cdot e^{-2} = 0{,}3989 \cdot 0{,}13534 = 0{,}05399$. Вероятность $\approx 0{,}05399\cdot 0{,}1 = 0{,}005399$.
Шаг 4. Отношение вероятностей:
$$\frac{0{,}03989}{0{,}005399} \approx 7{,}39 \ ✅$$Совпало с отношением плотностей, как и должно быть — ширина окна сократилась.
Ответ: в $e^2 \approx 7{,}39$ раза.
Пример 15 (сложный): почему нельзя говорить «вероятность равна плотности»
Инженер измерил длительность сессии (в часах) и обучил модель, которая для конкретного пользователя выдала плотность $p = 2{,}5$. Он записал в отчёт: «вероятность такой длительности — $250\%$». Найди все ошибки и дай корректные формулировки.
Решение:
Шаг 1. Ошибка первая: плотность названа вероятностью. Вероятность конкретного значения длительности равна нулю — сессия не может длиться ровно $1{,}5$ часа с точностью до бесконечного числа знаков.
Шаг 2. Ошибка вторая: число $2{,}5$ переведено в проценты. Плотность имеет размерность $\text{час}^{-1}$, и умножать её на $100\%$ так же бессмысленно, как говорить «скорость $60$ процентов».
Шаг 3. Что можно сказать корректно.
- Через окно: «вероятность, что сессия длилась от $1{,}45$ до $1{,}55$ часа, равна примерно $2{,}5 \cdot 0{,}1 = 0{,}25$, то есть $25\%$». Здесь ширину окна нужно назвать явно — без неё число не имеет смысла.
- Через сравнение: «плотность в этой точке в $2{,}5 / 0{,}4 \approx 6$ раз выше типичной для этой модели» (если типичная плотность $0{,}4$).
- Через квантиль: «такая длительность попадает в $30$-й процентиль распределения» — самая понятная заказчику формулировка, и она не требует никакой плотности.
Шаг 4. Проверка на смену единиц. Переведём в минуты: та же величина имеет плотность $2{,}5 / 60 \approx 0{,}0417\ \text{мин}^{-1}$. Если бы инженер работал в минутах, он написал бы «$4{,}17\%$» — совсем другой «процент» для того же самого факта. Это окончательно доказывает, что его интерпретация неверна.
Ответ: плотность $2{,}5\ \text{час}^{-1}$ не является вероятностью; корректно — «$P(1{,}45 \le X \le 1{,}55) \approx 0{,}25$» или сравнение плотностей / процентиль.
Почему это важно
Формула $P \approx p(x)\Delta x$ — рабочая лошадка практических оценок. Она позволяет за секунду прикинуть вероятность узкого интервала без всяких таблиц и интегралов. Она объясняет, почему гистограмма с density=True совпадает по высоте с оценкой плотности. Она даёт корректный способ переводить плотность в понятную заказчику величину. И она же — источник интуиции для дискретизации: когда ты превращаешь непрерывную величину в дискретную (binning, квантизация весов нейросети, токенизация числовых признаков), вероятность каждой корзины — это как раз $p(x)\cdot(\text{ширина корзины})$.
Вычисление вероятностей интегрированием
Интуиция
Здесь никакой новой теории — только техника. Правило одно: вероятность = площадь под графиком плотности над нужным множеством. Дальше вся работа сводится к аккуратному разбиению области интегрирования на куски, где плотность задана одной формулой.
Практический чек-лист:
- Нарисуй (хотя бы мысленно) график плотности и отметь носитель — где она ненулевая.
- Пересеки нужное множество с носителем. Всё, что вне носителя, даёт ноль и просто отбрасывается.
- Разбей пересечение на куски по точкам смены формулы.
- Проинтегрируй на каждом куске и сложи.
- Проверь: ответ обязан лежать в $[0;1]$. Если вышло $1{,}3$ или $-0{,}2$ — где-то ошибка, ищи её сразу.
Отдельно: выход за носитель — самая частая ошибка. Если плотность задана на $[0;2]$, а тебя спрашивают $P(X > 1{,}5)$, то интегрировать надо от $1{,}5$ до $2$, а не до бесконечности. Формально до бесконечности можно — там всё равно ноль, — но если ты по инерции подставишь верхний предел в формулу для куска, получишь чушь.
Полезные готовые формулы, которые ты будешь применять постоянно:
$$P(X > a) = 1 - F(a) = \int_a^{+\infty} p(x)\,dx, \qquad P(X < a) = F(a),$$$$P(a \le X \le b) = F(b) - F(a), \qquad P(|X| > a) = P(X < -a) + P(X > a).$$Примеры с разбором
Пример 16 (простой): вероятность на равномерном распределении
$X$ равномерна на $[2; 10]$. Найди $P(X > 7)$ и $P(3 \le X \le 12)$.
Решение:
Шаг 1. Плотность: длина отрезка $10 - 2 = 8$, значит $p(x) = \dfrac18$ на $[2;10]$.
Шаг 2. Первая вероятность:
$$P(X > 7) = \int_7^{10} \frac18\,dx = \frac{10-7}{8} = \frac38 = 0{,}375.$$Верхний предел — $10$, а не $+\infty$: правее десятки плотность нулевая.
Шаг 3. Вторая вероятность. Множество $[3;12]$ пересекается с носителем по $[3;10]$:
$$P(3 \le X \le 12) = \int_3^{10}\frac18\,dx = \frac{7}{8} = 0{,}875.$$Проверим наш ответ: оба числа в $[0;1]$ ✅ И вторая вероятность больше первой — логично, промежуток шире и включает первый ✅
Ответ: $0{,}375$ и $0{,}875$.
Пример 17 (средний): кусочная плотность
Плотность задана как
$$p(x) = \begin{cases} 0{,}5, & 0 \le x < 1, \\ 0{,}25, & 1 \le x \le 3, \\ 0, & \text{иначе}. \end{cases}$$Проверь нормировку и найди $P(0{,}5 \le X \le 2)$ и $P(X \ge 2{,}5)$.
Решение:
Шаг 1. Нормировка:
$$0{,}5\cdot 1 + 0{,}25\cdot 2 = 0{,}5 + 0{,}5 = 1 \ ✅$$Шаг 2. Первая вероятность. Промежуток $[0{,}5;2]$ пересекает оба куска, режем в точке $1$:
$$P = \int_{0{,}5}^{1} 0{,}5\,dx + \int_1^2 0{,}25\,dx = 0{,}5\cdot 0{,}5 + 0{,}25\cdot 1 = 0{,}25 + 0{,}25 = 0{,}5.$$Шаг 3. Вторая вероятность. Промежуток $[2{,}5;+\infty)$ пересекается с носителем по $[2{,}5;3]$:
$$P(X \ge 2{,}5) = \int_{2{,}5}^{3} 0{,}25\,dx = 0{,}25\cdot 0{,}5 = 0{,}125.$$Ответ: $P(0{,}5 \le X \le 2) = 0{,}5$; $P(X \ge 2{,}5) = 0{,}125$.
Пример 18 (сложный): вероятность и условная вероятность
Плотность $p(x) = \dfrac34 x(2-x)$ на $[0;2]$ (эту нормировку мы проверим по ходу), $0$ вне. Найди $P(X > 1{,}5)$ и условную вероятность $P(X > 1{,}5 \mid X > 1)$.
Решение:
Шаг 1. Проверим нормировку:
$$\int_0^2 \frac34 x(2-x)\,dx = \frac34\int_0^2 (2x - x^2)\,dx = \frac34\left[x^2 - \frac{x^3}{3}\right]_0^2 = \frac34\left(4 - \frac83\right) = \frac34\cdot\frac43 = 1 \ ✅$$Шаг 2. Заведём удобную первообразную: $G(x) = \dfrac34\left(x^2 - \dfrac{x^3}{3}\right)$. Это и есть $F(x)$ на $[0;2]$.
Посчитаем значения:
- $G(1) = \frac34\left(1 - \frac13\right) = \frac34\cdot\frac23 = 0{,}5$;
- $G(1{,}5) = \frac34\left(2{,}25 - \frac{3{,}375}{3}\right) = \frac34\left(2{,}25 - 1{,}125\right) = \frac34\cdot 1{,}125 = 0{,}84375$;
- $G(2) = 1$.
Шаг 3. Тогда
$$P(X > 1{,}5) = 1 - F(1{,}5) = 1 - 0{,}84375 = 0{,}15625 = \frac{5}{32}.$$Шаг 4. Условная вероятность по определению из урока 230:
$$P(X > 1{,}5 \mid X > 1) = \frac{P(X > 1{,}5 \ \text{и}\ X > 1)}{P(X > 1)} = \frac{P(X > 1{,}5)}{P(X > 1)}.$$Событие «$X > 1{,}5$» целиком содержится в «$X > 1$», поэтому пересечение — это само «$X > 1{,}5$».
Шаг 5. $P(X > 1) = 1 - G(1) = 1 - 0{,}5 = 0{,}5$ (распределение симметрично относительно $x = 1$, так что половина — ожидаемо).
Шаг 6.
$$P(X > 1{,}5 \mid X > 1) = \frac{0{,}15625}{0{,}5} = 0{,}3125 = \frac{5}{16}.$$Проверим наш ответ: условная вероятность вышла ровно вдвое больше безусловной — потому что мы «выбросили» ровно половину исходов, и оставшаяся масса перенормировалась делением на $0{,}5$ ✅
Ответ: $P(X > 1{,}5) = \dfrac{5}{32} \approx 0{,}156$; $P(X > 1{,}5 \mid X > 1) = \dfrac{5}{16} = 0{,}3125$.
Почему это важно
Условная вероятность через плотность — это, по сути, «обрезать и перенормировать»: берёшь плотность, зануляешь её вне условия и делишь на массу оставшегося. Так устроены усечённые распределения (truncated normal, которая часто используется для инициализации весов нейросетей), так устроен анализ выживаемости (сколько ещё проработает диск, если он уже проработал год), так устроены фильтры в байесовском выводе. И почти всё это — просто аккуратное интегрирование плотности по нужному куску.
Замена переменной: как плотность меняется при $Y = g(X)$
Интуиция
Вот задача, которая кажется простой, но содержит главную ловушку темы. Пусть $X$ равномерна на $[0;1]$, а $Y = 3X$. Какова плотность $Y$?
Наивный ответ: «$Y$ живёт на $[0;3]$, плотность $X$ была $1$, значит и у $Y$ единица». Неверно. Если бы плотность $Y$ была равна $1$ на отрезке длины $3$, то полная вероятность была бы $3$, а не $1$. Правильный ответ: $p_Y(y) = \dfrac13$ на $[0;3]$.
Что произошло? Растяжение оси в три раза размазало ту же вероятностную массу по втрое более длинному отрезку. Массы столько же — плотность втрое ниже. Это и есть суть формулы замены переменной: при преобразовании оси плотность делится на коэффициент растяжения.
Коэффициент растяжения в точке — это модуль производной преобразования. В одномерном случае он называется якобианом (в многомерном — модуль определителя матрицы Якоби, отсюда и название).
Ещё одна аналогия. Представь, что вероятность — это масло, размазанное по резиновой ленте. Ты растягиваешь ленту неравномерно: где-то в два раза, где-то в десять. Масла столько же, но там, где растянул сильно, слой стал тоньше; где сжал — толще. Толщина слоя и есть плотность.
Вывод формулы
Пусть $g$ строго монотонна и дифференцируема, $Y = g(X)$, и $h = g^{-1}$ — обратная функция.
Случай возрастающей $g$. Событие $\{Y \le y\}$ равносильно $\{X \le h(y)\}$, поэтому
$$F_Y(y) = P(Y \le y) = P(X \le h(y)) = F_X(h(y)).$$Дифференцируем по $y$ по правилу цепочки:
$$p_Y(y) = F_X'(h(y))\cdot h'(y) = p_X(h(y))\cdot h'(y).$$Случай убывающей $g$. Теперь $\{Y \le y\}$ равносильно $\{X \ge h(y)\}$, значит $F_Y(y) = 1 - F_X(h(y))$, и после дифференцирования
$$p_Y(y) = -p_X(h(y))\cdot h'(y).$$Здесь $h' < 0$, так что итог опять положителен. Два случая объединяются модулем:
Формула замены переменной (одномерный случай): Если $g$ строго монотонна и дифференцируема, $Y = g(X)$, $h = g^{-1}$, то
$$p_Y(y) = p_X\big(h(y)\big)\cdot \left|h'(y)\right| = \frac{p_X(x)}{\left|g'(x)\right|}\bigg|_{x = h(y)}.$$Множитель $\left|h'(y)\right| = \dfrac{1}{|g'(x)|}$ называется якобианом преобразования.
Вторая форма записи — через $|g'(x)|$ в знаменателе — часто удобнее для интуиции: где преобразование растягивает ось ($|g'| > 1$), плотность падает; где сжимает ($|g'| < 1$) — растёт.
Мнемоника, которую стоит запомнить навсегда: вероятность сохраняется, плотность — нет. Формально это записывается как равенство элементов вероятности:
$$p_Y(y)\,|dy| = p_X(x)\,|dx| \quad \Longrightarrow \quad p_Y(y) = p_X(x)\left|\frac{dx}{dy}\right|.$$Важные частные случаи:
- Линейное преобразование $Y = aX + b$ ($a \ne 0$): $p_Y(y) = \dfrac{1}{|a|}\,p_X\!\left(\dfrac{y - b}{a}\right)$. Отсюда, кстати, сразу видно, как из стандартного нормального получается общее: $\sigma$ в знаменателе плотности $N(\mu,\sigma^2)$ — это ровно якобиан преобразования $X = \sigma Z + \mu$.
- Немонотонная $g$: формулу применяют к каждой монотонной ветви и складывают результаты. Например, для $Y = X^2$ при $X$, принимающей значения обоих знаков, вклад дают $x = \sqrt{y}$ и $x = -\sqrt{y}$.
Примеры с разбором
Пример 19 (простой): линейное преобразование
$X$ равномерна на $[0;1]$, $Y = 4X + 1$. Найди плотность $Y$.
Решение:
Шаг 1. Здесь $g(x) = 4x + 1$, обратная $h(y) = \dfrac{y-1}{4}$, якобиан $h'(y) = \dfrac14$.
Шаг 2. Границы: $x = 0 \Rightarrow y = 1$; $x = 1 \Rightarrow y = 5$. Носитель $Y$ — отрезок $[1;5]$.
Шаг 3. Подставляем в формулу:
$$p_Y(y) = p_X\!\left(\frac{y-1}{4}\right)\cdot\frac14 = 1 \cdot \frac14 = \frac14, \quad 1 \le y \le 5.$$Проверим наш ответ: $\int_1^5 \frac14\,dy = \frac{4}{4} = 1$ ✅ И результат осмысленный: линейное преобразование равномерного распределения даёт снова равномерное.
Ответ: $p_Y(y) = 0{,}25$ на $[1;5]$.
Пример 20 (средний): нелинейное преобразование $Y = X^2$
$X$ равномерна на $[0;1]$, $Y = X^2$. Найди плотность $Y$.
Решение:
Шаг 1. На $[0;1]$ функция $g(x) = x^2$ строго возрастает — монотонность есть, формула применима. Обратная: $h(y) = \sqrt{y}$.
Шаг 2. Якобиан:
$$h'(y) = \frac{d}{dy}\sqrt{y} = \frac{1}{2\sqrt{y}}.$$Шаг 3. Носитель: $x \in [0;1] \Rightarrow y \in [0;1]$.
Шаг 4. Подставляем ($p_X \equiv 1$ на $[0;1]$):
$$p_Y(y) = 1\cdot\frac{1}{2\sqrt{y}} = \frac{1}{2\sqrt{y}}, \quad 0 < y \le 1.$$Это ровно та плотность из примера 3, которая уходила в бесконечность у нуля! Теперь понятно, откуда она берётся: возведение в квадрат сжимает окрестность нуля (там $|g'(x)| = 2x$ близко к нулю), и плотность в этом месте взлетает.
Шаг 5. Проверим нормировку: $\int_0^1 \frac{dy}{2\sqrt y} = \left[\sqrt y\right]_0^1 = 1$ ✅
Шаг 6. Проверим «в лоб» через функцию распределения, без формулы:
$$F_Y(y) = P(X^2 \le y) = P(X \le \sqrt y) = \sqrt y \quad (0 \le y \le 1),$$потому что для равномерной на $[0;1]$ величины $F_X(t) = t$. Дифференцируем: $p_Y(y) = \dfrac{1}{2\sqrt y}$ ✅ — совпало.
Ответ: $p_Y(y) = \dfrac{1}{2\sqrt{y}}$ на $(0;1]$.
Пример 21 (сложный): обратное преобразование и генерация выборки
$U$ равномерна на $(0;1)$. Положим $Y = -\dfrac{\ln U}{\lambda}$, где $\lambda > 0$. Найди плотность $Y$ и объясни, зачем это нужно.
Решение:
Шаг 1. Функция $g(u) = -\dfrac{\ln u}{\lambda}$ на $(0;1)$ строго убывает (логарифм растёт, минус переворачивает). Монотонность есть ✅
Шаг 2. Обратная функция: из $y = -\dfrac{\ln u}{\lambda}$ получаем $\ln u = -\lambda y$, то есть
$$h(y) = u = e^{-\lambda y}.$$Шаг 3. Якобиан:
$$h'(y) = -\lambda e^{-\lambda y}, \qquad |h'(y)| = \lambda e^{-\lambda y}.$$Шаг 4. Носитель: при $u \to 1^-$ имеем $y \to 0^+$; при $u \to 0^+$ имеем $y \to +\infty$. Значит, $y \in (0; +\infty)$.
Шаг 5. Подставляем ($p_U \equiv 1$ на $(0;1)$):
$$p_Y(y) = 1 \cdot \lambda e^{-\lambda y} = \lambda e^{-\lambda y}, \quad y > 0.$$Это плотность показательного распределения с параметром $\lambda$.
Шаг 6. Зачем это нужно. У тебя есть генератор равномерных чисел (random() в любом языке) — и больше ничего. А нужна выборка из показательного распределения. Формула даёт рецепт: сгенерируй $u$, посчитай $-\ln(u)/\lambda$ — получишь показательную величину. Это метод обратного преобразования, и он работает для любого распределения, у которого $F$ обращается аналитически: $X = F^{-1}(U)$.
Проверим наш ответ: нормировка $\int_0^{\infty}\lambda e^{-\lambda y}dy = \left[-e^{-\lambda y}\right]_0^{\infty} = 1$ ✅ И общая логика: чем больше $\lambda$, тем быстрее убывает плотность, тем короче типичное время — согласуется с тем, что $\lambda$ это «интенсивность отказов».
Ответ: $p_Y(y) = \lambda e^{-\lambda y}$, $y > 0$ — показательное распределение; используется для генерации выборок методом обратного преобразования.
Почему это важно
Формула замены переменной — это математическое ядро normalizing flows, одного из главных классов генеративных моделей. Идея такая: возьми простое распределение (стандартное нормальное $p_Z$), пропусти сэмпл через обратимую нейросеть $x = f^{-1}(z)$ — и получишь сложное распределение $p_X$. Плотность нового распределения считается точно, по нашей формуле:
$$\log p_X(x) = \log p_Z\big(f(x)\big) + \log\left|\det \frac{\partial f}{\partial x}\right|.$$Второе слагаемое — логарифм якобиана — это ровно тот множитель «на сколько преобразование растянуло пространство», который мы вывели выше, только в многомерном варианте. Вся инженерная сложность flows (coupling layers в RealNVP, обратимые $1\times1$-свёртки в Glow, автогрегрессионные слои в MAF/IAF) сводится к одному: сделать сеть достаточно выразительной, но при этом сохранить возможность быстро посчитать определитель якобиана. Наивно определитель матрицы $d\times d$ считается за $O(d^3)$ — при $d = 3072$ (картинка $32\times32\times3$) это неприемлемо. Поэтому архитектуры строят так, чтобы матрица Якоби была треугольной, — тогда определитель это просто произведение диагональных элементов, $O(d)$.
Второе применение — репараметризационный трюк в вариационных автоэнкодерах. Там $z = \mu + \sigma\varepsilon$, где $\varepsilon \sim N(0;1)$: это линейная замена переменной, и якобиан $\sigma$ — ровно то, из-за чего в формуле плотности $N(\mu,\sigma^2)$ стоит деление на $\sigma$.
Третье — преобразования признаков. Логарифмирование скошенного признака (log1p для выручки, длительности, числа просмотров) меняет плотность по нашей формуле. Если ты потом моделируешь логарифм нормальным распределением, ты неявно утверждаешь, что исходная величина логнормальна, а её плотность — $p_X(x) = \dfrac{1}{x\sigma\sqrt{2\pi}}\exp\left(-\dfrac{(\ln x - \mu)^2}{2\sigma^2}\right)$. Множитель $1/x$ здесь — тот самый якобиан замены $y = \ln x$.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: Время ожидания лифта $X$ распределено равномерно на отрезке $[1; 6]$ (в минутах). Найди плотность и вероятность $P(2 \le X \le 4)$.
Задание 2: Веса свёрточного слоя инициализируются равномерно на отрезке $[-0{,}02;\ 0{,}02]$. Найди плотность распределения веса и вероятность того, что конкретный вес по модулю не превысит $0{,}005$.
Задание 3: Найди константу $C$, при которой функция $p(x) = Cx$ на отрезке $[0;4]$ (и $0$ вне его) является плотностью. Затем посчитай $P(X \le 2)$.
Задание 4: Является ли функция $p(x) = \dfrac12\sin x$ на отрезке $[0;\pi]$ (и $0$ вне) плотностью вероятности? Если да — найди её максимум.
Задание 5: Функция распределения задана как $F(x) = \sin x$ при $0 \le x \le \dfrac{\pi}{2}$, $F(x) = 0$ при $x < 0$ и $F(x) = 1$ при $x > \dfrac{\pi}{2}$. Найди плотность.
Задание 6: Плотность задана как $p(x) = 2(1 - x)$ при $0 \le x \le 1$ и $0$ вне. Найди функцию распределения и $P(X \le 0{,}5)$.
Задание 7: Время между двумя последовательными запросами к API имеет плотность $p(t) = 2e^{-2t}$ при $t \ge 0$ (в секундах). Найди $P(T > 1)$ и $P(0{,}5 \le T \le 1{,}5)$.
Задание 8: Модель предсказывает логарифм цены товара нормальным распределением $N(2{,}0;\ 0{,}1^2)$. Оцени вероятность того, что истинное значение попадёт в окно $[1{,}99;\ 2{,}01]$.
Задание 9: Для показательного распределения с $\lambda = 1$ выясни, во сколько раз плотность в точке $0$ больше плотности в точке $3$. Что означает это число?
Задание 10: Плотность распределения времени отклика сервиса в некоторой точке равна $40\ \text{с}^{-1}$. Чему она равна в единицах $\text{мс}^{-1}$? Посчитай вероятность попасть в окно шириной $10$ мс вокруг этой точки в обеих системах единиц.
Средние (задания 11-20)
Задание 11: Ошибка предсказания модели имеет «шатровую» плотность $p(x) = C\left(1 - |x|\right)$ на отрезке $[-1;1]$ и $0$ вне. Найди $C$, функцию распределения и $P(|X| < 0{,}5)$.
Задание 12: Найди $C$ для плотности $p(x) = \dfrac{C}{x}$ на отрезке $[1; e]$ и посчитай $P(X \le 2)$.
Задание 13: Плотность $p(x) = 4x^3$ на $[0;1]$, $0$ вне. Найди условную вероятность $P(X > 0{,}5 \mid X > 0{,}25)$.
Задание 14: Функция распределения имеет вид $F(x) = 3x^2 - 2x^3$ на $[0;1]$ ($0$ слева, $1$ справа). Найди плотность, её максимум и $P(X > 0{,}5)$.
Задание 15: Уверенность классификатора $X$ (число от $0$ до $1$) имеет плотность $p(x) = 2x$ на $[0;1]$. Найди медиану и $90$-й процентиль. Какой порог отсечь, чтобы отбраковать $10\%$ самых неуверенных предсказаний?
Задание 16: $Z \sim N(0;1)$, $Y = 2Z + 3$. Найди плотность $Y$ по формуле замены переменной и опознай распределение.
Задание 17: $Z \sim N(0;1)$, $Y = e^{Z}$. Найди плотность $Y$ и посчитай $p_Y(1)$.
Задание 18: Существует ли случайная величина, у которой все значения лежат в $[0;1]$, а максимум плотности равен $1000$? Если да — построй два разных примера.
Задание 19: Плотность равна константе $C$ на объединении двух отрезков $[0;1] \cup [3;4]$ и нулю вне. Найди $C$, функцию распределения и $P(0{,}5 \le X \le 3{,}5)$.
Задание 20: Интервалы между отказами сервиса: $t_1 = 0{,}5$, $t_2 = 1{,}0$, $t_3 = 2{,}5$ часа. Модель — показательное распределение с плотностью $p(t) = \lambda e^{-\lambda t}$. Посчитай логарифм правдоподобия при $\lambda = 0{,}5$ и $\lambda = 1$, найди наилучшее $\lambda$ и сравни правдоподобия.
Продвинутые (задания 21-30)
Задание 21: Норма градиента в двумерном случае описывается плотностью $p(x) = Cxe^{-x^2/2}$ при $x \ge 0$ и $0$ при $x < 0$ (распределение Рэлея). Найди $C$, функцию распределения, моду, медиану и $P(X > 2)$.
Задание 22: Логистическая голова модели выдаёт вероятность $Y = \sigma(Z) = \dfrac{1}{1 + e^{-Z}}$, где логит $Z \sim N(0;1)$. Найди плотность $Y$, посчитай $p_Y(0{,}5)$ и объясни, почему у величины со значениями в $(0;1)$ плотность больше единицы.
Задание 23: Вероятностная регрессия предсказывает $y \sim N(\hat\mu;\ \sigma^2)$ и обучается на лоссе $\text{NLL} = -\ln p(y)$. Посчитай лосс при $\sigma = 0{,}02$ для точки, попавшей ровно в предсказанное среднее, и для точки, отстоящей на одну сигму. При каком $\sigma$ лосс в точке максимума становится отрицательным?
Задание 24: Ядерная оценка плотности (KDE). По выборке $\{1{,}0;\ 1{,}2;\ 1{,}9;\ 3{,}0;\ 3{,}1\}$ построена оценка с гауссовым ядром и шириной окна $h = 0{,}5$:
$$\hat p(x) = \frac{1}{nh}\sum_{i=1}^{n}\varphi\!\left(\frac{x - x_i}{h}\right).$$Найди $\hat p(1{,}5)$. Что изменится при $h = 0{,}1$?
Задание 25: Латентность запроса моделируется показательным распределением с $\lambda = 0{,}5$ (в секундах). (а) Найди порог $t$, при котором в аномалии попадает ровно $1\%$ запросов. (б) Чему равна плотность в этой точке? (в) Коллега предлагает считать аномалией всё, где плотность меньше $0{,}01$. Объясни, почему это плохое правило.
Задание 26: $Z \sim N(0;1)$, $Y = Z^2$ (квадратичная ошибка одного признака). Найди плотность $Y$, посчитай $p_Y(1)$ и $P(Y \le 1)$.
Задание 27: Бинарная классификация по одному признаку. Класс $0$ встречается с вероятностью $0{,}9$ и даёт признак $X \mid C_0 \sim N(0;1)$; класс $1$ встречается с вероятностью $0{,}1$ и даёт $X \mid C_1 \sim N(3;1)$. Наблюдение $x = 2$. Найди апостериорную вероятность класса $1$ и точку, где классы равновероятны.
Задание 28: Веса обученного слоя распределены как $N(0;\ 0{,}1^2)$. Их квантуют на равномерную сетку с шагом $\Delta = 0{,}01$. Оцени вероятность попадания веса в центральную корзину $[-0{,}005;\ 0{,}005]$ и в корзину $[0{,}095;\ 0{,}105]$ — через плотность и точно. Сколько корзин покрывают диапазон $\pm 3\sigma$?
Задание 29: Метод выборки по значимости (importance sampling). Целевое распределение $p = N(0;1)$, предлагающее $q = N(0;\ 2^2)$. Вес наблюдения определяется как $w(x) = \dfrac{p(x)}{q(x)}$. Найди $w(0)$, $w(1)$, $w(4)$ и объясни, что случится, если поменять $p$ и $q$ местами.
Задание 30: (а) Докажи для показательного распределения свойство отсутствия памяти: $P(X > s + t \mid X > s) = P(X > t)$. (б) Найди условную плотность $X$ при условии $X > s$. (в) Веса инициализируют усечённым нормальным: берут $N(0;1)$ и отбрасывают всё вне $[-2;2]$. Во сколько раз вырастет плотность в нуле?
Частые ошибки
❌ Ошибка 1: считать, что плотность обязана быть не больше единицы
Неправильно: «Модель вернула pdf = 12.7 — это баг, вероятность не может быть больше единицы. Обрежем: pdf = min(pdf, 1.0)».
Правильно: значение $12{,}7$ абсолютно законно. Ограничение $\int p(x)\,dx = 1$ наложено на площадь, а не на высоту. Плотность $12{,}7$ означает лишь то, что величина живёт в узком диапазоне: например, для равномерного распределения на отрезке длины $1/12{,}7 \approx 0{,}079$ это ровно то, что получится.
Почему важно: «защитный» клиппинг min(pdf, 1.0) ломает всё, что построено на плотности: правдоподобие перестаёт быть правдоподобием, градиенты обнуляются на самых информативных точках, а модель с маленькой $\sigma$ (то есть хорошо обученная!) страдает больше всех. Проверять надо не значения, а интеграл — и то только при отладке собственной реализации.
❌ Ошибка 2: называть плотность вероятностью и переводить её в проценты
Неправильно: «Плотность в этой точке $0{,}35$, значит вероятность такого значения $35\%$».
Правильно: вероятность конкретного значения непрерывной величины равна нулю. Плотность $0{,}35$ сама по себе не говорит ничего, пока не названа ширина окна: $P(x - 0{,}05 \le X \le x + 0{,}05) \approx 0{,}35 \cdot 0{,}1 = 0{,}035$, то есть $3{,}5\%$. Совершенно другое число.
Почему важно: это ошибка на порядок, а не на проценты, и она пролезает в отчёты заказчику, где её никто не проверяет. Плюс железный аргумент: переведи ось в другие единицы — «процент» изменится, хотя событие то же самое. Корректные формулировки — через окно фиксированной ширины, через отношение плотностей или через процентиль.
❌ Ошибка 3: забыть якобиан при замене переменной
Неправильно: «$X$ равномерна на $[0;1]$, $Y = X^2$. Значит $p_Y(y) = p_X(\sqrt y) = 1$ на $[0;1]$».
Правильно: $p_Y(y) = p_X(\sqrt y)\cdot\left|\dfrac{d\sqrt y}{dy}\right| = 1 \cdot \dfrac{1}{2\sqrt y} = \dfrac{1}{2\sqrt y}$.
Почему важно: без якобиана нарушается нормировка и ломается сама постановка задачи. Здесь ошибка ещё и незаметна: «неправильный» ответ $p_Y \equiv 1$ на $[0;1]$ интегрируется в единицу, то есть выглядит как законная плотность — просто это плотность не той величины. Быстрый тест: посчитай $P(Y \le 0{,}25)$ обоими способами. По неправильной формуле $0{,}25$, по правильной $\sqrt{0{,}25} = 0{,}5$, а честный прямой счёт даёт $P(X^2 \le 0{,}25) = P(X \le 0{,}5) = 0{,}5$ ✅ В normalizing flows забытый $\log\left|\det J\right|$ — ошибка того же типа, и там она делает обученную модель бессмысленной при внешне падающем лоссе.
❌ Ошибка 4: интегрировать за пределами носителя
Неправильно: «Плотность $p(x) = 0{,}5$ на $[0;2]$. Тогда $P(X > 1) = \int_1^{+\infty} 0{,}5\,dx = \infty$» — или, в более мягком варианте, «$P(0{,}5 \le X \le 5) = 0{,}5 \cdot 4{,}5 = 2{,}25$».
Правильно: пересеки нужное множество с носителем. $P(X > 1) = \int_1^{2} 0{,}5\,dx = 0{,}5$; $P(0{,}5 \le X \le 5) = \int_{0{,}5}^{2} 0{,}5\,dx = 0{,}75$.
Почему важно: это самая механическая ошибка темы, и у неё есть бесплатный детектор: ответ обязан лежать в $[0;1]$. Получил $2{,}25$ или бесконечность — не ищи ошибку в арифметике, ищи её в пределах интегрирования. Особенно коварны носители с дырами (задание 19) и односторонние носители вроде $x \ge 0$.
❌ Ошибка 5: не проверить нормировку и работать с «почти плотностью»
Неправильно: «Функция $p(x) = x$ на $[0;2]$ неотрицательна, значит это плотность. $P(X \le 1) = \int_0^1 x\,dx = 0{,}5$».
Правильно: $\int_0^2 x\,dx = 2 \ne 1$, это не плотность. Нормируем: $p(x) = \dfrac{x}{2}$, и тогда $P(X \le 1) = \int_0^1 \dfrac{x}{2}dx = 0{,}25$.
Почему важно: ошибка вдвое, и её не видно по знаку и не видно по форме графика — только по интегралу. Заведи привычку: первым действием в любой задаче с плотностью проверяй нормировку, даже если константа «дана». В байесовских задачах это тот же самый сюжет в большом масштабе: $p(D\mid\theta)p(\theta)$ — это ненормированная апостериорная плотность, и пока ты не поделил на $\int p(D\mid\theta)p(\theta)\,d\theta$, ты имеешь право сравнивать значения между собой, но не имеешь права называть их вероятностями.
❌ Ошибка 6: сравнивать плотности разных величин или в разных единицах
Неправильно: «Плотность признака "время отклика" в этой точке $37$, а плотность признака "конверсия" — $2{,}1$. Значит первое наблюдение в $17$ раз типичнее».
Правильно: сравнение бессмысленно. Это величины с разными размерностями ($\text{с}^{-1}$ и безразмерная), и их плотности несопоставимы в принципе. Осмысленно сравнивать плотности одной и той же величины в разных точках ($p(x_1)/p(x_2)$) или разных моделей на одних и тех же данных ($p_A(x)/p_B(x)$) — там единицы сокращаются.
Почему важно: на этой ошибке ломается наивная детекция аномалий по «сумме плотностей признаков». Правильные способы привести признаки к общей шкале — перейти к квантилям ($F(x)$ безразмерна и равномерна на $[0;1]$) или считать совместное правдоподобие одной модели.
❌ Ошибка 7: пугаться отрицательного лосса
Неправильно: «loss = -3.2, отрицательный лосс невозможен, где-то ошибка знака. Добавим loss = abs(loss)».
Правильно: для непрерывных величин $\text{NLL} = -\ln p(x)$ отрицателен ровно тогда, когда $p(x) > 1$ — то есть когда модель хорошо сконцентрировала массу. Для гауссовской головы граница проходит по $\sigma = 1/\sqrt{2\pi} \approx 0{,}399$ (задание 23).
Почему важно: abs(loss) превращает оптимизацию в бессмыслицу — градиент меняет знак, и модель начинает бороться сама с собой. Реальная опасность здесь другая, и о ней стоит знать: гауссовский NLL не ограничен снизу, и если модель может загнать $\sigma \to 0$ на отдельных точках, лосс улетит в $-\infty$. Лечится не модулем, а нижней границей на $\ln\sigma$.
❌ Ошибка 8: путать $p(x)$ и $F(x)$
Неправильно: «Вероятность, что $X$ меньше $2$, равна $p(2)$».
Правильно: $P(X < 2) = F(2) = \int_{-\infty}^{2} p(t)\,dt$. Значение $p(2)$ — это скорость накопления вероятности в точке $2$, а не накопленная вероятность.
Почему важно: в коде это выглядит как norm.pdf(2) вместо norm.cdf(2) — одна буква, а ответ другой: для $N(0;1)$ это $0{,}054$ вместо $0{,}977$. Мнемоника: $F$ — одометр (сколько проехали), $p$ — спидометр (как быстро едем). Спрашивают «сколько накопилось» — бери $F$; спрашивают «насколько густо здесь» — бери $p$.
Главное запомнить
📝 Ключевые понятия
✅ Плотность вероятности: функция $p(x) \ge 0$, для которой $P(a \le X \le b) = \int_a^b p(x)\,dx$. Вероятность — характеристика промежутка, плотность — характеристика точки, и это разные объекты. Отсюда сразу: $P(X = a) = 0$, строгие и нестрогие неравенства эквивалентны, а значение $p$ в отдельной точке можно менять безнаказанно.
✅ Плотность — не вероятность: $p(x)$ не обязана быть $\le 1$ и может уходить в бесконечность. Единственные требования: $p(x) \ge 0$ и $\int_{-\infty}^{+\infty}p(x)\,dx = 1$. Ограничена площадь, а не высота.
✅ Размерность: $p(x)$ имеет размерность $1/[x]$ — «вероятность на единицу длины». Поэтому при смене единиц оси значение плотности меняется, а вероятности — нет. Это железный аргумент против «плотность = вероятность».
✅ Элемент вероятности: $P(x \le X \le x + \Delta) \approx p(x)\cdot\Delta$ при малом $\Delta$, и строго $p(x) = \lim\limits_{\Delta\to 0}\dfrac{P(x \le X \le x+\Delta)}{\Delta}$. Это рабочая формула для быстрых оценок и единственный корректный способ перевести плотность в понятное число.
✅ Связь с функцией распределения: $F(x) = \int_{-\infty}^{x}p(t)\,dt$ и $p(x) = F'(x)$. Отсюда $P(a \le X \le b) = F(b) - F(a)$. $F$ — одометр, $p$ — спидометр.
✅ Условие нормировки и константа: если $p(x) = C f(x)$ на носителе, то $C = \dfrac{1}{\int f(x)\,dx}$. В ML этот знаменатель зовётся нормировочной константой (partition function $Z$), и вся сложность байесовского вывода и энергетических моделей — именно в нём.
✅ Сравнивать можно только отношения: $\dfrac{p(x_1)}{p(x_2)}$ не зависит ни от ширины окна, ни от единиц измерения, ни от нормировочной константы. Отдельно взятое значение плотности почти ничего не значит; likelihood ratio — значит всё.
✅ Замена переменной: при $Y = g(X)$ с монотонной $g$ имеем $p_Y(y) = p_X(h(y))\,|h'(y)| = \dfrac{p_X(x)}{|g'(x)|}$. Мнемоника: вероятность сохраняется, плотность — нет. Растянул ось — плотность упала, сжал — выросла. Для немонотонной $g$ вклады ветвей складываются.
✅ Условная плотность = обрезать и перенормировать: $p(x \mid A) = \dfrac{p(x)}{P(A)}$ на множестве $A$ и ноль вне. Так устроены усечённые распределения, анализ выживаемости и байесовское обновление.
✅ Отрицательный NLL — норма: $-\ln p(x) < 0 \iff p(x) > 1$. Для гауссовской головы это происходит при $\sigma < 1/\sqrt{2\pi} \approx 0{,}399$. Опасен не знак, а неограниченность снизу при $\sigma \to 0$.
Связь с другими темами курса
Что нужно было знать до этого урока. Прямой фундамент — урок 235 (функция распределения): именно там мы выяснили, что для непрерывной величины $F$ непрерывна, что $P(X = a) = 0$ и что $P(a \le X \le b) = F(b) - F(a)$. Плотность в этом уроке появилась как производная $F$, так что без неё разговора бы не было. Урок 234 (случайные величины) дал сам объект: отображение исходов в числа и разделение на дискретные и непрерывные — плотность существует только для вторых. Из урока 230 (условная вероятность) взято правило «обрезать и поделить», которое мы применяли к условным плотностям и усечённым распределениям, а из урока 232 (формула Байеса) — схема, в которой мы в задании 27 подставили плотности вместо вероятностей. Из урока 233 (схема Бернулли) полезен сюжет де Муавра: биномиальные столбики, выстраивающиеся вдоль колокола, — это исторически первая плотность. Ну и, разумеется, интегральное исчисление: несобственные интегралы, интегрирование по частям, интеграл с переменным верхним пределом.
Что изучить дальше. Ближайший урок 237 (математическое ожидание) сразу использует плотность: для непрерывной величины $M[X] = \int_{-\infty}^{+\infty} x\,p(x)\,dx$ — сумма заменяется интегралом, а вес $p_i$ заменяется элементом вероятности $p(x)dx$. Там же станет понятно, почему у распределения Коши из примера 11 математического ожидания не существует. Урок 238 (дисперсия) продолжит ту же линию: $D[X] = \int (x - M[X])^2 p(x)\,dx$. Урок 239 (моменты) обобщит обе формулы на $\int x^k p(x)dx$ и введёт асимметрию с эксцессом — характеристики формы плотности. Урок 240 (основные распределения) даст каталог: равномерное, показательное, нормальное, гамма, бета — все они у нас уже мелькали, и там они получат имена, параметры и области применения. Урок 241 (ЦПТ) объяснит, почему нормальная плотность встречается чаще всех остальных вместе взятых. Урок 243 (многомерные случайные величины) поднимет плотность в $\mathbb{R}^n$, где якобиан из нашей формулы замены переменной станет определителем матрицы Якоби — ровно тем, что стоит в normalizing flows. А уроки 246-247 (оценка параметров, проверка гипотез) превратят правдоподобие из задания 20 в основной инструмент статистики.
Где это нужно в жизни.
💻 В программировании. Генерация случайных чисел любого распределения из равномерного (метод обратного преобразования, задание в теории про $-\ln U/\lambda$); процентили латентности (p50, p95, p99) в мониторинге — это квантили плотности, а не средние; A/B-платформы и симуляции нагрузки; профилирование, где распределение времени выполнения почти всегда тяжелохвостое и логнормальное.
🤖 В ML/AI. Правдоподобие и функции потерь: гауссовский NLL для регрессии, логнормальный для длительностей, полный лосс VAE. Детекция аномалий по плотности и по квантилям. Ядерная оценка плотности (KDE) для разведочного анализа. Инициализация весов (равномерная, нормальная, усечённая нормальная) — прямое применение плотности с заданным разбросом. Дропаут-подобные шумы, аугментации, диффузионные модели (там плотность зашумлённых данных известна аналитически на каждом шаге). Normalizing flows, где формула замены переменной с логарифмом якобиана — буквально функция потерь. Байесовские нейросети и вариационный вывод, где всё упирается в нормировочную константу. Importance sampling и off-policy обучение в RL, где веса — отношение плотностей.
📊 В Data Science. Гистограммы с density=True и сглаженные оценки плотности при разведочном анализе; выбор преобразований признаков (логарифм скошенных величин); построение доверительных интервалов; расчёт размера выборки; квантильная нормализация признаков; риск-метрики вроде VaR и CVaR — это прямые интегралы от хвоста плотности.
🔬 В науке. Обработка ошибок измерений (задача, из которой плотность и родилась); квантовая механика, где $|\psi(x)|^2$ — буквально плотность вероятности найти частицу; статистическая физика, где распределение Больцмана $p \propto e^{-E/kT}$ и её нормировочная константа $Z$ дали энергетическим моделям в ML и название, и математику; биостатистика и анализ выживаемости; сейсмология и надёжность, где показательное и Вейбулла описывают времена до события.
Интересные факты
💡 Первая плотность в истории была вычислительным костылём. Де Муавр в 1733 году вовсе не открывал «главный закон природы» — он искал способ не считать вручную $C_{1000}^{500}$. Гладкая кривая $e^{-x^2/2}$ была для него удобной аппроксимацией биномиальных столбиков, не более того. Более того, его работа вышла крошечным приложением на семи страницах, напечатанным за собственный счёт для узкого круга друзей, и почти сто лет оставалась незамеченной. Универсальным законом эту кривую сделали Лаплас и Гаусс.
💡 Плотность нормального распределения не интегрируется в элементарных функциях — и это оказалось удачей. Первообразной у $e^{-x^2/2}$ нет: соответствующая функция распределения $\Phi$ выражается только через специальную функцию $\operatorname{erf}$. Именно поэтому все поколения студентов пользовались таблицами Лапласа, а не формулой. Ирония в том, что вычислительное неудобство обернулось пользой: в машинном обучении сплошь и рядом нужна не сама вероятность, а логарифм плотности — а вот он у нормального распределения проще некуда, обычная парабола $-\frac{(x-\mu)^2}{2\sigma^2} - \ln\sigma - \frac12\ln 2\pi$. Отсюда и любовь ML к гауссианам: логарифм квадратичен, градиенты линейны, всё считается в одну строчку.
💡 Квантовая механика — это теория плотности вероятности. В 1926 году Макс Борн предложил интерпретировать квадрат модуля волновой функции $|\psi(x)|^2$ как плотность вероятности обнаружить частицу в точке $x$. Условие нормировки $\int|\psi|^2 dx = 1$ — то самое, что мы весь урок проверяли — стало физическим постулатом: частица обязана где-то быть. Борн вписал эту интерпретацию в сноску к статье, а Нобелевскую премию за неё получил только через $28$ лет, в 1954 году. Эйнштейн эту идею так и не принял — знаменитое «Бог не играет в кости» было сказано именно про неё.
💡 Число 0,3989 — граница, за которой лосс уходит в минус. Максимум нормальной плотности равен $\dfrac{1}{\sigma\sqrt{2\pi}}$, и он пересекает единицу при $\sigma = \dfrac{1}{\sqrt{2\pi}} \approx 0{,}39894$. Это значит, что любая вероятностная регрессия, у которой предсказанный разброс меньше четырёх десятых, будет показывать отрицательный negative log-likelihood. Каждый год кто-нибудь открывает issue в репозитории популярной библиотеки с заголовком «negative loss, probably a bug». И каждый год мейнтейнеры отвечают одно и то же: это не баг, это плотность.
💡 Нормировочная константа — главный вычислительный враг современного ML. В энергетических моделях плотность записывается как $p(x) = e^{-E(x)}/Z$, где $Z = \int e^{-E(x)}dx$. В пространстве размерности миллион этот интеграл не берётся ни аналитически, ни численно — никогда и никак. Вокруг обхода этой одной проблемы выросли целые направления: contrastive divergence, score matching (учим $\nabla_x \log p$, где $Z$ сокращается, потому что $\nabla_x \log Z = 0$), noise-contrastive estimation, диффузионные модели. Score matching, кстати, придумал Аапо Хювяринен в 2005 году — за пятнадцать лет до того, как на нём выросли Stable Diffusion и вся генерация картинок.
💡 Формула замены переменной старше нейросетей на два века — и стала их архитектурой. Якобиан преобразования плотности встречается уже у Якоби в 1840-х годах. В 2014-2018 годах авторы NICE, RealNVP и Glow взяли эту формулу буквально: $\log p_X(x) = \log p_Z(f(x)) + \log|\det J_f(x)|$ — и превратили её в функцию потерь генеративной модели. Вся инженерия flows свелась к одному вопросу: как сделать сеть выразительной, но с легко считаемым определителем якобиана. Ответ оказался неожиданно простым — сделать матрицу Якоби треугольной, и тогда определитель это произведение диагонали, $O(d)$ вместо $O(d^3)$.
Лайфхаки и полезные трюки
1. Сначала нормировка, потом всё остальное.
Первым действием в любой задаче с плотностью проверяй $\int p = 1$ — даже если константа дана в условии. Это ловит и опечатки в условии, и собственные ошибки в пределах интегрирования, и неверно понятый носитель. Проверка занимает тридцать секунд и экономит полчаса.
Пример: дано $p(x) = x$ на $[0;2]$. Интеграл равен $2$, а не $1$ — значит, либо носитель другой ($[0;\sqrt2]$), либо константу забыли ($p = x/2$). Не поймав это сразу, ты посчитаешь все вероятности вдвое завышенными.
2. Ответ вне $[0;1]$ — сигнал о пределах интегрирования, а не об арифметике.
Вероятность физически не может быть больше единицы или отрицательной. Если такое получилось, в $90\%$ случаев виноват выход за носитель, а не ошибка в счёте. Проверяй пределы прежде, чем перепроверять интегралы.
Пример: $p(x) = 0{,}5$ на $[0;2]$, спрашивают $P(1 \le X \le 5)$. Наивно: $0{,}5 \cdot 4 = 2$. Стоп — больше единицы. Значит, надо резать по носителю: $0{,}5 \cdot 1 = 0{,}5$.
3. Переводи плотность в понятную величину умножением на ширину окна.
Число «плотность $37$» не говорит ничего ни тебе, ни заказчику. Число «в окно шириной $0{,}01$ попадает $37\%$ наблюдений» говорит всё. Это же приём делает осмысленной любую отладку: увидел странное значение — прикинь $p\cdot\Delta$ для характерной ширины и посмотри, разумно ли получилось.
Пример: KDE вернула $p = 250$ для признака с разбросом порядка $0{,}01$. Проверяем: $250 \cdot 0{,}01 = 2{,}5$ — больше единицы, значит окно шириной в целую сигму «содержит» больше всей массы. Ерунда, ширина окна выбрана слишком большой для такой прикидки; берём $\Delta = 0{,}001$: получаем $0{,}25$ — разумно.
4. Сравнивай только отношения плотностей — и сокращай константу заранее.
При сравнении значений одного распределения нормировочная константа сокращается, так что её можно не считать вовсе. Это экономит и время на бумаге, и вычисления в коде, а заодно спасает от переполнения.
Пример: во сколько раз $N(0;1)$ плотнее в нуле, чем в точке $2$? Не нужны ни $\sqrt{2\pi}$, ни $\sigma$: $\dfrac{e^{0}}{e^{-2}} = e^2 \approx 7{,}39$. В коде тот же приём — работать с $\log p$ и брать разности, а не отношения.
5. Пиши функцию распределения один раз и считай через неё всё остальное.
Если в задаче больше одного вопроса про вероятности, выгоднее сразу найти $F(x)$, а дальше все ответы получать подстановкой: $P(X > a) = 1 - F(a)$, $P(a \le X \le b) = F(b) - F(a)$, медиана из $F(m) = 0{,}5$, любой квантиль из $F(x_q) = q$. Один интеграл вместо пяти.
Пример: для $p(x) = 4x^3$ на $[0;1]$ находим $F(x) = x^4$ — и дальше медиана $\sqrt[4]{0{,}5} \approx 0{,}841$, $P(X>0{,}5) = 1 - 0{,}0625$, условные вероятности как отношения хвостов (задание 13). Всё из одной формулы.
6. При замене переменной делай проверку «в лоб» через $F$.
Формула с якобианом даёт ответ быстро, но легко ошибиться в знаке или в носителе. Контроль занимает одну строчку: посчитай $F_Y(y) = P(g(X) \le y)$ напрямую, выразив событие через $X$, и продифференцируй. Если совпало — можно идти дальше.
Пример: $X \sim U[0;1]$, $Y = X^2$. Прямо: $F_Y(y) = P(X \le \sqrt y) = \sqrt y$, откуда $p_Y = \dfrac{1}{2\sqrt y}$ — совпало с формулой замены. Заодно проверился носитель.
7. Считай в логарифмах, а не в плотностях.
Произведение плотностей по выборке из тысячи точек мгновенно уходит в машинный ноль или в бесконечность. Всегда работай с $\ln p$: произведение превращается в сумму, отношение — в разность, а численные проблемы исчезают. В библиотеках для этого есть готовое: logpdf, log_prob, logsumexp.
Пример: правдоподобие из задания 20 при $n = 1000$ наблюдениях было бы числом порядка $\lambda^{1000}e^{-4000}$ — то есть нулём в float64. А $\ln L = 1000\ln\lambda - 4000\lambda$ считается точно и без усилий.
8. Проверяй инвариантность своих правил к смене единиц.
Любое правило, содержащее порог на значение плотности («аномалия, если $p < 0{,}01$»), сломается при пересчёте признака в другие единицы или после логарифмирования. Правила, сформулированные в квантилях («аномалия — верхний $1\%$»), не сломаются никогда. Это бесплатный тест на осмысленность: мысленно умножь ось на $1000$ и посмотри, изменится ли вывод.
Пример: порог «плотность латентности меньше $0{,}01$» в секундах отбирает $2\%$ запросов, а в миллисекундах — все $100\%$ (задание 25). Порог «медленнее p99» отбирает один процент в любых единицах.
💡 Совет: плотность — это первое место в курсе, где интуиция «вероятность = число от нуля до единицы» перестаёт работать, и именно поэтому здесь так легко застрять. Лекарство простое: каждый раз, когда видишь значение плотности, мысленно умножай его на ширину окна и получай вероятность. Проделай это сознательно раз двадцать — на задачах из этого урока, на выводе scipy.stats.norm.pdf, на значениях лосса в своём тренировочном логе — и новая интуиция встанет на место сама. После этого ты будешь спокойно смотреть на pdf = 37.4 и на отрицательный NLL, понимая ровно, что они означают, — а это, поверь, умеет далеко не каждый практикующий инженер.
И держи в голове главную мысль урока, свёрнутую в одну строчку: вероятность живёт на промежутках, плотность — в точках, а мостом между ними служит интеграл. Всё остальное — техника.
В следующем уроке — математическое ожидание (урок 237). Мы возьмём плотность и «взвесим» ею ось: $M[X] = \int x\,p(x)\,dx$. Формула получится буквально из той же логики, что и в дискретном случае — «значение умножить на его вес и сложить», — только сумма превратится в интеграл, а вес $p_i$ станет элементом вероятности $p(x)\,dx$. Заодно узнаешь, у каких распределений среднего не существует вовсе (спойлер: Коши из примера 11 — как раз такое) и почему это не математическая экзотика, а вполне практическая проблема тяжёлых хвостов. Поехали 🚀
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку