Deep Learning (DL)
Глубокое обучение (DL) — это машинное обучение с многослойными нейросетями, которые извлекают признаки из исходных данных. Разбираем принцип работы, основные архитектуры и применение.
Глубокое обучение (DL) — это раздел машинного обучения (ML), в котором нейронные сети со множеством последовательно расположенных слоёв обучаются непосредственно на исходных данных, таких как пиксели, звуковые волны и текст. «Глубина» означает именно количество слоёв: каждый слой преобразует выход предыдущего, и сеть самостоятельно строит иерархию признаков — от границ к текстурам и целым объектам на изображении, — без ручного проектирования признаков инженерами. Глубокое обучение лежит в основе современного компьютерного зрения, распознавания речи, больших языковых моделей (LLMs) и генеративного ИИ.
Как работает глубокое обучение#
Нейронная сеть — это цепочка слоёв. Каждый слой умножает входные данные на матрицу обучаемых весов, добавляет смещение и применяет нелинейную функцию активации, например ReLU. Именно нелинейность делает глубину полезной: без неё любую последовательность слоёв можно свернуть в одно линейное преобразование.
При обучении веса настраиваются так, чтобы выходы сети соответствовали обучающим меткам. На каждом шаге пакет данных проходит через сеть в прямом направлении, функция потерь оценивает ошибку, обратное распространение ошибки вычисляет вклад каждого веса в ошибку, а оптимизатор, например стохастический градиентный спуск (SGD) или Adam, сдвигает каждый вес в направлении уменьшения ошибки. Многократное повторение этого процесса на протяжении многих эпох превращает случайные веса в полезные признаки. В приведённом ниже примере PyTorch обучает один линейный слой и сеть из трёх слоёв на точках, метки которых показывают, попадают ли точки внутрь круга:
import torch
from torch import nn
torch.manual_seed(0)
# Points inside a circle are class 1: no straight line separates the classes
x = torch.rand(1000, 2) * 2 - 1
y = (x.pow(2).sum(dim=1) < 0.5).float().unsqueeze(1)
# A single linear layer versus stacked layers with nonlinear activations
models = {
"linear": nn.Linear(2, 1),
"deep": nn.Sequential(nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, 16), nn.ReLU(), nn.Linear(16, 1)),
}
for name, model in models.items():
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for step in range(500):
loss = nn.functional.binary_cross_entropy_with_logits(model(x), y)
optimizer.zero_grad()
loss.backward() # backpropagation computes gradients for every layer
optimizer.step()
accuracy = ((model(x) > 0) == y).float().mean()
print(f"{name}: {accuracy:.1%} accuracy")Линейная модель достигает точности 60,8% — примерно такой же, как доля точек за пределами круга, — поскольку прямая граница не может охватить область. Глубокая модель достигает 99,9%: её скрытые слои изгибают границу принятия решений, формируя кривую, выученную на данных. Ultralytics YOLO26 обучается по тому же алгоритму, но на гораздо большем масштабе, а model.train() выполняет прямые проходы, вычисляет функцию потерь и распространяет ошибку по размеченным изображениям на GPU, если он доступен.
Глубокое обучение и машинное обучение#
Глубокое обучение — это подраздел машинного обучения, а различаются они главным образом тем, откуда берутся признаки. Классические алгоритмы, такие как деревья решений, метод опорных векторов и градиентный бустинг на деревьях, обучаются на признаках, определённых людьми, например на размере транзакции или количестве слов. Глубокие сети обучаются выделять признаки самостоятельно, поэтому они доминируют при работе с неструктурированными данными — изображениями, аудио и текстом. За эту способность приходится платить: глубоким моделям обычно нужно гораздо больше размеченных данных, они обучаются на GPU или других ускорителях и хуже объясняют свои выводы. Для табличных данных градиентный бустинг на деревьях, например XGBoost, остаётся серьёзным конкурентом, а перенос обучения сокращает нехватку данных для глубоких моделей, позволяя начинать с сети, предварительно обученной на большом наборе данных.
Основные архитектуры#
- Свёрточные нейронные сети (CNNs): перемещают по изображению небольшие обучаемые фильтры, благодаря чему один и тот же шаблон распознаётся в любой части кадра. CNN лежат в основе обнаружения объектов и сегментации изображений в реальном времени.
- Рекуррентные нейронные сети (RNNs): обрабатывают последовательности по одному шагу, сохраняя скрытое состояние. Разновидности RNN, такие как LSTM, доминировали в распознавании речи и переводе до появления трансформеров.
- Трансформеры: используют механизм внимания к самой последовательности, чтобы параллельно связывать каждый её элемент со всеми остальными. Представленные в 2017 году, они лежат в основе LLM и визуальных трансформеров (ViT).
- Диффузионные модели: учатся постепенно удалять шум, что позволяет им создавать изображения, видео и аудио из случайного шума.
Краткая история#
Идеи, лежащие в основе глубокого обучения, появились десятилетия назад. Обратное распространение ошибки популяризировала статья 1986 года Дэвида Румельхарта, Джеффри Хинтона и Рональда Уильямса, но сети оставались неглубокими, пока не сошлись три фактора: большие размеченные наборы данных, такие как ImageNet, достаточно быстрые GPU для обучения на них и такие методы, как функции активации ReLU и дропаут. В 2012 году AlexNet снизила долю ошибок в пяти лучших вариантах ImageNet до 15,3% против 26,2% у модели, занявшей второе место, и почти мгновенно поле перешло к глубоким сетям. За эту работу Хинтон, Ян ЛеКун и Йошуа Бенжио получили премию Тьюринга 2018 года, а Нобелевскую премию по физике 2024 года получили Хинтон и Джон Хопфилд за открытия, позволившие создать машинное обучение с искусственными нейронными сетями. Глубина сетей продолжала расти: остаточные связи позволили обучать ResNet с 152 слоями, а ансамбль таких сетей выиграл конкурс классификации ImageNet 2015 года с долей ошибок в пяти лучших вариантах 3,57%.










