Язык

Язык математики: обозначения, функции, логарифмы

← 00½. База для начинающих: школьная математика за один вечер · 🏠 Оглавление · 02. Линейная алгебра →

📓 Ноутбук модуля · Open In Colab

Половина «непонятности» статей по ML — это просто незнакомые обозначения. Этот модуль — словарь.

Словарь обозначений

Обозначение Читается Что значит В коде
$x \in \mathbb{R}$ x принадлежит R вещественное число float
$\mathbf{x} \in \mathbb{R}^n$ вектор длины n столбец из n чисел x.shape == (n,)
$X \in \mathbb{R}^{m \times n}$ матрица m на n m строк, n столбцов X.shape == (m, n)
$x_i$, $X_{ij}$ i-й элемент индексация (в математике с 1!) x[i-1], X[i-1, j-1]
$X^\top$ транспонирование строки ↔ столбцы X.T
$\sum_{i=1}^{n} x_i$ сумма $x_1 + \dots + x_n$ x.sum()
$\prod_{i=1}^{n} x_i$ произведение $x_1 \cdot \ldots \cdot x_n$ x.prod()
$\lVert \mathbf{x} \rVert_2$ норма длина вектора np.linalg.norm(x)
$\nabla_\theta L$ градиент L по θ вектор частных производных loss.backward(); theta.grad
$\frac{\partial L}{\partial w}$ частная производная чувствительность L к w —
$\mathbb{E}[X]$ матожидание среднее по распределению x.mean() (оценка)
$p(y \mid x)$ p от y при условии x условная вероятность выход модели
$\sim$ распределено как $x \sim \mathcal{N}(0, 1)$ np.random.randn()
$\arg\max_x f(x)$ аргмакс точка, где f максимальна np.argmax
$\odot$ произведение Адамара поэлементное умножение a * b
$\mathbb{1}[\cdot]$ индикатор 1 если условие верно, иначе 0 (cond).astype(int)
$\triangleq$, $:=$ по определению вводим обозначение =
$\propto$ пропорционально равно с точностью до константы —
$\theta$, $W$, $b$ параметры веса модели model.parameters()
$\hat{y}$ y с крышкой предсказание модели model(x)

💡 Соглашение в ML: векторы — столбцы, но батч данных $X \in \mathbb{R}^{N \times d}$ хранит объекты в строках. Поэтому в статьях пишут $W\mathbf{x}$, а в коде — X @ W.T.

Экспонента и логарифм — главная пара в ML

$$ \log(ab) = \log a + \log b, \qquad \log a^k = k \log a, \qquad e^{\log x} = x, \qquad \log e^{x} = x $$

Почему логарифмы везде: 1. Произведение → сумма. Правдоподобие $\prod_i p(y_i)$ из миллиона множителей < 1 даёт 0 в float. Сумма логарифмов $\sum_i \log p(y_i)$ — нормальное число. 2. Монотонность. $\arg\max_\theta \prod p = \arg\max_\theta \sum \log p$ — оптимум не меняется. 3. Удобные производные. $(\log x)' = 1/x$, $(e^x)' = e^x$.

import numpy as np
p = np.full(1000, 0.01)
print(np.prod(p))          # 0.0  — underflow
print(np.sum(np.log(p)))   # -4605.17 — всё в порядке

Сигмоида и softmax — превращают числа в вероятности

$$ \sigma(z) = \frac{1}{1 + e^{-z}}, \qquad \sigma'(z) = \sigma(z)\,(1 - \sigma(z)), \qquad \sigma(-z) = 1 - \sigma(z) $$

$$ \mathrm{softmax}(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}, \qquad \sum_i \mathrm{softmax}(\mathbf{z})_i = 1 $$

  • Сигмоида: одно число (логит) → вероятность класса 1 из 2.
  • Softmax: K логитов → распределение по K классам. Сигмоида — частный случай softmax для K = 2: $\sigma(z) = \mathrm{softmax}([z, 0])_1$.
  • Softmax не меняется от сдвига: $\mathrm{softmax}(\mathbf{z} + c) = \mathrm{softmax}(\mathbf{z})$ — на этом построен стабильный расчёт (модуль 13).

softmax temperature

Температура $T$: $\mathrm{softmax}(\mathbf{z}/T)$. Маленькая T — уверенно и детерминированно, большая — разнообразно и случайно. Это та самая temperature в API LLM.

Полезные функции и их графики — запомнить «форму»

Функция Форма Где в ML
$e^x$ быстро растёт, всегда > 0 softmax, правдоподобие
$\log x$ медленно растёт, $\log 1 = 0$, $\to -\infty$ при $x \to 0$ лоссы, энтропия
$-\log p$ 0 при p = 1, → ∞ при p → 0 cross-entropy: штраф за уверенную ошибку
$x^2$ парабола, гладкая MSE, L2-регуляризация
$\lvert x\rvert$ «галочка», недифференцируема в 0 MAE, L1-регуляризация
$\max(0, x)$ ReLU активации, hinge loss
$\log(1 + e^x)$ softplus — гладкий ReLU стабильная запись BCE

Суммы, которые надо узнавать в лицо

$$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2}, \qquad \sum_{k=0}^{\infty} r^k = \frac{1}{1-r}\ (|r| < 1), \qquad \frac{1}{n}\sum_{i=1}^{n} x_i = \bar{x} $$

Геометрическая прогрессия встречается в дисконтировании наград в RL ($\sum_t \gamma^t r_t$) и в экспоненциальном скользящем среднем в Adam и BatchNorm: вес наблюдения $k$ шагов назад равен $(1-\beta)\beta^k$, эффективное окно ≈ $1/(1-\beta)$ (β = 0.9 → ~10 шагов, β = 0.999 → ~1000).

🎯 На собеседовании

  1. Почему оптимизируют log-likelihood, а не likelihood? — Численная устойчивость (произведение → сумма) и тот же argmax.
  2. Чем softmax отличается от сигмоиды? — Softmax нормирует по K классам (взаимоисключающие), сигмоида даёт независимые вероятности (multi-label).
  3. Что делает температура? — Делит логиты: T < 1 обостряет распределение, T > 1 сглаживает.

🏋️ Практика модуля

1.1. Докажите, что $\sigma'(z) = \sigma(z)(1-\sigma(z))$, и проверьте численно.

▶️ Решение $$ \sigma'(z) = \frac{e^{-z}}{(1+e^{-z})^2} = \frac{1}{1+e^{-z}} \cdot \frac{e^{-z}}{1+e^{-z}} = \sigma(z)\,\bigl(1-\sigma(z)\bigr) $$
import numpy as np
s = lambda z: 1 / (1 + np.exp(-z))
z, h = 0.7, 1e-6
print((s(z + h) - s(z - h)) / (2 * h), s(z) * (1 - s(z)))   # 0.2217 0.2217
Максимум производной — 0.25 в нуле. Поэтому через 10 сигмоидных слоёв градиент умножается минимум на $0.25^{10} \approx 10^{-6}$ — затухание градиента.

1.2. Покажите, что softmax двух классов равен сигмоиде от разности логитов.

▶️ Решение $$ \frac{e^{z_1}}{e^{z_1} + e^{z_2}} = \frac{1}{1 + e^{-(z_1 - z_2)}} = \sigma(z_1 - z_2) $$ Вывод: бинарный классификатор с 2 выходами и softmax эквивалентен 1 выходу с сигмоидой — лишний выход избыточен.

1.3. Эффективное окно EMA с β = 0.99 — сколько шагов? Какой вес у наблюдения 100 шагов назад?

▶️ Решение Окно ≈ $1/(1-0.99) = 100$ шагов. Вес: $(1 - 0.99) \cdot 0.99^{100} \approx 0.01 \cdot 0.366 = 0.0037$ — в $e \approx 2.7$ раза меньше веса свежего наблюдения (0.01).

← 00½. База для начинающих: школьная математика за один вечер · 🏠 Оглавление · 02. Линейная алгебра →