Слой — это структурный блок нейронной сети, объединяющий группу нейронов, которые обрабатывают входные данные по одному и тому же принципу. Каждый слой принимает тензор на вход, применяет к нему математические операции и передаёт преобразованный тензор следующему слою. Именно из слоёв строится архитектура любой нейросети — от простого перцептрона до трансформеров.
Как это работает
В основе слоя лежит операция над тензором. Чаще всего это линейное преобразование: умножение входных данных на матрицу весов и прибавление вектора смещения. Формула выглядит так: выход = активация(W × вход + b), где W — матрица весов, b — смещение, а активация — нелинейная функция. Без нелинейности вся сеть схлопнулась бы в одно линейное преобразование, сколько бы слоёв мы ни добавляли.
Слои бывают разных типов в зависимости от задачи. Полносвязные (Dense) соединяют каждый входной нейрон с каждым выходным. Свёрточные (Conv) применяют фильтры к локальным областям изображения. Рекуррентные (RNN, LSTM) обрабатывают последовательности, сохраняя состояние. Слои внимания (Attention) взвешивают важность разных частей входа. В трансформерах, на которых построены GPT и BERT, основу составляют именно механизмы самовнимания.
Зачем это нужно
Слои позволяют строить модели, которые автоматически извлекают признаки из данных. Ранние слои улавливают простые паттерны — края, линии, отдельные звуки. Средние — более сложные комбинации. Глубокие — абстрактные концепции: лица, слова, смыслы. Это называется иерархией признаков, и именно она делает глубокое обучение эффективным.
Разделение на слои даёт гибкость: можно менять архитектуру, добавлять или убирать блоки, замораживать одни слои и дообучать другие. В промт-инжиниринге понимание слоёв помогает осознать, почему модель «знает» одни вещи лучше других: ранние слои отвечают за синтаксис, глубокие — за семантику и логику.
Примеры
- GPT-3 содержит 96 слоёв трансформера. Каждый слой включает механизм самовнимания и полносвязную сеть. Чем глубже слой, тем более абстрактные представления он формирует.
- ResNet-50 для классификации изображений состоит из 50 слоёв, включая свёрточные и residual-блоки. Residual-связи позволяют обучать такие глубокие сети без затухания градиентов.
- Простой перцептрон для задачи XOR имеет один скрытый слой из двух нейронов. Этого достаточно, чтобы разделить нелинейно разделимые классы.
- BERT-base использует 12 слоёв энкодера. Каждый слой применяет многоголовое внимание и позиционно-зависимую полносвязную сеть.
Формула или метрика
Число слоёв (глубина сети) и число нейронов в каждом слое (ширина) — ключевые параметры архитектуры. Для полносвязного слоя:
выход = f(W · x + b)
где W — матрица весов размером m × n (m — число выходных нейронов, n — входных), x — входной вектор, b — вектор смещения, f — функция активации.
Типичные ошибки
- Добавлять слои без необходимости. Каждый слой увеличивает число параметров и риск переобучения. Глубина оправдана только при достаточном объёме данных.
- Игнорировать нелинейность. Стек из линейных слоёв без активаций эквивалентен одному линейному слою — сеть не сможет выучить сложные зависимости.
- Забывать про нормализацию. Без BatchNorm или LayerNorm глубокие сети плохо обучаются: градиенты затухают или взрываются.
- Путать типы слоёв. Свёрточный слой не подходит для текста без адаптации, а рекуррентный — для изображений. Выбор типа слоя диктуется задачей.
Как улучшить
- Начинайте с простой архитектуры: 2–3 слоя часто достаточно для базовых задач. Усложняйте только при недообучении.
- Используйте residual-связи (skip connections) при глубине больше 10–15 слоёв — они помогают градиентам проходить через сеть.
- Экспериментируйте с шириной, а не только с глубиной: иногда увеличение числа нейронов в слое даёт больше, чем добавление нового слоя.
- Применяйте нормализацию после каждого слоя — это ускоряет сходимость и стабилизирует обучение.
- Анализируйте, что выучили слои: визуализация активаций помогает понять, где модель теряет информацию.