1. Градієнтний спуск
Машинне навчання зводиться до однієї універсальної задачі: знайти вектор параметрів θ, який мінімізує скалярну функцію втрат L(θ). Градієнтний спуск робить це, повторно роблячи крок у напрямку найшвидшого спадання:
Звичайний SGD: θ ← θ − η · ∇L(θ)
Momentum (метод важкої кульки):
v ← β v − η · ∇L(θ)
θ ← θ + v
Adam (адаптивні моменти):
m ← β₁ m + (1−β₁) g (момент 1-го
порядку)
v ← β₂ v + (1−β₂) g² (момент 2-го порядку)
θ ← θ − η · m̂ / (√v̂ + ε)
Поверхня втрат для невеликих мереж — це поверхня у багатовимірному просторі. Сідлові точки трапляються значно частіше, ніж локальні мінімуми — сучасні оптимізатори вислизають з них завдяки шуму та адаптивним розмірам кроку.
2. Зворотне поширення — застосування ланцюгового правила
Зворотне поширення — це не що інше, як ланцюгове правило диференціювання, систематично застосоване до обчислювального графа. Для втрати L = f(g(x)):
Прямий прохід: z¹ = W¹x + b¹, a¹ = σ(z¹), z² = W²a¹ + b², ŷ =
softmax(z²)
Втрата: L = −Σ yᵢ log ŷᵢ (перехресна ентропія)
Зворотний прохід: ∂L/∂W² = (∂L/∂ŷ)(∂ŷ/∂z²)(∂z²/∂W²) = (ŷ − y)ᵀ ·
a¹
∂L/∂W¹ = (W²ᵀ δ²) ⊙ σ′(z¹) · xᵀ (де δ² = ŷ − y)
Ключова ідея: градієнти течуть назад через кожен шар, кожного разу множачись на локальний якобіан. З активацією ReLU (σ′ = 0 або 1) градієнт або проходить без змін, або обнуляється — це водночас джерело ефективності та причина патології "згасання ReLU" (dying ReLU).
// Мінімальне зворотне поширення для двошарової мережі (псевдокод JavaScript)
function backward(x, y, W1, W2, b1, b2) {
// Прямий прохід
const z1 = matMul(W1, x).add(b1);
const a1 = relu(z1);
const z2 = matMul(W2, a1).add(b2);
const yHat = softmax(z2);
// Градієнт вихідного шару (softmax + перехресна ентропія спрощуються гарно)
const dz2 = yHat.sub(y); // (C × 1)
const dW2 = matMul(dz2, a1.T); // (C × H)
// Градієнт прихованого шару
const da1 = matMul(W2.T, dz2); // (H × 1)
const dz1 = da1.mul(reluGrad(z1)); // поелементна похідна ReLU′
const dW1 = matMul(dz1, x.T); // (H × D)
return { dW1, dW2, db1: dz1, db2: dz2 };
}
3. Інтуїція згорткових шарів
Згортковий шар ковзає невеликим ядром (наприклад, 3×3) по вхідних даних. Кожна позиція дає одне скалярне значення шляхом обчислення скалярного добутку між вагами ядра та локальним рецептивним полем. Це спільне використання параметрів — повторне застосування того самого ядра в кожній позиції — надає згортковим мережам (CNN) інваріантність до зсуву і різко зменшує кількість параметрів порівняно з повнозв'язними альтернативами.
4. Навчання з підкріпленням та еволюція
Алгоритми одним поглядом
Чому ReLU працює краще за сигмоїду? Сигмоїда насичується на рівнях 0 і 1 — градієнти зникають для великих активацій (проблема "згасаючого градієнта"). ReLU лінійна для додатних входів, тож градієнти проходять без зменшення. Варіанти на кшталт Leaky ReLU (нахил 0.01 для x < 0) та GELU (гаусова лінійна одиниця похибки, що використовується в трансформерах) вирішують проблему "згасання ReLU", коли нейрони назавжди видають нуль.