Полносвязный слой
Материал из MachineLearning.
| | Статья написана с использованием LLM ChatGPT, GPT-5.6 Thinking и проверена участником Vadim Iamaletdinov 21:11, 19 июля 2026 (MSD) |
Полносвязный слой (англ. fully connected layer, dense layer) — слой нейронной сети, в котором каждый выходной элемент зависит от всех входных элементов через собственные настраиваемые веса. Полносвязный слой выполняет аффинное преобразование входного вектора; после него часто применяется функция активации.
Полносвязные слои образуют основу многослойного персептрона, используются как входные, скрытые и выходные преобразования нейронных сетей, а также как небольшие «головы» более сложных архитектур. Например, свёрточная сеть может сначала извлечь признаки изображения, а затем передать итоговый вектор в полносвязный слой для классификации. В трансформерах сходные линейные преобразования применяются к представлению каждого элемента последовательности.
Несмотря на простую формулу, полносвязный слой важен как математически, так и инженерно. Его размеры определяют число параметров, объём памяти и значительную часть вычислений модели. Выбор функции активации, начальных значений весов и способа регуляризации влияет на устойчивость обучения всей сети.
Терминология
В литературе и программных библиотеках встречаются названия:
- полносвязный слой — подчёркивает, что каждый выход связан с каждым входом;
- плотный слой — буквальный перевод термина dense layer, противопоставляемого разреженным преобразованиям;
- линейный слой — распространённое название в программных библиотеках;
- аффинный слой — математически наиболее точное название преобразования с вектором смещения.
Если слой содержит смещение, преобразование не является линейным в строгом математическом смысле: для линейного отображения должно выполняться , тогда как при ненулевом смещении
. Поэтому модуль
Linear в PyTorch фактически реализует аффинное преобразование.[1]
Термин слой также употребляется неоднозначно. Иногда им называют только аффинное преобразование, а функцию активации считают отдельной операцией. В других описаниях полносвязным слоем называют композицию аффинного преобразования и активации. При чтении статьи или программного кода это соглашение следует уточнять.
Математическое описание
Пусть вход слоя — вектор
а выход до применения функции активации — вектор
Полносвязный слой задаётся матрицей весов размера
и вектором смещений
длины
:
Каждая компонента выхода равна
Таким образом, выходной элемент имеет отдельный вес
для каждого входа
. Именно это свойство и называется полной связностью.
Если после аффинного преобразования применяется функция активации , итоговый выход равен
Обычно функция применяется покомпонентно. В скрытых слоях используются ReLU и другие нелинейные функции. Выходное преобразование выбирается с учётом задачи: например, для регрессии может использоваться тождественное преобразование, а для многоклассовой классификации — softmax.
Обработка набора объектов
При обучении несколько объектов объединяются в мини-пакет. Пусть матрица содержит
объектов по строкам и имеет размер
. Тогда преобразование всего мини-пакета записывается как
Вектор автоматически прибавляется к каждой строке. Такая операция эффективно выполняется как матричное умножение, для которого современные процессоры и ускорители имеют высокооптимизированные реализации.
Официальная документация Keras определяет Dense как преобразование activation(dot(input, kernel) + bias) и для многомерного входа применяет матрицу весов вдоль последней оси.[1] Аналогично torch.nn.Linear сохраняет все измерения входного тензора, кроме последнего, которое заменяется размерностью выхода.[1]
Число параметров
Для входа размерности и выхода размерности
матрица весов содержит
элементов, а вектор смещений — ещё
. Общее число обучаемых параметров равно
Например, слой с 1024 входами и 512 выходами содержит
параметров.
Число параметров растёт как произведение входной и выходной размерностей. Поэтому раннее преобразование большой карты признаков в один вектор может сделать сеть чрезмерно большой. Например, если вход содержит много пространственных позиций и каналов, операция выпрямления Flatten уничтожает явную пространственную структуру, а следующий полносвязный слой назначает отдельный вес каждой паре входа и выхода.
Пример прямого прохода
Рассмотрим слой с двумя входами и тремя выходами:
Пусть
Тогда
Если после слоя применяется ReLU,
то итоговый выход равен
Пример показывает различие между аффинным преобразованием и активацией: матрица и смещение создают новые линейные комбинации признаков, а нелинейная функция изменяет класс отображений, которые может задавать сеть.
Роль нелинейности
Последовательность полносвязных слоёв без нелинейных операций между ними не становится выразительнее одного слоя. Действительно, два преобразования
можно объединить:
Получается одно аффинное преобразование с новой матрицей и новым смещением. Нелинейные функции активации между слоями не позволяют выполнить такое свёртывание и дают сети возможность описывать нелинейные зависимости.
Глубокие сети прямого распространения представляются как композиции функций, соответствующих последовательным слоям. Они определяют параметрическое отображение входа в выход, а обучение подбирает параметры этого отображения.[1]
Сети с нелинейными полносвязными слоями обладают широкими аппроксимирующими возможностями, однако теоремы универсальной аппроксимации являются утверждениями о существовании подходящих параметров. Они сами по себе не гарантируют, что параметры будут найдены обучением, что модель потребует мало данных или будет хорошо работать вне обучающей области.
Полносвязный слой в многослойном персептроне
Многослойный персептрон строится как последовательность полносвязных преобразований и функций активации. Для сети из слоёв можно записать
Скрытые представления формируются совместно с решением основной задачи. Полносвязный слой не просто хранит независимый классификатор в каждом нейроне: все слои обучаются совместно, и параметры ранних слоёв подбираются с учётом итоговой функции потерь.
Статья Многослойный персептрон является естественной вышестоящей темой для полносвязного слоя: отдельный слой задаёт одно преобразование, а персептрон объединяет несколько таких преобразований в целую модель.
Обучение и обратное распространение
Пусть слой вычисляет
а производная функции потерь по выходу слоя известна:
Тогда производные по параметрам и входу имеют вид
Для мини-пакета производные суммируются или усредняются по объектам. Формула передаёт градиент предыдущему слою, а внешнее произведение
показывает, как каждый вес связывает соответствующие вход и выход.
На практике эти операции автоматически строятся системами автоматического дифференцирования. Пользователю обычно не требуется вручную программировать производные стандартного слоя, но понимание размеров матриц помогает обнаруживать ошибки архитектуры и избыточное число параметров.
Вычислительная сложность
Для одного объекта основная операция — умножение матрицы на вектор длины
. Её вычислительная сложность имеет порядок
Для мини-пакета из объектов порядок вычислений равен
Обратный проход включает матричные умножения сопоставимого порядка. Память для параметров равна , не считая градиентов и служебных состояний оптимизатора. Например, оптимизатор Adam хранит для каждого параметра дополнительные оценки моментов, поэтому фактическая память заметно превышает размер одной матрицы весов.
Хотя полносвязный слой удобно сводится к матричному умножению, его эффективность зависит от размеров матриц, размера мини-пакета, типа чисел, пропускной способности памяти и аппаратного ускорителя. Слой с большим числом параметров может быть ограничен не только числом арифметических операций, но и передачей весов из памяти.
Инициализация весов
Если веса слишком велики, значения и градиенты могут быстро возрастать. Если они слишком малы, сигнал и градиенты могут затухать. Поэтому масштаб случайной инициализации согласуют с числом входов и выходов слоя.
Инициализация Глоро, также называемая Xavier initialization, выбирает дисперсию весов с учётом обеих размерностей слоя. Для нормального распределения часто используется масштаб
Она была предложена при исследовании распространения активаций и градиентов в глубоких сетях.[1]
Для слоёв с ReLU и родственными функциями применяется инициализация Хе:
Она учитывает обнуление части активаций выпрямителем.[1]
Эти формулы являются исходными рекомендациями, а не универсально оптимальными настройками. Подходящая инициализация зависит от активации, нормализации, остаточных связей и общей архитектуры.
Регуляризация
Полносвязный слой может содержать большое число параметров и быть склонным к переобучению, особенно при малой выборке. Распространённые методы регуляризации:
- штраф на норму весов;
- ранняя остановка;
- уменьшение ширины слоя;
- dropout;
- добавление шума;
- ограничение или нормирование весов;
- увеличение объёма и разнообразия обучающих данных.
Dropout случайно обнуляет часть активаций во время обучения. Первоначальная работа показала его эффективность как способа уменьшения переобучения в больших нейронных сетях.[1]
Регуляризация не исправляет некорректный эксперимент. Если тестовые данные использовались при выборе архитектуры или настройке параметров, оценка качества остаётся смещённой независимо от применённого штрафа.
Сокращение числа параметров
Узкое скрытое представление
Если выходная размерность меньше входной, слой создаёт бутылочное горлышко. Последовательность
с небольшой размерностью может сократить число параметров и заставить модель использовать компактное представление.
Однако слишком узкий слой теряет информацию. Подходящая ширина зависит от сложности задачи и не определяется только размером входа.
Низкоранговое разложение
Большую матрицу можно приближённо представить произведением двух меньших матриц:
где имеет размер
,
—
, а
значительно меньше
и
. Число параметров уменьшается с
до
Такое разложение может задаваться заранее или находиться после обучения. Оно полезно, если матрица действительно допускает хорошее приближение низкого ранга.
Разреженные и структурированные связи
В разреженном слое часть весов отсутствует или равна нулю. Другие варианты ограничивают матрицу блочной, диагональной, циркулянтной или иной структурой. Это снижает число параметров, но реальное ускорение возникает только при наличии эффективной поддержки соответствующих операций программным и аппаратным обеспечением.
Полносвязный и свёрточный слои
Полносвязный слой использует отдельный вес для каждой пары входного и выходного элементов. Он не предполагает близости входных координат и не разделяет параметры между позициями.
Свёрточный слой использует локальные области и повторяет один набор весов в разных пространственных позициях. Это задаёт важное предположение о структуре изображений и сигналов: один и тот же локальный признак может встречаться в разных местах.
| Свойство | Полносвязный слой | Свёрточный слой |
|---|---|---|
| Связи | Каждый выход зависит от всех входов | Выход зависит от локальной области |
| Совместное использование весов | Обычно отсутствует | Один фильтр применяется во многих позициях |
| Число параметров | Зависит от полной размерности входа | Зависит от размера ядра и числа каналов |
| Пространственная структура | Не учитывается автоматически | Встроена в архитектуру |
| Типичное применение | Векторные признаки, скрытые преобразования, выходные головы | Изображения и другие данные с локальной структурой |
Свёртка размера смешивает каналы в каждой позиции и алгебраически похожа на полносвязное преобразование последней размерности. Однако веса повторяются во всех позициях, поэтому такая свёртка не эквивалентна глобальному полносвязному слою над выпрямленным изображением.
Многомерные входы
Полносвязный слой необязательно требует предварительного превращения всего тензора в один вектор. Современные библиотеки применяют одну и ту же матрицу к последней оси, сохраняя остальные измерения.
Например, тензор с формой «мини-пакет × длина последовательности × размер признака» может быть преобразован в тензор «мини-пакет × длина последовательности × новая размерность признака». Одна матрица используется для всех элементов последовательности. Такой слой является полносвязным по каналам признакового вектора, но не соединяет разные позиции последовательности между собой.
Это различие важно в трансформерах: линейные проекции запросов, ключей и значений применяются к каждому токену, а смешивание информации между токенами выполняется механизмом внимания.
Программные реализации
PyTorch
В PyTorch слой создаётся модулем torch.nn.Linear:
import torch from torch import nn layer = nn.Linear(in_features=128, out_features=64) x = torch.randn(32, 128) z = layer(x) # форма: (32, 64) h = torch.relu(z)
Linear выполняет только аффинное преобразование, поэтому активация задаётся отдельно.[1]
Keras
В Keras функция активации может быть указана внутри Dense:
from tensorflow import keras
layer = keras.layers.Dense(
units=64,
activation="relu"
)
Математически это остаётся композицией аффинного преобразования и покомпонентной нелинейности.[1]
Различие программных интерфейсов показывает, почему при описании архитектуры полезно явно указывать, входит ли активация в понятие слоя.
Типичные ошибки
Несогласованные размерности
Если вход имеет длину , матрица должна содержать
весов для каждого выхода. Ошибки часто возникают из-за различного соглашения о том, хранятся ли объекты по строкам или столбцам и где требуется транспонирование матрицы.
Лишние последовательные линейные слои
Несколько аффинных преобразований без нелинейности между ними эквивалентны одному. Дополнительные слои в таком случае могут изменить параметризацию и процесс оптимизации, но не класс представимых аффинных функций.
Преждевременное выпрямление данных
Преобразование изображения или последовательности в один длинный вектор уничтожает явную информацию о расположении элементов и может резко увеличить число параметров. Обычно структурированные данные сначала обрабатываются специализированными слоями.
Неподходящий выходной слой
Размер выхода и последующее преобразование должны соответствовать задаче и функции потерь. Неправильное сочетание может сделать обучение нестабильным или привести к неверной интерпретации выхода.
Чрезмерная ширина
Широкий слой увеличивает вычисления и память, но не гарантирует улучшения качества. При ограниченной выборке он может усилить переобучение.
Неверное понимание слова «полносвязный»
Полная связность описывает схему зависимостей, а не утверждает, что все обученные веса обязаны быть ненулевыми или одинаково важными. После обучения часть весов может оказаться близкой к нулю.
Применения
Полносвязные слои используются:
- в многослойных персептронах для табличных и векторных данных;
- в выходных головах классификации и регрессии;
- для изменения размерности представления;
- в автокодировщиках;
- в рекомендательных системах;
- в нейросетевых моделях временных рядов;
- в проекциях признаков трансформеров;
- для объединения признаков из нескольких источников;
- в небольших моделях на заранее вычисленных признаках;
- как компоненты более сложных блоков нейронных сетей.
Полносвязный слой является универсальным способом обучаемого смешивания координат вектора, но не всегда наилучшим способом учитывать структуру данных. Архитектура должна соответствовать известным свойствам задачи: локальности, последовательности, графовым связям, симметриям или разреженности.
История и место в развитии нейронных сетей
Полносвязный слой не связан с единственным моментом изобретения: он возник как естественная матричная запись совокупности формальных нейронов. Ранние обучаемые нейронные модели, включая персептрон, использовали взвешенные суммы входов.
Развитие многослойных сетей и метода обратного распространения ошибки сделало композиции полносвязных слоёв стандартной моделью обучения нелинейных отображений. Позднее свёрточные, рекуррентные, графовые сети и трансформеры добавили специализированные способы обработки структуры данных, но плотные линейные преобразования сохранились как базовые компоненты многих архитектур.
Современное значение полносвязного слоя состоит не в том, что он всегда является лучшей архитектурой, а в том, что он служит простым и хорошо оптимизируемым строительным блоком. На нём удобно показывать основные понятия нейронных сетей: параметры, активации, обратное распространение, инициализацию, регуляризацию и изменение размерности представлений.
См. также
- Многослойный персептрон
- Персептрон
- Нейронная сеть
- Функция активации
- Метод обратного распространения ошибки
- Автоматическое дифференцирование
- Переобучение
- Dropout
- Свёрточная нейронная сеть
- Трансформер
- Линейная модель
- Матричное умножение
Примечания
Литература
- Goodfellow I., Bengio Y., Courville A. Deep Learning. — Cambridge, Massachusetts: MIT Press, 2016. — 800 с. — ISBN 978-0-262-03561-3
- Bishop C. M. Pattern Recognition and Machine Learning. — New York: Springer, 2006. — 778 с. — ISBN 978-0-387-31073-2
- Glorot X., Bengio Y. Understanding the difficulty of training deep feedforward neural networks // Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. — 2010. — Т. 9. — С. 249—256.
- He K., Zhang X., Ren S., Sun J. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification // Proceedings of the IEEE International Conference on Computer Vision. — 2015. — С. 1026—1034.
- Srivastava N., Hinton G., Krizhevsky A., Sutskever I., Salakhutdinov R. Dropout: A Simple Way to Prevent Neural Networks from Overfitting // Journal of Machine Learning Research. — 2014. — Т. 15. — № 56. — С. 1929—1958.

