Источник статьи |Облачное сообщество Hengyuan
Исходный адрес |Как работают сверточные нейронные сети
Автор оригинала | instter
Всякий раз, когда происходит крупный прорыв в области глубокого обучения, девять из десяти этих достижений связаны со сверточными нейронными сетями (CNN). CNN, также известные как CNN или ConvNets, в настоящее время являются основной силой в разработке глубоких нейронных сетей и могут быть даже более точными, чем люди, в распознавании изображений. Если и существует какой-либо метод, который может оправдать всеобщие ожидания в отношении глубокого обучения, CNN, безусловно, является первым выбором.
Что в них хорошего, так это то, что их легко понять, по крайней мере, когда вы разбиваете их на основные части. Я проведу вас через это.有一段视频更详细地讨论了这些图像
. Если вам что-то непонятно посередине, просто нажмите на картинку, чтобы перейти к соответствующему описанию в видео.
X и O
Чтобы проиллюстрировать CNN, мы можем начать с очень простого примера: распознать, что символ на изображении — это круг и крест. С одной стороны, этот пример уже является хорошей иллюстрацией того, как работает CNN, а с другой стороны, он достаточно прост, чтобы мы не зацикливались на лишних деталях. Самая важная задача CNN здесь заключается в том, что всякий раз, когда мы даем ему изображение, он сообщает, является ли символ на нем кругом или крестом. Для него результат всегда один из двух.
Прежде всего, мы можем придумать самый простой способ идентификации изображений, который заключается в непосредственном сравнении новых изображений с изображениями кругов и крестов и просмотре, какие символы на изображении более похожи. Но все не так просто, потому что компьютеры очень жестко относятся к сравнению этих изображений. Для компьютера эти изображения представляют собой просто группу пикселей с номерами позиций, расположенных в двумерной матрице (прямо как в шахматной доске). В нашем примере белые квадраты (т.е. штрихи) имеют значение 1, а черные квадраты (т.е. фон) имеют значение -1. Таким образом, при сравнении изображений, если значение какой-либо сетки не равно, компьютер будет думать, что эти два изображения различны. В идеале мы хотели бы, чтобы компьютер правильно оценивал символ независимо от перемещения, уменьшения, поворота или деформации. Вот где CNN пригодится.
особенность
CNN сравнивает части двух изображений, эти части называются функциями. CNN лучше различают, являются ли два изображения одинаковыми или нет, сравнивая грубые признаки в похожих местах, а не сравнивая изображение целиком.
Каждая функция в изображении похожа на уменьшенное изображение, которое представляет собой меньшую двумерную матрицу. Эти функции охватывают общие элементы изображения. Возьмите изображение вилки, например, ее наиболее важные черты включают диагональ и крест посередине. Тем не менее, любая разветвленная линия или центральная точка должны соответствовать этим характеристикам.
свертка
Всякий раз, когда CNN разрешает новое изображение, не зная, где находятся вышеупомянутые функции, CNN сравнивает любое место в изображении. Чтобы подсчитать, сколько совпадающих признаков есть на всем изображении, мы создаем здесь механизм фильтрации. Математика этого механизма называется卷积(convolution)
, откуда и произошло название CNN.
Основной принцип свертки заключается в вычислении степени соответствия между функцией и частью изображения, если значение каждого пикселя из двух умножается, а затем сумма делится на количество пикселей. Если оба пикселя белые (значение 1), продукт равен ; если оба пикселя черные (значение -1), продукт равен . То есть произведение совпадения пикселей равно 1, а произведение несхожести пикселей равно -1. Если все пиксели двух изображений совпадают, суммируйте эти произведения и разделите на количество пикселей, чтобы получить 1; и наоборот, если пиксели двух изображений совершенно разные, вы получите -1。1 * 1 = 1(-1) * (-1) = 1
Мы можем завершить свертку, пока повторяем описанный выше процесс и суммируем различные возможные особенности изображения. Затем мы можем создать новую 2D-матрицу на основе значений и позиций каждой свертки. Это исходное изображение, отфильтрованное по признаку, который может сказать нам, где найти признак на исходном изображении. Часть со значением ближе к 1 более соответствует признаку, чем ближе значение к -1, тем больше разница, а что касается части, близкой к 0, сходство почти отсутствует.
Следующий шаг — применить тот же метод к разным признакам, сверткам в разных частях изображения. Наконец, мы получим набор отфильтрованных исходных изображений, каждое из которых соответствует признаку. Мы можем просто думать обо всей операции свертки как об одном шаге обработки. Этот шаг называется сверточным слоем, что также означает, что впереди еще несколько слоев.
Из принципа работы CNN нетрудно увидеть, что она потребляет много вычислительных ресурсов. Хотя мы можем объяснить, как работает CNN, всего на одном листе бумаги, количество операций сложения, умножения и деления может очень быстро возрасти. Выражаясь математически, можно сказать, что количество этих операций растет экспоненциально с (1) количеством пикселей в изображении, (2) количеством пикселей в каждом признаке и (3) количеством признаков. С таким количеством факторов, влияющих на количество вычислений, задачи, с которыми справляются СНС, могут стать очень сложными без особых усилий, и неудивительно, что некоторые производители микросхем разрабатывают и создают специализированные микросхемы для вычислительных требований СНС.
объединение
Еще одним мощным инструментом, используемым CNN, является 池化(pooling)
. Объединение в пул — это метод сжатия изображений и сохранения важной информации.При объединении в пул выбираются разные окна на изображении и выбирается максимальное значение в этом диапазоне окон. На практике идеальным вариантом является квадратная область со сторонами, равными двум или трем, и шагом в два пикселя.
После объединения исходного изображения количество содержащихся в нем пикселей будет уменьшено до четверти исходного, но поскольку объединенное изображение содержит максимальное значение каждого диапазона в исходном изображении, оно по-прежнему сохраняет каждый диапазон и каждый диапазон. степень соответствия характеристик. То есть объединенная информация больше ориентирована на то, есть ли на изображении совпадающие признаки, а не на то, где эти признаки существуют на изображении. Это может помочь CNN определить, включена ли функция в изображение, не отвлекаясь на ее местоположение. Это решает вышеупомянутую проблему очень жестких компьютеров.
Следовательно, функция слоя объединения состоит в объединении одного или нескольких изображений в изображения меньшего размера. В итоге мы получим изображение с тем же количеством пикселей, но с меньшим количеством пикселей. Это также помогает улучшить только что упомянутую вычислительно затратную проблему. Предварительное уменьшение 8-мегапиксельного изображения до 2-мегапиксельного может облегчить последующую работу.
Линейный выпрямитель
Еще один тонкий, но важный шаг —线性整流单元(Rectified Linear Unit,ReLU)
, математика тоже проста - превратите все отрицательные числа на картинке в 0. Этот трюк предотвращает работу CNN до нуля или бесконечности, это как смазка оси для CNN — не крутая технология, но без нее CNN далеко не уйдут.
Результат линейной ректификации будет иметь то же количество пикселей, что и исходное изображение, за исключением того, что все отрицательные значения будут заменены нулями.
глубокое обучение
К этому моменту читатель, возможно, обнаружил, что входные данные (двумерная матрица) и выходные данные (двумерная матрица) каждой операции со слоями аналогичны, а это означает, что мы можем складывать каждый слой вместе, как блоки Lego. Таким образом, исходное изображение станет набором изображений меньшего размера, содержащих информацию об объектах, после фильтрации, исправления и объединения. Далее эти изображения можно снова отфильтровать и сжать, и с каждой обработкой их признаки будут усложняться, а сами изображения уменьшаться. Наконец, слои обработки более низкого уровня содержат простые функции, такие как края, углы или блики; слои обработки более высокого уровня содержат более сложные функции, такие как формы или узоры. Эти высокоуровневые функции часто становятся хорошо распознаваемыми, например, в CNN распознавания лиц мы можем видеть полное лицо на уровне обработки высшего порядка.
полносвязный слой
Наконец, у CNN тоже есть секретное оружие —全连接层(fully connected layers)
. Полносвязный слой собирает отфильтрованные изображения в более высоких слоях и преобразует информацию об этих функциях в голоса. В нашем случае есть два варианта: круг или вилка. В традиционной архитектуре нейронной сети полносвязный слой играет роль основного строительного блока. Когда мы вводим изображение в эту ячейку, оно обрабатывает все значения пикселей как одномерный список вместо предыдущей двумерной матрицы. Каждое значение в списке может определить, является ли символ на картинке кругом или крестом, но выбор не совсем демократичен. Поскольку некоторые значения лучше различают вилки, а некоторые лучше различают круги, эти значения получат больше голосов, чем другие. Количество голосов, отданных всеми значениями за разные варианты, будет权重(weight)
или连结强度(connection strength)
способ представлять.
Таким образом, каждый раз, когда CNN оценивает новое изображение, оно будет проходить через множество нижних уровней, прежде чем достигнет полного уровня ссылок. После голосования вариант, набравший наибольшее количество голосов, станет категорией для этого изображения.
Как и другие слои, несколько полносвязных слоев также можно комбинировать, потому что их входы (списки) и выходы (голоса) имеют очень похожие формы. На практике мы можем объединить несколько полностью связанных слоев, некоторые из которых будут иметь виртуальные скрытые параметры голосования. Каждый раз, когда мы добавляем полносвязный слой, вся нейронная сеть может изучать более сложные комбинации функций и делать более точные суждения.
обратное распространение
Инструкция пока выглядит неплохо, но за ней стоит большой вопрос — откуда берутся фичи? А в полностью связанном слое, как мы определяем веса? Если бы нам пришлось делать эту работу самим, CNN не были бы так популярны, как сейчас. К счастью, есть трюк с машинным обучением, называемый обратным распространением, который может помочь нам решить эту проблему.
Чтобы использовать обратное распространение, нам нужно подготовить несколько изображений, на которых уже есть ответ. Это значит, что нам нужно успокоиться и обвести и скрестить тысячи образов. Затем мы должны подготовить необученную CNN, где случайным образом определяются значения любых пикселей, признаков, весов и полносвязных слоев. Затем мы можем обучить CNN с помеченными изображениями.
После обработки CNN каждое изображение в конечном итоге будет проходить раунд выборов для определения категории. По сравнению с ранее отмеченными положительными решениями, неверная оценка в этом выборе, то есть ошибка идентификации, может сказать нам, что является хорошими признаками и весами. Мы можем уменьшить ошибку, вызванную выборами, скорректировав характеристики и веса. После каждой корректировки эти функции и веса подстраиваются немного выше или ниже, ошибка пересчитывается, а корректировки, которые успешно уменьшили ошибку, сохраняются. Таким образом, когда мы настраиваем каждый пиксель в сверточном слое и каждый вес в полносвязном слое, мы можем получить набор весов, которые немного лучше оценивают текущее изображение. Затем мы можем повторить описанные выше шаги, чтобы идентифицировать больше изображений с тегами. В процессе обучения просчеты в отдельных картинках пройдут, но общие черты и веса в этих картинках останутся. Если имеется достаточно размеченных изображений, значения этих признаков и весов в конечном итоге будут приближаться к устойчивому состоянию, которое хорошо распознает большинство изображений.
Излишне говорить, что обратная проводимость также требует значительных вычислительных ресурсов, что является еще одной причиной, побуждающей производителей производить специальные компоненты.
Гиперпараметры
В дополнение к вышесказанному, есть некоторые аспекты CNN, которые трудно объяснить и изучить. Разработчикам CNN необходимо принять множество решений, включая следующие вопросы.
- Сколько функций должно быть в каждом сверточном слое? Сколько пикселей должно быть в каждой функции?
- Каков размер окна в каждом слое пула? Какой длины должен быть интервал?
- Сколько скрытых нейронов (вариантов) должно быть у каждого дополнительного полносвязного слоя?
В дополнение к этим проблемам нам также необходимо рассмотреть многие структурные проблемы более высокого порядка, например, сколько уровней обработки должно быть в CNN и в каком порядке. Некоторые глубокие нейронные сети могут включать в себя тысячи слоев обработки, и существует множество возможностей проектирования.
С таким количеством перестановок мы можем протестировать только небольшое подмножество настроек CNN. Таким образом, дизайн CNN обычно развивается вместе со знаниями, накопленными сообществом машинного обучения, и иногда происходят некоторые неожиданные улучшения в производительности. Хотя мы рассмотрели некоторые базовые структуры CNN, есть много улучшений, которые были протестированы и признаны эффективными, например, использование новых типов слоев обработки или более сложное соединение различных слоев обработки.
Помимо графики
Наш пример с кругом и вилкой связан с распознаванием изображений, но CNN также могут обрабатывать другие типы данных, хитрость заключается в том, чтобы преобразовать любые данные в форму, подобную картинке. Например, мы можем разделить звук по времени, а затем разделить каждый сегмент на низкие, средние, высокие или другие более высокие частоты. Таким образом, мы можем организовать эту информацию в двумерную матрицу, где строки представляют разное время, а столбцы — разные частоты. В этом поддельном изображении чем ближе «пиксели», тем выше корреляция между ними. CNN очень хорошо справляется с обработкой таких данных, и исследователи также творчески подходят к преобразованию текстовых данных при обработке естественного языка (обработка естественного языка) и химических данных в процессе разработки новых лекарств в форму, которую может обрабатывать CNN.
Однако, когда каждая строка представляет клиента, а каждый столбец представляет различную информацию, такую как имя клиента, адрес электронной почты, историю покупок и просмотров, эти данные клиента не находятся в форме, которую CNN может обработать. Потому что в этом примере позиции строки и столбца не важны, а значит, их можно расположить произвольно, не затрагивая информацию. Напротив, если позиции пикселей в строке и столбце в изображении меняются местами, они обычно теряют свое первоначальное значение.
Таким образом, хитрость использования CNN заключается в том, что если на данные не влияет изменение порядка строк и столбцов, такие данные не подходят для обработки CNN. Но если проблему можно преобразовать в такую форму, как распознавание изображений, то CNN, пожалуй, самый идеальный инструмент.
扩展阅读
:Примечания к классу CS231n