Случайные величины 🎯
Ты замерил accuracy своей модели на тестовой выборке из 500 объектов и получил 0,912. Коллега замерил свою — 0,908. Кто победил? Правильный ответ: пока непонятно, потому что ты сравниваешь два числа, у которых есть разброс, а разброс ты не посчитал. И вот здесь начинается неприятное: чтобы посчитать разброс, надо сначала признать, что accuracy — это не число. Это функция. Функция от того, какая именно тестовая выборка тебе досталась, какие именно seed'ы выпали, какие именно 500 объектов пришли из потока. Число 0,912 — это одно её значение, одно наблюдение, одна реализация.
В предыдущих восьми уроках мы строили язык событий. Событие — подмножество $\Omega$, у события есть вероятность, вероятности складываются и умножаются по понятным правилам, схема Бернулли позволяет считать «сколько успехов в серии». Всё это работает, но у языка событий есть жёсткий потолок: событие отвечает только «да» или «нет». А в реальной работе нам нужны числа: сколько ошибок сделала модель, какой лосс на батче, сколько секунд ждал пользователь, какой токен выбрался при генерации, насколько зашумлён замер сенсора. Числа надо складывать, усреднять, сравнивать, строить по ним графики. Событие этого не умеет.
Случайная величина — это мост. Она берёт элементарный исход $\omega$ — «то, что реально произошло» — и приписывает ему число. Одна строчка определения, а следом за ней открывается вся остальная теория вероятностей: функция распределения, плотность, математическое ожидание, дисперсия, закон больших чисел, центральная предельная теорема. И весь практический ML: почему метрику надо мерить с доверительным интервалом, почему лосс на батче шумит, почему температура в генерации текста меняет «характер» модели, почему шум в данных ограничивает достижимое качество сверху.
Главную мысль этого урока я скажу сразу, потому что её потом придётся повторить ещё раз шесть: случайная величина — это не случайное число, это функция. Она детерминированная. В ней нет ничего случайного. Случаен только её аргумент. Как только ты это переваришь, половина парадоксов теории вероятностей перестанет быть парадоксами, а вторая половина станет решаемой.
🎯 Ты узнаешь:
- Почему случайная величина — это отображение $X: \Omega \to \mathbb{R}$, а не «число, которое случайно меняется», и что даёт этот сдвиг взгляда
- Чем дискретные величины отличаются от непрерывных и почему у непрерывной вероятность любого конкретного значения равна нулю
- Как выписывать закон распределения дискретной величины таблицей, зачем нужно условие нормировки $\sum p_i = 1$ и как рисовать многоугольник распределения
- Что происходит с распределением при операциях $aX + b$, $X^2$, $X + Y$ — и почему распределение результата надо выводить, а не угадывать
- Что такое индикатор события, почему он простейшая случайная величина и как через сумму индикаторов считаются accuracy, число ошибок и любые «сколько раз произошло»
- Что значит независимость случайных величин и где именно это допущение ломается в реальных данных
История: откуда это взялось?
Понятие случайной величины созревало гораздо дольше, чем понятие события, и это интересно само по себе. Игроки XVII века прекрасно оперировали событиями («выпадет хотя бы одна шестёрка»), но числовая характеристика исхода появлялась у них только в одном месте — в размере выигрыша. Христиан Гюйгенс в трактате 1657 года «De ratiociniis in ludo aleae» считал «стоимость шанса»: сколько справедливо заплатить за право участвовать в игре. По сути он уже работал со случайной величиной «выигрыш» и её средним значением, но самого понятия не выделял — оно было растворено в задаче.
Следующий шаг сделал Абрахам де Муавр. В «Doctrine of Chances» (первое издание 1718, расширенные — 1738 и 1756) он изучал число успехов в серии испытаний как самостоятельный объект: строил для него таблицы вероятностей, искал приближения при больших $n$ и в 1733 году получил то, что мы сегодня называем нормальной аппроксимацией биномиального распределения. Чтобы это сделать, надо было мысленно оторвать «число успехов» от конкретной игры и начать думать о нём как о величине со своим распределением. Дальше Пьер-Симон Лаплас в «Théorie analytique des probabilités» (1812) вовсю работал с распределениями числовых характеристик — ошибок измерений, отклонений, сумм. Симеон Дени Пуассон в 1837 году, разбирая статистику судебных приговоров, ввёл распределение, носящее его имя, и, кстати, именно он ввёл сам термин «закон больших чисел».
Но строгое определение — то самое, которое ты прочитаешь через несколько абзацев, — появилось только в XX веке, вместе с теорией меры. Идея была та же, что и с событиями: перестать спрашивать «что такое случайная величина по сути» и вместо этого сказать, чем она является как математический объект. Ответ Колмогорова (1933): случайная величина — это измеримая функция из вероятностного пространства в числовую прямую. Слово «измеримая» тут техническое, оно гарантирует, что все нужные нам множества вида $\{\omega: X(\omega) \le x\}$ действительно являются событиями и потому имеют вероятность. Для дискретных и для всех практических непрерывных величин это условие выполняется автоматически, поэтому в прикладном курсе о нём просто держат в голове, что оно есть.
Отдельная линия истории — статистика. Фрэнсис Гальтон в 1880-х изучал наследование роста и придумал слово «регрессия», работая именно с величинами: рост родителя и рост ребёнка как два числа, связанных распределением. Карл Пирсон систематизировал семейства распределений, Рональд Фишер построил на них теорию оценивания. Всё, что сегодня называется словом «статистика» в ML — от бутстрапа до доверительных интервалов для метрик — растёт из решения смотреть на измеряемую характеристику как на случайную величину с распределением, а не как на «просто число, которое мы померили». В этом уроке мы делаем ровно этот шаг.
Случайная величина — это функция
Интуиция
Начнём с простого эксперимента: бросаем две монеты. Пространство элементарных исходов ты уже умеешь выписывать:
$$\Omega = \{ОО,\ ОР,\ РО,\ РР\}$$Четыре исхода, каждый — «то, что физически произошло». Ни один из них не является числом: «орёл-решка» — это не число, это конфигурация мира.
Теперь я задаю вопрос: сколько выпало орлов? Этот вопрос превращает каждый исход в число:
- $ОО \mapsto 2$
- $ОР \mapsto 1$
- $РО \mapsto 1$
- $РР \mapsto 0$
Вот это отображение и есть случайная величина. Я назову её $X$ и буду писать $X(ОО) = 2$, $X(ОР) = 1$, $X(РО) = 1$, $X(РР) = 0$. Обрати внимание на три вещи, каждая из которых важнее предыдущей.
Первое. $X$ — обычная функция. У неё есть область определения ($\Omega$), есть область значений ($\{0, 1, 2\} \subset \mathbb{R}$), и она сопоставляет каждому аргументу ровно одно значение. Никакой «случайности внутри функции» нет: если я скажу тебе, что выпало $ОР$, ты без всякой неопределённости скажешь, что $X = 1$. Случайность живёт только в том, какой $\omega$ реализуется.
Второе. Функция может быть неинъективной: разным исходам можно приписать одно число. $ОР$ и $РО$ — разные исходы, но обоим соответствует $X = 1$. Это нормально и это очень типично. Случайная величина огрубляет исход: она смотрит на мир и извлекает из него одну числовую характеристику, выбрасывая всё остальное. Из $\omega = ОР$ величина $X$ сохранила «один орёл» и выбросила информацию о том, на каком именно броске он был.
Третье. На одном и том же $\Omega$ можно задать сколько угодно разных случайных величин. Например, $Y(\omega) = 1$, если первый бросок орёл, и $0$ иначе. Или $Z(\omega) = 1$, если оба броска совпали, и $0$ иначе. Это три разные функции на одном множестве, и они связаны между собой — потому что зависят от одного и того же $\omega$. Мы вернёмся к этому в разделе про независимость: связь между случайными величинами возникает именно оттого, что они живут на общем $\Omega$ и обе смотрят на один и тот же исход.
Определение: Случайной величиной называется числовая функция $X$, заданная на пространстве элементарных исходов: каждому исходу $\omega \in \Omega$ она ставит в соответствие единственное действительное число $X(\omega)$. Записывают $X: \Omega \to \mathbb{R}$.
Требуется дополнительно, чтобы для любого $x$ множество $\{\omega: X(\omega) \le x\}$ было событием (то есть имело вероятность) — это техническое условие измеримости, которое для всех величин из этого курса выполнено автоматически.
Обозначения приняты такие: сами величины — заглавными латинскими буквами $X, Y, Z, \xi, \eta$ (греческие «кси» и «эта» — русская традиция), их конкретные значения — строчными $x, y, z$. Запись $X = 3$ означает не равенство чисел, а событие: множество тех исходов, на которых функция $X$ принимает значение 3. Формально
$$\{X = 3\} = \{\omega \in \Omega:\ X(\omega) = 3\}$$и это подмножество $\Omega$, то есть событие в точности в том смысле, в каком мы говорили о событиях в уроке 226. Соответственно $P(X = 3)$ — вероятность этого события, вполне осмысленное число.
Это и есть тот самый мост, ради которого всё затевалось. Каждому числовому вопросу о величине соответствует событие:
- $\{X = 2\}$ — «величина приняла значение 2»
- $\{X \le 1\}$ — «величина не превысила единицу»
- $\{2 < X \le 5\}$ — «величина попала в полуинтервал»
- $\{X > 0\}$ — «величина положительна»
Все они — подмножества $\Omega$, у всех есть вероятности, и всю арифметику вероятностей (сложение для несовместных, дополнение, условная вероятность) можно применять к ним без изменений. Мы просто получили удобный способ выделять события числовыми условиями вместо словесных описаний.
Почему формулировка «случайное число» вредна
Фраза «случайная величина — это число, которое принимает случайные значения» встречается в популярных текстах постоянно, и она вредна не потому, что неточна, а потому что мешает считать. Смотри, что ломается.
Ломается композиция. Если $X$ — функция, то $X^2$, $\sin X$, $e^X$ — это просто композиции функций, и они определены немедленно: $(X^2)(\omega) = (X(\omega))^2$. Если $X$ — «случайное число», то что такое $X^2$ — непонятно, приходится каждый раз объяснять словами.
Ломается сложение. $X + Y$ определяется поточечно: $(X+Y)(\omega) = X(\omega) + Y(\omega)$. Это осмысленно только если обе величины заданы на одном и том же $\Omega$ — и это принципиально. Нельзя сложить рост случайного человека из Москвы и вес случайного человека из Новосибирска: это функции на разных пространствах, у суммы нет аргумента. Формулировка «случайное число» эту ловушку полностью скрывает.
Ломается понимание зависимости. Почему $X$ и $Y$ могут быть зависимыми? Потому что они обе — функции одного аргумента $\omega$. Узнав $X(\omega)$, ты узнаёшь кое-что про сам $\omega$, а значит, кое-что и про $Y(\omega)$. Это объяснение существует только в функциональной картинке.
Ломается воспроизводимость. В коде это видно буквально. Когда ты пишешь np.random.default_rng(seed) и дальше гоняешь пайплайн, ты фиксируешь $\omega$. Всё, что вычислит твой скрипт — accuracy, лосс, веса, — детерминированные функции от этого $\omega$. Именно поэтому один и тот же seed даёт один и тот же результат: функция не меняется, меняется аргумент.
Поэтому давай договоримся: до конца курса «случайная величина» = «функция из $\Omega$ в $\mathbb{R}$». Числами будут её значения.
Примеры с разбором
Пример 1 (простой): бросают игральную кость. Задай на этом $\Omega$ три разные случайные величины и выпиши их как таблицы «исход → значение»
Решение:
Шаг 1. Выпишем пространство: $\Omega = \{1, 2, 3, 4, 5, 6\}$, где $\omega = k$ означает «выпало $k$ очков». Заметь: здесь исходы сами по себе выглядят как числа, но это совпадение — они всё равно остаются исходами, объектами, а не значениями величины.
Шаг 2. Первая величина — самая естественная: $X(\omega) = \omega$, число выпавших очков.
| $\omega$ | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| $X(\omega)$ | 1 | 2 | 3 | 4 | 5 | 6 |
Шаг 3. Вторая — выигрыш в игре, где ставка 2 рубля, а за шестёрку платят 10:
$$Y(\omega) = \begin{cases} 10 - 2 = 8, & \omega = 6\\ -2, & \omega \ne 6\end{cases}$$| $\omega$ | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| $Y(\omega)$ | $-2$ | $-2$ | $-2$ | $-2$ | $-2$ | $8$ |
Шаг 4. Третья — индикатор чётности:
$$Z(\omega) = \begin{cases} 1, & \omega \text{ чётно}\\ 0, & \omega \text{ нечётно}\end{cases}$$| $\omega$ | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| $Z(\omega)$ | 0 | 1 | 0 | 1 | 0 | 1 |
Шаг 5. Проверим, что каждая из трёх — действительно функция: каждому исходу приписано ровно одно число, «дырок» и «раздвоений» нет ✅.
Ответ: $X$ — число очков (значения 1–6), $Y$ — выигрыш (значения $-2$ и $8$), $Z$ — индикатор чётности (значения 0 и 1). Все три заданы на одном $\Omega$, но огрубляют исход по-разному: $X$ не теряет ничего, $Y$ различает только «шестёрка / не шестёрка», $Z$ — только чётность.
📌 Обрати внимание на $Y$ и $Z$: они выбрасывают почти всю информацию об исходе. Если тебе сообщили, что $Z = 1$, ты знаешь только, что выпало 2, 4 или 6, — и это ровно событие $\{Z=1\} = \{2,4,6\}$. Случайная величина — это своего рода «датчик», который меряет одну характеристику мира.
Пример 2 (средний): бросают две различимые кости. На пространстве $\Omega = \{(i,j)\}$ заданы $S(i,j) = i + j$ (сумма), $M(i,j) = \max(i,j)$ и $D(i,j) = |i - j|$. Найди $S(3,5)$, $M(3,5)$, $D(3,5)$; выпиши как множества события $\{S = 4\}$, $\{M = 2\}$, $\{D = 0\}$ и найди их вероятности
Решение:
Шаг 1. Пространство: $\Omega = \{(i,j): i, j \in \{1,\dots,6\}\}$, $|\Omega| = 36$. Кости различимы, поэтому $(3,5)$ и $(5,3)$ — разные исходы. Все исходы равновозможны, вероятность каждого $1/36$.
Шаг 2. Значения на конкретном исходе $\omega = (3,5)$:
$$S(3,5) = 3 + 5 = 8,\qquad M(3,5) = \max(3,5) = 5,\qquad D(3,5) = |3-5| = 2$$Три разные функции, один аргумент, три разных числа. Никакой случайности в этих вычислениях нет — исход уже известен.
Шаг 3. Событие $\{S = 4\}$ — все пары с суммой 4. Перебираем: $(1,3), (2,2), (3,1)$. Значит
$$\{S = 4\} = \{(1,3),\ (2,2),\ (3,1)\},\qquad P(S=4) = \frac{3}{36} = \frac{1}{12}$$Шаг 4. Событие $\{M = 2\}$ — максимум равен двум, то есть обе координаты не больше 2, но хотя бы одна равна 2. Пары, где обе $\le 2$: $(1,1), (1,2), (2,1), (2,2)$ — четыре штуки. Из них выбрасываем $(1,1)$, где максимум равен 1:
$$\{M = 2\} = \{(1,2),\ (2,1),\ (2,2)\},\qquad P(M=2) = \frac{3}{36} = \frac{1}{12}$$Шаг 5. Событие $\{D = 0\}$ — координаты равны, то есть дубли:
$$\{D = 0\} = \{(1,1), (2,2), (3,3), (4,4), (5,5), (6,6)\},\qquad P(D=0) = \frac{6}{36} = \frac{1}{6}$$Проверим себя. События $\{S=4\}$ и $\{M=2\}$ имеют одинаковую вероятность $1/12$, но это разные множества: в первом есть $(1,3)$, во втором его нет. Одинаковая вероятность не означает одинакового события — величины меряют разное.
Ответ: $S(3,5)=8$, $M(3,5)=5$, $D(3,5)=2$; $P(S=4) = P(M=2) = 1/12$, $P(D=0) = 1/6$.
📌 Обрати внимание на пересечения. Исход $(2,2)$ принадлежит одновременно $\{S=4\}$, $\{M=2\}$ и $\{D=0\}$. Это и есть механизм зависимости величин: они смотрят на общий исход, поэтому знание одной сужает круг возможных исходов и меняет наши суждения о другой. Например, узнав, что $D = 0$, мы сразу знаем, что $S$ чётно.
Пример 3 (сложный, ML): опиши accuracy модели на тестовой выборке как случайную величину. Что здесь $\Omega$, что такое $X(\omega)$, и почему «accuracy = 0,912» — это не полный ответ?
Решение:
Шаг 1. Сформулируем эксперимент точно, иначе ничего не выйдет. Пусть модель $f$ уже обучена и зафиксирована (веса не меняются). Мы набираем тестовую выборку из $n$ объектов, независимо взятых из генерального распределения данных $\mathcal{D}$, и считаем долю правильных ответов.
Шаг 2. Опишем $\Omega$. Элементарный исход — это вся тестовая выборка целиком:
$$\omega = \big((x_1, y_1),\ (x_2, y_2),\ \dots,\ (x_n, y_n)\big)$$Пространство $\Omega$ — множество всех возможных таких наборов длины $n$. Оно огромное, но это не мешает: нам не нужно его перечислять, нам нужно понимать его структуру.
Шаг 3. Определим величину. Accuracy — функция на этом пространстве:
$$A(\omega) = \frac{1}{n}\sum_{i=1}^{n} \mathbb{1}\big[f(x_i) = y_i\big]$$где $\mathbb{1}[\cdot]$ — индикатор (единица, если условие выполнено, ноль иначе; мы разберём индикаторы подробно чуть ниже). Проверим, что это функция: подставь конкретную выборку — получишь ровно одно число. Никакой неопределённости ✅.
Шаг 4. Найдём область значений. Числитель — целое от 0 до $n$, значит
$$A(\omega) \in \left\{0,\ \frac{1}{n},\ \frac{2}{n},\ \dots,\ \frac{n-1}{n},\ 1\right\}$$Это дискретная величина с $n+1$ возможным значением. Для $n = 500$ соседние значения отличаются на $0{,}002$ — вот почему на такой выборке accuracy никогда не бывает, например, ровно $0{,}9125$: сетка значений этого не позволяет.
Шаг 5. Теперь ключевой вопрос: что такое замеренные «0,912»? Это $A(\omega_0)$ — значение функции на одном конкретном исходе $\omega_0$, той единственной тестовой выборке, которая тебе досталась. Взяли бы другие 500 объектов — получили бы другое число. Величина $A$ имеет распределение, и 0,912 — одна точка из него.
Шаг 6. Прикинем масштаб разброса. Если истинная вероятность правильного ответа $p$, то число правильных распределено по схеме Бернулли (урок 233), а типичное отклонение доли от $p$ имеет порядок $\sqrt{p(1-p)/n}$. При $p \approx 0{,}91$ и $n = 500$:
$$\sqrt{\frac{0{,}91 \cdot 0{,}09}{500}} = \sqrt{\frac{0{,}0819}{500}} = \sqrt{0{,}0001638} \approx 0{,}0128$$То есть типичный «шум» замера — около 1,3 процентного пункта, а два стандартных отклонения — уже 2,6 пункта.
Шаг 7. Возвращаемся к вопросу из вступления. Разница между 0,912 и 0,908 — это 0,4 пункта, то есть в три раза меньше одного стандартного отклонения. Заявлять на этом основании, что одна модель лучше другой, — то же самое, что по одному броску решать, какая монета «удачливее».
Ответ: $\Omega$ — множество всех тестовых выборок размера $n$; $A(\omega)$ — доля правильных ответов на конкретной выборке, дискретная величина со значениями $k/n$; замер 0,912 — это одно значение $A(\omega_0)$, и без оценки разброса ($\approx 1{,}3$ п.п. при $n=500$) сравнивать его с 0,908 бессмысленно.
📌 Полезно понимать, что $\Omega$ можно выбрать и по-другому — и это меняет смысл вопроса. Если тестовая выборка зафиксирована навсегда (как в соревновании с закрытым лидербордом), а случайно только обучение, то $\Omega$ — множество seed'ов, и accuracy — функция от seed'а. Если случайны обе вещи — исход это пара (seed, выборка). Три разных $\Omega$ — три разных разброса, и путать их нельзя. Мы обсуждали это в уроке 226: сначала выпиши $\Omega$, потом считай.
Почему это важно
Сдвиг «число → функция» кажется философским, но у него абсолютно практические последствия, и все они про то, как ты работаешь с результатами.
Первое: любая измеренная величина автоматически получает распределение. Как только accuracy стала функцией от случайного аргумента, вопрос «а какой у неё разброс?» становится законным и осмысленным. Отсюда доверительные интервалы для метрик, бутстрап, «5 seeds, mean ± std» в статьях, статистические тесты в А/В.
Второе: функции можно комбинировать. Разность метрик двух моделей $A_1 - A_2$ — тоже случайная величина, у неё тоже есть распределение, и именно её распределение отвечает на вопрос «правда ли модель 1 лучше». Ты не сравниваешь два числа, ты изучаешь распределение разности. Это ровно то, что делает парный статистический тест.
Третье: источник случайности становится явным. Функция $A$ детерминирована; шумит аргумент. Значит, чтобы уменьшить шум, надо работать с $\Omega$: увеличить тестовую выборку, усреднить по seed'ам, зафиксировать те источники случайности, которые тебе не нужны. Это конкретный список действий, а не «ну, метрики шумят, что поделать».
Дискретные и непрерывные величины
Интуиция
Случайные величины бывают очень разными по устройству множества своих значений, и от этого зависит весь дальнейший аппарат. Сравни два вопроса:
- Сколько объектов из батча модель классифицировала неверно? Ответ — целое число из $\{0, 1, 2, \dots, B\}$. Значений конечное число, они «стоят по отдельности», между 3 и 4 ничего нет.
- Сколько миллисекунд отвечал сервис? Ответ — любое положительное вещественное число: 12,7 или 12,71 или 12,7134... Значения заполняют промежуток сплошь, между любыми двумя есть третье.
Первый тип называют дискретным, второй — непрерывным. Различие не косметическое: для дискретной величины можно перечислить значения и приписать каждому вероятность, а для непрерывной — нельзя, и вот почему.
Представь, что ты выбираешь случайную точку на отрезке $[0, 1]$ так, что все точки «равноправны». Какова вероятность попасть ровно в $0{,}5$? Если бы она равнялась какому-то $\varepsilon > 0$, то, взяв $N > 1/\varepsilon$ разных точек, мы получили бы суммарную вероятность больше единицы — противоречие. Значит, вероятность попасть в любую конкретную точку равна нулю. При этом попасть куда-то на отрезок мы обязаны. Получается парадоксальная на вид, но абсолютно корректная картина: событие вероятности нуль — не обязательно невозможное событие.
Отсюда следует главное практическое различие: для непрерывной величины осмысленны только вопросы о попадании в промежуток, а не в точку. Не «какова вероятность, что запрос занял ровно 12,7 мс», а «какова вероятность, что он занял от 12 до 13 мс». Аппарат, который это описывает, — плотность распределения — будет в уроке 236.
Определение: Случайная величина называется дискретной, если множество её возможных значений конечно или счётно (то есть значения можно занумеровать: $x_1, x_2, x_3, \dots$).
Случайная величина называется непрерывной, если её значения заполняют некоторый промежуток числовой оси, и вероятность попадания в любую отдельную точку равна нулю: $P(X = x) = 0$ для всех $x$.
Пара уточнений, которые сэкономят путаницу.
Счётное — это не только конечное. Число бросков монеты до первого орла может быть равно $1, 2, 3, \dots$ — бесконечно много значений, но их можно занумеровать, и величина дискретна. Соответственно вероятности образуют бесконечный ряд, сумма которого равна единице.
Существуют смешанные величины. Классический пример из практики: время ожидания в очереди, если с вероятностью 0,3 обслуживание начинается мгновенно, а иначе время непрерывно. Тогда $P(T = 0) = 0{,}3 \ne 0$, но на остальной части оси величина ведёт себя как непрерывная. В ML это встречается постоянно: расход пользователя (много нулей + непрерывный хвост), длительность сессии, сумма покупки. Такие величины описывают функцией распределения, которую введут в уроке 235 — она умеет и то, и другое.
Дискретизация непрерывного — вопрос модели, а не природы. Время отклика физически измеряется с конечной точностью, поэтому «строго говоря» оно дискретно (кратно тику таймера). Но описывать его как непрерывное удобнее и точнее по смыслу: сетка настолько мелкая, что дискретная модель ничего не добавляет, а сумма из миллионов слагаемых работает хуже интеграла. Наоборот, accuracy на выборке из 500 объектов формально дискретна с шагом 0,002, но при построении доверительных интервалов её спокойно приближают непрерывным распределением. Выбор модели — за тобой, и он определяется задачей.
Примеры с разбором
Пример 4 (простой): определи тип каждой величины и укажи множество значений
(а) Число объектов редкого класса в батче из 64. (б) Значение функции потерь на батче (cross-entropy). (в) Индекс токена, выбранного языковой моделью на очередном шаге генерации (словарь размера 50 000). (г) Косинусная близость двух случайно взятых эмбеддингов. (д) Число эпох до срабатывания early stopping. (е) Норма градиента на шаге обучения.
Решение:
Шаг 1. (а) Возможные значения — целые от 0 до 64, их 65 штук. Конечное множество → дискретная, значения $\{0,1,\dots,64\}$.
Шаг 2. (б) Cross-entropy на батче — это $-\frac{1}{B}\sum \log \hat{p}_i$, где $\hat{p}_i$ — вещественные вероятности из softmax. Результат может быть любым положительным числом. → непрерывная, значения $(0, +\infty)$.
Шаг 3. (в) Значение — целое от 0 до 49 999. Множество конечно, хотя и велико → дискретная. Заметь важное: тот факт, что значений 50 тысяч, никак не делает величину «почти непрерывной» — вопросы «какова вероятность выбрать токен номер 8123» здесь абсолютно законны и содержательны, в отличие от непрерывного случая.
Шаг 4. (г) Косинус угла между векторами принимает значения из отрезка $[-1, 1]$ и заполняет его сплошь → непрерывная, значения $[-1, 1]$.
Шаг 5. (д) Целое число $1, 2, 3, \dots$ — количество эпох. Дискретная; если верхнего предела эпох нет, множество значений счётно бесконечно → дискретная.
Шаг 6. (е) Норма градиента $\|\nabla L\|$ — неотрицательное вещественное → непрерывная, значения $[0, +\infty)$.
Ответ: дискретные — (а), (в), (д); непрерывные — (б), (г), (е).
📌 Практическое следствие для (в): именно потому, что распределение по токенам дискретно, его можно выписать таблицей — и это ровно вектор softmax. Языковая модель на каждом шаге выдаёт закон распределения дискретной случайной величины «следующий токен». Мы разберём это подробнее ниже.
Пример 5 (средний): время до первого сбоя сервиса $T$ (в часах) устроено так, что $P(T > t) = e^{-t/100}$ при $t \ge 0$. Найди $P(T > 200)$, $P(50 < T \le 150)$ и $P(T = 100)$
Решение:
Шаг 1. Величина непрерывная: время может быть любым неотрицательным вещественным. Работать будем через вероятности попадания в промежутки — единственный законный способ.
Шаг 2. $P(T > 200) = e^{-200/100} = e^{-2} \approx 0{,}1353$.
То есть примерно в 13,5% случаев сервис проживёт дольше 200 часов.
Шаг 3. Для промежутка используем разность. События «$T > 50$» и «$T > 150$» вложены: $\{T > 150\} \subset \{T > 50\}$. Разность этих событий — как раз $\{50 < T \le 150\}$:
$$P(50 < T \le 150) = P(T>50) - P(T>150) = e^{-0{,}5} - e^{-1{,}5}$$Шаг 4. Считаем: $e^{-0{,}5} \approx 0{,}6065$, $e^{-1{,}5} \approx 0{,}2231$.
$$P(50 < T \le 150) \approx 0{,}6065 - 0{,}2231 = 0{,}3834$$Шаг 5. А теперь $P(T = 100)$. Зажмём точку между двумя промежутками. Для любого $\varepsilon > 0$:
$$P(100 - \varepsilon < T \le 100 + \varepsilon) = e^{-(100-\varepsilon)/100} - e^{-(100+\varepsilon)/100}$$При $\varepsilon \to 0$ обе экспоненты стремятся к $e^{-1}$, и разность стремится к нулю. Событие $\{T = 100\}$ содержится в каждом таком промежутке, значит его вероятность не превосходит числа, стремящегося к нулю, и потому равна нулю:
$$P(T = 100) = 0$$Проверим на здравый смысл. Ноль — но не «невозможно». Какое-то значение $T$ обязательно реализуется, и у него та же нулевая вероятность. Просто «попасть в точку» на континууме — это бесконечно тонкое требование.
Ответ: $P(T>200) \approx 0{,}135$; $P(50 < T \le 150) \approx 0{,}383$; $P(T = 100) = 0$.
📌 Следствие, которое пригодится в уроке 235: для непрерывной величины строгие и нестрогие неравенства дают одинаковые вероятности, потому что граничные точки весят ноль: $P(T \le 100) = P(T < 100)$. Для дискретной это неверно категорически: $P(X \le 3)$ и $P(X < 3)$ отличаются ровно на $P(X = 3)$.
Почему это важно
Тип величины определяет весь инструментарий, которым ты будешь пользоваться дальше. Дискретная — таблица вероятностей, суммы, комбинаторика. Непрерывная — плотность, интегралы, замена «суммировать» на «интегрировать». Функция распределения из урока 235 хороша именно тем, что работает одинаково для обоих типов и потому служит общим языком.
В ML разделение проступает буквально в архитектуре моделей. Классификация — дискретный выход, softmax задаёт таблицу вероятностей по классам, лосс — cross-entropy. Регрессия — непрерывный выход, модель предсказывает параметр непрерывного распределения (чаще всего среднее гауссианы), лосс — MSE. Смешанный случай — отдельная головная боль и отдельные модели: zero-inflated регрессия для «много нулей плюс непрерывный хвост», two-part модели в страховании и в прогнозе спроса. Когда видишь в данных гистограмму с гигантским пиком в нуле и длинным хвостом — ты видишь смешанную величину, и обычная регрессия на ней будет систематически врать.
Закон распределения дискретной величины
Интуиция
Знать, что величина принимает значения $0, 1, 2$, — почти ничего не знать. Нужно ещё понимать, с какими вероятностями. Полный ответ на этот вопрос и называется законом распределения.
Для дискретной величины он выписывается проще всего — таблицей в две строки: сверху значения, снизу вероятности.
Определение: Законом распределения дискретной случайной величины $X$ называется соответствие между её возможными значениями $x_1, x_2, \dots, x_n$ и их вероятностями $p_i = P(X = x_i)$. Записывается таблицей:
$X$ $x_1$ $x_2$ $\dots$ $x_n$ $P$ $p_1$ $p_2$ $\dots$ $p_n$ Такую таблицу называют также рядом распределения.
Значения принято выписывать в порядке возрастания и без повторов — каждое значение встречается в таблице ровно один раз, а его вероятность собирает все исходы, на которых величина это значение принимает.
Теперь главное свойство, из которого растёт половина проверок и половина задач.
Условие нормировки: сумма всех вероятностей в законе распределения равна единице:
$$\sum_{i} p_i = 1$$Для величины со счётным множеством значений это равенство понимается как сумма сходящегося ряда: $\sum_{i=1}^{\infty} p_i = 1$.
Откуда оно берётся — стоит понять, а не запомнить. События $\{X = x_1\}, \{X = x_2\}, \dots, \{X = x_n\}$ обладают двумя свойствами. Во-первых, они попарно несовместны: функция $X$ не может на одном исходе принять два разных значения. Во-вторых, они покрывают всё $\Omega$: на любом исходе $X$ принимает какое-то из своих значений. Значит, это полная группа событий — та самая конструкция из урока 226. А вероятности полной группы, по аксиоме сложения, дают в сумме единицу. Всё, вывод закончен.
Отсюда сразу три рабочих применения:
- Проверка. Посчитал распределение — сложи вероятности. Не единица, значит где-то ошибка: потерянное значение, задвоенный исход, арифметика.
- Восстановление недостающего. Если одна вероятность неизвестна, она находится вычитанием: $p_k = 1 - \sum_{i \ne k} p_i$.
- Нахождение параметра. Если вероятности заданы формулой с константой ($p_i = c \cdot a_i$), константа находится из нормировки: $c = 1/\sum a_i$. Ровно этот приём — сердце softmax, там знаменатель и есть нормирующая константа.
Многоугольник распределения
Таблица — это данные, а глазами удобнее смотреть на картинку. Стандартный способ изобразить закон распределения дискретной величины — многоугольник распределения.
Определение: Многоугольником распределения называется ломаная, соединяющая точки $(x_1, p_1), (x_2, p_2), \dots, (x_n, p_n)$ на координатной плоскости: по горизонтали — значения величины, по вертикали — их вероятности.
Строится он так: отмечаешь на оси абсцисс возможные значения, над каждым ставишь точку на высоте, равной вероятности, и соединяешь соседние точки отрезками. Часто дополнительно рисуют вертикальные «палочки» от оси до точек — так нагляднее видно, что вероятность сосредоточена именно в отдельных точках, а не размазана между ними.
Важная оговорка про честность картинки: сами отрезки ломаной не имеют вероятностного смысла. Между $x = 2$ и $x = 3$ величина ничего не принимает, там пустота, и высота ломаной над точкой 2,5 не означает ровным счётом ничего. Ломаная нужна только чтобы глаз уловил форму: где горб, симметрично ли, есть ли тяжёлый хвост. Именно поэтому в статистических пакетах дискретные распределения чаще рисуют «палочками» (stem plot) или столбиками, а не ломаной.
Что читается по многоугольнику мгновенно:
- Где горб — это самое вероятное значение, мода распределения
- Симметрия или перекос — правый хвост длиннее левого означает редкие большие значения (типично для времени отклика, для сумм покупок, для доходов)
- Сколько горбов — два горба почти всегда означают, что данные склеены из двух разных групп
- Сумма всех высот — визуальная проверка нормировки: если высоты явно не дотягивают до единицы в сумме, где-то потеряно значение
Гистограмма, которую ты строишь по данным в pandas или seaborn, — это эмпирический аналог этой картинки: там по вертикали не вероятности, а частоты. Многоугольник распределения — теоретическая версия, гистограмма — наблюдённая. С ростом объёма данных вторая стягивается к первой; это статистическая устойчивость из урока 226, только теперь не для одного события, а сразу для всех значений величины.
Примеры с разбором
Пример 6 (простой): монету бросают три раза. $X$ — число выпавших орлов. Построй закон распределения, проверь нормировку, опиши многоугольник
Решение:
Шаг 1. Выпишем $\Omega$. Каждый исход — тройка результатов, $|\Omega| = 2^3 = 8$:
$$\Omega = \{ООО,\ ООР,\ ОРО,\ ОРР,\ РОО,\ РОР,\ РРО,\ РРР\}$$Монета симметрична, исходы равновозможны, вероятность каждого $1/8$.
Шаг 2. Вычислим $X$ на каждом исходе — просто считаем буквы «О»:
| $\omega$ | $ООО$ | $ООР$ | $ОРО$ | $ОРР$ | $РОО$ | $РОР$ | $РРО$ | $РРР$ |
|---|---|---|---|---|---|---|---|---|
| $X(\omega)$ | 3 | 2 | 2 | 1 | 2 | 1 | 1 | 0 |
Шаг 3. Соберём исходы по значениям — это и есть переход от функции к распределению:
- $\{X = 0\} = \{РРР\}$ — 1 исход
- $\{X = 1\} = \{ОРР,\ РОР,\ РРО\}$ — 3 исхода
- $\{X = 2\} = \{ООР,\ ОРО,\ РОО\}$ — 3 исхода
- $\{X = 3\} = \{ООО\}$ — 1 исход
Шаг 4. Делим количества на $|\Omega| = 8$:
| $X$ | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| $P$ | $1/8$ | $3/8$ | $3/8$ | $1/8$ |
Шаг 5. Проверим нормировку:
$$\frac{1}{8} + \frac{3}{8} + \frac{3}{8} + \frac{1}{8} = \frac{8}{8} = 1 \ \checkmark$$Шаг 6. Сверим с формулой Бернулли из урока 233: $P(X=k) = C_3^k (1/2)^k (1/2)^{3-k} = C_3^k/8$. Коэффициенты $C_3^0, C_3^1, C_3^2, C_3^3 = 1, 3, 3, 1$ ✅ — совпало.
Шаг 7. Многоугольник: четыре точки $(0;\ 0{,}125)$, $(1;\ 0{,}375)$, $(2;\ 0{,}375)$, $(3;\ 0{,}125)$, соединённые ломаной. Картинка симметрична относительно вертикали $x = 1{,}5$ — что логично, ведь орёл и решка равноправны, и замена «орёл ↔ решка» переводит $X$ в $3 - X$. Двух одинаковых максимумов означает две моды: 1 и 2.
Ответ: закон распределения — $P(0)=1/8$, $P(1)=3/8$, $P(2)=3/8$, $P(3)=1/8$; нормировка выполнена; многоугольник симметричен с двумя вершинами в точках 1 и 2.
Пример 7 (средний): величина $X$ принимает значения $1, 2, 3, 4, 5$ с вероятностями, пропорциональными самим значениям: $p_k = c \cdot k$. Найди $c$, выпиши закон распределения и посчитай $P(X \ge 4)$ и $P(X \text{ чётно})$
Решение:
Шаг 1. Запишем условие нормировки:
$$\sum_{k=1}^{5} p_k = \sum_{k=1}^{5} c k = c(1 + 2 + 3 + 4 + 5) = 15c = 1$$Шаг 2. Отсюда $c = 1/15$.
Шаг 3. Подставим и получим таблицу:
| $X$ | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| $P$ | $1/15$ | $2/15$ | $3/15$ | $4/15$ | $5/15$ |
Шаг 4. Проверим: $\frac{1+2+3+4+5}{15} = \frac{15}{15} = 1$ ✅.
Шаг 5. $P(X \ge 4)$ — событие $\{X \ge 4\} = \{X=4\} \cup \{X=5\}$, слагаемые несовместны, значит вероятности складываются:
$$P(X \ge 4) = \frac{4}{15} + \frac{5}{15} = \frac{9}{15} = \frac{3}{5} = 0{,}6$$Шаг 6. $P(X \text{ чётно})$ — это $\{X = 2\} \cup \{X = 4\}$:
$$P = \frac{2}{15} + \frac{4}{15} = \frac{6}{15} = \frac{2}{5} = 0{,}4$$Проверим себя. Величина смещена вправо: чем больше значение, тем оно вероятнее. Поэтому $P(X \ge 4) = 0{,}6$ — больше половины, хотя значений 4 и 5 всего два из пяти. Это согласуется с формой многоугольника: ломаная монотонно возрастает от $1/15$ до $5/15$, горб — на правом краю.
Ответ: $c = 1/15$; $P(X \ge 4) = 0{,}6$; $P(X \text{ чётно}) = 0{,}4$.
📌 Приём «найти константу из нормировки» — это ровно то, что делает softmax. Модель выдаёт логиты $z_1, \dots, z_K$, из них строятся ненормированные веса $a_k = e^{z_k}$, а вероятности получаются делением на сумму: $p_k = a_k / \sum_j a_j$. Знаменатель — та самая $1/c$. Экспонента нужна, чтобы веса были положительны при любых логитах, а деление на сумму — чтобы выполнилось $\sum p_k = 1$. Никакой магии в softmax нет: это построение закона распределения дискретной величины по неотрицательным весам.
Пример 8 (сложный): бросают две кости, $M = \max(i, j)$. Построй закон распределения $M$, проверь нормировку и найди $P(M \ge 5)$
Решение:
Шаг 1. $|\Omega| = 36$, все исходы равновозможны. Значения $M$ — от 1 до 6.
Шаг 2. Считать «в лоб» перебором 36 пар долго и легко ошибиться. Используем приём через накопленную вероятность. Событие $\{M \le k\}$ означает, что обе кости показали не больше $k$. Число таких пар: $k$ вариантов для первой кости, $k$ для второй, итого $k^2$. Значит
$$P(M \le k) = \frac{k^2}{36}$$Шаг 3. Теперь получим вероятности отдельных значений через разность вложенных событий:
$$P(M = k) = P(M \le k) - P(M \le k-1) = \frac{k^2 - (k-1)^2}{36} = \frac{2k-1}{36}$$Шаг 4. Подставляем $k = 1, \dots, 6$:
| $M$ | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| $P$ | $1/36$ | $3/36$ | $5/36$ | $7/36$ | $9/36$ | $11/36$ |
Шаг 5. Проверим нормировку:
$$\frac{1+3+5+7+9+11}{36} = \frac{36}{36} = 1 \ \checkmark$$(Сумма первых шести нечётных чисел равна $6^2 = 36$ — красивое совпадение, которое здесь не совпадение: сумма $\sum_{k=1}^{n}(2k-1) = n^2$, а $n^2/n^2 = 1$.)
Шаг 6. Проверим одно значение прямым перебором, чтобы убедиться в формуле. $\{M = 2\}$: обе координаты не больше 2, максимум ровно 2. Это $(1,2), (2,1), (2,2)$ — три пары, $3/36$ ✅ совпало с формулой $(2\cdot2-1)/36 = 3/36$.
Шаг 7. $P(M \ge 5) = P(M=5) + P(M=6) = \frac{9}{36} + \frac{11}{36} = \frac{20}{36} = \frac{5}{9} \approx 0{,}556$.
Альтернативно через дополнение: $P(M \ge 5) = 1 - P(M \le 4) = 1 - \frac{16}{36} = \frac{20}{36}$ ✅ — сошлось.
Шаг 8. Многоугольник: точки монотонно поднимаются слева направо, от $1/36$ до $11/36$. Максимум — на правом краю, распределение сильно скошено вправо. Интуитивно понятно: максимум двух костей «тянется» к большим значениям, ведь достаточно, чтобы хотя бы одна кость дала шестёрку.
Ответ: $P(M=k) = (2k-1)/36$ для $k=1,\dots,6$; нормировка выполнена; $P(M \ge 5) = 5/9 \approx 0{,}556$.
📌 Приём «сначала $P(X \le k)$, потом разность» — рабочая лошадка для всех задач про максимум и минимум. Он работает потому, что «максимум $\le k$» распадается на независимые условия для каждого слагаемого, а «максимум $= k$» — нет. Это первое появление в курсе функции распределения: величина $F(k) = P(X \le k)$ и есть тот объект, которому целиком посвящён урок 235.
Почему это важно
Закон распределения — это полное описание дискретной величины. Всё остальное, что мы будем считать дальше, — математическое ожидание (урок 237), дисперсия (238), моменты (239) — вычисляется по таблице распределения и не требует никакой дополнительной информации. Таблица первична, числовые характеристики вторичны.
В ML таблица распределения встречается чаще, чем кажется. Выход softmax — это буквально строка $P$ в таблице распределения величины «предсказанный класс». Распределение по токенам в языковой модели — то же самое, только с 50 000 столбцов. Веса в семплировании (importance sampling, negative sampling в word2vec, приоритеты в replay buffer у RL-агентов) — ненормированные $a_i$, которые нормируются делением на сумму. Матрица переходов в марковской цепи — набор таких таблиц, по одной на каждое состояние. Каждый раз, когда ты пишешь p = weights / weights.sum(), ты выполняешь условие нормировки руками.
И проверка суммы — это самый дешёвый и самый эффективный тест в вероятностном коде. Если p.sum() не равно единице с точностью до машинной погрешности, дальше можно не смотреть: где-то потеряно или задвоено значение. В библиотеках сэмплирования эта проверка встроена и валится с ошибкой — не игнорируй её, она права.
Индикатор события — простейшая случайная величина
Интуиция
Есть случайная величина, которая устроена настолько просто, насколько это вообще возможно: она принимает всего два значения, 0 и 1. И при этом она — самый мощный вычислительный инструмент из всех, что мы разберём в этом уроке.
Возьмём событие $A \subseteq \Omega$. Определим функцию: единица, если исход попал в $A$, ноль иначе.
Определение: Индикатором события $A$ называется случайная величина
$$\mathbb{1}_A(\omega) = \begin{cases} 1, & \omega \in A\\ 0, & \omega \notin A\end{cases}$$Обозначают также $I_A$, $\mathbb{1}[A]$, $\chi_A$. Её закон распределения:
$\mathbb{1}_A$ 0 1 $P$ $1 - p$ $p$ где $p = P(A)$. Такое распределение называют распределением Бернулли с параметром $p$.
Смысл конструкции: индикатор переводит событие в число. До этого момента события и числа жили в разных мирах — события можно было объединять и пересекать, числа складывать и умножать. Индикатор строит между ними словарь, причём удивительно аккуратный:
- $\mathbb{1}_{\bar{A}} = 1 - \mathbb{1}_A$ — дополнение события это «единица минус индикатор»
- $\mathbb{1}_{A \cap B} = \mathbb{1}_A \cdot \mathbb{1}_B$ — пересечение это произведение (единица только когда обе единицы)
- $\mathbb{1}_{A \cup B} = \mathbb{1}_A + \mathbb{1}_B - \mathbb{1}_A \mathbb{1}_B$ — включение-исключение в числовом виде
- $\mathbb{1}_A^2 = \mathbb{1}_A$ — потому что $0^2 = 0$ и $1^2 = 1$; индикатор идемпотентен
Последнее свойство выглядит забавным пустяком, но именно оно позволит в уроке 238 вывести дисперсию бернуллиевской величины буквально в одну строчку.
Главная сила индикаторов — в суммировании. Пусть есть события $A_1, A_2, \dots, A_n$. Тогда
$$S = \mathbb{1}_{A_1} + \mathbb{1}_{A_2} + \dots + \mathbb{1}_{A_n}$$— это случайная величина «сколько событий из списка наступило». Каждое слагаемое добавляет единицу ровно тогда, когда его событие произошло. Всё «сколько раз произошло» в теории вероятностей записывается через такую сумму, и это открывает дорогу к самому мощному трюку курса: математическое ожидание суммы равно сумме математических ожиданий всегда, даже для зависимых слагаемых. Мы применим это в уроке 237 и решим за три строчки задачи, которые прямым перебором не решаются вовсе.
Индикаторы в ML: это то, что ты уже пишешь
Открой любой код с метриками — там сплошные индикаторы, просто без названия.
Индикатор правильного ответа. $C_i = \mathbb{1}[f(x_i) = y_i]$ — единица, если модель угадала на $i$-м объекте. В numpy это (y_pred == y_true) — булев массив, который и есть вектор индикаторов. Accuracy тогда:
— среднее индикаторов. Строка (y_pred == y_true).mean(), которую ты писал сто раз, — это буквально формула выше.
Индикатор ошибки. $E_i = \mathbb{1}[f(x_i) \ne y_i] = 1 - C_i$. Это же — функция потерь 0-1 (zero-one loss). Число ошибок на выборке — сумма индикаторов ошибок.
Индикаторы ячеек матрицы ошибок. $\mathbb{1}[y_i = 1] \cdot \mathbb{1}[\hat{y}_i = 1]$ даёт единицу ровно на true positive. Сумма таких произведений — счётчик TP. Precision и recall — отношения сумм индикаторов, и в этом виде видно, почему у них разные знаменатели: суммируются разные наборы.
One-hot кодирование. Вектор [0,0,1,0,0] — это набор индикаторов событий «класс равен $k$» для каждого $k$. Сумма компонент равна единице ровно потому, что классы образуют полную группу: наступает ровно одно событие.
Маски и фильтры. mask = (df.age > 30) & (df.city == 'MSK') — индикатор пересечения двух событий, вычисленный поэлементно. mask.sum() — сколько объектов удовлетворяет условию, mask.mean() — какая доля.
Dropout-маска. Каждый нейрон умножается на свой индикатор «нейрон оставлен», независимую бернуллиевскую величину с параметром $1-p$.
Как только ты начинаешь видеть индикаторы, вероятностная структура кода становится прозрачной. .mean() от булева массива — это оценка вероятности события. .sum() — оценка числа наступлений. И у обеих величин есть распределение, потому что они функции от случайной выборки.
Примеры с разбором
Пример 9 (простой): бросают кость. $A$ = «выпало больше 4». Выпиши индикатор $\mathbb{1}_A$ как функцию, его закон распределения, и проверь тождество $\mathbb{1}_A^2 = \mathbb{1}_A$
Решение:
Шаг 1. Событие как множество: $A = \{5, 6\}$, $P(A) = 2/6 = 1/3$.
Шаг 2. Индикатор как функция на $\Omega$:
| $\omega$ | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| $\mathbb{1}_A(\omega)$ | 0 | 0 | 0 | 0 | 1 | 1 |
Шаг 3. Закон распределения. Значение 1 достигается на двух исходах из шести, значение 0 — на четырёх:
| $\mathbb{1}_A$ | 0 | 1 |
|---|---|---|
| $P$ | $2/3$ | $1/3$ |
Нормировка: $2/3 + 1/3 = 1$ ✅.
Шаг 4. Проверим идемпотентность. Возведём функцию в квадрат поточечно: на исходах 1–4 получаем $0^2 = 0$, на исходах 5–6 получаем $1^2 = 1$. Это в точности исходная функция ✅.
Шаг 5. Отметим следствие: $\mathbb{1}_{\bar{A}} = 1 - \mathbb{1}_A$ — таблица $(1,1,1,1,0,0)$, что соответствует $\bar{A} = \{1,2,3,4\}$ ✅.
Ответ: $\mathbb{1}_A$ принимает 1 на $\{5,6\}$ и 0 на $\{1,2,3,4\}$; распределение Бернулли с $p = 1/3$; $\mathbb{1}_A^2 = \mathbb{1}_A$ выполняется поточечно.
Пример 10 (средний, ML): модель тестируют на 4 объектах, вероятность правильного ответа на каждом равна $0{,}8$, ответы независимы. Выпиши число правильных ответов через индикаторы и построй закон распределения accuracy
Решение:
Шаг 1. Введём индикаторы: $C_i = \mathbb{1}[\text{на }i\text{-м объекте ответ верный}]$, $i = 1,2,3,4$. Каждый — бернуллиевская величина с $p = 0{,}8$.
Шаг 2. Число правильных ответов — сумма:
$$K = C_1 + C_2 + C_3 + C_4$$Accuracy — это $A = K/4$, то есть линейная функция от $K$.
Шаг 3. Так как индикаторы независимы и одинаково распределены, $K$ подчиняется схеме Бернулли (урок 233):
$$P(K = k) = C_4^k \cdot 0{,}8^k \cdot 0{,}2^{4-k}$$Шаг 4. Считаем по значениям. Биномиальные коэффициенты: $C_4^0=1$, $C_4^1=4$, $C_4^2=6$, $C_4^3=4$, $C_4^4=1$.
$$P(K=0) = 1 \cdot 1 \cdot 0{,}2^4 = 0{,}0016$$$$P(K=1) = 4 \cdot 0{,}8 \cdot 0{,}2^3 = 4 \cdot 0{,}8 \cdot 0{,}008 = 0{,}0256$$
$$P(K=2) = 6 \cdot 0{,}64 \cdot 0{,}04 = 0{,}1536$$
$$P(K=3) = 4 \cdot 0{,}512 \cdot 0{,}2 = 0{,}4096$$
$$P(K=4) = 1 \cdot 0{,}4096 \cdot 1 = 0{,}4096$$
Шаг 5. Проверим нормировку:
$$0{,}0016 + 0{,}0256 + 0{,}1536 + 0{,}4096 + 0{,}4096 = 1{,}0000 \ \checkmark$$Шаг 6. Переходим к accuracy делением значений на 4. Вероятности при этом не меняются — меняется только «подпись» под столбцом, потому что событие $\{A = k/4\}$ — это то же самое множество исходов, что и $\{K = k\}$:
| $A$ | 0 | 0,25 | 0,5 | 0,75 | 1 |
|---|---|---|---|---|---|
| $P$ | 0,0016 | 0,0256 | 0,1536 | 0,4096 | 0,4096 |
Шаг 7. Прочитаем результат. Модель, которая «в среднем права в 80% случаев», на выборке из 4 объектов даёт accuracy $= 1$ с вероятностью 41% и accuracy $\le 0{,}5$ с вероятностью $0{,}0016+0{,}0256+0{,}1536 = 0{,}1808$, то есть почти в каждом пятом замере. Ровно единицу вероятность $0{,}8$ не даёт вообще никогда — значения $0{,}8$ просто нет в сетке $\{0;\,0{,}25;\,0{,}5;\,0{,}75;\,1\}$.
Ответ: $K = \sum_{i=1}^4 C_i$ распределена биномиально; закон accuracy — таблица из шага 6; при $n=4$ разброс чудовищный, и замер на такой выборке не несёт информации о качестве.
📌 Вот и математическое объяснение того, почему демонстрация «смотрите, модель правильно ответила на все 5 моих примеров» ничего не доказывает. Модель с настоящей точностью 0,8 даёт такой результат с вероятностью $0{,}8^5 = 0{,}328$ — треть попыток. Даже модель с точностью 0,5 «пройдёт демо» в трёх случаях из ста.
Пример 11 (сложный): в батч из 3 объектов без возвращения берут объекты из пула, где 3 редких и 7 частых. $X$ — число редких в батче. Построй закон распределения через индикаторы и проверь, независимы ли индикаторы
Решение:
Шаг 1. Введём $I_j = \mathbb{1}[j\text{-й выбранный объект — редкий}]$, $j = 1, 2, 3$. Тогда $X = I_1 + I_2 + I_3$.
Шаг 2. Найдём распределение каждого индикатора по отдельности. Для первого очевидно: $P(I_1 = 1) = 3/10 = 0{,}3$.
Для второго — воспользуемся формулой полной вероятности (урок 231), разбив по тому, что было первым:
$$P(I_2 = 1) = P(I_1=1)\cdot\frac{2}{9} + P(I_1=0)\cdot\frac{3}{9} = \frac{3}{10}\cdot\frac{2}{9} + \frac{7}{10}\cdot\frac{3}{9} = \frac{6}{90} + \frac{21}{90} = \frac{27}{90} = 0{,}3$$Интересно: тоже $0{,}3$. Это не совпадение — до того, как мы что-то узнали, все позиции симметричны, у каждой одинаковый шанс оказаться редкой.
Шаг 3. Но независимы ли индикаторы? Проверим условную вероятность:
$$P(I_2 = 1 \mid I_1 = 1) = \frac{2}{9} \approx 0{,}222 \ne 0{,}3 = P(I_2=1)$$Не равны, значит индикаторы зависимы. Логика прозрачна: забрав редкий объект первым, мы обеднили пул, и второму достаётся меньший шанс.
Шаг 4. Из-за зависимости схема Бернулли неприменима, и распределение $X$ надо считать комбинаторно. Всего способов выбрать 3 объекта из 10: $C_{10}^3 = 120$. Число способов взять $k$ редких из 3 и $3-k$ частых из 7: $C_3^k \cdot C_7^{3-k}$.
Шаг 5. Считаем по значениям:
$$P(X=0) = \frac{C_3^0 C_7^3}{120} = \frac{1 \cdot 35}{120} = \frac{35}{120}$$$$P(X=1) = \frac{C_3^1 C_7^2}{120} = \frac{3 \cdot 21}{120} = \frac{63}{120}$$
$$P(X=2) = \frac{C_3^2 C_7^1}{120} = \frac{3 \cdot 7}{120} = \frac{21}{120}$$
$$P(X=3) = \frac{C_3^3 C_7^0}{120} = \frac{1 \cdot 1}{120} = \frac{1}{120}$$
Шаг 6. Нормировка: $\frac{35 + 63 + 21 + 1}{120} = \frac{120}{120} = 1$ ✅.
| $X$ | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| $P$ | $35/120$ | $63/120$ | $21/120$ | $1/120$ |
Шаг 7. Сравним с биномиальным приближением (как если бы выбор был с возвращением, $p = 0{,}3$, $n = 3$): $P(X=0) = 0{,}7^3 = 0{,}343$, а точное значение $35/120 \approx 0{,}292$. Расхождение больше пяти процентных пунктов — потому что пул маленький и «обеднение» существенно. При пуле в миллион объектов разница была бы пренебрежимой, и с возвращением/без возвращения перестало бы иметь значение.
Ответ: распределение гипергеометрическое (таблица в шаге 6); индикаторы зависимы, потому что $P(I_2=1\mid I_1=1) = 2/9 \ne 3/10$; биномиальная формула здесь даёт заметную ошибку.
📌 Это ровно та ситуация, которая возникает при формировании батчей в обучении. Стандартный DataLoader идёт по перемешанной эпохе без возвращения, значит индикаторы «в батче есть редкий класс» зависимы. Bootstrap в бэггинге, наоборот, семплирует с возвращением — там независимость есть. Различие видно на маленьких выборках и исчезает на больших; знать, какой у тебя случай, полезно, когда считаешь вероятность «батч без единого редкого объекта».
Почему это важно
Индикатор — переходник между двумя языками. Слева от него — язык событий из уроков 226–233: пересечения, объединения, условные вероятности. Справа — язык чисел: суммы, средние, дисперсии, графики. Любая формула вида «доля объектов, у которых...» — это среднее индикаторов, а значит, к ней применим весь аппарат следующих уроков.
Практический вывод, который стоит унести: любую метрику вида «доля» надо мысленно раскладывать в сумму индикаторов. Тогда сразу становится видно, из скольких слагаемых она собрана (то есть насколько она шумит), независимы ли слагаемые (то есть можно ли применять привычные формулы), и что произойдёт, если увеличить выборку вдвое. Ответ, забегая вперёд: разброс уменьшится в $\sqrt{2}$ раз, а не вдвое — и это следствие того, как складываются дисперсии независимых слагаемых (урок 238).
Операции над случайными величинами
Интуиция
Раз случайная величина — функция, то с ней можно делать всё, что делают с функциями: умножать на число, прибавлять константу, возводить в квадрат, складывать с другой функцией. Определения задаются поточечно, то есть на каждом отдельном исходе:
$$(aX + b)(\omega) = a \cdot X(\omega) + b$$$$(X + Y)(\omega) = X(\omega) + Y(\omega)$$
$$(XY)(\omega) = X(\omega) \cdot Y(\omega)$$
$$(g(X))(\omega) = g\big(X(\omega)\big)$$
Результат каждой операции — снова случайная величина на том же $\Omega$. Тут важна оговорка, о которой я предупреждал: складывать и умножать можно только величины, заданные на одном пространстве. Если $X$ — результат броска кости в Москве, а $Y$ — в Питере, то сумма $X + Y$ имеет смысл только после того, как мы построили общее пространство пар $(\omega_1, \omega_2)$ и переопределили обе величины на нём. Обычно это делают молча, но помнить про это стоит.
И теперь — центральное предупреждение этого раздела, ради которого он и написан:
🚨 Знать закон распределения $X$ недостаточно, чтобы автоматически знать закон распределения $g(X)$ или $X+Y$. Распределение результата операции нужно выводить, собирая исходы заново.
Механизм вывода всегда один и тот же, и он прямо следует из определения:
- Определи множество возможных значений новой величины.
- Для каждого значения $z$ найди все исходы (или все комбинации значений исходных величин), при которых новая величина равна $z$.
- Сложи вероятности этих исходов — они несовместны, поэтому просто складываются.
- Проверь нормировку.
Разберём, как этот механизм работает для трёх типовых операций.
Линейное преобразование $Y = aX + b$
Это самый простой и самый безобидный случай. Функция $x \mapsto ax + b$ при $a \ne 0$ биективна: разные значения переходят в разные, ничего не склеивается. Поэтому:
$$P(Y = a x_i + b) = P(X = x_i)$$То есть вероятности остаются те же, меняются только значения. Таблица распределения «переезжает» по числовой оси: сдвигается на $b$ и растягивается в $a$ раз. Многоугольник распределения меняет масштаб по горизонтали, но не по вертикали.
Отдельно про $a < 0$: тогда порядок значений переворачивается, и если хочешь выписать таблицу в порядке возрастания, столбцы придётся переставить. Вероятности при этом путешествуют вместе со своими значениями.
В ML линейное преобразование — это нормализация. Когда ты делаешь (x - mean) / std, ты применяешь $aX + b$ с $a = 1/\text{std}$, $b = -\text{mean}/\text{std}$. Форма распределения при этом не меняется — скошенное распределение остаётся скошенным, двугорбое остаётся двугорбым. Стандартизация не «делает данные нормальными», она только меняет масштаб и положение. Это одно из самых живучих заблуждений в прикладной работе.
Квадрат $Y = X^2$ и другие немонотонные функции
Здесь начинается интересное. Функция $x \mapsto x^2$ не биективна на всей оси: $(-2)^2 = 2^2 = 4$. Значит, при возведении в квадрат разные значения склеиваются, и вероятности надо складывать:
$$P(X^2 = 4) = P(X = 2) + P(X = -2)$$Общее правило для произвольной функции $g$:
$$P\big(g(X) = z\big) = \sum_{i:\ g(x_i) = z} P(X = x_i)$$— суммируем по всем прообразам. Число различных значений при этом может уменьшиться (если склейки есть) или остаться прежним (если $g$ инъективна на множестве значений $X$).
Содержательно это означает потерю информации. Величина $X^2$ знает про модуль, но не знает про знак. Если тебе сообщили $X^2 = 4$, ты не можешь сказать, было $X$ равно 2 или $-2$. Тот же эффект в ML: MSE-лосс $ (\hat{y} - y)^2$ не различает недооценку и переоценку, и модель, которая систематически завышает, и модель, которая систематически занижает на ту же величину, получат одинаковый лосс. Если бизнесу эти ошибки стоят по-разному, MSE — неправильный выбор, нужен асимметричный лосс (квантильный, например).
Сумма $Z = X + Y$: свёртка
Самый содержательный случай. Чтобы найти $P(X + Y = z)$, надо перебрать все пары значений, дающие в сумме $z$:
$$P(X + Y = z) = \sum_{x} P(X = x,\ Y = z - x)$$Здесь $P(X = x, Y = y)$ — совместная вероятность, вероятность события $\{X=x\} \cap \{Y=y\}$. И вот критический момент: без знания совместных вероятностей задача не решается вообще. Двух отдельных таблиц для $X$ и для $Y$ недостаточно.
Если же величины независимы (определение — в следующем разделе), совместная вероятность распадается на произведение, и формула превращается в
$$P(X + Y = z) = \sum_x P(X = x)\, P(Y = z - x)$$Эта операция называется свёрткой распределений. Если ты когда-нибудь писал свёртку в CNN или в обработке сигналов — это математически та же самая операция: «перевернуть и просуммировать произведения со сдвигом». Совпадение не случайное, формула буквально одна и та же.
Наглядная иллюстрация того, почему складывать «в лоб» нельзя: пусть $X$ — бросок кости. Величина $X + X = 2X$ принимает значения $2, 4, 6, 8, 10, 12$ с вероятностями $1/6$ каждое. А сумма двух независимых бросков $X_1 + X_2$ принимает те же граничные значения 2 и 12, но с вероятностью $1/36$, и имеет горб на семёрке. Обе величины — «сумма двух костей», но распределения совершенно разные. Разница только в том, зависимы слагаемые или нет.
Примеры с разбором
Пример 12 (простой): $X$ задана таблицей $P(X=-1)=0{,}2$, $P(X=0)=0{,}5$, $P(X=1)=0{,}3$. Найди законы распределения $Y = 3X + 2$ и $Z = X^2$
Решение:
Шаг 1. Проверим исходную нормировку: $0{,}2 + 0{,}5 + 0{,}3 = 1$ ✅.
Шаг 2. Для $Y = 3X + 2$ пересчитываем значения: $3\cdot(-1)+2 = -1$; $3\cdot 0 + 2 = 2$; $3 \cdot 1 + 2 = 5$. Все три различны — склеек нет, вероятности переезжают как есть:
| $Y$ | $-1$ | 2 | 5 |
|---|---|---|---|
| $P$ | 0,2 | 0,5 | 0,3 |
Нормировка сохранилась автоматически ✅.
Шаг 3. Для $Z = X^2$ считаем значения: $(-1)^2 = 1$; $0^2 = 0$; $1^2 = 1$. Значения $-1$ и $1$ склеились в единицу.
Шаг 4. Собираем вероятности склеенных значений:
$$P(Z = 0) = P(X = 0) = 0{,}5$$$$P(Z = 1) = P(X = -1) + P(X = 1) = 0{,}2 + 0{,}3 = 0{,}5$$
| $Z$ | 0 | 1 |
|---|---|---|
| $P$ | 0,5 | 0,5 |
Шаг 5. Нормировка: $0{,}5 + 0{,}5 = 1$ ✅. Число значений уменьшилось с трёх до двух — информация о знаке потеряна.
Ответ: $Y$: значения $-1, 2, 5$ с вероятностями $0{,}2;\ 0{,}5;\ 0{,}3$. $Z$: значения $0, 1$ с вероятностями $0{,}5;\ 0{,}5$.
📌 Заметь любопытное: $Z$ оказалась «честной монеткой», хотя исходная $X$ была явно несимметричной. Функция от случайной величины может иметь распределение, совершенно не похожее на исходное, — ещё один аргумент за то, чтобы выводить, а не угадывать.
Пример 13 (средний): $X$ и $Y$ независимы, каждая принимает значения $0, 1, 2$ с вероятностью $1/3$. Найди закон распределения $S = X + Y$ и сравни с распределением $2X$
Решение:
Шаг 1. Значения $S$ — от $0+0 = 0$ до $2+2 = 4$, то есть $\{0,1,2,3,4\}$.
Шаг 2. Так как величины независимы, вероятность каждой конкретной пары равна произведению:
$$P(X = i,\ Y = j) = \frac{1}{3}\cdot\frac{1}{3} = \frac{1}{9}$$Всего пар $3 \times 3 = 9$, и все равновероятны.
Шаг 3. Перечислим пары по сумме:
- $S = 0$: $(0,0)$ — 1 пара
- $S = 1$: $(0,1), (1,0)$ — 2 пары
- $S = 2$: $(0,2), (1,1), (2,0)$ — 3 пары
- $S = 3$: $(1,2), (2,1)$ — 2 пары
- $S = 4$: $(2,2)$ — 1 пара
Шаг 4. Итого $1+2+3+2+1 = 9$ пар — все девять учтены ✅.
| $S$ | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| $P$ | $1/9$ | $2/9$ | $3/9$ | $2/9$ | $1/9$ |
Нормировка: $\frac{1+2+3+2+1}{9} = 1$ ✅.
Шаг 5. Теперь $2X$: значения $0, 2, 4$, вероятности по $1/3$ (линейное преобразование, склеек нет):
| $2X$ | 0 | 2 | 4 |
|---|---|---|---|
| $P$ | $1/3$ | $1/3$ | $1/3$ |
Шаг 6. Сравним. Обе величины имеют одинаковый диапазон $[0,4]$ и обе симметричны относительно 2. Но $S$ имеет горб в середине и умеет принимать нечётные значения, а $2X$ равномерна и нечётные значения принимать не может вовсе: $P(S = 1) = 2/9 > 0$, но $P(2X = 1) = 0$.
Ответ: $S$ — «треугольное» распределение $\frac{1}{9}, \frac{2}{9}, \frac{3}{9}, \frac{2}{9}, \frac{1}{9}$; $2X$ — равномерное на $\{0,2,4\}$. Величины принципиально разные, хотя обе «удваивают масштаб».
📌 Горб в середине у суммы — это первое дуновение центральной предельной теоремы (урок 243). Складывая независимые одинаково распределённые величины, ты получаешь всё более «колоколообразное» распределение, даже если исходное было равномерным. Уже при сложении двух равномерных получился треугольник; при сложении трёх будет что-то очень похожее на колокол.
Пример 14 (сложный, ML): языковая модель выдала логиты $z = (2;\ 1;\ 0)$ для трёх токенов. Построй закон распределения выбираемого токена при температуре $T = 1$ и $T = 2$, и объясни, что делает температура
Решение:
Шаг 1. Формула сэмплирования с температурой:
$$p_k = \frac{e^{z_k / T}}{\sum_{j} e^{z_j / T}}$$Это построение закона распределения дискретной величины «индекс токена» из неотрицательных весов $e^{z_k/T}$ — то есть нахождение нормирующей константы, ровно как в примере 7.
Шаг 2. При $T = 1$ считаем веса: $e^2 \approx 7{,}389$, $e^1 \approx 2{,}718$, $e^0 = 1$.
Сумма: $7{,}389 + 2{,}718 + 1 = 11{,}107$.
Шаг 3. Делим:
$$p_1 = \frac{7{,}389}{11{,}107} \approx 0{,}665,\qquad p_2 = \frac{2{,}718}{11{,}107} \approx 0{,}245,\qquad p_3 = \frac{1}{11{,}107} \approx 0{,}090$$Проверка: $0{,}665 + 0{,}245 + 0{,}090 = 1{,}000$ ✅.
Шаг 4. При $T = 2$ сначала делим логиты: $z/T = (1;\ 0{,}5;\ 0)$. Веса: $e^1 \approx 2{,}718$, $e^{0{,}5} \approx 1{,}649$, $e^0 = 1$.
Сумма: $2{,}718 + 1{,}649 + 1 = 5{,}367$.
Шаг 5. Делим:
$$p_1 \approx \frac{2{,}718}{5{,}367} \approx 0{,}506,\qquad p_2 \approx \frac{1{,}649}{5{,}367} \approx 0{,}307,\qquad p_3 \approx \frac{1}{5{,}367} \approx 0{,}186$$Проверка: $0{,}506 + 0{,}307 + 0{,}186 = 0{,}999 \approx 1$ ✅ (расхождение — округление).
Шаг 6. Сравним таблицы:
| Токен | 1 | 2 | 3 |
|---|---|---|---|
| $P$ при $T=1$ | 0,665 | 0,245 | 0,090 |
| $P$ при $T=2$ | 0,506 | 0,307 | 0,186 |
Вероятность лидера упала с 0,665 до 0,506, вероятность аутсайдера выросла с 0,090 до 0,186 — вдвое. Распределение стало более равномерным.
Шаг 7. Разберём предельные случаи. При $T \to 0$ отношение весов $e^{(z_1-z_2)/T} \to \infty$, и вся вероятность стягивается к максимальному логиту — получается детерминированный argmax (greedy decoding). При $T \to \infty$ все $z_k/T \to 0$, веса выравниваются, и распределение стремится к равномерному — модель начинает нести полную чушь равновероятно.
Ответ: при $T=1$ — $(0{,}665;\ 0{,}245;\ 0{,}090)$, при $T=2$ — $(0{,}506;\ 0{,}307;\ 0{,}186)$. Температура управляет «остротой» закона распределения: маленькая $T$ — почти детерминированный выбор, большая $T$ — почти равномерный.
📌 Отсюда прямое объяснение известного эффекта: при низкой температуре модель повторяется и уходит в циклы, при высокой — становится креативной, но галлюцинирует. Это не метафора про «характер модели», это буквально форма таблицы распределения дискретной случайной величины «следующий токен». Ровно та же таблица, что была у нас в примере 6 с монетами, только вместо двух столбцов — пятьдесят тысяч.
Почему это важно
Операции над случайными величинами — то место, где чаще всего ошибаются по-крупному. Типичная ошибка звучит так: «$X$ распределена нормально, значит $X^2$ тоже примерно нормально» — нет, $X^2$ для стандартной нормальной даёт распределение хи-квадрат, у которого совсем другая форма (только неотрицательные значения и длинный правый хвост). Или: «лосс на батче — это среднее лоссов, значит его распределение такое же, как у отдельного лосса» — нет, у среднего разброс в $\sqrt{B}$ раз меньше, и форма другая.
Правило, которое стоит внедрить в рефлексы: применил функцию — выведи распределение заново. Для линейных преобразований вывод тривиален (вероятности не меняются), для всего остального требуется работа. И как только ты вывел, многое становится понятным без всякой дополнительной теории: почему лосс на большом батче стабильнее, почему медиана устойчивее среднего к выбросам, почему квадратичный штраф так болезненно реагирует на редкие большие ошибки.
Независимость случайных величин
Интуиция
В предыдущем разделе мы наткнулись на стену: чтобы найти распределение суммы $X+Y$, нужны совместные вероятности $P(X=x,\ Y=y)$, а двух отдельных таблиц не хватает. Независимость — это ровно то условие, при котором стена исчезает и совместные вероятности восстанавливаются перемножением.
Идея продолжает независимость событий из урока 229. Там мы говорили: $P(A \cap B) = P(A)P(B)$. Теперь вместо двух событий — две функции на $\Omega$, и каждая порождает целое семейство событий: $\{X = x\}$ для всех $x$, $\{Y = y\}$ для всех $y$. Требуем, чтобы независимыми были все пары из этих семейств.
Определение: Дискретные случайные величины $X$ и $Y$ на одном пространстве $\Omega$ называются независимыми, если для любых значений $x$ и $y$
$$P(X = x,\ Y = y) = P(X = x)\cdot P(Y = y)$$В общем случае (в том числе для непрерывных величин) определение формулируют через события «не больше»: $P(X \le x,\ Y \le y) = P(X \le x)P(Y \le y)$ для всех $x, y$.
Три вещи, которые стоит зафиксировать сразу.
Независимость — свойство пары. Фраза «величина $X$ независимая» не значит ничего, пока не сказано, от чего именно.
Опровергнуть проще, чем доказать. Чтобы доказать независимость, надо проверить все пары значений. Чтобы опровергнуть — достаточно одной пары, где произведение не сходится. На практике опровергают почти всегда, и проверка занимает три строки.
Величины на общем $\Omega$ зависимы по умолчанию. Если $X$ и $Y$ смотрят на один и тот же исход, независимость — редкая удача. Узнав $X = 6$ для первой кости, ты немедленно знаешь, что $\max(i,j) = 6$.
Практический смысл независимости двойной. Первое: совместное распределение восстанавливается по отдельным, значит работает свёртка и применима схема Бернулли. Второе: только для независимых слагаемых складываются дисперсии (урок 238), а на этом стоят все формулы «разброс падает как $1/\sqrt{n}$» — доверительные интервалы для метрик, расчёт размера выборки в A/B, стандартная ошибка среднего.
И предупреждение, которое приходится повторять постоянно: «разное происхождение» не гарантирует независимости. Две метрики на одной тестовой выборке зависимы, даже если модели обучались отдельно. Ошибки на кадрах одного видео зависимы. Клики одного пользователя зависимы. Именно тут ломаются доверительные интервалы в реальной работе.
Примеры с разбором
Пример 15 (простой): бросают две кости, $X$ — результат первой, $Y$ — второй. Проверь независимость
Решение:
Шаг 1. $\Omega = \{(i,j)\}$, $|\Omega| = 36$, вероятность каждого исхода $1/36$.
Шаг 2. Событие $\{X = i\}$ — все пары с первой координатой $i$, их шесть. Значит $P(X=i) = 6/36 = 1/6$, и так же $P(Y=j) = 1/6$.
Шаг 3. Событие $\{X = i,\ Y = j\}$ состоит ровно из одного исхода — пары $(i,j)$, поэтому $P(X=i,\ Y=j) = 1/36$.
Шаг 4. Сравниваем: $P(X=i)P(Y=j) = \frac16\cdot\frac16 = \frac1{36}$. Равенство выполняется для всех $36$ пар, не для избранных.
Ответ: независимы.
📌 Независимость здесь заложена в саму модель равновозможности $36$ пар. Мы не «доказали независимость костей физически» — мы проверили, что выбранное $\Omega$ ей соответствует.
Пример 16 (средний): те же кости, $X$ — первая, $S = i+j$ — сумма. Независимы ли они?
Решение:
Шаг 1. Достаточно одной пары значений. Берём $x = 1$, $s = 2$.
Шаг 2. Событие $\{X=1,\ S=2\}$: первая кость дала $1$ и сумма равна $2$, значит вторая тоже $1$. Единственный исход $(1,1)$, вероятность $1/36$.
Шаг 3. Отдельные вероятности: $P(X=1) = 1/6$, $P(S=2) = 1/36$ (сумма $2$ бывает только на $(1,1)$).
Шаг 4. Произведение: $\frac16\cdot\frac1{36} = \frac1{216} \ne \frac1{36}$. Определение нарушено.
Шаг 5. Содержательно: узнав $S = 2$, мы полностью узнали и $X$. Информация о сумме несёт информацию о слагаемом.
Ответ: зависимы, так как $1/36 \ne 1/216$.
📌 Общий механизм: $S$ построена из $X$, поэтому не может быть от неё независимой. Любая величина вида $g(X,Y)$ почти всегда зависима с $X$ — нельзя считать «сумму лоссов» и «лосс первого объекта» независимыми.
Пример 17 (сложный, ML): две модели тестируют на одной выборке. $C_1$, $C_2$ — индикаторы правильного ответа на случайно взятом объекте, совместное распределение в таблице. Проверь независимость и найди распределение разности $D = C_1 - C_2$
| $C_2 = 1$ | $C_2 = 0$ | |
|---|---|---|
| $C_1 = 1$ | $0{,}80$ | $0{,}05$ |
| $C_1 = 0$ | $0{,}03$ | $0{,}12$ |
Решение:
Шаг 1. Нормировка: $0{,}80+0{,}05+0{,}03+0{,}12 = 1{,}00$ ✅
Шаг 2. Маргинальные распределения — суммы по строкам и столбцам:
$$P(C_1=1) = 0{,}80+0{,}05 = 0{,}85,\qquad P(C_2=1) = 0{,}80+0{,}03 = 0{,}83$$То есть accuracy моделей $0{,}85$ и $0{,}83$.
Шаг 3. Проверяем клетку $(1,1)$: $0{,}85 \cdot 0{,}83 = 0{,}7055$, а в таблице $0{,}80$. Величины зависимы, зависимость положительная — модели чаще угадывают одновременно, чем при независимости. Причина понятна: объекты бывают лёгкие и трудные, и «трудность» — это тот самый общий $\omega$.
Шаг 4. Распределение $D = C_1 - C_2$. Значения $1$, $0$, $-1$:
$$P(D=1) = 0{,}05,\qquad P(D=0) = 0{,}80+0{,}12 = 0{,}92,\qquad P(D=-1) = 0{,}03$$Нормировка: $0{,}05+0{,}92+0{,}03 = 1{,}00$ ✅
Шаг 5. А теперь ключевое сравнение — каким было бы распределение $D$ при независимости с теми же маргиналами:
$$P(D=1) = 0{,}85\cdot0{,}17 = 0{,}1445,\qquad P(D=-1) = 0{,}15\cdot0{,}83 = 0{,}1245$$Шаг 6. В реальной картине $D$ отклоняется от нуля в $8\%$ случаев, в независимой — в $27\%$. Средняя разница метрик одна и та же ($0{,}02$), но шум этой разницы завышен почти втрое.
Ответ: зависимы ($0{,}80 \ne 0{,}7055$); $D$ принимает $1;\ 0;\ -1$ с вероятностями $0{,}05;\ 0{,}92;\ 0{,}03$.
📌 Это математическая причина, по которой парные тесты сильнее непарных. Сравнивая модели, считай разность на каждом объекте: общий шум «трудности объекта» при вычитании сокращается. То же в A/B: дизайн «до/после на одних пользователях» чувствительнее, чем «две независимые группы».
Почему это важно
Независимость — самое сильное упрощающее предположение в теории вероятностей и самое часто нарушаемое на практике. Когда оно выполняется, работает всё: совместное распределение — произведение отдельных, распределение суммы — свёртка, дисперсии складываются, стандартная ошибка среднего равна $\sigma/\sqrt{n}$, правдоподобие выборки — произведение правдоподобий (то самое «i.i.d.» из каждой второй статьи).
Когда оно нарушается, ломается то же самое, причём молча: формула по-прежнему выдаёт число, просто неверное. Три самых дорогих случая — наблюдения внутри одной сессии или одного видео (эффективный размер выборки в разы меньше номинального), утечка объектов между обучением и тестом (метрика завышена), повторные замеры на одной выборке (модели делят общий шум). Привычка, которую стоит выработать: перед любой формулой с $n$ спрашивать себя — это точно $n$ независимых наблюдений или $n$ строк в таблице?
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: Бросают кость. $Y$ — остаток от деления числа очков на $3$. Выпиши $Y$ как функцию на $\Omega$ и построй закон распределения.
Задание 2: Бросают две монеты, $X$ — число решек. Построй закон распределения и найди $P(X \ge 1)$.
Задание 3: Определи тип каждой величины и укажи множество значений.
(а) Число уникальных объектов в бутстрэп-выборке размера $1000$ из пула в $1000$. (б) Accuracy модели на тесте из $200$ объектов. (в) Время обучения эпохи в секундах. (г) Число ретраев запроса до первого успеха. (д) Максимальная компонента softmax-вектора для $K$ классов. (е) Число слов в ответе языковой модели.
Задание 4: $X$ принимает значения $1,2,3,4$ с вероятностями $0{,}1$; $0{,}3$; $p_3$; $0{,}25$. Найди $p_3$ и $P(X \ge 3)$.
Задание 5: Бросают кость, $A$ — «выпало простое число». Выпиши индикатор $\mathbb{1}_A$, его закон распределения и индикатор противоположного события.
Задание 6: $X$ — число очков на кости, $Y = 2X - 7$. Построй закон распределения $Y$ и найди $P(Y > 0)$.
Задание 7: Монету бросают до первого орла, $X$ — число бросков. Найди $P(X=1)$, $P(X=2)$, $P(X=3)$ и проверь нормировку.
Задание 8: $X$ принимает значения $1,2,3,4$ с вероятностями $0{,}2$; $0{,}3$; $0{,}4$; $0{,}1$. Найди $P(X \le 2)$ и $P(X < 2)$ и объясни разницу.
Задание 9: Точка выбирается равномерно на отрезке $[0;10]$, $X$ — её координата. Найди $P(X \le 3)$, $P(X = 3)$, $P(3 < X \le 7)$.
Задание 10: Бросают две различимые кости, $S = i+j$. Выпиши $\{S = 10\}$ как множество, найди $P(S=10)$ и $P(S \ge 11)$.
Средние (задания 11-20)
Задание 11: Бросают две кости, $m = \min(i,j)$. Построй закон распределения $m$, проверь нормировку и найди $P(m \ge 4)$.
Задание 12: $X$ принимает значения $1,2,3,\dots$ с вероятностями $p_k = c/2^k$. Найди $c$ и $P(X \text{ чётно})$.
Задание 13: Независимые события $A$, $B$, $C$ имеют вероятности $0{,}6$; $0{,}5$; $0{,}4$. Построй закон распределения $S = \mathbb{1}_A + \mathbb{1}_B + \mathbb{1}_C$.
Задание 14: $X$ принимает $-2,-1,0,1,2$ с вероятностями $0{,}1$; $0{,}2$; $0{,}4$; $0{,}2$; $0{,}1$. Найди законы распределения $Y = X^2$ и $Z = |X|$ и объясни, что у них общего.
Задание 15: Независимые индикаторы: $\mathbb{1}_A$ с $P(A)=0{,}3$ и $\mathbb{1}_B$ с $P(B)=0{,}6$. Найди закон распределения $S = \mathbb{1}_A + \mathbb{1}_B$ и сравни с биномиальным при $n=2$, $p=0{,}45$.
Задание 16: В батче из $5$ объектов каждый независимо оказывается редким с вероятностью $0{,}3$. Построй закон распределения числа редких $X$, найди моду и $P(X \ge 2)$.
Задание 17: Время ожидания $T$: с вероятностью $0{,}4$ ответ приходит мгновенно ($T=0$), иначе $P(T>t \mid T>0) = e^{-t/3}$ (в секундах). Найди $P(T>2)$, $P(T\le2)$, $P(0 Задание 18: $X$ — число очков на кости, $Y = \min(X, 4)$. Построй закон распределения $Y$ и объясни, что делает с распределением обрезка. Задание 19: Бросают две кости. $X$ — результат первой, $M = \max(i,j)$. Независимы ли они? Задание 20: Модель тестируют на $100$ объектах, истинная вероятность правильного ответа $p = 0{,}9$. Выпиши множество значений accuracy, объясни, почему замер $0{,}915$ невозможен, и оцени разброс. Задание 21: Модель ошибается на каждом объекте независимо с вероятностью $0{,}1$, батч — $5$ объектов, лосс — доля ошибок (0-1 loss). Построй закон распределения среднего лосса, сравни разброс с батчем из $50$ и объясни, почему 0-1 loss не годится для обучения градиентными методами. Задание 22: Логиты $z = (4;\ 3;\ 1;\ 0)$. Построй закон распределения выбираемого токена (а) при $T=1$; (б) при $T=0{,}5$; (в) при $T=1$ с обрезкой top-$k$, $k=2$. Покажи, что обрезка с перенормировкой — это условная вероятность. Задание 23: Слой из $4$ нейронов, dropout с вероятностью выключения $0{,}5$, все активации равны единице. $X$ — число выживших, $S$ — выход при inverted dropout (сумма выживших, делённая на $1-p$). Построй законы распределения и найди вероятность нулевого выхода. Задание 24: Веса инициализируют случайными знаками: $\varepsilon_i = 2\mathbb{1}_{A_i} - 1$, где $P(A_i) = 0{,}5$. Найди закон распределения $\varepsilon_i$ и предактивации $Z = \varepsilon_1+\varepsilon_2+\varepsilon_3$ при единичных входах. Как разброс $Z$ зависит от числа входов $n$? Задание 25: Бутстрэп: из пула в $3$ объекта берут выборку размера $3$ с возвращением. $I_j$ — индикатор «объект $j$ попал хотя бы раз», $U = I_1+I_2+I_3$. Найди $P(I_j=1)$, проверь независимость индикаторов и построй закон распределения $U$. Задание 26: Две одинаковые модели с истинной точностью $0{,}5$ тестируют на двух независимых выборках по $2$ объекта. Построй закон распределения разности $D = A_1 - A_2$ и найди $P(|D| \ge 0{,}5)$. Задание 27: Модель на выборке из $3$ объектов помечает каждый как «положительный» независимо с вероятностью $0{,}5$; каждый помеченный оказывается истинно положительным независимо с вероятностью $0{,}6$. Построй закон распределения precision и объясни, почему он такой неприятный. Задание 28: В replay buffer четыре перехода с приоритетами $a = (4;\ 1;\ 1;\ 2)$, вероятность выбора пропорциональна приоритету. (а) Построй закон распределения индекса. (б) Приоритет второго вырос до $6$ — пересчитай. (в) Что даёт сглаживание $p_i \propto a_i^{0{,}5}$ (исходные приоритеты)? Задание 29: Вес нейросети $X$ равномерно распределён на $[0;1]$. Его квантуют в $2$ бита двумя способами: (а) с отбрасыванием, $Y = \lfloor 4X\rfloor$; (б) с округлением, $V = \mathrm{round}(4X)$. Построй законы распределения и объясни, чем опасен второй способ. Задание 30: MoE-модель: маршрутизатор выбирает эксперта $A$ с вероятностью $0{,}6$, эксперта $B$ — с $0{,}4$. Лосс эксперта $A$ принимает значения $0{,}1$; $0{,}5$; $1{,}0$ с вероятностями $0{,}5$; $0{,}3$; $0{,}2$, лосс эксперта $B$ — те же значения с вероятностями $0{,}2$; $0{,}3$; $0{,}5$. (а) Построй закон распределения итогового лосса $L$. (б) Найди $P(L \ge 0{,}5)$. (в) Наблюдался лосс $1{,}0$ — какова вероятность, что работал эксперт $B$? ❌ Ошибка 1: считать случайную величину числом, а не функцией Неправильно: «$X$ — случайное число от $1$ до $6$, поэтому $P(X)$ равна одной шестой». Правильно: $X$ — функция $X:\Omega\to\mathbb{R}$. Записи $P(X)$ не существует: вероятность бывает у события, а событие получается только после условия на значение. Правильно: $P(X=3) = 1/6$, $P(X \le 2) = 1/3$. Почему важно: из этой путаницы растут все остальные. Пока $X$ — «число», непонятно, что такое $X^2$ и $X+Y$, откуда берётся зависимость и почему один seed даёт один и тот же результат. Мнемоника: функция детерминирована, случаен её аргумент. ❌ Ошибка 2: применять таблицу распределения к непрерывной величине Неправильно: «Время отклика непрерывно, среднее $12{,}7$ мс, значит $P(T = 12{,}7)$ — самая большая вероятность среди всех значений». Правильно: для непрерывной величины $P(T=t) = 0$ при любом $t$, включая среднее. Осмысленны только промежутки: $P(12 < T \le 13)$. Почему важно: ноль вероятности не означает невозможности — какое-то значение обязательно реализуется, просто каждое отдельное весит ноль. Отсюда же $P(T \le t) = P(T < t)$ для непрерывной величины. Для дискретной это категорически неверно: разница равна $P(T=t)$, и на этом ломается половина расчётов с «не более $k$». ❌ Ошибка 3: забывать про склейку при немонотонном преобразовании Неправильно: «$X$ принимает $-1, 0, 1$ с вероятностями $0{,}2;\ 0{,}5;\ 0{,}3$; значит $X^2$ принимает $1, 0, 1$ с теми же вероятностями». Правильно: значение $1$ получается из двух прообразов, их вероятности складываются: $P(X^2=1) = 0{,}5$. Общее правило: $P(g(X)=z) = \sum_{i:\,g(x_i)=z}P(X=x_i)$. Почему важно: ошибку выдаёт сама таблица — значение $1$ в ней встречается дважды, а такого не бывает. Для линейных преобразований $aX+b$ при $a \ne 0$ склеек нет и вероятности действительно просто переезжают; для всего остального надо собирать прообразы, и проверка нормировки ловит это мгновенно. ❌ Ошибка 4: складывать распределения вместо величин Неправильно: «$X$ и $Y$ равномерны на $\{1,\dots,6\}$, значит $X+Y$ равномерна на $\{2,\dots,12\}$ с вероятностями $1/11$». Правильно: распределение суммы получается свёрткой: $P(X+Y=z) = \sum_x P(X=x)P(Y=z-x)$ для независимых величин. Для двух костей это треугольник с максимумом $6/36$ на семёрке и $1/36$ на краях. Почему важно: ошибка молчаливая — сумма-то нормирована, всё «сходится». Проверка на здравый смысл: сумму $2$ можно получить единственным способом, а $7$ — шестью, значит равновероятными они быть не могут. И отдельно: без независимости даже свёртка не работает, нужны совместные вероятности. У величин $2X$ и $X_1+X_2$ распределения совершенно разные. ❌ Ошибка 5: считать, что стандартизация меняет форму распределения Неправильно: «Сделали Правильно: $(X-\mu)/\sigma$ — линейное преобразование. Оно сдвигает и масштабирует ось, но вероятности не трогает: скошенное остаётся скошенным, двугорбое — двугорбым. Меняются только среднее и разброс. Почему важно: это одно из самых живучих заблуждений в прикладной работе, и оно приводит к неверным доверительным интервалам. Если нужна нормальность — её проверяют (Q-Q plot, тест Шапиро-Уилка) или добиваются нелинейным преобразованием вроде логарифма, которое действительно меняет форму, потому что растягивает разные участки оси по-разному. ❌ Ошибка 6: считать величины независимыми «потому что они про разное» Неправильно: «Модели обучали отдельно, друг о друге они не знают, значит их accuracy независимы, и разбросы разности складываются». Правильно: обе метрики посчитаны на одной тестовой выборке, то есть обе — функции одного $\omega$. Они зависимы, обычно положительно: на лёгких объектах правы обе, на трудных ошибаются обе. Формула для независимых слагаемых здесь завышает разброс разности — иногда втрое, как в примере 17. Почему важно: ошибка работает в обе стороны, и обе дорогие. Завышенный разброс — не заметишь реальное улучшение. Заниженный (когда наблюдения внутри сессии считают независимыми) — объявишь значимым чистый шум. Правило: независимость — свойство модели, которое надо обосновать, а не свойство по умолчанию. ❌ Ошибка 7: не проверять нормировку Неправильно: «Посчитал вероятности всех значений — $0{,}15;\ 0{,}30;\ 0{,}40;\ 0{,}20$ — поехали дальше». Правильно: сумма равна $1{,}05$, значит где-то задвоен исход или потеряно ограничение. Дальше считать бессмысленно. Почему важно: это самая дешёвая проверка в теории вероятностей и самая эффективная: она ловит потерянное значение, задвоенный исход, неверный биномиальный коэффициент, забытую степень. В коде — ровно то же самое: ❌ Ошибка 8: путать значение метрики с самой метрикой Неправильно: «Accuracy модели равна $0{,}912$» — и точка. Правильно: «Замеренная accuracy $0{,}912$ на $500$ объектах; стандартная ошибка $\approx 1{,}3$ п.п., то есть истинное значение лежит примерно в $0{,}89$–$0{,}94$». Почему важно: первая формулировка выдаёт одно наблюдение случайной величины за саму величину. Как только метрика признана функцией от случайной выборки, у неё появляется разброс, и все сравнения надо вести в единицах этого разброса. Без него «модель $A$ лучше $B$ на $0{,}4$ пункта» — утверждение ни о чём. 📝 Ключевые понятия ✅ Случайная величина: числовая функция на пространстве исходов, $X:\Omega\to\mathbb{R}$. Функция детерминирована, случаен её аргумент. Запись $\{X=x\} = \{\omega: X(\omega)=x\}$ — это событие, поэтому $P(X=x)$ осмысленно, а «$P(X)$» — нет. ✅ Дискретная величина: множество значений конечно или счётно, вероятности приписываются отдельным значениям. Счётное включает бесконечное — число бросков до первого орла тоже дискретно. ✅ Непрерывная величина: значения заполняют промежуток, $P(X=x) = 0$ для любого $x$, осмысленны только промежутки, и $P(X
✅ Закон распределения: таблица «значение → вероятность», полное описание дискретной величины. Математическое ожидание, дисперсия и моменты вычисляются по ней и ничего сверх неё не требуют. ✅ Условие нормировки: $\sum_i p_i = 1$, потому что события $\{X=x_i\}$ образуют полную группу. Три применения: проверка расчёта, восстановление недостающей вероятности, нахождение константы в $p_i = c\,a_i$ через $c = 1/\sum a_i$ — это и есть softmax. ✅ Индикатор события: $\mathbb{1}_A(\omega) = 1$ при $\omega\in A$ и $0$ иначе, распределение Бернулли с $p = P(A)$. Словарь: $\mathbb{1}_{\bar A} = 1-\mathbb{1}_A$, $\mathbb{1}_{A\cap B} = \mathbb{1}_A\mathbb{1}_B$, $\mathbb{1}_A^2 = \mathbb{1}_A$. Любая метрика вида «доля» — среднее индикаторов. ✅ Операции над величинами: определяются поточечно и требуют общего $\Omega$. Распределение результата надо выводить: $P(g(X)=z) = \sum_{i:\,g(x_i)=z}P(X=x_i)$. Для $aX+b$ при $a\ne0$ вероятности не меняются; для немонотонного $g$ прообразы склеиваются и вероятности складываются. ✅ Сумма и свёртка: $P(X+Y=z) = \sum_x P(X=x,\,Y=z-x)$, для независимых — $\sum_x P(X=x)P(Y=z-x)$. Двух отдельных таблиц без независимости не хватает, а сумма независимых одинаковых величин «колоколообразнее» слагаемых. ✅ Независимость величин: $P(X=x,\ Y=y) = P(X=x)P(Y=y)$ для всех пар значений; одна нарушенная пара опровергает независимость. Величины на общем $\Omega$ зависимы по умолчанию, а $g(X,Y)$ почти всегда зависима с $X$. ✅ Разброс метрики: для среднего $n$ независимых индикаторов $\sigma = \sqrt{p(1-p)/n}$ — падает как $1/\sqrt n$. Чтобы вдвое уточнить замер, нужно вчетверо больше данных; accuracy живёт на сетке $k/n$, и лишние знаки после запятой ничего не значат. Что нужно было знать до этого урока Урок опирается на весь предыдущий блок. Из урока 226 нужны пространство элементарных исходов и полная группа событий — на них держится определение случайной величины и вывод условия нормировки. Из урока 229 — теоремы сложения и умножения: сложение для несовместных событий даёт вероятности значений, умножение для независимых — совместные вероятности в свёртке. Из урока 230 — условная вероятность, без которой невозможно обсуждать зависимость (через неё же объясняется перенормировка при top-$k$). Из урока 231 — формула полной вероятности, которой мы считали смеси, из урока 232 — формула Байеса для обратной задачи «наблюдали значение, что было причиной». И, конечно, урок 233: схема Бернулли в новых терминах — это просто распределение суммы независимых одинаковых индикаторов, и почти каждая вторая задача урока к ней сводится. Что изучить дальше Ближайший шаг — урок 235, функция распределения $F(x) = P(X \le x)$. Мы уже пользовались ею неявно (приём «сначала $P(M \le k)$, потом разность»), а там она получит имя и свойства. Её главное достоинство — универсальность: одна конструкция описывает дискретные, непрерывные и смешанные величины, для которых таблица не работает. Урок 236 введёт плотность распределения, где вместо сумм появятся интегралы. Уроки 237-239 дадут числовые характеристики: математическое ожидание (там раскроется вся мощь индикаторов — линейность работает даже для зависимых слагаемых), дисперсию (где сложение потребует уже настоящей независимости) и моменты. Урок 240 соберёт основные распределения в единый каталог. Уроки 241-242 — центральная предельная теорема и закон больших чисел: почему сумма независимых слагаемых становится колоколом (первое дуновение этого мы видели, складывая две равномерные величины и получая треугольник) и почему выборочное среднее сходится к истинному. А уроки 243-244 — многомерные случайные величины, ковариация и корреляция, где та зависимость, которую сегодня мы умеем только констатировать, начнёт измеряться количественно. Где это нужно в жизни 💻 В программировании. Любой вызов генератора случайных чисел возвращает значение случайной величины, а фиксация seed — это фиксация $\omega$, поэтому воспроизводимость и работает. Хеш-функции, балансировка нагрузки, рандомизированные структуры данных (skip list, bloom filter), нагрузочное тестирование, оценка времени отклика по перцентилям — везде объект анализа это распределение, а не одно число. 🤖 В ML/AI. Softmax — построение закона распределения из неотрицательных весов. Температура, top-$k$ и nucleus — управление формой этого закона и обусловливание. Dropout — независимые бернуллиевские индикаторы. Accuracy, precision, recall — функции от случайной тестовой выборки, то есть величины с распределением. Инициализация весов — выбор распределения, у которого разброс предактивации не зависит от ширины слоя. Квантование — превращение непрерывной величины в дискретную. Батч-шум в SGD, приоритизированный replay в RL, negative sampling — всё это законы распределения в чистом виде. 📊 В Data Science. Гистограмма — эмпирический аналог многоугольника распределения. Двугорбая гистограмма означает смесь двух групп, гигантский пик в нуле плюс хвост — смешанную величину, на которой обычная регрессия систематически врёт. Доверительные интервалы, бутстрэп, A/B-тесты, расчёт размера выборки — всё построено на признании метрики случайной величиной. Парные тесты сильнее непарных именно потому, что учитывают зависимость величин на общих объектах. 🔬 В науке. Любое измерение — случайная величина: сигнал плюс шум. Теория ошибок, планирование эксперимента, стандартное отклонение среднего $\sigma/\sqrt n$ — прямые следствия сегодняшнего материала. В физике это распределение по энергиям, в биологии — по признакам, в медицине — время до события в анализе выживаемости (типичная смешанная величина), в экономике — доходы с тяжёлым правым хвостом. 💡 Термин появился позже понятия почти на двести лет. Гюйгенс в 1657 году уже считал среднее значение выигрыша, то есть работал с величиной и её распределением, но выделить объект не мог: не было языка функций. Само понятие функции оформилось только к XIX веку, а строгое определение случайной величины как измеримой функции дал Колмогоров в 1933-м. Практика опередила теорию на десять поколений математиков. 💡 Греческие $\xi$ и $\eta$ — след школы Чебышёва. В англоязычных текстах пишут $X$ и $Y$, в русских традиционно «кси» и «эта», и по обозначениям в статье до сих пор можно угадать, где учился автор. Обозначение $\mathbb{1}$ для индикатора сравнительно новое: до середины XX века писали $\chi_A$ — «характеристическая функция множества», и этот термин до сих пор живёт в теории меры. 💡 Слово «регрессия» родилось из работы со случайными величинами и означало не то, что сейчас. Гальтон в 1880-х измерял рост родителей и детей и обнаружил «regression towards mediocrity»: у очень высоких родителей дети в среднем ниже родителей, у очень низких — выше. Он считал это биологическим законом наследственности, а на самом деле это чисто вероятностный эффект, возникающий у любых двух коррелированных величин. Он же объясняет «проклятие второго сезона» у спортсменов и иллюзию, что наказание работает лучше похвалы. 💡 Температура в сэмплировании — буквально температура из физики. Формула $p_k \propto e^{z_k/T}$ — распределение Больцмана, описывающее вероятность найти частицу в состоянии с энергией $z_k$. Оно появилось в статистической механике в 1870-х, задолго до нейросетей. При низкой температуре система «замерзает» в состоянии с минимальной энергией (у нас — argmax), при высокой все состояния равновероятны. Тот же приём под названием «имитация отжига» используют в оптимизации с 1983 года. 💡 Индикаторы дали одно из самых элегантных доказательств в комбинаторике. Задача о числе неподвижных точек случайной перестановки (сколько людей получат обратно свою шляпу, если раздать шляпы наугад) прямым перебором решается тяжело, а через индикаторы — в две строчки: $X = \sum\mathbb{1}[i\text{-й получил свою}]$, каждый индикатор имеет вероятность $1/n$, среднее суммы равно $n\cdot\frac1n = 1$. Ровно один человек в среднем — хоть при десяти людях, хоть при десяти миллионах. Индикаторы при этом зависимы, но для среднего это неважно. 1. Начинай с вопроса «что такое один исход?» Прежде чем писать формулы, ответь письменно: что такое $\omega$, какая функция от него мне нужна, каково множество её значений. Половина ошибок в задачах на случайные величины — это неверно выбранное $\Omega$, а не арифметика. Пример: «разброс accuracy» имеет три разных ответа в зависимости от того, что случайно: тестовая выборка, seed обучения или и то и другое. Пока не выбрал — считать нечего. 2. Складывай строку $P$ после каждой таблицы Условие нормировки — бесплатный тест, ловящий почти любую арифметическую ошибку: потерянное значение, задвоенный исход, неверный биномиальный коэффициент, забытую степень. Пример: получил $0{,}168+0{,}360+0{,}309+0{,}132+0{,}028+0{,}002 = 0{,}999$ — сошлось с точностью до округления, можно идти дальше. Получил $1{,}05$ — ищи ошибку, а не считай дальше. 3. Для максимума и минимума считай накопленную вероятность Событие $\{\max \le k\}$ распадается на независимые условия для каждого слагаемого, а $\{\max = k\}$ — нет. Считай сначала $P(\max \le k)$ (для минимума — $P(\min \ge k)$), потом бери разность соседних значений. Пример: для максимума двух костей $P(M \le k) = k^2/36$, отсюда $P(M=k) = \frac{k^2-(k-1)^2}{36} = \frac{2k-1}{36}$ — вся таблица за строку вместо перебора $36$ пар. 4. Раскладывай любую «долю» в сумму индикаторов Как только метрика записана как $\frac1n\sum\mathbb{1}[\dots]$, сразу видно: из скольких слагаемых она собрана (насколько шумит), независимы ли они и что будет при росте $n$. Пример: accuracy $= \frac1n\sum\mathbb{1}[f(x_i)=y_i]$, отсюда мгновенно $\sigma = \sqrt{p(1-p)/n}$. При $n=100$ и $p \approx 0{,}9$ это $0{,}03$ — значит, третий знак после запятой в отчёте не несёт информации. 5. Проверяй независимость на одной удобной паре значений Чтобы опровергнуть независимость, достаточно одного контрпримера. Бери самое вырожденное сочетание — крайние значения, минимумы, максимумы: там зависимость проступает грубее всего. Пример: $X$ — первая кость, $M = \max(i,j)$; берём $x = m = 1$: совместная вероятность $1/36$, произведение $\frac16\cdot\frac1{36} = \frac1{216}$. Вопрос закрыт за две строки. 6. Помни разницу между $aX$ и $X_1+X_2$ Умножение на константу растягивает распределение, не меняя формы. Сложение независимых копий меняет форму: появляется горб в середине, а разброс растёт не в $n$ раз, а в $\sqrt n$. Пример: $2X$ для кости даёт равномерное распределение на $\{2,4,\dots,12\}$, а $X_1+X_2$ — треугольник с пиком на семёрке. Диапазон одинаковый, распределения совершенно разные. 7. Ищи нормировку в чужом коде — она всегда там есть Любая строка вида Пример: в приоритизированном replay buffer изменение приоритета одного перехода меняет вероятности всех — знаменатель общий. Отсюда и дерево отрезков в реализациях: пересчитывать сумму за $O(n)$ на каждом шаге слишком дорого. 8. Считай softmax со сдвигом на максимум При больших логитах прямое вычисление $e^{z_k}$ переполняется. Вычти максимум перед экспонированием: $p_k = \dfrac{e^{z_k - z_{\max}}}{\sum_j e^{z_j - z_{\max}}}$. Результат не меняется (числитель и знаменатель сокращаются на $e^{z_{\max}}$), а переполнение исчезает. Пример: логиты $(1000;\ 999;\ 998)$ дают Мы сделали один шаг абстракции — и он оказался тем самым шагом, после которого начинается вся остальная теория вероятностей. Раньше были события, умеющие отвечать только «да» или «нет». Теперь есть функция из $\Omega$ в $\mathbb{R}$, а вместе с ней — числа, которые можно складывать, усреднять, преобразовывать и рисовать. Закон распределения полностью описывает дискретную величину, условие нормировки проверяет расчёт и находит недостающие константы, индикатор переводит любое событие в число, а операции над величинами требуют аккуратного вывода, а не угадывания. Самое ценное, что стоит унести, — привычка смотреть на любое измеренное число как на одно значение функции от случайного аргумента. Accuracy $0{,}912$ — не характеристика модели, а точка из распределения. Лосс на батче — не «качество на данный момент», а величина с разбросом, падающим как $1/\sqrt{B}$. Разница между двумя моделями — не число, а случайная величина со своим шумом. Эта оптика меняет практику сильнее любой формулы: она заставляет спрашивать «а сколько это в сигмах?» до того, как делать выводы, и ровно это отличает обоснованное решение от красивого самообмана. 💡 Совет: после каждого построенного распределения делай две вещи — складывай строку вероятностей и проверяй одно значение независимым способом (перебором, дополнением, другой формулой). Тридцать секунд ловят подавляющее большинство ошибок ещё до того, как они попадут в выводы. В коде та же дисциплина: В следующем уроке — функция распределения $F(x) = P(X \le x)$. Мы уже пользовались ею тайком: приём «сначала $P(M \le k)$, потом разность» и был её вычислением. Там она получит имя, свойства и главное достоинство — универсальность: одна конструкция описывает дискретные, непрерывные и смешанные величины, для которых таблица распределения не работает в принципе. А заодно станет понятно, откуда берутся квантили и все те $p50$/$p95$/$p99$, которыми меряют время отклика в проде. Погнали! 🚀 Попрактикуйся на задачах и получи персональные рекомендации от AI
Продвинутые (задания 21-30)
Частые ошибки
(x - mean) / std, теперь данные нормальные, можно применять тесты для нормального распределения».
assert abs(p.sum() - 1) < 1e-9 перед любым семплированием. Библиотеки делают эту проверку за тебя и падают с ошибкой; не подавляй это исключение, оно право.
Главное запомнить
Связь с другими темами курса
Интересные факты
Лайфхаки и полезные трюки
p = w / w.sum(), softmax(logits), probs /= probs.sum() — это построение закона распределения дискретной величины. Найдя её, сразу понимаешь, что здесь сэмплируется и что будет, если поменять веса.
inf/inf при прямом счёте и корректные $(0{,}665;\ 0{,}245;\ 0{,}090)$ после вычитания максимума. Именно так устроен любой промышленный softmax.
Заключение
assert abs(p.sum() - 1) < 1e-9 перед каждым сэмплированием стоит одну строку, а спасает часы отладки.Понял тему? Закрепи в боте! 🚀