Техническое объяснение для специалистов по данным

Понимание CNN (сверточной нейронной сети)

Ваш первый детский шаг к изучению глубокого обучения для классификации изображений

Представьте себе Google Фото: как вы помечаете все имеющиеся у вас изображения объектами. Вы хотите пометить их по одному? Можно ли выполнить поиск по вашим последним снимкам из цыпленка Мэриленд? Войдите в CNN!

Понимание классификации изображений

Классификация изображений определяет объекты изображений и маркирует эти изображения из помеченных примеров.

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

Тем не менее, обучить этим классификациям с помощью компьютера очень сложно.

Взгляните на эти изображения. Уже через несколько мгновений вы должны были понять, что посреди образов кошек - несколько актрис из музыкального театра «Кошки». Есть также несколько рисунков кошачьих каракулей, но не кошек. Так как же научить наши компьютеры понимать эти изображения?

Классическая классификация изображений

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

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

Представляем сверточные нейронные сети (CNN)

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

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

Интуиция CNN - представьте себе оптическую иллюзию

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

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

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

Принципы CNN

Свертка

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

Посмотрите на этот ввод. Мы заключим элементы окна в небольшое окно, точка умножит его на фильтрующие элементы и сохранит результат. Мы будем повторять каждую операцию, чтобы получить 5 выходных элементов как [0,0,0,1,0]. Из этих выходных данных мы можем узнать, что функция изменяется (1 становится 0) в последовательности 4. Фильтр хорошо справился с определением входных значений. Аналогичным образом это произошло и с 2D-свертками.

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

Более того, чем больше развернутых фильтров, тем больше функций извлечет CNN. Это позволяет найти больше функций, но требует больше времени на обучение. Есть золотая середина для количества слоев, обычно я ставлю 6 для размера изображения 150 x 150.

Однако насчет угловых или боковых значений. Им не хватает смежных блоков для установки фильтра. Стоит ли их убирать?

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

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

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

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

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

Функция активации (ReLU и сигмоид)

После каждой операции сверточного и максимального объединения мы можем применить выпрямленную линейную единицу (ReLU). Функция ReLU имитирует активацию наших нейронов при «достаточно большом стимуле», чтобы ввести нелинейность для значений x ›0, и возвращает 0, если не удовлетворяет условию. Этот метод оказался эффективным для решения убывающих градиентов. Очень маленькие веса останутся равными 0 после активации функции ReLU.

Общая картина CNN + полностью связанный слой

Наконец, мы будем обслуживать выходные данные карты функций сверточного и максимального пула с полностью подключенным слоем (FCL). Мы сглаживаем выходные данные функции в вектор-столбец и передаем его в FCL. Мы дополняем наши функции функцией активации softmax, которая назначает десятичные вероятности для каждой возможной метки, которая в сумме дает 1,0. Каждый узел в предыдущем слое связан с последним слоем и представляет, какую отдельную метку нужно вывести.

Конечные результаты? Вы сможете классифицировать изображения собак и кошек, как показано ниже.

Очистка и предотвращение переобучения в CNN

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

Использование набора тестов в качестве набора для проверки модели

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

Набор данных относительно невелик

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

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

Чрезмерное запоминание

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

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

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

Работа с цветными изображениями

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

Как мы могли добиться большего? - Трансферное обучение

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

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

Однако есть несколько предостережений, которым необходимо следовать. Во-первых, вам нужно изменить последний слой, чтобы он соответствовал количеству возможных классов. Во-вторых, вам нужно будет зафиксировать параметры и установить неизменяемые переменные обученной модели. Это предотвращает существенное изменение модели.

Одним из известных способов обучения передачи, которое вы могли бы использовать, является MobileNet. Он создан для мобильных устройств с меньшим объемом памяти и вычислительных ресурсов. Вы можете найти MobileNet в Tensorflow Hub, где собрано множество предварительно обученных моделей. Вы можете просто добавить свой собственный слой FCL поверх этих моделей.

Вывод: CNN воспринимает наш визуальный мир

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

Я также понял, что знания для CNN очень глубокие. За прошедшие годы в вариациях CNN было внесено множество улучшений, включая один из последних - ResNet, который даже превосходит людей-рецензентов в классификациях ImageNet.

  1. Ле-Нет (Ян Ле Кун, 1998)
  2. Алекс Нетт (2012)
  3. VGGNet (2014) - Глубокая нейронная сеть
  4. Начальный модуль Google Net (2014) - слой модуля стека
  5. ResNet (2015) - первая сеть, превосходящая человеческие изображения

Я пишу эту статью, чтобы изучить свое базовое понимание CNN для проекта, которым я работаю в Google. Поэтому не стесняйтесь оставлять мне отзывы, если я допустил какие-либо ошибки или пробелы в моих знаниях. Соли Део Глория.

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

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

  1. Газета Яна ЛеКуна на CNN
  2. CS 231 Стэнфорд
  3. Google ML CNN
  4. И многие другие

Наконец-то…

Я действительно надеюсь, что это было отличное чтение и источник вдохновения для вас, чтобы развиваться и вводить новшества.

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

Спасибо и удачного кодирования :)

об авторе

Винсент Татан - энтузиаст данных и технологий с соответствующим опытом работы в Google LLC, Visa Inc. и Lazada по реализации микросервисных архитектур, бизнес-аналитики и проектов конвейерной аналитики .

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

Он активно консультировал SMU BI & Analytics Club, направляя начинающих специалистов по обработке данных и инженеров с разным опытом, а также делился своим опытом с компаниями для разработки своих продуктов.

Винсент также открывает свою службу наставничества один на один на сайте 10to8, чтобы научить вас, как получить работу специалиста по данным / инженера своей мечты в Google, Visa или других крупных технологических компаниях.

  1. Пожалуйста, сообщите ему, если вам нужны рекомендации в Google. Google нанимает!
  2. Запишитесь на прием к нему здесь, если вы ищете наставничества.

Наконец, свяжитесь с Винсентом через LinkedIn, Medium или Youtube Channel.