Нейронная сеть
| Первая модель нейрона | Маккаллок и Питтс (1943) |
|---|---|
| Перцептрон | Фрэнк Розенблатт (1958) |
| Обратное распространение | Румельхарт, Хинтон, Уильямс (1986) |
| Прорыв глубокого обучения | AlexNet (2012) |
| Основные архитектуры | полносвязные, свёрточные (CNN), рекуррентные (RNN, LSTM), трансформеры |
| Фреймворки | PyTorch, JAX, TensorFlow |
| Награды | премия Тьюринга 2018 (Хинтон, Лекун, Бенджио), Нобелевская премия по физике 2024 (Хопфилд, Хинтон) |
Нейронная сеть (искусственная нейронная сеть, нейросеть) — модель машинного обучения, составленная из множества простых вычислительных элементов — нейронов, организованных в слои. Каждый нейрон вычисляет взвешенную сумму входов и пропускает её через нелинейную функцию; веса всех связей подбираются по данным так, чтобы сеть выдавала нужные ответы. Сети со многими слоями называют глубокими, а их обучение — глубоким обучением.
Нейросети распознают изображения и речь, переводят тексты, рекомендуют контент и лежат в основе больших языковых моделей. Идея вдохновлена биологическим мозгом, но современные сети — это прежде всего математические функции с миллиардами параметров.
История
Уоррен Маккаллок и Уолтер Питтс в 1943 году описали математическую модель нейрона как логического элемента. В 1958 году Фрэнк Розенблатт создал перцептрон — первую обучаемую сеть, распознававшую простые изображения.[2] Книга Минского и Пейперта «Перцептроны» (1969) показала ограничения однослойных сетей, и интерес к области надолго угас.
Возрождение пришло в 1986 году, когда Дэвид Румельхарт, Джеффри Хинтон и Рональд Уильямс популяризировали обратное распространение ошибки для обучения многослойных сетей.[1] Ян Лекун применил свёрточные сети к распознаванию рукописных цифр, а Хохрайтер и Шмидхубер в 1997 году предложили LSTM для последовательностей. Настоящий прорыв случился в 2012 году: сеть AlexNet, обученная на GPU, выиграла конкурс ImageNet.[3] Хинтон, Лекун и Бенджио получили премию Тьюринга (2018), а Джон Хопфилд и Хинтон — Нобелевскую премию по физике (2024) за основополагающие работы по нейросетям.[5]
Как устроена
Нейрон получает входы x₁…xₙ, умножает их на веса w₁…wₙ, прибавляет смещение b и применяет функцию активации: y = f(w·x + b). Нейроны объединены в слои: входной принимает данные, скрытые слои вычисляют промежуточные представления, выходной даёт ответ.
Без нелинейной активации любая многослойная сеть сводилась бы к одной линейной функции. Популярные активации:
| Функция | Формула | Где используется |
|---|---|---|
| ReLU | max(0, x) |
скрытые слои, стандарт по умолчанию |
| GELU, SiLU | гладкие варианты ReLU | трансформеры |
| Сигмоида | 1 / (1 + e⁻ˣ) |
вероятность в бинарной классификации |
| Softmax | нормированная экспонента | вероятности классов, распределение по токенам |
Теорема об универсальной аппроксимации утверждает, что даже сеть с одним скрытым слоем достаточного размера может приблизить любую непрерывную функцию; на практике глубокие сети достигают того же гораздо экономнее.
Обучение
- Прямой проход. Данные проходят через сеть, получается предсказание.
- Функция потерь измеряет ошибку: перекрёстная энтропия для классификации, среднеквадратичная ошибка для регрессии.
- Обратное распространение по правилу дифференцирования сложной функции вычисляет градиент потерь по каждому весу.
- Шаг оптимизации. Веса сдвигаются против градиента — градиентный спуск и его варианты (SGD с моментом, Adam, AdamW).
Цикл повторяется на мини-пакетах данных тысячи и миллионы раз. Чтобы сеть не запомнила обучающие данные, применяют регуляризацию: dropout, затухание весов, аугментацию, раннюю остановку (см. Переобучение и регуляризация).[4]
Пример
Небольшая полносвязная сеть в PyTorch:[6]
import torch
from torch import nn
model = nn.Sequential(
nn.Linear(784, 256), nn.ReLU(),
nn.Linear(256, 128), nn.ReLU(),
nn.Linear(128, 10), # 10 классов, например цифры 0–9
)
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
for x, y in train_loader: # x: [batch, 784], y: [batch]
logits = model(x) # прямой проход
loss = loss_fn(logits, y)
optimizer.zero_grad()
loss.backward() # обратное распространение
optimizer.step() # обновление весов
Архитектуры
| Архитектура | Идея | Применение |
|---|---|---|
| Полносвязная (MLP) | каждый нейрон связан со всеми нейронами предыдущего слоя | табличные данные, блоки внутри других сетей |
| Свёрточная (CNN) | общие фильтры скользят по изображению, улавливая локальные признаки | компьютерное зрение |
| Рекуррентная (RNN, LSTM, GRU) | состояние передаётся от шага к шагу последовательности | речь, временные ряды (до трансформеров) |
| Трансформер | механизм внимания связывает все элементы последовательности | языковые модели, зрение, звук |
| Автокодировщики, диффузионные модели | сжатие и генерация данных | генерация изображений, эмбеддинги |
Практические аспекты
Глубокие сети требуют много данных и вычислений, поэтому их обучают на GPU и специализированных ускорителях. Чаще всего модель не обучают с нуля, а берут предобученную — например, с Hugging Face — и дообучают под свою задачу (fine-tuning). Для ускорения работы в продакшене применяют квантизацию и экспорт в оптимизированные форматы.
См. также
Источники
- D. Rumelhart, G. Hinton, R. Williams — Learning representations by back-propagating errors (Nature, 1986)
- F. Rosenblatt — The perceptron (Psychological Review, 1958)
- Y. LeCun, Y. Bengio, G. Hinton — Deep learning (Nature, 2015)
- I. Goodfellow, Y. Bengio, A. Courville — Deep Learning (MIT Press, 2016)
- The Nobel Prize in Physics 2024
- PyTorch — torch.nn documentation