🔴 Сложный ⏱️ 25 минут

Многослойные сети: как учится искусственный мозг

Многослойные сети: как учится искусственный мозг

🎯 Зачем это нужно?

Помнишь, как тебя в детстве учили распознавать животных? Сначала показывали картинки кошек и собак, говорили “это кот”, “это пёс” 🐱🐶. Твой мозг постепенно выучил закономерности: острые ушки + усы = кот, висячие уши + лает = собака.

Многослойные нейросети работают точно так же! Только вместо одного “слоя” принятия решений (как у перцептрона), у них есть несколько уровней обработки - как этажи в здании, где каждый этаж анализирует информацию всё глубже.

Где используется:

  • 📱 FaceID в iPhone распознаёт твоё лицо через 7-слойную сеть
  • 🎵 Spotify рекомендует музыку через глубокие сети с 10+ слоями
  • 🚗 Tesla Autopilot использует 50+ слойные сети для автопилота
  • 🎮 AlphaGo победил чемпиона мира в Го благодаря 19-слойной сети

📚 История вопроса

В 1969 году Марвин Минский доказал, что простой перцептрон не может решить даже задачу XOR (исключающее ИЛИ). Это была настоящая катастрофа для ИИ - “зима ИИ” длилась почти 20 лет! ❄️

Спасение пришло в 1986 году, когда Дэвид Румельхарт переоткрыл алгоритм backpropagation (обратное распространение ошибки). Оказалось, что добавив всего один скрытый слой, нейросеть может решать ЛЮБУЮ задачу классификации! 🚀

Забавно: сам алгоритм изобрели ещё в 1970, но тогда компьютеры были слишком слабыми для его использования.

💡 Интуиция

Представь, что ты учишься готовить пиццу 🍕.

Однослойная сеть (перцептрон): смотрит на ингредиенты и сразу говорит “вкусно/невкусно”. Примитивно!

Многослойная сеть:

  • 1-й слой: распознаёт базовые элементы (тесто, соус, сыр)
  • 2-й слой: анализирует сочетания (толщина теста + количество соуса)
  • 3-й слой: оценивает общую композицию
  • Выходной слой: финальное решение “вкусно/невкусно”

Каждый слой учится своим закономерностям, а вместе они создают сложное понимание!

[МЕДИА: image_01] Описание: Схема многослойной нейросети в виде здания с этажами, где каждый этаж обрабатывает информацию Промпт: “educational illustration of multilayer neural network as a building with floors, neurons as nodes connected between layers, information flowing from bottom to top, modern clean style, blue and orange colors, suitable for technical audience”

📐 Формальное определение

Многослойная нейросеть - это композиция функций вида:

y = f₃(W₃ · f₂(W₂ · f₁(W₁ · x + b₁) + b₂) + b₃)

где:

  • x - входной вектор
  • W₁, W₂, W₃ - матрицы весов слоёв
  • b₁, b₂, b₃ - векторы смещений
  • f₁, f₂, f₃ - функции активации

Архитектура:

  • Входной слой: получает данные (размерность = количество признаков)
  • Скрытые слои: обрабатывают информацию (размерность произвольная)
  • Выходной слой: выдаёт результат (размерность = количество классов)

Обучение: минимизируем функцию потерь L(y_true, y_pred) с помощью градиентного спуска + backpropagation.

🔍 Примеры с разбором

Пример 1: Классификация изображений цифр

Задача: распознать рукописную цифру 28×28 пикселей.

Архитектура:

  • Вход: 784 нейрона (28×28 пикселей)
  • Скрытый слой 1: 128 нейронов + ReLU
  • Скрытый слой 2: 64 нейрона + ReLU
  • Выход: 10 нейронов + Softmax (цифры 0-9)

Как работает:

  1. Слой 1: находит простые паттерны (линии, углы)
  2. Слой 2: комбинирует в более сложные фигуры
  3. Выход: принимает финальное решение “это цифра 7”
# Прямое распространение
z1 = W1 @ x + b1          # Линейная комбинация
a1 = relu(z1)             # Активация ReLU  
z2 = W2 @ a1 + b2         
a2 = relu(z2)
z3 = W3 @ a2 + b3
y = softmax(z3)           # Вероятности классов

[МЕДИА: image_02] Описание: Пошаговая визуализация обработки изображения цифры через слои нейросети Промпт: “step-by-step visualization of digit recognition through neural network layers, showing input image, hidden layer activations, and final classification, educational diagram style, clear progression from left to right”

Пример 2: Обратное распространение ошибки

Допустим, сеть выдала вероятность 0.7 для цифры “3”, а правильный ответ “8”.

Шаг 1: Вычисляем ошибку на выходе Loss = -log(0.1) ≈ 2.3 (где 0.1 - вероятность правильного класса “8”)

Шаг 2: Распространяем ошибку назад

# Градиент по выходному слою
dL/dW3 = (y_pred - y_true) @ a2.T

# Градиент по скрытому слою 2  
dL/da2 = W3.T @ (y_pred - y_true)
dL/dW2 = dL/da2 * relu'(z2) @ a1.T

# Аналогично для всех слоёв...

Шаг 3: Обновляем веса W₃ := W₃ - α · ∇W₃L W₂ := W₂ - α · ∇W₂L
W₁ := W₁ - α · ∇W₁L

где α = 0.001 (learning rate)

🎮 Практика

Базовый уровень 🟢

Задание 1: Сколько параметров в сети 784→128→64→10?

💡 Подсказка Параметры = веса + смещения. Между слоями i и j: параметров = i×j + j
✅ Ответ W1: 784×128 + 128 = 100,480 W2: 128×64 + 64 = 8,256 W3: 64×10 + 10 = 650 Всего: 109,386 параметров

Задание 2: Какая функция активации лучше для скрытых слоёв: sigmoid или ReLU? Почему?

💡 Подсказка Подумай о проблеме затухающих градиентов
✅ Ответ ReLU лучше! У sigmoid градиент быстро затухает (max 0.25), у ReLU = 1 для положительных значений

Задание 3: Зачем нужны функции активации? Что будет без них?

✅ Ответ Без активации сеть становится линейной композицией → может решать только линейно разделимые задачи

Задание 4: Сеть с архитектурой 10→5→1 решает задачу регрессии. Какая функция активации на выходе?

✅ Ответ Линейная (без активации), так как регрессия предсказывает вещественные числа

Продвинутый уровень 🟡

Задание 5: Реализуй прямое распространение для сети 2→3→1:

import numpy as np

W1 = np.array([[0.5, 0.2], [0.1, 0.8], [0.3, 0.4]])  # 3×2
b1 = np.array([0.1, 0.2, 0.0])                        # 3×1
W2 = np.array([[0.6, 0.3, 0.9]])                      # 1×3  
b2 = np.array([0.2])                                   # 1×1

def relu(x):
    return np.maximum(0, x)

def forward(x):
    # Твой код здесь
    pass

# Тест: x = [1, 2]
✅ Ответ ```python def forward(x): z1 = W1 @ x + b1 # [1.0, 1.7, 1.1] a1 = relu(z1) # [1.0, 1.7, 1.1] z2 = W2 @ a1 + b2 # [2.81] return z2[0] # 2.81 ```

Задание 6: Почему глубокие сети лучше широких при том же количестве параметров?

💡 Подсказка Глубина позволяет изучать иерархические представления
✅ Ответ Глубина = иерархия признаков (низкоуровневые → высокоуровневые). Широкие сети не могут создать такую иерархию

Задание 7: Оцени количество операций умножения для forward pass через сеть 1000→500→100→10:

✅ Ответ 1000×500 + 500×100 + 100×10 = 500,000 + 50,000 + 1,000 = 551,000 операций

Задание 8: Как изменится время обучения, если увеличить скрытый слой в 2 раза?

✅ Ответ Примерно в 2 раза (линейно), так как количество параметров удваивается

Челлендж 🔴

Задание 9: Докажи универсальную теорему аппроксимации: любую непрерывную функцию можно приблизить сетью с одним скрытым слоем.

💡 Подсказка Используй тот факт, что ReLU может аппроксимировать любую кусочно-линейную функцию

Задание 10: Реализуй backpropagation для сети из задания 5. Вычисли градиенты для всех весов при x=[1,2], y_true=1.

💡 Подсказка Начни с выходного слоя: dL/dW2, затем иди назад через цепочку производных

⚠️ Частые ошибки

Ошибка: “Больше слоёв = всегда лучше” ✅ Правильно: Глубина нужна по необходимости, иначе переобучение 💡 Почему: Глубокие сети сложнее оптимизировать и склонны к overfitting

Ошибка: Используют sigmoid везде “как в старых учебниках”
Правильно: ReLU для скрытых слоёв, softmax/linear для выхода 💡 Почему: Sigmoid вызывает vanishing gradients в глубоких сетях

Ошибка: Забывают про нормализацию входов ✅ Правильно: Нормализуйте данные: (x - μ) / σ 💡 Почему: Без нормализации градиенты могут взрываться или затухать

Ошибка: Одинаковая инициализация весов (например, все нули) ✅ Правильно: Случайная инициализация (Xavier, He initialization)
💡 Почему: Одинаковые веса → одинаковые градиенты → нейроны не различаются

Ошибка: Слишком большой learning rate (α > 0.1) ✅ Правильно: Начинайте с α = 0.001, подстраивайте по loss 💡 Почему: Большой α → градиенты “перепрыгивают” минимум

🎓 Главное запомнить

Суть: Многослойная сеть = композиция простых функций, изучающая иерархические признаки ✅ Ключевая формула: y = f_L(W_L · f_{L-1}(…f_1(W_1·x + b_1)…) + b_L) ✅ Применение: Любые задачи, где нужно найти сложные закономерности в данных

🔗 Связь с другими темами

Откуда пришли: Перцептрон (урок 327) → добавили скрытые слои → получили универсальный аппроксиматор

Куда ведёт:

  • Свёрточные сети (CNN) - для изображений
  • Рекуррентные сети (RNN) - для последовательностей
  • Трансформеры - для языка (GPT, BERT)
  • Автоэнкодеры - для сжатия данных

Математика: Матричные операции + производные композиций + оптимизация

Практика: 99% современного Machine Learning использует многослойные архитектуры!

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!