Backpropagation: как нейросети учатся на ошибках
🎯 Зачем это нужно?
Представь, что ты учишь друга играть в баскетбол 🏀. После каждого неудачного броска ты говоришь: “Чуть левее руку, меньше силы, выше траектория”. Именно так работает backpropagation в нейросетях!
💼 ChatGPT обучается благодаря backpropagation на триллионах текстов
🚗 Tesla Autopilot корректирует веса нейронов через backprop после каждой поездки
📱 Камера телефона улучшает распознавание лиц через обратное распространение ошибки
🎵 Spotify рекомендует музыку, обучив нейросеть методом backprop на твоих лайках
📚 История вопроса
Backpropagation открывали трижды! 😅
- 1970 - Сепо Линнайнмаа (финский математик, диссертация на финском)
- 1974 - Пол Вербос (PhD в Гарварде, никто не обратил внимания)
- 1986 - Румельхарт, Хинтон, Уильямс (статья взорвала мир ИИ)
Каждый раз алгоритм “забывали” и переоткрывали заново! Только в 1986 году статья в Nature привела к буму нейросетей 80-х.
💡 Интуиция
Представь нейросеть как команду поваров в ресторане 👨🍳👩🍳:
- Повар А готовит соус (первый слой)
- Повар Б добавляет специи (второй слой)
- Повар В финальная подача (выходной слой)
Клиент пробует блюдо и говорит: “Слишком солёно!” 😤
[МЕДИА: image_01] Описание: Схема кухни с тремя поварами, показывающая поток информации от ингредиентов к готовому блюду и обратно Промпт: “educational illustration of restaurant kitchen with three chefs representing neural network layers, showing forward cooking process and backward feedback, arrows showing information flow, modern flat design style, suitable for technical audience”
Прямой проход (forward): ингредиенты → соус → специи → готовое блюдо Обратный проход (backward): “слишком солёно” → Повар В: “я добавил нормально” → Повар Б: “ой, я пересолил!” → Повар А: “соус был ок”
Так каждый повар понимает, насколько он виноват в неудаче и в какую сторону исправляться!
📐 Формальное определение
Backpropagation = цепное правило производных + автоматическое дифференцирование
Для нейросети f(x) = f₃(f₂(f₁(x))) с функцией потерь L:
∂L/∂w₁ = (∂L/∂f₃) · (∂f₃/∂f₂) · (∂f₂/∂f₁) · (∂f₁/∂w₁)
Ключевая идея: вычисляем градиенты от выхода к входу, переиспользуя промежуточные результаты.
Алгоритм:
- Forward pass: x → z₁ → a₁ → z₂ → a₂ → … → ŷ
- Вычисляем ошибку: δ = ∂L/∂ŷ
- Backward pass: δₗ → δₗ₋₁ → … → δ₁
- Обновляем веса: w = w - α·∂L/∂w
🔍 Примеры с разбором
Пример 1: Простая сеть для XOR
Архитектура: 2 входа → 2 нейрона → 1 выход
# Forward pass
z1 = w1*x1 + w2*x2 + b1 # первый нейрон
a1 = sigmoid(z1) # активация
z2 = w3*a1 + b2 # выходной нейрон
output = sigmoid(z2) # финальный выход
Для входа [1,0], правильный ответ = 1, наш выход = 0.3 Ошибка: L = ½(1 - 0.3)² = 0.245
[МЕДИА: image_02] Описание: Диаграмма простой нейросети для XOR с численными значениями весов и активаций Промпт: “technical diagram of simple neural network for XOR problem, showing weights, biases, activation values, forward and backward passes with gradient flow arrows, professional educational style”
Backward pass:
# Градиент по выходу
dL_doutput = output - target = 0.3 - 1 = -0.7
# Градиент по z2 (перед сигмоидой)
dL_dz2 = dL_doutput * sigmoid_derivative(z2)
= -0.7 * 0.3 * (1-0.3) = -0.147
# Градиент по весу w3
dL_dw3 = dL_dz2 * a1 = -0.147 * a1
# Обновляем вес
w3 = w3 - learning_rate * dL_dw3
Пример 2: Почему без backprop никак?
До 1986 года обучали нейросети случайными пробами 🎲:
- Меняли веса рандомно
- Если ошибка уменьшилась - оставляли изменение
- Иначе - откатывали
Для сети с 1000 нейронов это 10⁶ весов. Найти правильную комбинацию случайно = как угадать пароль из миллиона символов!
Backpropagation показывает НАПРАВЛЕНИЕ: “этот вес увеличить на 0.01, тот уменьшить на 0.05”
🎮 Практика
Базовый уровень 🟢
Задание 1: В нейросети с одним нейроном y = w·x + b для входа x=2 получили выход y=5, а нужно y=8. Вес w=1.5, bias b=2. Найди градиент ошибки по весу w.
💡 Подсказка
Ошибка L = ½(y_true - y_pred)². Найди ∂L/∂w через цепное правило.✅ Ответ
L = ½(8-5)² = 4.5 ∂L/∂y = -(8-5) = -3 ∂y/∂w = x = 2 ∂L/∂w = ∂L/∂y · ∂y/∂w = -3 · 2 = -6Задание 2: Для той же сети найди, на сколько нужно изменить вес w при learning_rate = 0.1?
✅ Ответ
Δw = -learning_rate · ∂L/∂w = -0.1 · (-6) = 0.6 Новый вес: w_new = 1.5 + 0.6 = 2.1Продвинутый уровень 🟡
Задание 3: В двухслойной сети для задачи бинарной классификации получили вероятности [0.2, 0.7, 0.9] для правильных ответов [0, 1, 1]. Используя cross-entropy loss, найди среднюю ошибку.
💡 Подсказка
Cross-entropy: L = -Σ[y·log(p) + (1-y)·log(1-p)]Задание 4: Объясни, почему в ReLU(x) = max(0,x) производная равна 0 при x<0 и равна 1 при x>0. Что происходит с градиентом?
Челлендж 🔴
Задание 5: В сети для распознавания рукописных цифр MNIST (784→128→10) с ReLU активациями получили такую картину: точность на тренировочной выборке растёт, а на валидационной падает после 15 эпох. Веса выходного слоя стали очень большими (>100). Диагностируй проблемы и предложи решения.
Задание 6: Реализуй backward pass для слоя батч-нормализации. Почему там 3 градиента: по входу, по γ (gamma) и по β (beta)?
⚠️ Частые ошибки
❌ Ошибка: “Backprop просто запоминает ответы” ✅ Правильно: Backprop ищет закономерности в данных, минимизируя функцию потерь 💡 Почему: Алгоритм обобщает на новые примеры, иначе бы не работал ни ChatGPT, ни переводчики
❌ Ошибка: Забывать умножать на производную активации ✅ Правильно: δₗ = (δₗ₊₁ · Wₗ₊₁) ⊙ σ’(zₗ) 💡 Почему: Активация - тоже функция в цепочке, её производная влияет на градиент
❌ Ошибка: “Если loss не падает - увеличу learning rate”
✅ Правильно: Сначала проверь градиенты (vanishing/exploding), потом learning rate
💡 Почему: Большой learning rate может “перепрыгнуть” минимум и сделать ещё хуже
❌ Ошибка: Применять backprop к уже обученным слоям ✅ Правильно: При transfer learning замораживай ранние слои: layer.requires_grad = False 💡 Почему: Ранние слои выучили универсальные признаки, их портить не нужно
🎓 Главное запомнить
✅ Суть: Backprop = цепное правило + автоград для эффективного вычисления градиентов
✅ Формула: ∂L/∂w = (∂L/∂output) · (∂output/∂w) через все промежуточные слои
✅ Применение: Основа обучения всех современных нейросетей от GPT до ResNet
🔗 Связь с другими темами
Откуда пришли: Градиентный спуск (урок 329) - backprop вычисляет нужные градиенты Куда ведёт: Оптимизаторы (Adam, SGD), архитектуры (CNN, Transformers), регуляризация Математика: Многомерный анализ, матричные производные, автоматическое дифференцирование
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку