Вступление

Глубокое обучение и искусственный интеллект были модными словами в 2016 году; к концу 2017 года они стали более частыми и запутанными. Итак, давайте попробуем понять все по очереди. Мы рассмотрим суть глубокого обучения, то есть нейронные сети (NNets). Большинство вариантов NNets трудны для понимания, и лежащие в основе архитектурные компоненты делают их все звучными (теоретически) и выглядящими (графически) одинаковыми.

Благодаря Fjodor van Veen из Института Азимова у нас есть хорошее представление о наиболее популярных вариантах архитектур NNet. Пожалуйста, обратитесь к его блогу. Чтобы улучшить наше понимание NNets, мы будем изучать и внедрять одну архитектуру каждую неделю. Ниже приведены архитектуры, которые мы будем обсуждать в течение следующих нескольких недель.

1 неделя

Архитектура на этой неделе - сверточная нейронная сеть или CNN. Но перед запуском CNN мы сначала немного углубимся в перцептроны. NNet - это совокупность нескольких единиц / ячеек, называемых перцептронами, которые являются двоичными линейными классификаторами. Давайте быстро посмотрим, чтобы понять то же самое.

Входы x1 и x2 умножаются на их соответствующие веса w1 и w2 и суммируются с помощью функции f, поэтому f = x1*w1 + x2*w2 + b (член смещения, необязательно добавляется). Теперь эта функция f может быть любой другой операцией, но для перцептронов это обычно суммирование. Затем эта функция f оценивается посредством активации, которая позволяет выполнить желаемую классификацию. Сигмовидная функция - это наиболее распространенная функция активации, используемая для двоичной классификации. Для более подробной информации о перцептронах я рекомендую эту статью.

Теперь, если мы складываем несколько входов и соединяем их с помощью функции f с несколькими ячейками, сложенными в другой слой, это формирует несколько полностью связанных перцептронов, выход из этих ячеек (Скрытый слой) становится входом в последнюю ячейку, которая снова использует функцию f и активацию для получения окончательной классификации. Это, как показано ниже, простейшая нейронная сеть.

Топологии или архитектурные варианты NNets разнообразны из-за уникальной возможности NNets, называемой функцией универсального приближения. Это сама по себе огромная тема, и лучше всего ее освещает Майкл Нильсен здесь. Прочитав это, мы можем положиться на тот факт, что NNet может вести себя как любая функция, какой бы сложной она ни была. Вышеупомянутые сети NNets также называются нейронными сетями прямого распространения или FFNN, поскольку поток информации является однонаправленным, а не циклическим. Теперь, когда мы знаем основы перцептрона и FFNN, мы можем представить, что сотни входов, подключенных к нескольким таким скрытым слоям, образуют сложную сеть, популярную под названием Deep Neural Network или Deep Feed Forward Network.

Чем именно глубокая нейронная сеть отличается от CNN? Давайте разберемся.

CNN приобрели свою популярность благодаря соревнованиям, таким как ImageNet, а в последнее время они также используются для НЛП и распознавания речи. Важно помнить, что многие другие варианты, такие как RNN, LSTM, GRU и т. Д., Основаны на том же каркасе, что и CNN, но с некоторой разницей в архитектуре, которая их отличает. Позже мы подробно обсудим различия.

CNN формируются с использованием трех типов уровней, а именно Свертка, Объединение и Плотное или Полное соединение. Наши предыдущие сетевые сети были типичным примером плотных уровневых сетей, поскольку все уровни были полностью связаны. Чтобы узнать больше о необходимости переключения на слои свертки и объединения, прочтите отличное объяснение Андрея Карпати здесь. Продолжая обсуждение слоев, давайте рассмотрим сверточный слой.

(Для обсуждения ниже мы будем использовать классификацию изображений как задачу, чтобы понять CNN, позже перейдем к NLP и видео задачам)

Слой свертки: рассмотрим изображение размером 5X5 пикселей с 1 as white и o as black, это изображение распознается как монохромное изображение размером 5X5. Теперь представьте матрицу 3x3 со случайным 1s and 0s, и этой матрице разрешено выполнять матричное умножение с подмножеством изображения, это умножение записывается в новую матрицу, поскольку наша матрица 3x3 перемещает пиксель на каждой итерации. Ниже представлено наглядное изображение этого процесса.

Рассмотренная выше матрица 3X3 называется «фильтром», задача которого - извлекать элементы из изображения. Это делается с помощью «алгоритмов оптимизации» для определения конкретных 1s and 0s в матрице 3x3. Мы позволяем нескольким таким фильтрам извлекать несколько функций в сверточном слое NNet. Один шаг для матрицы 3x3 называется «шагом».

Подробный вид 3-канального (RGB) изображения, создающего два выхода свертки с использованием двух 3-канальных фильтров, представлен ниже. Спасибо Андрею Карпаты!

Эти фильтры W0 and W1 являются «свертками», а output - извлеченным признаком, слой, состоящий из всех этих фильтров, является сверточным слоем.

Уровень объединения: этот слой используется для уменьшения размера ввода с помощью различных функций. Как правило, слой «MAX Pooling» часто используется после сверточного слоя. Пул использует матрицу 2X2 и работает с изображением так же, как сверточный слой, но на этот раз уменьшает само изображение. Ниже приведены 2 способа объединения изображений с помощью «Максимальное объединение» или «Среднее объединение».

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

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

VGGNet, занявшая второе место в ILSVRC 2014, является популярной CNN и помогла миру понять важность глубины в сети за счет использования 16-уровневой сети вместо 8 уровней в AlexNet , победитель ILSVRC 2012. Модель plug and play «VGG-16» доступна для использования в keras, мы будем использовать ее для просмотра выигрышной архитектуры CNN.

После загрузки модели в Keras мы можем увидеть «Output Shape» для каждого слоя, чтобы понять тензорные размеры и «Param #» для посмотрите, как рассчитываются параметры для получения сложных функций. «Param #» - это общее количество обновлений весов для каждой свернутой функции для всех функций.

Теперь, когда мы знакомы с архитектурой CNN и понимаем ее слои и то, как она функционирует, мы можем перейти к пониманию того, как она используется в NLP и обработке видео. Об этом будет рассказано в сообщении на следующей неделе вместе с введением в RNN и ключевыми различиями между CNN и RNN. Между тем, вы можете бесплатно прочитать обо всех моделях CNN, которые выиграли соревнования ImageNet с 2012 года, здесь, спасибо Адиту Дешпанде!

Будущая работа

  • После того, как мы обсудим все архитектуры, мы будем следовать тому же порядку и реализовывать их с помощью блокнотов jupyter. Все ссылки на код будут доступны после завершения реализации.

Похожие сообщения об обновлениях

  • СИНТЕТИЧЕСКИЕ ГРАДИЕНТЫ
  • АДАДЕЛЬТА
  • АДАГРАД
  • АДАМ
  • НЕСТЕРОВ
  • RMSPROP
  • SGD
  • СОПРЯЖАТЬ ГРАДИЕНТ
  • БЕСПЛАТНЫЙ ГЕССИАН
  • LBFGS
  • ЛИНИЯ ГРАДИЕНТНЫЙ СПУСК

Аналогичная запись о функциях активации

  • ELU
  • ХАРДСИГМОИД
  • HARDTANH
  • ЛИЧНОСТЬ
  • LEAKYRELU
  • RATIONALTANH
  • RELU
  • RRELU
  • СИГМОИД
  • SOFTMAX
  • СОФТПЛЮС
  • SOFTSIGN
  • ТАНЬ

Спасибо за прочтение, надеюсь, помогло