Модуль I·Статья I·~3 мин чтения

Перцептрон и многослойные нейронные сети

Основы нейронных сетей

Превратить статью в подкаст

Выберите голоса, формат и длину — AI запишет аудио

Перцептрон и многослойные нейронные сети

Нейронные сети вдохновлены биологией, но давно стали самостоятельной математической областью. Перцептрон Розенблатта (1957) — простейший формальный нейрон, который уже обнаруживает основной принцип: линейное преобразование + нелинейная активация. Многослойные сети (MLP) из таких нейронов оказались универсальными аппроксиматорами.

Формальный нейрон и перцептрон

Биологическая мотивация: Нейрон мозга получает сигналы через дендриты, суммирует их в теле клетки и «стреляет» (спайк) только при превышении порога. Перцептрон моделирует это: взвешенная сумма входов + пороговая функция активации.

Перцептрон: y = sign(wᵀx + b) = sign(Σᵢ wᵢxᵢ + b), где x ∈ ℝⁿ — входной вектор, w ∈ ℝⁿ — веса, b — порог (bias), sign — знаковая функция (±1). Геометрически: w и b задают гиперплоскость wᵀx + b = 0 в ℝⁿ. Перцептрон разделяет пространство на два полупространства.

Теорема сходимости перцептрона (Rosenblatt, 1957): Если классы линейно разделимы, алгоритм обновления wₜ₊₁ = wₜ + yᵢxᵢ (при ошибке на (xᵢ, yᵢ)) сходится за конечное число шагов. Верхняя граница итераций: (R/γ)², где R = max||xᵢ|| — радиус, γ — маржа разделения.

Ограничение: Линейная неразделимость → перцептрон не обучится. Классический контрпример: функция XOR (Минский и Паперт, 1969) — нелинейна, перцептрон не решает. Это привело к «зиме AI».

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

Нелинейная активация — ключевое отличие от линейной регрессии. Без неё: стек линейных слоёв = один линейный слой.

Sigmoid (логистическая): σ(z) = 1/(1 + e^{−z}) ∈ (0,1). Производная: σ'(z) = σ(z)(1−σ(z)). Проблема: при больших |z| производная → 0 → «насыщение», исчезание градиента. Использовалась в ранних сетях.

tanh: tanh(z) = (e^z − e^{−z})/(e^z + e^{−z}) ∈ (−1,1). Производная: 1 − tanh²(z). Центрирован вокруг 0 (лучше sigmoid), но также насыщается.

ReLU (Rectified Linear Unit): ReLU(z) = max(0, z). Производная: 1 при z>0, 0 при z<0. Преимущества: нет насыщения при z>0 → эффективное распространение градиента. Быстро вычисляется. Проблема: «мёртвые нейроны» (dying ReLU) при z<0 всегда → нейрон всегда выдаёт 0 и никогда не обучается.

Leaky ReLU: max(αz, z), α = 0.01 — небольшой наклон при z<0, устраняет dying ReLU.

GELU: G(z) = z·Φ(z) (Φ — функция нормального CDF). Использует в BERT, GPT. Плавнее ReLU, сочетает «зашумлённость» с линейностью.

Многослойная сеть (MLP)

Прямое распространение (forward pass):

Слой l: aˡ = σ(Wˡ aˡ⁻¹ + bˡ)

Wˡ ∈ ℝ^{nₗ × nₗ₋₁} — матрица весов слоя l, bˡ — вектор biases, σ — функция активации (поэлементно), aˡ — активации слоя.

Функция сети: f(x; θ) = aᴸ = σ(Wᴸ σ(Wᴸ⁻¹...σ(W¹x + b¹)...+ bᴸ⁻¹) + bᴸ). Параметры: θ = {W¹, b¹,..., Wᴸ, bᴸ}. Число параметров: Σₗ (nₗ · nₗ₋₁ + nₗ).

Обратное распространение (backpropagation): Эффективный алгоритм вычисления ∂L/∂θ через цепное правило.

δᴸ = ∂L/∂zᴸ = ∇_{aᴸ} L ⊙ σ'(zᴸ) (ошибка последнего слоя) δˡ = (Wˡ⁺¹)ᵀ δˡ⁺¹ ⊙ σ'(zˡ) (обратное распространение ошибки) ∂L/∂Wˡ = δˡ (aˡ⁻¹)ᵀ, ∂L/∂bˡ = δˡ (градиенты)

Вычислительная сложность: O(число параметров) — то же, что forward pass.

Инициализация весов

Плохая инициализация → исчезающий или взрывающийся градиент. Если Wᵢⱼ ~ N(0, σ²): дисперсия активаций в слое l ≈ (nₗ₋₁ σ²) × дисперсия входа → экспоненциально нарастает.

Инициализация Глорота (Xavier): σ² = 2/(nₗ + nₗ₋₁) — сохраняет дисперсию активаций одинаковой. Для tanh/sigmoid.

Инициализация He: σ² = 2/nₗ₋₁ — для ReLU (учитывает нулевую половину).

Численный пример

MLP: [2 → 4 → 1], ReLU, MSE loss. Вход x = (1, −1). W¹ = [[0.5,−0.5],[1,0.5],[−0.5,1],[0,−1]], b¹ = [0,0,0,0]. W² = [[1,−1,0.5,−0.5]], b² = [0.1].

Forward: z¹ = W¹x + b¹ = [0.5+0.5, 1−0.5, −0.5−1, 0+1] = [1, 0.5, −1.5, 1]. a¹ = ReLU(z¹) = [1, 0.5, 0, 1]. z² = [1−0.5+0+−0.5] + 0.1 = 0 + 0.1 = 0.1. Выход f(x) = 0.1.

При y_true = 1: L = (0.1−1)² = 0.81. Backprop: δ² = 2(0.1−1) = −1.8. ∂L/∂W² = δ² · (a¹)ᵀ = [−1.8, −0.9, 0, −1.8].

Задание: Реализуйте MLP с нуля в NumPy (без PyTorch): [2→8→4→1], ReLU+sigmoid. Обучите на задаче XOR (4 точки). Реализуйте SGD с momentum. Постройте decision boundary. Сколько эпох нужно до 100% accuracy? Как меняется скорость сходимости с momentum β=0.9 vs β=0?

§ Акт · что дальше