Полносвязный слой

Материал из MachineLearning.

Версия от 17:11, 19 июля 2026; Vadim Iamaletdinov (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья написана с использованием LLM ChatGPT, GPT-5.6 Thinking и проверена участником Vadim Iamaletdinov 21:11, 19 июля 2026 (MSD)


Содержание

Полносвязный слой (англ. fully connected layer, dense layer) — слой нейронной сети, в котором каждый выходной элемент зависит от всех входных элементов через собственные настраиваемые веса. Полносвязный слой выполняет аффинное преобразование входного вектора; после него часто применяется функция активации.

Полносвязные слои образуют основу многослойного персептрона, используются как входные, скрытые и выходные преобразования нейронных сетей, а также как небольшие «головы» более сложных архитектур. Например, свёрточная сеть может сначала извлечь признаки изображения, а затем передать итоговый вектор в полносвязный слой для классификации. В трансформерах сходные линейные преобразования применяются к представлению каждого элемента последовательности.

Несмотря на простую формулу, полносвязный слой важен как математически, так и инженерно. Его размеры определяют число параметров, объём памяти и значительную часть вычислений модели. Выбор функции активации, начальных значений весов и способа регуляризации влияет на устойчивость обучения всей сети.

Терминология

В литературе и программных библиотеках встречаются названия:

  • полносвязный слой — подчёркивает, что каждый выход связан с каждым входом;
  • плотный слой — буквальный перевод термина dense layer, противопоставляемого разреженным преобразованиям;
  • линейный слой — распространённое название в программных библиотеках;
  • аффинный слой — математически наиболее точное название преобразования с вектором смещения.

Если слой содержит смещение, преобразование не является линейным в строгом математическом смысле: для линейного отображения должно выполняться f(0)=0, тогда как при ненулевом смещении f(0)=b. Поэтому модуль Linear в PyTorch фактически реализует аффинное преобразование.[1]

Термин слой также употребляется неоднозначно. Иногда им называют только аффинное преобразование, а функцию активации считают отдельной операцией. В других описаниях полносвязным слоем называют композицию аффинного преобразования и активации. При чтении статьи или программного кода это соглашение следует уточнять.

Математическое описание

Пусть вход слоя — вектор

x=(x_1,\ldots,x_n)^T,

а выход до применения функции активации — вектор

z=(z_1,\ldots,z_m)^T.

Полносвязный слой задаётся матрицей весов W размера m\times n и вектором смещений b длины m:

z=Wx+b.

Каждая компонента выхода равна

z_j=\sum_{i=1}^{n}w_{ji}x_i+b_j,\qquad j=1,\ldots,m.

Таким образом, выходной элемент z_j имеет отдельный вес w_{ji} для каждого входа x_i. Именно это свойство и называется полной связностью.

Если после аффинного преобразования применяется функция активации \sigma, итоговый выход равен

h=\sigma(z)=\sigma(Wx+b).

Обычно функция \sigma применяется покомпонентно. В скрытых слоях используются ReLU и другие нелинейные функции. Выходное преобразование выбирается с учётом задачи: например, для регрессии может использоваться тождественное преобразование, а для многоклассовой классификации — softmax.

Обработка набора объектов

При обучении несколько объектов объединяются в мини-пакет. Пусть матрица X содержит B объектов по строкам и имеет размер B\times n. Тогда преобразование всего мини-пакета записывается как

Z=XW^T+b.

Вектор b автоматически прибавляется к каждой строке. Такая операция эффективно выполняется как матричное умножение, для которого современные процессоры и ускорители имеют высокооптимизированные реализации.

Официальная документация Keras определяет Dense как преобразование activation(dot(input, kernel) + bias) и для многомерного входа применяет матрицу весов вдоль последней оси.[1] Аналогично torch.nn.Linear сохраняет все измерения входного тензора, кроме последнего, которое заменяется размерностью выхода.[1]

Число параметров

Для входа размерности n и выхода размерности m матрица весов содержит mn элементов, а вектор смещений — ещё m. Общее число обучаемых параметров равно

N_{\rm par}=mn+m=m(n+1).

Например, слой с 1024 входами и 512 выходами содержит

1024\cdot512+512=524800

параметров.

Число параметров растёт как произведение входной и выходной размерностей. Поэтому раннее преобразование большой карты признаков в один вектор может сделать сеть чрезмерно большой. Например, если вход содержит много пространственных позиций и каналов, операция выпрямления Flatten уничтожает явную пространственную структуру, а следующий полносвязный слой назначает отдельный вес каждой паре входа и выхода.

Пример прямого прохода

Рассмотрим слой с двумя входами и тремя выходами:

W=\left(\begin{array}{cc}1&-1\\2&0\\-1&3\end{array}\right),\qquad b=\left(\begin{array}{c}0\\1\\-2\end{array}\right).

Пусть

x=\left(\begin{array}{c}2\\1\end{array}\right).

Тогда

z=Wx+b=\left(\begin{array}{c}1\\5\\-1\end{array}\right).

Если после слоя применяется ReLU,

\sigma(t)=\max(0,t),

то итоговый выход равен

h=\left(\begin{array}{c}1\\5\\0\end{array}\right).

Пример показывает различие между аффинным преобразованием и активацией: матрица и смещение создают новые линейные комбинации признаков, а нелинейная функция изменяет класс отображений, которые может задавать сеть.

Роль нелинейности

Последовательность полносвязных слоёв без нелинейных операций между ними не становится выразительнее одного слоя. Действительно, два преобразования

z_1=W_1x+b_1


z_2=W_2z_1+b_2

можно объединить:

z_2=(W_2W_1)x+(W_2b_1+b_2).

Получается одно аффинное преобразование с новой матрицей и новым смещением. Нелинейные функции активации между слоями не позволяют выполнить такое свёртывание и дают сети возможность описывать нелинейные зависимости.

Глубокие сети прямого распространения представляются как композиции функций, соответствующих последовательным слоям. Они определяют параметрическое отображение входа в выход, а обучение подбирает параметры этого отображения.[1]

Сети с нелинейными полносвязными слоями обладают широкими аппроксимирующими возможностями, однако теоремы универсальной аппроксимации являются утверждениями о существовании подходящих параметров. Они сами по себе не гарантируют, что параметры будут найдены обучением, что модель потребует мало данных или будет хорошо работать вне обучающей области.