Это четвертая часть моей серии статей о сверточных нейронных сетях. Вот необходимые части для этого поста:

Заключительная часть серии объясняет, почему использовать свертки в нейронной сети может быть отличной идеей:

1. Слой объединения

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

1.1 Максимальное объединение

Предположим, у вас есть вход 4 на 4, и вы хотите применить тип объединения под названием максимальное объединение. Результатом этой конкретной реализации максимального объединения будет выход 2 на 2. То, как вы это сделаете, довольно просто. Возьмите входные данные 4 на 4 и разбейте их на разные области (эти области окрашены как четыре области, как показано на рисунке 1). И тогда в выводе 2 на 2 каждый из выходов будет просто максимальным из соответствующей заштрихованной области. Обратите внимание, что в нижней левой зеленой области самое большое число равно 6, а в красной нижней правой области самое большое число равно 3. Таким образом, чтобы вычислить каждое из выходных чисел справа, мы возьмем максимум за 2 по 2 регионам. Таким образом, это было бы так, как если бы вы применили фильтр размером 2 (это как если бы f= 2), потому что вы берете области 2 на 2 и берете шаг 2 (потому что вы делаете 2 шага, чтобы переместить фильтр в область другого цвета).

Как видно из иллюстрации GIF, размер фильтра f и шаг s являются гиперпараметрами максимального объединения, поскольку мы начинаем с верхнего левого фильтра 2 на 2 (индиго цветной фильтр) и мы получаем значение 9. Затем мы делаем шаг на 2 шага, чтобы посмотреть на верхний правый фильтр (голубой фильтр), чтобы получить 2 (поскольку 2 — это максимальное значение в этой светло-синей области), и затем для следующей строки вы опускаете фильтр на 2 шага вниз, чтобы получить 6, а затем мы делаем 2 шага вправо, чтобы получить 3.

Если вы думаете о области 4 на 4 как о некотором наборе признаков, активациях на каком-то слое нейронной сети, то большое число означает, что она, возможно, обнаружила конкретный признак (если входное изображение — кошка, то признак может быть кошачий глаз, кошачий ус, кошачий нос и т. д.). Итак, что делает операция max, так это то, что пока функция обнаруживается где-либо в одном из цветных квадрантов, она остается сохраненной в выходных данных максимального объединения. Итак, оператор max на самом деле говорит, что если функция обнаружена где-то в фильтре, то сохранить большое число. Однако, если функция не обнаружена, так что, возможно, эта конкретная функция не существует в верхнем правом квадранте (светло-голубая область), тогда максимальное число этих чисел будет небольшим. Мы видели, что GIF 1 максимальное значение в верхнем правом квадранте равно 2, что намного меньше, чем в верхнем левом квадранте, равном 9, поэтому, если вы, возможно, обнаруживаете какую-то особенность, такую ​​как кошачий глаз , то он, скорее всего, будет в верхнем левом квадранте, а не в верхнем правом квадранте.

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

До сих пор мы видели максимальное объединение на 2D-входах. Если у вас есть 3D-вход, то на выходе будет такое же количество каналов, что и на входе. Например, если у вас есть входное изображение 5 на 5 на 2, то выходное изображение будет размером 3 на 3 на 2.

1.2. Средний пул

Средний пул делает почти то, что вы ожидаете. То есть вместо максимальных значений в каждом фильтре вы берете среднее значение,как мы видим нарис.1. Если вы поняли процесс максимального объединения, то процесс среднего объединения не требует пояснений. В очень глубокой нейронной сети вы можете использовать пул усреднения, чтобы свернуть наше представление сети, скажем, с 7 на 7 на 1000 до 1 на 1 на 1000. Однако пул усреднения используется не очень часто.

1.3 Дополнительные примечания об объединении слоев

Одна вещь, которую следует отметить в отношении объединения, заключается в том, что нет параметров для изучения. Итак, когда мы реализуем обратное распространение, вы обнаружите, что нет никаких параметров, которые обратное распространение будет адаптировать через максимальное объединение. Вместо этого есть только гиперпараметры (размер фильтра f и шаг s), которые вы устанавливаете один раз, возможно, устанавливаете один раз вручную или устанавливаете с помощью перекрестной проверки.

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

2. Полностью связанный слой

Полностью связанные слои обычно появляются в конце глубоких нейронных сетей. Типичный пример ниже показывает два полносвязных слоя (FC-3 и FC-4). Итак, позвольте мне обрисовать, что происходит.

Допустим, вы вводите изображение размером 32 на 32 на 3, то есть это изображение RGB, и, возможно, вы пытаетесь распознать рукописные цифры. Итак, у вас есть число вроде 7 в изображении RGB 32 на 32, которое пытается распознать, какая из 10 цифр от 0 до 9 это. Также обратите внимание, что по соглашению так называемый один слой — это слой, который имеет вес, т. е. имеет параметры. А поскольку объединяющий слой не имеет ни весов, ни параметров, а только несколько гиперпараметров, Эндрю Нг использовал соглашение, согласно которому сверточный слой 1 (Conv 1) и объединяющий слой 1 (Pool 1) являются одним слой, и он назвал его «Слой 1». Хотя иногда вы видите, что люди читают статьи в Интернете и читают исследовательские работы, вы слышите о слое conv и слое объединения, как будто это два отдельных слоя. То же соглашение применяется к «Уровню 2».

Обратите внимание, что первый полносвязный слой (FC3) — это 120 модулей, которые связаны с 400 модулями. Так что это действительно наше. Этот полностью связанный слой подобен одному слою нейронной сети. Другими словами, это просто стандартная нейронная сеть, в которой у вас есть весовая матрица, называемая W^[3] размерностью 120 на 400. Это полностью связано, потому что каждая из 400 единиц здесь связана. для каждой из 120 единиц здесь, и у вас также есть параметр смещения, который является всего лишь 120-мерным (120 выходов). И, наконец, у нас есть полностью подключенный уровень 4 (FC4) с 84 устройствами, где каждое из 120 устройств подключено к каждому из 84 устройств. Итак, наконец, теперь есть 84 действительных числа, которые могут поместиться в устройство softmax. И если вы пытаетесь выполнить цифровое распознавание рукописного ввода, то есть распознать, какой цифрой было рукописное входное изображение (0, 1, 2, 3, 4, 5, 6, 7, 8 или 9), тогда softmax будет иметь 10 выходов. Адрю Нг сказал, что одно общее правило состоит в том, чтобы на самом деле не пытаться изобретать свои собственные настройки гиперпараметров [размер фильтра f, шаг s и т. д.], а искать в литературе, чтобы увидеть, какие гиперпараметры работают для других, и просто выбрать архитектуру, которая хорошо работает для кого-то еще, и есть шанс, что она будет работать и для вашего приложения.

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

ССЫЛКИ: