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

Основы

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

Сверточные нейронные сети полагаются на форму пространственной локальности, что в переводе с английского означает, что близлежащие узлы имеют большее влияние, чем дальние узлы. Это важно для распознавания образов, которое является фундаментальной частью классификации данных. По этой причине CNN могут использовать данные с 1, 2 и 3 измерениями. (На самом деле, CNN могут использовать N-мерные данные, однако это становится все более затратным в вычислительном отношении по мере увеличения N.) Одномерные данные обычно представляют собой аудиофайлы или текстовые файлы, двумерные данные обычно представляют собой двумерные изображения (представленные в виде значений пикселей). ), а трехмерные данные обычно представляют собой видео (двухмерные изображения с третьим измерением, являющимся временем) или другие данные трехмерного типа, такие как облака точек. Судя по литературе, CNN чаще всего используются для классификации двумерных изображений, на чем мы и сосредоточимся.

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

Но как сверточный фильтр узнает, на что он должен умножаться? Давайте посмотрим на пример. Если бы мы хотели классифицировать изображение как круг или линию, два фильтра свертки выглядели бы примерно так:

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

Прямое и обратное распространение

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

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

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

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

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