Нейронная сеть

Материал из llmdocs — справочник разработчика
Портал: ML и MLOps
Нейронная сеть
Первая модель нейронаМаккаллок и Питтс (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 нормированная экспонента вероятности классов, распределение по токенам

Теорема об универсальной аппроксимации утверждает, что даже сеть с одним скрытым слоем достаточного размера может приблизить любую непрерывную функцию; на практике глубокие сети достигают того же гораздо экономнее.

Обучение

  1. Прямой проход. Данные проходят через сеть, получается предсказание.
  2. Функция потерь измеряет ошибку: перекрёстная энтропия для классификации, среднеквадратичная ошибка для регрессии.
  3. Обратное распространение по правилу дифференцирования сложной функции вычисляет градиент потерь по каждому весу.
  4. Шаг оптимизации. Веса сдвигаются против градиента — градиентный спуск и его варианты (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). Для ускорения работы в продакшене применяют квантизацию и экспорт в оптимизированные форматы.

См. также

Источники

  1. D. Rumelhart, G. Hinton, R. Williams — Learning representations by back-propagating errors (Nature, 1986)
  2. F. Rosenblatt — The perceptron (Psychological Review, 1958)
  3. Y. LeCun, Y. Bengio, G. Hinton — Deep learning (Nature, 2015)
  4. I. Goodfellow, Y. Bengio, A. Courville — Deep Learning (MIT Press, 2016)
  5. The Nobel Prize in Physics 2024
  6. PyTorch — torch.nn documentation