Полносвязный слой
Материал из 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]
Сети с нелинейными полносвязными слоями обладают широкими аппроксимирующими возможностями, однако теоремы универсальной аппроксимации являются утверждениями о существовании подходящих параметров. Они сами по себе не гарантируют, что параметры будут найдены обучением, что модель потребует мало данных или будет хорошо работать вне обучающей области.