Глубокое обучение
Нейронные сети: от биологии к математике
**86 миллиардов нейронов** в человеческом мозге - и всего **800 искусственных** достаточно, чтобы распознавать рукописные цифры с точностью 98%. Как учёные сжали суть работы мозга в несколько строк кода?
- **Распознавание лиц:** Face ID в iPhone использует нейронную сеть с миллионами нейронов для идентификации владельца даже в темноте
- **Голосовые помощники:** Siri, Alexa, Google Assistant - нейронные сети преобразуют звуковые волны в текст и обратно
- **Рекомендации:** Netflix, YouTube, Spotify используют нейронные сети, чтобы предсказать, что вам понравится
Предварительные знания
- Базовая линейная алгебра: векторы, скалярное произведение, умножение матриц
- Производные и chain rule из математического анализа
- Чтение простого кода на Python и NumPy
Когда биология стала формулой
В 1943 году нейрофизиолог Уоррен Маккаллок и логик Уолтер Питтс опубликовали первую математическую модель нейрона: с помощью пороговой логики они показали, что сети из простых бинарных элементов способны вычислять любую логическую функцию. В 1952 году Алан Ходжкин и Эндрю Хаксли описали, как настоящий нейрон возбуждается за счёт ионных токов, и за эту работу получили Нобелевскую премию по физиологии и медицине 1963 года. А в 1958 году Фрэнк Розенблатт построил перцептрон - первый нейрон, который сам подбирал веса по данным. Три шага за пятнадцать лет: биология превратилась в математику, а математика - в машину, которая учится.
Биологический vs искусственный нейрон
**В 1943 году нейрофизиолог Уоррен Маккаллок и математик Уолтер Питтс задали дерзкий вопрос:** можно ли описать работу мозга формулой? Они изучили биологический нейрон - клетку, которая принимает электрические сигналы через дендриты, обрабатывает их в теле (соме) и передаёт результат через аксон. И предложили простую математическую модель.
**Аналогия работает так:** входные сигналы (x₁, x₂, x₃) - это дендриты. Веса (w₁, w₂, w₃) - это синапсы, определяющие важность каждого входа. Сома суммирует сигналы: z = w₁·x₁ + w₂·x₂ + w₃·x₃ + b, где b (bias) - порог срабатывания. Функция активации f(z) решает, «зажжётся» ли нейрон.
**Модель Маккаллока-Питтса (1943)** - первая формальная модель нейрона. Она бинарная: нейрон либо активен (1), либо нет (0). Несмотря на упрощённость, эта идея стала фундаментом всего deep learning.
**Биологические нейроны несравнимо сложнее** искусственных. Настоящий нейрон имеет тысячи синапсов, работает с временными паттернами импульсов (spikes) и даже один дендрит может выполнять нелинейные вычисления. Искусственный нейрон - это грубое, но полезное упрощение.
Маккаллок и Питтс: нейрофизиолог и бездомный гений
**Маккаллок был философом и нейрофизиологом**, а Питтс - 18-летним бездомным гением-самоучкой. Они познакомились на семинаре, и Маккаллок пригласил Питтса жить в своём доме. Их статья 1943 года «A Logical Calculus of the Ideas Immanent in Nervous Activity» показала, что нейронные сети могут вычислять любую логическую функцию - за десятилетия до первого компьютера.
Какую роль в искусственном нейроне играют веса (weights)?
Perceptron: первая обучаемая модель
**В 1957 году Фрэнк Розенблатт сделал следующий шаг:** нейрон Маккаллока-Питтса не мог учиться - веса нужно было задавать вручную. Розенблатт создал **Perceptron** - нейрон, который сам подбирает веса на основе данных. The New York Times написала: «Зародыш компьютера, который сможет ходить, говорить, видеть и осознавать своё существование».
**Формула perceptron'а:** y = sign(w·x + b), где sign - пороговая функция (возвращает +1 если аргумент ≥ 0, иначе -1). Ключевая идея: если perceptron ошибся, мы корректируем веса в сторону правильного ответа.
**Perceptron Learning Rule** гениально проста: если ответ правильный - ничего не делай. Если ошибся - сдвинь веса в сторону правильного ответа. Математически доказано, что если данные **линейно разделимы**, perceptron всегда найдёт решение за конечное число шагов.
**Но есть проблема.** В 1969 году Марвин Минский и Сеймур Паперт опубликовали книгу «Perceptrons», где математически доказали: один perceptron не может решить задачу XOR.
**Книга Минского вызвала «зиму AI»** - финансирование исследований нейронных сетей практически прекратилось на 15 лет. Ирония: решение (многослойные сети) уже было известно, но алгоритма их обучения ещё не существовало.
Почему perceptron не может решить задачу XOR?
Слои: от perceptron к нейронной сети
**Решение проблемы XOR оказалось элегантным:** если один perceptron строит одну прямую линию, то комбинация нескольких может построить сколь угодно сложную границу. Так родилась идея **многослойных нейронных сетей** (multilayer perceptron, MLP).
**Нейронная сеть состоит из трёх типов слоёв.** **Input layer** - принимает данные (пиксели, числа, текст). **Hidden layers** - промежуточные слои, которые извлекают всё более абстрактные признаки. **Output layer** - выдаёт результат (класс, число, вероятность).
**Universal Approximation Theorem (Хорник, 1989):** нейронная сеть с одним скрытым слоем и достаточным количеством нейронов может приблизить **любую непрерывную функцию** с произвольной точностью. Это значит, что нейронные сети - универсальные аппроксиматоры.
**Но почему тогда deep learning использует десятки слоёв, а не один огромный?** Потому что глубина экспоненциально эффективнее ширины. Сеть с 10 слоями по 100 нейронов (1000 нейронов) может представить функции, для которых одному слою потребовались бы миллиарды нейронов.
| Свойство | Широкая (1 слой) | Глубокая (много слоёв) |
|---|---|---|
| Параметры | Может потребоваться экспоненциально много | Полиномиально мало |
| Иерархия признаков | Нет - всё в одном слое | Да - от простого к сложному |
| Пример (зрение) | Пытается сразу распознать кота | Края → текстуры → части → кот |
| Обучаемость | Сложно оптимизировать | Есть свои проблемы (vanishing gradients) |
**Глубокие сети строят иерархию.** В распознавании изображений: первый слой находит края, второй - углы и текстуры, третий - части объектов (ухо, глаз), четвёртый - целые объекты (кот, собака). Каждый слой использует результаты предыдущего.
Что утверждает Universal Approximation Theorem?
Функции активации: нелинейность решает всё
**Без функций активации многослойная сеть бесполезна.** Вот почему: если каждый слой - это линейное преобразование (y = Wx + b), то композиция линейных функций - снова линейная функция. Два слоя без активации эквивалентны одному: W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂) = W'x + b'.
**Функция активации вносит нелинейность** - именно она позволяет сети аппроксимировать сложные функции. Рассмотрим основные.
| Функция | Формула | Диапазон | Когда использовать |
|---|---|---|---|
| Sigmoid | σ(z) = 1/(1+e⁻ᶻ) | (0, 1) | Выход: вероятность |
| Tanh | tanh(z) = (eᶻ-e⁻ᶻ)/(eᶻ+e⁻ᶻ) | (-1, 1) | Скрытые слои (центрировано) |
| ReLU | max(0, z) | [0, ∞) | Скрытые слои (по умолчанию) |
| Leaky ReLU | max(0.01z, z) | (-∞, ∞) | Если ReLU не работает |
| GELU | z·Φ(z) | (-0.17, ∞) | Transformers (BERT, GPT) |
**Почему ReLU победил?** До 2010-х годов использовали sigmoid и tanh. Но у них есть фатальный недостаток - **vanishing gradient problem**: при больших или малых значениях z производная стремится к нулю. В глубокой сети градиенты умножаются (chain rule), и к первым слоям доходит практически ноль - сеть перестаёт учиться.
**ReLU тоже не идеален.** Проблема «мёртвых нейронов» (dying ReLU): если вход нейрона всегда отрицательный, его выход и градиент навсегда равны нулю - нейрон «умирает». Leaky ReLU решает это, пропуская маленький сигнал (0.01·z) для отрицательных значений.
Больше слоёв - всегда лучше результат. Глубокая сеть автоматически мощнее мелкой.
Без правильных функций активации глубокая сеть математически эквивалентна одному линейному слою. И наоборот: слишком глубокая сеть без специальных техник (residual connections, batch normalization) обучается хуже мелкой из-за vanishing/exploding gradients.
Композиция линейных функций - снова линейная функция. Именно нелинейные активации дают глубоким сетям их мощь. А проблемы с градиентами делают «наивное» увеличение глубины вредным. ResNet (2015) показал, что для успешного обучения глубоких сетей нужны skip connections.
Почему ReLU стал стандартной функцией активации для скрытых слоёв?
Ключевые идеи
- **Искусственный нейрон** - упрощённая модель биологического: входы × веса → сумма + bias → активация
- **Perceptron** (1957) - первый обучаемый нейрон, но ограничен линейными задачами (не решает XOR)
- **Многослойные сети** решают проблему линейности: каждый слой извлекает всё более сложные признаки
- **Функция активации** - ключ ко всему: без нелинейности глубокая сеть бесполезна. ReLU стал стандартом, решив проблему vanishing gradients
- Помните 800 нейронов для цифр? Теперь вы знаете, как это работает: слои + активации + обучение весов
Связанные темы
Нейронные сети - фундамент всего deep learning. Вот куда ведут эти идеи:
- Backpropagation — Алгоритм обучения весов - как нейронная сеть учится на ошибках
- Linear Regression — Нейрон без активации - это линейная регрессия. Основа для понимания
Вопросы для размышления
- Почему, на ваш взгляд, «зима AI» после книги Минского длилась 15 лет, хотя решение (многослойные сети) было известно?
- Если Universal Approximation Theorem гарантирует, что один скрытый слой может аппроксимировать любую функцию, зачем нужны глубокие сети?
- Можно ли считать искусственные нейронные сети моделью мозга? Где проходит граница аналогии?
Связанные уроки
- dl-02 — Архитектуры нейронных сетей: от перцептрона к CNN и RNN
- ml-01-intro — Основы машинного обучения как фундамент
- calc-01-sequences — Математический анализ для понимания градиентов
- la-01-vectors-intro — Матричное умножение - ядро прямого прохода нейросети
- aie-03-llm-fundamentals — LLM - прямое применение глубоких архитектур
- ml-26-backpropagation — Backpropagation как итеративная обратная связь по ошибке