И, я думаю, он может делать и другие вещи…

Вы когда-нибудь просто гуляли по своему дому и проходили мимо своего питомца, просто чтобы понять, что вы понятия не имеете, кошка это или собака.

Я тоже!

Ну, мальчик, у меня есть решение для вас! Вместо того, чтобы слушать своих сверстников, которые могут сказать вам, что проблема более серьезная и меняет жизнь, чем просто то, что вы не знаете, какого вида ваш питомец, просто создайте свёрточную нейронную сеть.

«Ну, а что такое CNN?» Вы можете спросить.

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

Позвольте мне объяснить, как это работает.

Начать

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

Сверточный слой

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

Затем CNN возьмет одну из характеристик этого изображения и наложит ее поверх эталонного изображения, скажем, она сделает это в верхнем левом углу (под эталонным изображением я подразумеваю изображение, которое CNN будет использовать в качестве основы). того, как должна выглядеть одна из ваших категорий, например, как должна выглядеть кошка или как должна выглядеть собака). Этот шаг моделируется средним квадратом на изображении выше.

Затем CNN сравнит перекрывающиеся пиксели объекта и левый верхний угол эталонного изображения, перемножив вместе соответствующие пиксели, сложив все эти продукты, а затем разделив эту сумму на количество пикселей в области объекта. .

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

Если все пиксели объекта были черными (что, скажем, равно 1), а все пиксели в верхнем левом углу эталонного изображения белые (это будет значение 0), то результат прохождения функция сравнения будет равна нулю, тогда как если бы они оба имели все черные пиксели, их сравнение дало бы результат, равный единице.

Итак, мы только что получили представление о том, насколько эта функция принадлежит верхнему левому пикселю эталонного изображения, так что же дальше?

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

Выпрямленные линейные единицы

Следующий шаг в нашей CNN называется разделом Rectified linear Units, но если вы не настолько безумны, чтобы повторять это каждый раз, когда используете его в разговоре, то вы можете просто назвать его ReLU.

Так что же делает ReLU?

Ну, у него очень простая задача, но очень важная. Он изменяет все запутанные значения, которые являются отрицательными, на ноль.

Цель этого, ну, это борьба с чем-то, называемым проблемой исчезающего градиента, которая иногда может привести к тому, что один из весов (как CNN принимает решения) модели не исправится, что создает риск поломки всей модели.

Объединение

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

Итак, как это работает? Что ж, как вы можете видеть на изображении выше, он берет отфильтрованную функцию и разбивает ее на разделы, а затем создает новое объединенное изображение, включая только самое большое значение из каждого раздела в новое изображение.

Область раздела, которую использует пул, называется ядром, которое обычно имеет значение 2 или 3 в большинстве CNN (иначе 2x2 или 3x3 пикселя).

Шаг в процессе объединения – это количество пикселей, на которое раздел должен перейти к следующему разделу, поэтому в приведенном выше примере шаг равен двум, но если вы хотите, чтобы разделы перекрывались, вам нужно может установить ядро ​​​​в 1.

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

CNN объединяет каждую из запутанных функций.

Быстрая заметка

Итак, я рассказал о сверточных слоях, ReLU и слоях пула, так что же дальше? Что ж, то, что я собираюсь вам рассказать, на самом деле не является еще одним слоем, но это применимо ко всем этим слоям.

В сверточной нейронной сети вы можете пройти через стек слоев, о котором я только что говорил несколько раз, что создает суперупрощенный результат.

Голосование за результат

В следующей части я буду использовать эти три изображения, чтобы объяснить это более наглядно. Изображение 1 (собака слева) будет тем, что вводится в CNN, в то время как изображение 2 (собака в середине) — это то, на чем CNN основывает то, как выглядит собака, и изображение 3 (кошка справа) это то, на чем CNN основывает то, как выглядит кошка.

Затем изображение 1 пройдет через все слои, перечисленные выше для изображений 2 и 3, чтобы получить их окончательные числовые значения, сделанные объединяющим слоем. Итак, мы получили 2 группы объединенных значений: те, в которых изображение 1 было основано на изображении 2, и те, где изображение 1 было основано на изображении 3.

Теперь CNN необходимо определить, является ли изображение 1 более похожим на изображение 2 или изображение 3.

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

Обратное распространение

Итак, мы только что получили «окончательный ответ» от CNN, но это не значит, что мы закончили, CNN еще предстоит многому научиться, чтобы повысить точность своих ответов.

Так как же это сделать?

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

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

Гиперпараметры

Гиперпараметр — это то, чем создатель CNN может управлять в модели, что оставляет ему право возиться и находить наилучшее соответствие для модели.

Для слоя свертки создатель имеет власть над количеством функций, которые использует CNN, и размером функций.

Затем, для объединения, вы можете изменить размер окна и шаг окна, так что, в основном, насколько зонален в каждом разделе CNN.

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

Ура

Вы только что создали свою первую, очень собственную CNN, и теперь вы, наконец, можете видеть виды вашего питомца, но позвольте мне сказать вам, что CNN могут делать гораздо больше, чем просто такую ​​простую задачу.

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

Было несколько действительно крутых вариантов использования CNN, и один из моих любимых — это когда люди смогли сделать один, чтобы помочь создать нейронную сеть, которая могла бы играть в игры Atari (ссылка на статью здесь).

Я призываю вас сразу перейти к CNN, если вы еще этого не сделали. Если предыдущие возможные применения CNN, о которых я говорил, не вызвали у вас особого интереса, я предлагаю продолжить изучение других вариантов использования, потому что могу вас заверить, один из них найдется для вас. Если вам понравилось одно из приложений, о которых я говорил, чего же вы ждете, сразу приступайте к изучению этого вопроса.

«Стало ужасающе очевидно, что наши технологии превзошли нашу человечность». - Альберт Эйнштейн.

Возможности CNN кажутся безграничными, и с нейронными сетями можно сделать еще так много.