AlexNet

AlexNet — это глубокая сверточная нейросеть, которая произвела революцию в компьютерном зрении. В ConvNetJS она может быть реализована полностью на стороне клиента с использованием JavaScript, что позволяет экспериментировать с архитектурой, параметрами обучения и визуализацией активаций в реальном времени.

Основные компоненты сети

AlexNet состоит из нескольких типов слоёв, каждый из которых играет ключевую роль в обработке изображений:

  1. Сверточные слои (Convolutional Layers)

    • Используются для выделения признаков изображения.

    • В ConvNetJS реализуются через объект conv_layer, где можно задавать фильтры, шаг свертки и размер подвыборки.

    • Пример конфигурации слоя:

      var layer = {
          type: 'conv',
          num_filters: 96,
          filter_size: 11,
          stride: 4,
          pad: 0,
          activation: 'relu'
      };
    • Ключевые моменты: первый слой AlexNet использует крупные фильтры 11×11 с шагом 4, что уменьшает размер изображения на ранней стадии, а последующие слои применяют фильтры меньшего размера для захвата локальных признаков.

  2. Субдискретизирующие слои (Pooling Layers)

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

    • В ConvNetJS используется pool_layer:

      var layer = {
          type: 'pool',
          pool_size: 3,
          stride: 2,
          pool_type: 'max'
      };
    • MaxPooling позволяет сети фокусироваться на наиболее выраженных признаках, сохраняя важные детали изображения.

  3. Нелинейные активации (ReLU)

    • В AlexNet используется ReLU (Rectified Linear Unit) после каждого сверточного слоя для ускорения сходимости обучения.
    • В ConvNetJS это задаётся через параметр activation: 'relu' в конфигурации слоя.
  4. Полносвязные слои (Fully Connected Layers)

    • После серии сверточных и пуллинговых слоёв идут полносвязные слои, которые объединяют извлечённые признаки для классификации.

    • Пример конфигурации:

      var layer = {
          type: 'fc',
          num_neurons: 4096,
          activation: 'relu'
      };
    • AlexNet имеет два больших полносвязных слоя с 4096 нейронами каждый и финальный слой для классификации с числом нейронов, соответствующим количеству классов.

Инициализация и обучение сети

ConvNetJS предоставляет объект ConvNet, в который передаётся массив слоёв:

var layers = [
    {type:'input', out_sx:227, out_sy:227, out_depth:3},
    {type:'conv', num_filters:96, filter_size:11, stride:4, pad:0, activation:'relu'},
    {type:'pool', pool_size:3, stride:2, pool_type:'max'},
    {type:'conv', num_filters:256, filter_size:5, stride:1, pad:2, activation:'relu'},
    {type:'pool', pool_size:3, stride:2, pool_type:'max'},
    {type:'conv', num_filters:384, filter_size:3, stride:1, pad:1, activation:'relu'},
    {type:'conv', num_filters:384, filter_size:3, stride:1, pad:1, activation:'relu'},
    {type:'conv', num_filters:256, filter_size:3, stride:1, pad:1, activation:'relu'},
    {type:'pool', pool_size:3, stride:2, pool_type:'max'},
    {type:'fc', num_neurons:4096, activation:'relu'},
    {type:'fc', num_neurons:4096, activation:'relu'},
    {type:'softmax', num_classes:1000}
];

var net = new convnetjs.Net();
net.makeLayers(layers);

Для обучения используется объект Trainer:

var trainer = new convnetjs.Trainer(net, {
    method: 'sgd',
    learning_rate: 0.01,
    momentum: 0.9,
    batch_size: 128,
    l2_decay: 0.0005
});
  • Метод оптимизации: SGD с моментумом ускоряет обучение и стабилизирует градиенты.
  • Регуляризация: l2_decay предотвращает переобучение на больших полносвязных слоях.

Визуализация фильтров и активаций

ConvNetJS позволяет визуализировать, какие признаки распознаются на каждом сверточном слое. Используется метод forward() для получения активаций:

var x = new convnetjs.Vol(227, 227, 3, 0.0);
var activations = net.forward(x);
  • Первые слои выявляют базовые границы и текстуры.
  • Средние слои объединяют простые признаки в более сложные паттерны.
  • Глубокие слои захватывают сложные формы объектов.

Особенности реализации в ConvNetJS

  • Все вычисления происходят на стороне клиента в браузере.
  • Нет необходимости в GPU, но вычисления ограничены производительностью JavaScript-движка.
  • Лёгкость модификации архитектуры и гиперпараметров.
  • Поддержка визуализации всех этапов работы сети, включая фильтры и градиенты.

Применение AlexNet

  • Классификация изображений (ImageNet, CIFAR-10/100).
  • Извлечение признаков для последующей передачи в другие модели.
  • Базовая архитектура для экспериментов с новыми типами слоёв и функций активации.

AlexNet в ConvNetJS демонстрирует принципы работы глубокой сверточной сети в компактной и наглядной форме, что делает её удобным инструментом для обучения и исследований в области компьютерного зрения.