Перейти к содержанию

Формулы нейросетей

~5 минут чтения

Предварительно: Формулы ML-алгоритмов

Справочник формул для всех ключевых компонентов нейросетей: от функций активации (7 видов) и loss-функций (7 видов) до оптимизаторов (SGD, Adam, AdamW), нормализации (BatchNorm, LayerNorm, RMSNorm), архитектур (CNN, RNN/LSTM/GRU, Transformer, ViT, Diffusion, MoE) и методов квантизации. На ML-интервью чаще всего просят записать формулу Attention (\(\text{softmax}(QK^T/\sqrt{d_k})V\)), объяснить backpropagation через chain rule, и сравнить Adam vs SGD with momentum.


Основы

Нейрон

\[z = \sum_{i=1}^{n} w_i x_i + b = \mathbf{w}^T \mathbf{x} + b\]
\[a = \sigma(z)\]

Forward Pass (слой)

\[\mathbf{z}^{[l]} = \mathbf{W}^{[l]} \mathbf{a}^{[l-1]} + \mathbf{b}^{[l]}\]
\[\mathbf{a}^{[l]} = g^{[l]}(\mathbf{z}^{[l]})\]

Функции активации

Sigmoid

\[\sigma(z) = \frac{1}{1 + e^{-z}}\]
\[\sigma'(z) = \sigma(z)(1 - \sigma(z))\]

Tanh

\[\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}\]
\[\tanh'(z) = 1 - \tanh^2(z)\]

ReLU

\[\text{ReLU}(z) = \max(0, z)\]
\[\text{ReLU}'(z) = \begin{cases} 1 & z > 0 \\ 0 & z \leq 0 \end{cases}\]

Leaky ReLU

\[\text{LeakyReLU}(z) = \max(\alpha z, z)\]
\[\text{LeakyReLU}'(z) = \begin{cases} 1 & z > 0 \\ \alpha & z \leq 0 \end{cases}\]

GELU

\[\text{GELU}(z) = z \cdot \Phi(z) \approx 0.5z(1 + \tanh[\sqrt{2/\pi}(z + 0.044715z^3)])\]

Swish

\[\text{Swish}(z) = z \cdot \sigma(z)\]

Softmax

\[\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}\]

Loss Functions

Mean Squared Error

\[L = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2\]

Binary Cross-Entropy

\[L = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i)]\]

Categorical Cross-Entropy

\[L = -\frac{1}{n} \sum_{i=1}^{n} \sum_{k=1}^{K} y_{ik} \log(\hat{y}_{ik})\]

Focal Loss

\[L = -\alpha_t (1 - p_t)^\gamma \log(p_t)\]

Huber Loss

\[L = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & |y - \hat{y}| \leq \delta \\ \delta(|y - \hat{y}| - \frac{1}{2}\delta) & |y - \hat{y}| > \delta \end{cases}\]

Triplet Loss

\[L = \max(\|f(a) - f(p)\|^2 - \|f(a) - f(n)\|^2 + \alpha, 0)\]

Contrastive Loss

\[L = (1-y)\frac{1}{2}D^2 + y\frac{1}{2}\max(0, m-D)^2\]

Backpropagation

Chain Rule

\[\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}\]

Градиенты для слоя

\[\delta^{[l]} = \frac{\partial L}{\partial \mathbf{z}^{[l]}}\]
\[\frac{\partial L}{\partial \mathbf{W}^{[l]}} = \delta^{[l]} (\mathbf{a}^{[l-1]})^T\]
\[\frac{\partial L}{\partial \mathbf{b}^{[l]}} = \delta^{[l]}\]
\[\delta^{[l-1]} = (\mathbf{W}^{[l]})^T \delta^{[l]} \odot g'^{[l-1]}(\mathbf{z}^{[l-1]})\]

Оптимизация

SGD

\[\theta_{t+1} = \theta_t - \alpha \nabla L(\theta_t)\]

SGD with Momentum

\[v_t = \beta v_{t-1} + \nabla L(\theta_t)\]
\[\theta_{t+1} = \theta_t - \alpha v_t\]

Nesterov Momentum

\[v_t = \beta v_{t-1} + \nabla L(\theta_t - \alpha \beta v_{t-1})\]
\[\theta_{t+1} = \theta_t - \alpha v_t\]

Adagrad

\[G_t = G_{t-1} + (\nabla L(\theta_t))^2\]
\[\theta_{t+1} = \theta_t - \frac{\alpha}{\sqrt{G_t + \epsilon}} \nabla L(\theta_t)\]

RMSprop

\[v_t = \beta v_{t-1} + (1-\beta)(\nabla L(\theta_t))^2\]
\[\theta_{t+1} = \theta_t - \frac{\alpha}{\sqrt{v_t + \epsilon}} \nabla L(\theta_t)\]

Adam

\[m_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla L(\theta_t)\]
\[v_t = \beta_2 v_{t-1} + (1-\beta_2) (\nabla L(\theta_t))^2\]
\[\hat{m}_t = \frac{m_t}{1 - \beta_1^t}\]
\[\hat{v}_t = \frac{v_t}{1 - \beta_2^t}\]
\[\theta_{t+1} = \theta_t - \frac{\alpha \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}\]

Типичные значения: \(\beta_1 = 0.9\), \(\beta_2 = 0.999\), \(\epsilon = 10^{-8}\)

AdamW

\[\theta_{t+1} = \theta_t - \alpha \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)\]

Regularization

L2 (Weight Decay)

\[L_{total} = L + \frac{\lambda}{2} \sum_{l} \|\mathbf{W}^{[l]}\|_F^2\]

L1

\[L_{total} = L + \lambda \sum_{l} \|\mathbf{W}^{[l]}\|_1\]

Dropout

\[\tilde{a}^{[l]} = a^{[l]} \odot \mathbf{m}\]

где \(\mathbf{m} \sim \text{Bernoulli}(p)\)

При inference: \(a^{[l]}_{test} = p \cdot a^{[l]}\)


Normalization

Batch Normalization

\[\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}\]
\[y = \gamma \hat{x} + \beta\]

где \(\mu_B = \frac{1}{m}\sum_{i=1}^{m} x_i\), \(\sigma_B^2 = \frac{1}{m}\sum_{i=1}^{m}(x_i - \mu_B)^2\)

Layer Normalization

\[\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}\]
\[y = \gamma \hat{x} + \beta\]

где \(\mu\), \(\sigma\) по признакам (для каждого примера отдельно)

RMSNorm

\[\hat{x} = \frac{x}{\sqrt{\frac{1}{n}\sum_{i=1}^{n} x_i^2 + \epsilon}}\]

CNN

Convolution

\[(f * g)(i, j) = \sum_{m} \sum_{n} f(m, n) \cdot g(i-m, j-n)\]

Output size

\[O = \frac{W - K + 2P}{S} + 1\]

где W = input size, K = kernel size, P = padding, S = stride

Receptive Field

\[RF_{l} = RF_{l-1} + (K_l - 1) \times \prod_{i=1}^{l-1} S_i\]

RNN

Vanilla RNN

\[h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h)\]
\[y_t = W_{hy} h_t + b_y\]

LSTM

\[f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)\]

(forget gate) $\(i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)\)$

(input gate) $\(\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)\)$

(candidate) $\(C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t\)$

(cell state) $\(o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)\)$

(output gate) $\(h_t = o_t \odot \tanh(C_t)\)$

(hidden state)

GRU

\[z_t = \sigma(W_z \cdot [h_{t-1}, x_t])\]

(update gate) $\(r_t = \sigma(W_r \cdot [h_{t-1}, x_t])\)$

(reset gate) $\(\tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t])\)$

(candidate) $\(h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t\)$


Transformer

Scaled Dot-Product Attention

\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V\]

Multi-Head Attention

\[\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h) W^O\]
\[\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)\]

Positional Encoding (Sinusoidal)

\[PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)\]
\[PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)\]

Feed-Forward Network

\[\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2\]

или $\(\text{FFN}(x) = \text{GELU}(xW_1)W_2\)$

RoPE (Rotary Position Embedding)

\[\begin{pmatrix} q_0 \\ q_1 \end{pmatrix} = \begin{pmatrix} \cos(m\theta) & -\sin(m\theta) \\ \sin(m\theta) & \cos(m\theta) \end{pmatrix} \begin{pmatrix} q_0 \\ q_1 \end{pmatrix}\]

Weight Initialization

Xavier (Glorot)

\[W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right)\]

или $\(W \sim \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}}\right)\)$

He (Kaiming)

\[W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right)\]

VAE

ELBO

\[\mathcal{L} = \mathbb{E}_{q(z|x)}[\log p(x|z)] - D_{KL}(q(z|x) \| p(z))\]

Reparameterization Trick

\[z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)\]

GAN

Minimax Game

\[\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]\]

Non-saturating Generator Loss

\[L_G = -\mathbb{E}_{z \sim p_z}[\log D(G(z))]\]

Wasserstein Loss

\[L = \mathbb{E}_{x \sim p_{data}}[D(x)] - \mathbb{E}_{z \sim p_z}[D(G(z))]\]

Vision Transformer (ViT)

Patch Embedding

\[\mathbf{z}_0 = [\mathbf{x}_{class}; \mathbf{x}_p^1 \mathbf{E}; \mathbf{x}_p^2 \mathbf{E}; ...; \mathbf{x}_p^N \mathbf{E}] + \mathbf{E}_{pos}\]

где \(\mathbf{E} \in \mathbb{R}^{(P^2 \cdot C) \times D}\), \(N = HW/P^2\) patches

Classification Head

\[\hat{y} = \text{MLP}(\text{LN}(\mathbf{z}_L^0))\]

где \(\mathbf{z}_L^0\) — CLS token after L transformer layers


Diffusion Models (DDPM)

Forward Process (Add noise)

\[q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t \mathbf{I})\]

Closed-form for arbitrary t

\[q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1-\bar{\alpha}_t) \mathbf{I})\]

где \(\alpha_t = 1 - \beta_t\), \(\bar{\alpha}_t = \prod_{s=1}^{t} \alpha_s\)

Reverse Process (Denoise)

\[p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 \mathbf{I})\]

Training Objective (simplified)

\[L_{simple} = \mathbb{E}_{t, x_0, \epsilon} \left[ \|\epsilon - \epsilon_\theta(x_t, t)\|^2 \right]\]

Mixture of Experts (MoE)

Gating Function

\[G(x) = \text{TopK}(\text{softmax}(W_g \cdot x))\]

MoE Layer Output

\[y = \sum_{i=1}^{N} G(x)_i \cdot E_i(x)\]

где \(E_i\) — i-й эксперт, \(G(x)_i\) — вес gating для эксперта i

Load Balancing Loss

\[L_{aux} = N \cdot \sum_{i=1}^{N} f_i \cdot P_i\]

где \(f_i\) = fraction of tokens routed to expert i, \(P_i\) = average gate probability for expert i


Quantization

Symmetric Quantization

\[x_q = \text{round}\left(\frac{x}{s}\right), \quad s = \frac{\max(|x|)}{2^{b-1} - 1}\]

Asymmetric Quantization

\[x_q = \text{round}\left(\frac{x - z}{s}\right), \quad s = \frac{x_{max} - x_{min}}{2^b - 1}, \quad z = x_{min}\]

Dequantization

\[\hat{x} = s \cdot x_q + z\]

Ranking Losses

LambdaRank (Gradient)

\[\lambda_{ij} = \frac{-\sigma}{1 + e^{\sigma(s_i - s_j)}} |\Delta \text{NDCG}_{ij}|\]

ListMLE

\[L = -\sum_{i=1}^{n} \log \frac{e^{s_{\pi(i)}}}{\sum_{j=i}^{n} e^{s_{\pi(j)}}}\]

где \(\pi\) — ground truth permutation

InfoNCE (Contrastive)

\[L = -\log \frac{e^{sim(q, k_+)/\tau}}{\sum_{i=0}^{K} e^{sim(q, k_i)/\tau}}\]

Learning Rate Scheduling

Step Decay

\[\alpha_t = \alpha_0 \cdot \gamma^{\lfloor t / s \rfloor}\]

Cosine Annealing

\[\alpha_t = \alpha_{min} + \frac{1}{2}(\alpha_{max} - \alpha_{min})\left(1 + \cos\left(\frac{t}{T}\pi\right)\right)\]

Warmup + Cosine

\[\alpha_t = \begin{cases} \alpha_{max} \cdot \frac{t}{T_{warmup}} & t < T_{warmup} \\ \alpha_{min} + \frac{1}{2}(\alpha_{max} - \alpha_{min})(1 + \cos(\frac{t - T_{warmup}}{T - T_{warmup}}\pi)) & t \geq T_{warmup} \end{cases}\]

Linear Warmup

\[\alpha_t = \alpha_{max} \cdot \min\left(1, \frac{t}{T_{warmup}}\right)\]

Calibration

Temperature Scaling

\[\hat{p}_i = \text{softmax}(z_i / T)\]

где \(T\) оптимизируется на validation set (NLL loss)

Platt Scaling

\[P(y=1|f(x)) = \frac{1}{1 + e^{-(Af(x)+B)}}\]

где \(A, B\) — параметры, обученные на validation set

Expected Calibration Error (ECE)

\[ECE = \sum_{b=1}^{B} \frac{n_b}{N} |acc(b) - conf(b)|\]

Типичные заблуждения

Заблуждение: Adam всегда лучше SGD

Adam сходится быстрее, но SGD с momentum часто даёт лучшую generalization на image classification (ResNet на ImageNet: SGD > Adam по top-1 accuracy на ~0.5-1%). AdamW (decoupled weight decay) решает часть проблем Adam. На практике: Adam для NLP/Transformers, SGD для CV -- эмпирическое правило.

Заблуждение: BatchNorm и LayerNorm взаимозаменяемы

BatchNorm нормализует по batch dimension (статистики зависят от batch size), LayerNorm -- по feature dimension (каждый пример независимо). BatchNorm не работает при batch_size=1 или в RNN/Transformer (переменная длина). Transformers используют LayerNorm (или RMSNorm в LLaMA). BatchNorm ведёт себя по-разному в train vs eval mode.

Заблуждение: Dropout отключают только при inference

Dropout отключают при eval (model.eval()), но при training он изменяет масштаб: выходы умножаются на \(1/p\) (inverted dropout) чтобы математическое ожидание сохранялось. Если забыть model.eval() перед inference, предсказания будут шумными и нестабильными -- классическая ошибка в production.


Вопросы на собеседовании

"Запишите формулу Scaled Dot-Product Attention и объясните \(\sqrt{d_k}\)"

❌ Слабый ответ: записывает softmax(QK^T)V без scaling

✅ Сильный ответ: "\(\text{Attention}(Q,K,V) = \text{softmax}(QK^T / \sqrt{d_k})V\). Делим на \(\sqrt{d_k}\) потому что при большом \(d_k\) скалярные произведения растут пропорционально \(d_k\), softmax насыщается (градиенты -> 0). Scaling стабилизирует дисперсию на уровне ~1."

"Объясните backpropagation"

❌ Слабый ответ: "Градиенты идут назад через сеть"

✅ Сильный ответ: "Chain rule: \(\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}\). Для слоя \(l\): ошибка \(\delta^{[l]}\) пропагируется назад через \((W^{[l]})^T\), домноженная на производную активации. Проблемы: vanishing gradients (sigmoid/tanh, глубокие сети) -> решения: ReLU, skip connections (ResNet), нормализация."

"В чём разница между Focal Loss и Cross-Entropy?"

❌ Слабый ответ: "Focal Loss для object detection"

✅ Сильный ответ: "Focal Loss = \(-\alpha_t(1-p_t)^\gamma \log(p_t)\). При \(\gamma=0\) это обычная CE. Множитель \((1-p_t)^\gamma\) уменьшает вклад easy examples (высокий \(p_t\)). При \(\gamma=2\) (RetinaNet default) easy example с \(p_t=0.9\) получает в 100x меньший loss чем с \(\gamma=0\). Решает class imbalance в dense detection без oversampling."