Как это работает
Математически операция полносвязного слоя описывается формулой: y = f(Wx + b), где x — входной вектор, W — матрица весов, b — вектор смещения, f — функция активации. Каждый элемент выходного вектора вычисляется как взвешенная сумма всех входных сигналов плюс сдвиг. Размер матрицы весов определяется как N × M, где N — число входных нейронов, M — число выходных.
Если слой содержит 784 входа и 256 нейронов, число обучаемых параметров составит 784 × 256 + 256 = 200 960. Именно из-за плотности связей FC-слои содержат основную массу параметров модели.
Зачем это нужно
В архитектурах свёрточных сетей FC-слои ставятся в конце для финальной классификации. После того как свёрточные слои извлекли локальные признаки (края, текстуры, формы), полносвязные слои объединяют их в глобальное представление и выдают вероятности классов. В сетях для табличных данных FC-слои могут использоваться как основные, поскольку каждый признак здесь независим.
Примеры
- VGG16: первый полносвязный слой имеет 4096 нейронов, на вход получает 25 088 значений (7×7×512). Число весов — 4096 × 25 088 = свыше 100 млн параметров.
- Простая CNN для MNIST: после свёрточных слоёв идёт FC-слой на 256 нейронов, затем выходной слой на 10 классов (цифры 0–9) с softmax.
- Классификация трёх классов: входной FC-слой на 128 нейронов с ReLU, dropout 0.5, выходной FC-слой на 3 нейрона с softmax.
Формула или метрика
Для одного нейрона: yᵢ = f(Σⱼ wᵢⱼxⱼ + bᵢ).
В матричном виде: y = f(Wx + b).
Число параметров слоя: N × M + M, где N — входная размерность, M — число нейронов слоя.
Типичные ошибки
- Ставить FC-слой после свёрточного без Flatten: перед подачей в полносвязный слой многомерный тензор нужно развернуть в одномерный вектор.
- Использовать FC-слои для обработки изображений без свёрток: полносвязная сеть на полном изображении 224×224×3 будет содержать миллионы параметров уже в первом слое и почти наверняка переобучится.
- Забывать про dropout: FC-слои с большим числом параметров склонны к переобучению, особенно на малых датасетах. Dropout с коэффициентом 0.5 обнуляет половину активаций при обучении.
- Использовать FC-слой без функции активации между слоями: без нелинейности два FC-слоя эквивалентны одному линейному преобразованию.
Как улучшить
- Применяйте dropout между FC-слоями с коэффициентом 0.3–0.5, если данных для обучения немного.
- Используйте ReLU или её варианты (Leaky ReLU, ELU) в скрытых FC-слоях — они вычислительно эффективны и решают проблему затухания градиента.
- Ставьте softmax на выходном слое для многоклассовой классификации и сигмоиду — для бинарной.
- Сокращайте число FC-слоёв: современные архитектуры (ResNet, EfficientNet) обходятся одним FC-слоем в конце или используют глобальный average pooling вместо FC.
- Регуляризуйте через weight decay (L2-регуляризацию) — штраф за большие веса снижает переобучение.