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

Полносвязный слой (Dense) является фундаментальным строительным блоком нейронных сетей, реализованных с помощью Keras.js. Он представляет собой слой, в котором каждый нейрон соединён со всеми нейронами предыдущего слоя. Это обеспечивает максимальную гибкость в обучении модели, позволяя захватывать сложные зависимости между признаками.

Основные параметры Dense

  • units — количество нейронов в слое. Определяет размер выходного вектора слоя. Например, units: 128 создаёт слой с 128 нейронами.

  • activation — функция активации, которая применяется к выходу каждого нейрона. Наиболее популярные:

    • relu — устраняет отрицательные значения, ускоряет обучение глубоких сетей.
    • sigmoid — сжимает значения в диапазон от 0 до 1, используется для бинарной классификации.
    • softmax — нормализует вектор выходов в вероятности, полезна для многоклассовой классификации.
  • useBias — логический параметр, включающий смещение для нейронов (true по умолчанию). Смещение помогает модели лучше подгонять данные, особенно при линейных зависимостях.

  • kernelInitializer и biasInitializer — методы инициализации весов и смещений. Обычно применяются:

    • glorotUniform — стандартная инициализация для Dense слоев.
    • heNormal — оптимальна для слоев с ReLU активацией.

Структура слоя и передача данных

Dense слой получает на вход тензор формы (batch_size, input_dim), где input_dim — количество признаков предыдущего слоя. На выходе формируется тензор (batch_size, units).

Формула работы слоя:

output = activation(dot(input, W) + b)

где:

  • input — входной тензор,
  • W — матрица весов размером (input_dim, units),
  • b — вектор смещений размером (units),
  • activation — выбранная функция активации.

Примеры использования

Создание слоя с 64 нейронами и ReLU активацией:

const denseLayer = new KerasJS.layers.Dense({
  units: 64,
  activation: 'relu',
  useBias: true,
  kernelInitializer: 'glorotUniform',
  biasInitializer: 'zeros'
});

Добавление слоя к модели:

const model = new KerasJS.Model({
  layers: [
    denseLayer
  ]
});

Важные особенности Dense в Keras.js

  1. Совместимость с различными форматами данных: входные данные могут быть массивами JavaScript или TypedArray (например, Float32Array). Это позволяет легко интегрировать Keras.js в веб-приложения с потоковыми данными.
  2. Аппаратная оптимизация: Keras.js использует WebGL для ускорения матричных операций. Это критически важно для Dense слоев с большим числом нейронов и входных признаков.
  3. Поддержка сериализации: модель, включающая Dense слои, можно сохранять и загружать в формате JSON, что обеспечивает переносимость между различными средами исполнения.
  4. Гибкая конфигурация активаций и инициализаций: можно комбинировать нестандартные функции активации и инициализаторы для экспериментальных архитектур.

Практические рекомендации

  • Для небольших моделей с ограниченными вычислительными ресурсами рекомендуется использовать меньшее количество нейронов и избегать чрезмерно глубоких Dense сетей.
  • Для слоев с ReLU активацией лучше использовать heNormal инициализацию для ускорения сходимости.
  • В случае многоклассовой классификации выходной слой должен иметь функцию активации softmax и количество нейронов, равное числу классов.
  • Использование dropout или регуляризации к весам помогает избежать переобучения в глубоких Dense сетях.

Связь с другими слоями

Dense слой может быть соединён с:

  • Conv2D слоями: после сверточных слоев часто используется Flatten, чтобы преобразовать тензор в вектор, подходящий для Dense.
  • Recurrent слоями (LSTM, GRU): выход рекуррентного слоя может быть подан на Dense слой для классификации или регрессии.
  • BatchNormalization: добавление BatchNormalization перед Dense слоем улучшает стабильность обучения.

Примеры архитектур

Классическая MLP для регрессии:

Input -> Dense(128, relu) -> Dense(64, relu) -> Dense(1, linear)

MLP для классификации на 10 классов:

Input -> Dense(256, relu) -> Dense(128, relu) -> Dense(10, softmax)

Каждый слой Dense выполняет линейное преобразование, затем активацию, обеспечивая нелинейность модели и способность решать сложные задачи распознавания.


Dense слой в Keras.js — это базовый, но чрезвычайно гибкий компонент для построения нейронных сетей в браузере, сочетающий простоту конфигурации с мощью WebGL ускорения и возможностью интеграции с современными фронтенд-технологиями.