Глубокое обучение — Подход в машинном обучении, основанный на многослойных нейронных сетях. Нейронные сети, в свою очередь, вдохновлены биологическими нейронами, которые взаимодействуют между собой, образуя структуры, способные обрабатывать информацию, анализировать её и выполнять классификацию, генерировать текст и много чего ещё. Модели глубокого обучения это те же нейронные сети, но с огромным количеством слоёв, каждый из которых выполняет свою функцию по обработке данных.
Углубляясь глубже, глубокое обучение — Способ обучения моделей на большом количестве данных, используя множество слоёв. Каждый слой сети обрабатывает информацию, «взвешивая» её при помощи параметров (весов и смещений), оставляя признаки или отбрасывая, посредством функций активации. Обучение происходит через итеративную (повторяющуюся) корректировку весов: сначала вычисляются градиенты ошибки с помощью обратного распространения (backpropagation), а затем веса обновляются при помощи оптимизаторов (SGD, Adam и др.).
Регуляризация (Dropout, нормализация) и грамотный выбор архитектуры и гиперпараметров помогают бороться с переобучением и делают модели более стабильными.
Введение
Эта статья не ответит на все вопросы, но мы пробежимся по всем основам глубокого машинного обучения, что бы создать примерную начальную картину без сильного углубления в детали.
А теперь вопрос: Что же происходит под капотом? Что именно заставляет машины видеть образы, понимать речь, играть в шахматы лучше, чем большинство из нас, и даже придумывать картины? Отчасти всё это — заслуга глубокого обучения.
Но часто, когда люди слышат фразу «глубокое обучение», в голове всплывет что‑то мистическое: мол, искусственный интеллект — таинственная коробочка, куда суёшь данные, закрываешь крышку, и получаешь всё что хочешь. Некоторые настолько далеко заходят, что путают понятия, считая, будто можно научить алгоритм без единой строчки кода и без понятия, как работают нейроны.
Что такое глубокое обучение и нейросети в целом
Биологический прототип. Мозг человека состоит из миллиардов нервных клеток (нейронов), которые передают друг другу сигналы через синапсы. Каждый нейрон получает импульсы от соседей, решает, достаточно ли сильный сигнал, и посылает импульс дальше.
Искусственный нейрон. Простая компьютерная модель: несколько числовых входов (обычно обозначаются как ) и один выход
. Между входами и выходом находятся веса
и смещение (bias)
. Сначала все
умножаются на
, затем складываются и к результату прибавляется
. Полученный итог передаётся через функцию активации
, что бы решить, насколько сильным должен быть сигнал далее.
Числовые входы — входные данные, например, изображение кошки. То есть .
Выход — То, что модель даёт на выходе, например, информацию, что на изображении кошка. То есть .
Веса — Важность входного значения. Больший вес = Больший вклад в финальный результат. Меняются при обучении модели. То есть .
Смещение — Сдвиг результата. Допустим, даже если все входы равны нулю (например, какие‑то неизвестные животные), ты всё равно можешь хотеть сдвинуть результат, чтобы он был чуть ближе к «кошке» или «собаке». То есть .
Архитектура: От плоской к глубокой
Однослойный перцептрон (плоская сеть). Несколько входов, несколько выходов и функция активации. Такой перцептрон может решать простые (линейно разделимые) задачи, например, XOR (Логическая операция, возвращающая 1, если входы различны) он не тянет.
Многослойный перцептрон (MLP, полностью связанные слои). Последовательность слоёв (input → hidden → hidden →... → output), где каждый слой пересылает сигналы дальше. Каждый спрятанный (hidden) слой может состоять из десятков, сотен, тысяч нейронов. И чем больше слоёв, тем «глубже» модель и тем сложнее её обучать. Он может входить в область глубокого обучения при большом количестве слоёв.
Глубокое обучение (deep learning). Это обучение глубоких сетей с многими скрытыми слоями (иногда их десятки или сотни), которые извлекают всё более абстрактные признаки из данных. Представьте: Первый слой анализирует «примитивные» детали (грани, края), второй — уже геометрические конструкции (прямые, кружки), третий части объектов (глаза, колёса), а последний — целые объекты (лицо, машину). Это не конкретная архитектура, а область архитектур, например, CNN, RNN, трансформеры.
Веса и слои
Параметры сети
Параметры — Настраиваемые значения внутри модели, которые определяют, как модель делает предсказания.
Веса (
). Главные действующие лица. Чем больше значение веса, тем важнее соответствующий вход для нейрона.
Смещения (bias). Как бы свободный параметр, позволяющий сдвинуть границу активации. Если без смещения нейрон может срастись с нулём, то добавив смещение, мы получаем дополнительную гибкость. Это дополнительный параметр, добавляемый к сумме взвешенных входов каждого нейрона. Он инициализируется случайным образом, а затем обновляется во время обучения с помощью градиентного спуска, точно также, как и веса.
Слои
Слой — Набор нейронов, выполняющий одинаковую операцию над входными данными. Каждый слой принимает вход; преобразует его с помощью своих весов, смещений и активации; и передаёт результаты дальше (в следующий слой или на выход).
Полносвязный слой (Dense / Linear / Fully Connected Layer). Каждый нейрон связан со всеми входами. Используется в классических нейросетях и на выходе CNN.
Где— Матрица весов.
Свёрточный слой (Convolutional, Conv). Используется в обработке изображений. Применяет свёртки (фильтры) по входу, выделяя локальные признаки.
Свёртка — Способ просканировать изображение небольшим фильтром, чтобы выделить важные признаки, например, края, углы, текстуры и т. д.Слой нормализации. Делает обучение стабильнее. При обучении нейросетей важно, чтобы данные на входе каждого слоя не сильно «гуляли» — то есть не менялись слишком резко от батча к батчу. Сложная тема со сложными формулами. Сеть легче обучается, если данные находятся в одинаковом диапазоне.
Батчи (batches) — Часть обучающих данных, которую сеть обрабатывает за один шаг обучения.
BatchNorm: Нормализирует по пакету.Слой выборки (Pooling). Необучаемый слой, который: получает вход, обычно изображение или свёрточную карту признаков; разбивает его на участки (например, 2×2 окна); в каждом окне выбирает значение по какому‑то правилу.
MaxPooling — Берёт максимум.
AvgPooling — Берёт среднее.-
Повторяющиеся слои (RNN, LSTM, GRU). Слои, которые обрабатывают последовательные данные, запоминая информацию из предыдущих шагов. Используются для текста, аудио, временных рядов, видео по кадрам. Они повторяют одну и ту же операцию на каждом шаге последовательности, используя общие веса, и при этом хранят «состояние памяти» из шага в шаг.
RNN (Recurrent Neural Network).
— Вход в момент времени
.
— Скрытое состояние из прошлого шага.
Забывает длинные зависимости. Склонен к исчезающим градиентам.LSTM (Long Short‑Term Memory).
Улучшенная RNN, которая запоминает долгосрочную информацию и использует ячейку памяти и входные/забывающие/выходные «вентили».
Запоминает важное, забывает неважное, передаёт это вперёд.GRU (Gated Recurrent Unit).
Объединяет некоторые вентили. Меньше параметров.
Dropout слой.
Случайно отключает нейроны во время обучения. Помогает бороться с переобучением.Минусы-
Входной и выходной слои.
Входной слой — Просто данные (формально не считается слоем).
Выходной слой — Зависит от задачи.
Классификация:или
Регрессия: Линейный слой без активации.
Функции активации
Функция активации — Нелинейное преобразование, которое применяется к выходу нейрона перед передачей его дальше.
Сама сеть это просто линейная функция, которая делает простейшие математические операции сложения.
Такая модель не может решать сложные задачи, потому что комбинация линейных функций всё ещё линейна.
Добавляем нелинейную функцию:
Теперь сеть на что‑то способна. Функция называется линейной, если её график — прямая линия, это линейная функция. Нелинейная функция может гнуться, изгибаться, менять форму. Если все слои только линейные, то есть:
То сеть не сможет выполнять сложные отсеивания, фильтрации и не сможет сделать ничего, кроме простых сложений.
Популярные функции активации
-
Sigmoid:
Сжимает всё в диапазон (0, 1). Подходит, если нужна вероятность.
1 — Максимальная вероятность. 0 — Минимальная вероятность.Сигмойдная функция -
ReLU (Rectified Linear Unit):
Преобразует отрицательные значения в 0. Оставляет положительные как есть.ReLU функция -
Tanh (Гиперболический тангенс):
или
, а также
То же, что сигмойда, но от -1 до 1. Он используется как для классификации, так и для регрессии, а также для обработки изображений и других типов данных.Гиперболический тангенс -
Leaky ReLU:
Похож на ReLU, но пропускает немного отрицательные значения. Решает проблему, когда нейроны умирают.Leaky ReLU -
Softmax (Многопеременная логистическая функция):
Превращает вектор чисел в вероятности. Каждый выход — вероятность класса. Сумма вероятностей равна 1. Обязательна для многоклассовой классификации.Softmax
Как выбрать?
Задача |
Что выбрать |
Скрытые слои |
ReLU, Leaky ReLU |
Бинарная классификация |
Sigmoid (на выходе) |
Многоклассовая классификация |
Softmax (на выходе) |
RNN / LSTM |
Tanh, иногда sigmoid |
Прямой проход (forward propagation)
Прямой проход — Процесс, при котором входные данные проходят через все слои сети, и сеть выдаёт предсказание.
Входные данные
.
-
Каждый скрытый слой:
Умножает на веса
.
Прибавляет смещение
.
Пропускает через функцию активации.
Последний слой выдаёт результат — например, вероятность классов.
После прямого прохода идёт обратный проход (backpropagation), что бы улучшить веса.
Обратное распространение ошибки (backpropagation)
Обратное распространение ошибки — Процесс, при котором нейросеть:
Вычисляет ошибку (потери) между предсказанием и правильным ответом.
Рассчитывает, как изменить веса и смещения, что бы в следующий раз ошибка была меньше.
Обновляет веса с помощью градиентного спуска.
Каждый шаг обучения нейросети состоит из:
Прямой проход. Считаем предсказание.
Вычисление ошибки. Сравнение с правильным ответом.
Обратный проход. Считаем градиенты.
Обновляем параметры. Корректируем веса на основе градиентного спуска.
Что бы понять, какая часть ошибки вызвана каждым весом в сети, он применяет цепное правило из матанализа:
L — Функция потерь.
a — Выход после активации.
(или y)
— Линейная часть.
W — Веса.
Эта формула вычисляет, насколько сильно ошибка (потеря) зависит от конкретного веса.
Функция потерь (loss function)
Функция потерь — Математическая формула, которая получает на вход предсказание нейросети и правильный ответ. А возвращает число — ошибку. Чем меньше — тем лучше.
Например. Если сеть предсказала , а правильный ответ
, то ошибка будет маленькая. Если сеть предсказала
, то ошибка будет большой.
Функции потерь бывают разные, вот основные:
MSE (Mean Squared Error, среднеквадратичная ошибка):
Используется при регрессии (когда нужно предсказывать число).
Ошибки сильно увеличиваются, если сильно промахнуться.MAE (Mean Absolute Error, средняя абсолютная ошибка):
Тоже для регрессии. Устойчивее к выбросам, чем MSE.Binary Cross‑Entropy (Бинарная кросс‑энтропия)
Используется при бинарной классификации (да/нет, 0/1). Ошибка очень большая, если ошибся в уверенности.Categorical Cross‑Entropy (Многоклассовая кросс‑энтропия):
Для многоклассовой классификации. Работает вместе с softmax на выходе.KL‑Divergence (KL‑дивергенция, дивергенция Кульбака‑Лейблера):
Используется, если сравнивать две вероятностные функции. В генеративных моделях.
Как выбрать?
Задача |
Потеря |
Регрессия |
MSE, MAE |
Бинарная классификация |
Binary Cross‑Entropy |
Многоклассовая классификация |
Categorical Cross‑Entropy |
Вероятность/Распределение |
KL‑дивергенция |
Оптимизаторы
Градиентный спуск
Градиентный спуск — Метод, который помогает уменьшить ошибку, постепенно подбирая лучшие веса.
Аналогия. Ты стоишь на вершине горы в тумане. Твоя цель — спуститься вниз, туда, где находится минимум ошибок. Но у тебя нет карты горы, ты ничего не видишь, ты можешь только потрогать землю вокруг себя и почувствовать, куда она наклонена. Если чувствуешь наклон, то спускаешься. Потом снова щупаешь и снова делаешь шаг вниз.
Высота горы — Ошибка нейросети.
Наклон земли — Градиент (направление увеличения ошибки).
Позиция — Веса нейросети.
Шаг вниз — Обновление весов.
Формула градиентного шага:
— Веса
— Скорость обучения
— Градиент функции потерь по весу
Оптимизатор
Оптимизатор — Алгоритм, который берёт градиенты и решает, как именно изменить веса, чтобы ошибка стала меньше.
Схоластический градиентный спуск (SGD). Он обновляет веса после каждого отдельного примера. Это быстрее, но добавляет шума, зато помогает избежать застревание в плохих местах.
«Схоластический» = «Случайный».
Адаптивные оптимизаторы. Они умнее обычного градиентного спуска. Они сами подстраивают скорость обучения для каждого веса в зависимости от ситуации.
Популярные адаптивные оптимизаторы:
Adam (Adaprive Moment Estimation).
Самый популярный. Использует средние значения градиентов и их квадратов. Быстрый и устойчивый.RMSprop.
Хорош для рекуррентных нейросетей (RNN). Поддерживает память о предыдущих градиентах.Adagrad.
Подходит, если есть редкие, но важные признаки. Слишком быстро замедляется.Momentum.
Добавляет «инерцию». Если градиент долго идёт в одном направлении — ускоряется.
Сравнение оптимизаторов:
Оптимизатор |
Обучается быстро |
Устойчив к шуму |
Адаптирует шаг |
SGD |
Нет❌ |
Нет❌ |
Нет❌ |
Momentum |
Да✅ |
Да✅ |
Нет❌ |
RMSprop |
Да✅ |
Да✅ |
Да✅ |
Adagrad |
Да✅ |
Да✅ |
Да✅ |
Adam |
ДА!✅✅ |
ДА!✅✅ |
ДА!✅✅ |
Регуляризация и переобучение
Переобучение (overfitting) — Нейросеть слишком хорошо запомнила тренировочные данные и не может работать с новыми. На тренировке всё идеально, а на проверке (валидации) ошибка высокая.
Регуляризация — Приёмы, которые защищают от переобучения. Они заставляют модель быть более обобщающей.
Виды регуляризации:
L2-регуляризация (Ridge):
Добавляет в функцию потерь штраф за большие веса.
Заставляет веса быть меньше. Помогает избежать перекручивания.L1-регуляризация (Lasso):
Способствует обнулению некоторых весов. Может упростить модель (некоторые признаки игнорируются).Dropout.
Случайно отключает нейроны во время обучения на каждом шаге. Не даём модели полагаться на одни и те же связи. Каждый раз сеть учится по‑разному решать задачу.Ранняя остановка (Early Stopping):
Следим за ошибкой на проверке. Если она перестала снижаться — останавливаем обучение раньше времени. Не даёт модели выучить данные. Быстро и эффективно.
Трансформеры и механизм внимания
Трансформер — Архитектура нейросети, которая читает вход целиком сразу (не по очереди, как RNN). А также понимает, на что обратить внимание в тексте.
До трансформера были RNN и LSTM, они читают текст последовательно.
Пример. Предложение: «The cat sat on the mat because it was warm.». Что такое «it»? Может быть «The mat?», «The cat?». Чтобы это понять, модель должна обратить внимание на ключевые слова. Тут нужен механизм внимания.
Как работает внимание
Для каждого слова модель считает, насколько оно связано с другими. Каждое слово превращается в 3 вектора:
Query — Что мы ищем.
Key — На что это слово похоже.
Value — Само содержание слова.
Сравниваем Query одного слова со всеми Key других слов. Получаем веса (внимание), сколько внимания уделить каждому слову. Считаем взвешенную сумму Value векторов → Итоговое представление слова.
— Формула.
Что внутри трансформера
Multi‑Head Attention:
Много параллельных «голов внимания». Каждая может фокусироваться на разных связях.Feedforward Layer:
Простой слой (как в обычной сети).Слой нормализации и остаточные связи:
Помогает с устойчивостью при обучении.
Сравнение:
Свойство |
RNN / LSTM |
Трансформер |
Обработка текста |
Последовательность |
Весь текст сразу |
Скорость обучение |
Медленно |
Быстро (параллельно) |
Длинные зависимости |
Плохо |
Отлично |
Интерпретируемость |
Сложно |
Видно, куда смотрит |
Автокодировщик (autoencoder)
Автокодировщик — Нейросеть, которая учится сжимать данные, а потом восстанавливать их обратно.
Она состоит из двух частей:
Кодировщик (Encoder):
Сжимает данные в короткий вектор — «представление», вектор признаков.Декодировщик (Decoder):
Пытается восстановить исходные данные из этого вектора.
Зачем они нужны
Сжатие. Уменьшить размер данных.
Удаление шума. Убрать мусор из изображения.
Обнаружение аномалий. Если что‑то не похоже на обычное, оно плохо восстанавливается.
Глубокие автокодировщики
Это просто автокодировщики с несколькими слоями.
У кодировщика и декодировщика много скрытых слоёв.
Лучше сжимают, выделяют более сложные признаки.
Могут быть свёрточными, рекурентными и т. п.
Вариационные автокодировщики (VAE)
Обычный автокодировщик выдаёт один конкретный вектор для каждого примера.
Что далает VAE:
Кодировщик выдаёт среднее (
) и стандартное отклонение (
). Это задаёт нормальное распределение.
Мы случайно выбираем точку из этого распределения (sampling).
Декодировщик по этой точке восстанавливает картинку.
VAE умеет генерировать новые объекты. Если обучить VAE на картинках людей, то можно взять любую точку в «пространстве лиц» и получить новое лицо. Или плавно переходить от одного лица к другому.
Формула потерь у VAE:
Ошибка восстановления — Насколько хорошо мы восстановили вход.
KL‑дивергенция — Насколько наше распределение близко к нормальному.
Сравнение:
Свойство |
AE |
VAE |
Выход кодировщика |
Один вектор |
Распределение ( |
Можно генерировать новые данные |
Нет❌ |
Да✅ |
Генеративная модель |
Нет❌ |
Да✅ |
Потери |
Ошибка восстановления |
Ошибка + KL‑дивергенция |
Генеративные модели
Генеративная нейросеть — Нейросеть, которая генерирует что‑то новое. Она учится по примерам.
Виды генеративных моделей:
Название |
Идея |
Примеры |
VAE |
Учим распределение и семплируем |
Простые генерации |
GAN |
Соревнование генератора и дискриминатора |
Реалистичные |
Flow‑based |
Учим обратимое преобразование |
Быстрая генерация |
Diffusion |
Учим, как добавить шум и убрать его |
DALL‑E, Stable Diffusion |
GAN (Generative Adversarial NetWork)
Генератор: Генерирует фейковые данные.
Дискриминатор: Пытается отличить фейк от настоящего.
Генератор старается обмануть дискриминатор, а дискриминатор раскусить генератора. В итоге, генератор начинает генерировать суперреалистичные данные.
Flow-based модели (Normalizing Flows)
Цель: Научиться напрямую преобразовывать шум в изображение и обратно, при этом сохраняя точную вероятность.
Плюсы:
Можно точно вычислять вероятность.
Можно делать обратное преобразование без обучения второго модуля.
Минусы:
Нужно делать обратимые слои (сложнее).
Diffusion модели (диффузионные)
Очень мощные. Они лежат в основе DALL‑E, Midjourney, Stable Diffusion.
Добавляем шум к изображению — шаг за шагом, пока не получится почти белый шум.
Учим нейросеть обращать процесс: из шума восстанавливать изображение.
На тесте даём чистый шум → получаем картинку.
Плюсы:
Качество очень высокое.
Можно управлять генерацией (по тексту, наброску и тд.).
Минусы:
Медленная генерация.
Если понравилась статья — рекомендую подписаться на телеграм‑канал NetIntel. Там вы сможете найти множество полезных материалов по IT и разработке!
Комментарии (3)
ofp1979
14.06.2025 12:25Автору спасибо за статью. Сам новичок в данном вопросе и для себя нашел несколько хороших моментов (какие виды активаций бывают, про дропауты немного раньше по-другому представлял их назначение и особо спасибо за формулы с графиками) + сам на данный момент с нуля создал простенькую модель для определения IT-трендов по словам (написал на чистом Go без каких-либо внешних библиотек и т. д.), но для более глубокого понимания, какие есть подходы и сети в целом, данная статья мне дала пищи для дальнейших действий — автору спасибо!
dronperminov
14.06.2025 12:25Пожалуйста, не вводите людей в заблуждение, говоря, что на выходе softmax получаются вероятности.
Результатом softmax является вектор, значения которого удобно интерпретировать как вероятности, но вероятностным он не является: одного лишь суммирования всех значений в единицу и принадлежности каждого из значений отрезку [0, 1] ещё недостаточно, чтобы являться вероятностью.
dimonz80
1) А как для многомерной SoftMax получился график одномерной сигмойды?
2) Если функции потерь MSE и MAE принимают только положительные значения (т.к. квадрат и модуль) , каким образом корректируются веса, исходя из производной dL/dW если L всегда > 0?