Neural Network (NN)
Нейросеть (NN) состоит из слоёв связанных искусственных нейронов, веса которых обучаются на данных. Разбираем вычисления нейронов, обучение и основные типы сетей.
Нейронная сеть (NN), также называемая искусственной нейронной сетью (ANN), — это модель машинного обучения (ML), состоящая из слоёв простых связанных компонентов, называемых нейронами. Каждый нейрон умножает входные данные на веса, добавляет смещение и передаёт сумму через нелинейную функцию активации. Сеть обучается, изменяя веса и смещения, пока её выходы не начнут соответствовать примерам из обучающих данных; таким образом, поведение сети формируется на основе данных. Эта идея отчасти вдохновлена биологическими нейронами, но современные сети лучше рассматривать как большие обучаемые математические функции. Сети с большим числом слоёв относятся к области глубокого обучения (DL) и лежат в основе компьютерного зрения, распознавания речи и больших языковых моделей (LLM).
Как выполняются вычисления в нейронной сети#
Нейроны объединены в слои. Входной слой получает данные, например значения пикселей или показания датчиков; один или несколько скрытых слоёв преобразуют их, а выходной слой выдаёт предсказание, например оценки классов или предсказанное значение. В полносвязном слое каждый нейрон получает все выходные значения предыдущего слоя, поэтому весь слой сводится к умножению матриц с последующей поэлементной функцией активации. Последовательная передача данных через все слои называется прямым проходом. Именно активация делает глубину полезной: без неё несколько слоёв сводятся к одной линейной функции. Если скрытый слой достаточно широкий, сеть даже с одним таким слоем может с произвольной точностью аппроксимировать любую непрерывную функцию; этот результат известен как теорема об универсальной аппроксимации.
Приведённый ниже фрагмент кода на PyTorch вручную вычисляет выход одного нейрона, а затем одновременно вычисляет выход целого слоя из четырёх нейронов:
import torch
from torch import nn
torch.manual_seed(1)
x = torch.tensor([0.5, -1.0, 2.0]) # one example with three input features
# A layer of four neurons: each has three weights and one bias
layer = nn.Linear(in_features=3, out_features=4)
# Neuron 0 by hand: weighted sum of inputs plus bias, then a ReLU activation
z = (layer.weight[0] * x).sum() + layer.bias[0]
print(f"Neuron 0 by hand: {torch.relu(z).item():.4f}")
# The layer computes all four neurons at once as one matrix multiplication
outputs = torch.relu(layer(x))
print(f"All four neurons: {[round(v, 4) for v in outputs.tolist()]}")Вывод: Neuron 0 by hand: 0.3906 и All four neurons: [0.3906, 1.1465, 0.0, 0.0]. Ручной расчёт совпадает с результатом для первого нейрона слоя, а функция активации ReLU обнуляет два нейрона с отрицательными взвешенными суммами. Слой хранит 16 обучаемых чисел: 12 весов и 4 смещения; в реальных сетях такие слои объединяются в архитектуры с миллионами или миллиардами параметров.
Как нейронные сети учатся#
Обучение начинается со случайных весов и представляет собой повторение простого цикла. Батч размеченных примеров проходит через сеть прямым проходом, функция потерь измеряет расхождение предсказаний с метками, обратное распространение ошибки применяет правило цепочки, чтобы вычислить вклад каждого веса в ошибку, а оптимизатор, например стохастический градиентный спуск (SGD) или Adam, немного изменяет каждый вес в направлении уменьшения потерь. Полный проход по обучающему набору называется эпохой. Обучение обычно останавливают, когда потери на отложенных валидационных данных перестают уменьшаться: если продолжать подгонять сеть под обучающий набор, она начнёт переобучаться.
Для обучения с нуля обычно требуются большие размеченные наборы данных, а перенос обучения снижает это требование: в качестве начальных используются веса, предварительно обученные на большом наборе данных. Кроме того, миллионы обученных весов трудно интерпретировать, что стимулирует исследования в области объяснимого ИИ (XAI).
Основные типы нейронных сетей#
Тип данных, с которым сеть работает лучше всего, зависит от способа соединения нейронов, который называется архитектурой:
- Сети прямого распространения: полносвязные слои, которые передают данные в одном направлении; также называются многослойными перцептронами (MLP). Они подходят для табличных данных и служат строительными блоками более крупных моделей.
- Сверточные нейронные сети (CNNs): небольшие общие фильтры перемещаются по изображению с помощью свертки — стандартной архитектуры для компьютерного зрения. Остаточные связи позволяют таким сетям насчитывать сотни слоев.
- Рекуррентные нейронные сети (RNNs): обрабатывают последовательности шаг за шагом, сохраняя скрытое состояние; для более долгой памяти используются версии с вентилями, например LSTM и GRU.
- Трансформеры: используют механизм внимания к себе, чтобы параллельно связывать каждый элемент последовательности со всеми остальными. На них основаны LLM и зрительные трансформеры.
- Спайковые нейронные сети (SNNs): обмениваются дискретными импульсами во времени, больше напоминая биологические нейроны, и эффективно работают на нейроморфных чипах.
Большинство современных моделей объединяют эти архитектуры. YOLO26 — это сверточная сеть с блоками внимания к себе на картах признаков с самым низким разрешением (картах признаков); ее nano-модель детекции использует около 2,4 млн параметров, чтобы находить и классифицировать объекты на изображении размером 640×640 за один прямой проход.
Нейронные сети и связанные понятия#
- Глубокое обучение: нейронная сеть с одним или двумя скрытыми слоями считается неглубокой; глубокое обучение — это обучение сетей с большим количеством слоев, которые сами формируют иерархию признаков на основе исходных данных. Каждая модель глубокого обучения — это нейронная сеть.
- Машинное обучение: нейронные сети — одно из семейств моделей машинного обучения наряду с деревьями решений, методами опорных векторов и деревьями с градиентным бустингом, которые по-прежнему успешно конкурируют на табличных данных.
- Биологические нейронные сети: реальные нейроны обмениваются электрическими импульсами, ограниченными во времени, и адаптируются с помощью химических процессов, которые не моделируются искусственными нейронами. Спайковые нейронные сети воспроизводят больше этих особенностей, чем стандартные сети.
Краткая история#
В 1943 году Уоррен Маккаллок и Уолтер Питтс описали математическую модель нейрона — элемент, который активируется, когда сумма его бинарных входов превышает порог. Перцептрон Фрэнка Розенблатта, созданный в 1958 году, обучался на примерах подбирать веса таких элементов. Но в 1969 году Марвин Минский и Сеймур Пейперт показали, что однослойный перцептрон не может вычислить даже функцию XOR, и интерес к нему угас. Многослойные сети решают задачу XOR, а в 1986 году Дэвид Румельхарт, Джеффри Хинтон и Рональд Уильямс показали, что обратное распространение ошибки обучает их скрытые слои формировать полезные внутренние представления. В 2012 году глубокие сети захватили компьютерное зрение: обученная на двух GPU модель AlexNet выиграла соревнование ImageNet с ошибкой top-5 15,3% против 26,2% у модели, занявшей второе место.










