Понимание интуиции за слоями

В 1950 году Алан Тьюринг представил статью под названием Тест Тьюринга, в которой изложил основные правила, по которым машина может называться умным. Несмотря на прорывы в области искусственного интеллекта, даже сегодня машины не могут считаться интеллектуальными. Нейронная сеть - это область искусственного интеллекта, цель которой - имитировать структуру мозга человеческого тела. Один из основных типов нейронной сети, называемый искусственной нейронной сетью (ИНС), эффективен в поиске скрытых закономерностей в предоставленных данных и выдаче результата.

ПРИМЕЧАНИЕ. В этой статье предполагается, что читатель имеет базовое представление о нейронных сетях.

По-прежнему остается вопрос: хотя машины могут обрабатывать и понимать данные, которые им передаются, но способны ли они видеть такие вещи, как люди?

ДА! Обеспечение зрения для машины кажется абсурдным, но одна из таких нейронных сетей, называемая сверточная нейронная сеть, придает машинам частичное ощущение зрения.

Поскольку изображение - это просто набор числовых значений пикселей, разве ИНС не может его обработать? Ответ на это НЕТ! Хотя ИНС хорошо классифицируется по числовым данным, в ней не учитываются пространственные отношения при обработке изображения. Позвольте мне упростить это. Если при обработке списка изображений ИНС обнаружит, что кошка находится в правом верхнем углу одного изображения, она будет считать, что она всегда будет там появляться. Следовательно, независимо от того, где ваша кошка находится на изображении, если она не может найти ее в правом верхнем углу, она выдаст отрицательный результат.

С другой стороны, сверточная нейронная сеть, также известная как ConvNet, отлично справляется с поиском объекта в любом месте изображения. Кроме того, не волнуйтесь, если ваша кошка сварливая, она все равно ее узнает.

На изображении выше представлена ​​базовая архитектура ConvNet, которая содержит такие термины, как пул, уровень FC, свертка, которые на первый взгляд могут показаться сложными. Эта статья направлена ​​на демистификацию таких терминов и понимание их использования.

Приступаем к работе, давайте разберемся, что мы скармливаем сети!

Изображение, которое мы видим, нам кажется завораживающим. Но машина так на это смотрит. Он видит это как набор числовых значений пикселей, представляющих значения интенсивности цветовых каналов. Размер этого изображения 5999 x 4000 x 3; где 3 обозначает количество цветовых каналов, то есть RGB. Другие цветовые каналы могут быть HSV, GrayScale и многими другими.

Как машины извлекают элементы из значений пикселей?

В математике концепция под названием «Свертка» учитывает две функции и создает третью функцию, выражающую, как на форму одной функции влияет другая. Представьте, что вы применяете фильтр к своей фотографии. Здесь происходит следующее: он делает вашу фотографию и применяет функцию фильтра, которая может выделять тени. Фильтр активирует определенные функции вашего изображения и создает изображение на выходе.

Возникает вопрос, что это за фильтры? Фильтры - это не что иное, как трехмерные матрицы, имеющие определенные значения, которые возбуждаются, когда видят желаемый узор поблизости. Они значительно меньше, чем входное изображение, которое скользит по ширине и высоте изображения.

Когда фильтр скользит по изображению, он фокусируется на определенной окрестности изображения. Он выполняет арифметические операции с фильтром и частью изображения и сохраняет результат в одной ячейке. В технической терминологии клетки рассматриваются как нейроны. Несколько таких нейронов при объединении образуют двумерную матрицу, которая называется Карта активации / Карта характеристик, или, скорее, я бы сказал, что набор предпочтений фильтра из изображения . Соседство, на которое указывает один нейрон, называется локальным рецептивным полем.

Теперь эта карта функций является результатом извлечения признаков, выполненного одним фильтром. В случае слоя свертки используются несколько функций, которые, в свою очередь, создают несколько карт функций. Карты функций складываются вместе для передачи в качестве входных данных следующему слою.

Чем больше количество фильтров, тем выше количество карт функций и глубже извлечение функций.

Что происходит с размером выходного изображения?

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

  1. Шаг: шаг - это количество пикселей, на которое мы перемещаемся при перемещении фильтра. Когда шаг равен 2, мы перемещаем фильтр на 2 пикселя. Чем выше шаг, тем меньше размер выходного объема. Обычно мы устанавливаем шаг на 1 или 2.
  2. Размер фильтра: увеличивая размер фильтра, мы косвенно увеличиваем объем информации, которая будет храниться в одном нейроне. В этом случае количество результирующих движений, сделанных фильтром над изображением, уменьшится. В конечном итоге это приведет к уменьшению пространственного размера выходного объема.

3. Отступ: как следует из названия, он добавляет незначительное покрытие вокруг исходного изображения, чтобы сохранить размер выходного изображения без изменений. Расчет количества добавляемых слоев выполняется по формуле P = (((O-1) * S) + FW) / 2, где O - размер выходного изображения, W - размер входного изображения, F - размер фильтра, P - количество пикселей слоя, добавляемых в качестве заполнения, а S - шаг. Например, если размер входного изображения 5x5, размер фильтра 3x3, шаг равен 1, и нам нужен такой же размер выходного изображения, как и у входного изображения, допустимое заполнение будет равно 1.

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

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

Есть много функций, которые могут выполнять эту задачу, но эти две функции широко используются.

Сигмоид: вводит нелинейность с помощью функции g (z) = 1/1 + e⁻ᶻ, которая преобразует числа в диапазон от 0 до 1. Одна из основных проблем сигмоидной функции - это проблема исчезающего градиента. Не волнуйтесь, если вы не знакомы с этим термином. Этот пост Чи-Фэн Вана объясняет феномен исчезающего градиента.

ReLU: ReLU означает выпрямленную линейную единицу. Он ограничивает вход на 0 с помощью функции g (w) = max (0, w). Производительность ReLU также лучше, чем у сигмоидной функции, она частично решает проблему исчезающего градиента. Хотя одна проблема, от которой страдает ReLU, - это проблема умирающего ReLU, которая решается с помощью своего варианта под названием Leaky ReLU.

Теперь, когда мы сделали нашу сеть достаточно сильной, чтобы адаптироваться к изменениям, мы можем сосредоточиться на другой проблеме времени вычислений. Если вы помните, размер нашего изображения составлял 5999 x 4000 x 3, что составляет 71 988 000 пикселей для одного изображения, а у нас их много. Хотя машины исключительно быстрые, для обработки такого огромного количества значений пикселей потребуется некоторое время.

Один из основных инстинктов - выбрать среди группы доминирующую ценность. Это достигается за счет того, что машины используют операцию под названием Объединение.

Мы определяем окно объединения, скажем 2 x 2. Подобно фильтрам, это окно скользит по изображению и выбирает доминирующее значение из окна. Определение доминирующего меняется с подходом.

Один из подходов - Максимальный пул, который широко популярен, когда выбирается максимальное значение из изображения в окне. Это уменьшает размер до 25%. Другие подходы к объединению включают Среднее объединение, L2 норму прямоугольной окрестности, которая отличается подходом к выбору доминирующего значения.

Следовательно, основным мотивом использования уровня объединения является уменьшение размерности. Хотя были разговоры об удалении слоев пула и замене его слоем свертки. Стремление к простоте: вся сверточная сеть предлагает одну такую ​​архитектуру, в которой они предлагают время от времени использовать более крупный шаг, чтобы уменьшить размерность исходного представления.

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

Полностью связанные слои представляют собой обычную нейронную сеть или многослойный перцептрон (MLP).

Основная идея использования этих слоев состоит в том, чтобы учиться с помощью нелинейных комбинаций высокоуровневых функций, извлеченных с помощью слоев свертки и объединения. Во время обучения сети веса между нейронами действуют как параметр, который изменяется во время обучения. Поскольку этот слой принимает входные данные в векторной форме 1D, нам нужно сгладить выходные данные предыдущих слоев, чтобы передать их на слой FC.

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

Хотя это не единственные слои, используемые при построении CNN, они являются ее основными строительными блоками. В зависимости от характера проблемы можно добавить несколько других типов слоев, таких как DropOut Layer и Normalization Layer.

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

  1. AlexNet
  2. VGGNet
  3. ResNet
  4. Зарождение
  5. DenseNet


Пока эти архитектуры готовы к использованию, я призываю вас поэкспериментировать с архитектурой и создать свою собственную.

Спасибо за внимание! Надеюсь, эта статья поможет вам получить базовое представление о сверточной нейронной сети. Вы можете связаться со мной по моей Электронной почте, LinkedIn в случае каких-либо отзывов или предложений. Я бы очень хотел их услышать!

Следующая статья будет посвящена непрерывному примеру для CNN!

Удачного обучения!