Слои активации

Слои активации — это фундаментальная часть нейронных сетей, отвечающая за введение нелинейности в модель. Без активации нейронная сеть сводится к простой линейной комбинации входов и весов, что ограничивает её способность к обучению сложных функций. В TensorFlow.js слои активации реализуются с помощью класса tf.layers.activation и встроенных функций активации, которые могут применяться как в составе слоев, так и отдельно.


Подключение и базовое использование

В TensorFlow.js для создания слоя с активацией используется следующий синтаксис:

const tf = require('@tensorflow/tfjs');

const layer = tf.layers.dense({
  units: 64,
  activation: 'relu', // тип активации
  inputShape: [100]
});

Ключевые моменты:

  • units — количество нейронов в слое.
  • activation — функция активации. Может быть одной из встроенных: 'relu', 'sigmoid', 'tanh', 'softmax', 'linear'.
  • inputShape — форма входных данных (для первого слоя сети).

Кроме использования в Dense или других слоях, активацию можно применить отдельно:

const x = tf.tensor2d([[1, -2], [3, -4]]);
const activated = tf.layers.activation({ activation: 'relu' }).apply(x);
activated.print();

Основные функции активации

1. ReLU (Rectified Linear Unit) Функция: [ f(x) = (0, x)] Преимущества:

  • Ускоряет обучение.
  • Часто предотвращает проблему исчезающих градиентов.
  • Простая вычислительная реализация.

Особенности:

  • Может возникнуть эффект “мертвых нейронов”, если слишком большая часть значений обнуляется.

2. Sigmoid Функция: [ f(x) = ] Применение:

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

Особенности:

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

3. Tanh (гиперболический тангенс) Функция: [ f(x) = (x) = ] Свойства:

  • Вывод в диапазоне [-1, 1].
  • Центрирование вокруг нуля помогает в обучении.
  • Часто используется в рекуррентных нейронных сетях.

4. Softmax Функция: [ f(x_i) = ] Применение:

  • Преобразует выходы слоя в вероятностное распределение.
  • Чаще всего используется в последнем слое многоклассовой классификации.

5. Linear (линейная) Функция: [ f(x) = x] Применение:

  • Полезна для регрессии.
  • Позволяет передавать значения без искажений.

Пользовательские функции активации

TensorFlow.js позволяет определять собственные функции активации с помощью tf.layers.activation и передачи функции через tf.customGrad или простое использование tf.tidy для вычислений:

function customActivation(x) {
  return x.relu().add(x.sigmoid());
}

const customLayer = tf.layers.activation({
  activation: customActivation
});

Это дает возможность создавать комбинации известных функций или полностью новые нелинейности.


Взаимодействие активации с другими слоями

  • В Dense слоях функция активации обычно передается в аргументе activation.
  • В Conv2D и Conv1D активации также указываются через activation.
  • Для сложных архитектур часто используются отдельные слои tf.layers.activation между другими слоями, что повышает гибкость.

Пример:

const model = tf.sequential();
model.add(tf.layers.dense({ units: 128, inputShape: [64] }));
model.add(tf.layers.activation({ activation: 'relu' }));
model.add(tf.layers.dense({ units: 10 }));
model.add(tf.layers.activation({ activation: 'softmax' }));

Такой подход позволяет легко изменять функции активации и экспериментировать с архитектурой сети.


Практические советы

  • ReLU и её варианты (LeakyReLU, PReLU) являются стандартом для скрытых слоев.
  • Sigmoid и Softmax подходят для выходных слоев в задачах классификации.
  • При проблемах с исчезающими градиентами стоит попробовать tanh или модификации ReLU.
  • Пользовательские функции активации повышают гибкость, но требуют тщательного тестирования, особенно при градиентном спуске.

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