Поиск по сайту Поиск

Стэнфордский курс: лекция 5. Свёрточные нейронные сети

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

Предыдущие лекции:

Лекция 1. Введение
Лекция 2. Классификация изображений
Лекция 3. Функция потерь и оптимизация
Лекция 4. Введение в нейронные сети

Немного истории

В 1957 году Фрэнк Розенблатт изобрёл вычислительную систему «Марк-1», которая стала первой реализацией перцептрона. Этот алгоритм тоже использует интерпретацию линейного классификатора и функцию потерь, но на выходе выдаёт либо 0, либо 1, без промежуточных значений.

Индикаторы и переключатели «Марк I»

На вход перцептрона подаются веса w и исходные данные x, а их произведение корректируется смещением b.

В 1960 году Бернард Уидроу и Тед Хофф разработали однослойную нейросеть ADALINE и её улучшенную версию — трёхслойную MADALINE. Это были первые глубокие (для того времени) архитектуры, но в них ещё не использовался метод обратного распространения ошибки. 

ADALINE

Алгоритм backpropagation появился в 1986 году в работе Дэвида Румельхарта, которая называлась «Многослойный перцептрон». В нём используются уже знакомые нам уравнения, правило дифференцирования и выходные значения в диапазоне от 0 до 1.

Затем в развитии машинного обучения начался период застоя, поскольку компьютеры того времени были не пригодны для создания масштабных моделей. В 2006 году Джеффри Хинтон и Руслан Салахутдинов опубликовали статью, в которой показали, как можно эффективно обучать глубокие нейросети. Но даже тогда они пока не приобрели современный вид.

Первых по-настоящему впечатляющих результатов исследователи искусственного интеллекта достигли в 2012 году, когда почти одновременно появились успешные решения задач распознавания речи и классификации изображений. Тогда же была представлена первая свёрточная нейросеть AlexNet, которая достигла высокой на тот момент точности классификации датасета ImageNet. С тех пор подобные архитектуры довольно широко применяются в разных областях.

Нейросети повсюду

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

Примеры задач классификации и поиска изображений
Примеры детектирования объектов и сегментации

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

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

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

Как устроены свёрточные сети

На прошлой лекции мы обсудили идею создания полносвязных линейных слоёв. Предположим, что у нас есть исходное 3D-изображение 32x32x3. Растянем его в один длинный вектор 3072x1 и перемножим с матрицей весов размером, для примера, 10x3072. В итоге нам нужно получить активацию (вывод с оценками классов) — для этого берём каждую из 10 строк матрицы и выполняем скалярное произведение с исходным вектором.

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

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

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

К изображению можно применять множество фильтров и получать на выходе разные карты активации. Так мы сформируем один свёрточный слой. Чтобы создать целую нейросеть, слои чередуются друг за другом, а между ними добавляются функции активации (например, ReLU) и специальные pooling-слои, уменьшающие размер карт признаков.

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

Примеры фильтров для свёрточных слоёв нейросети VGG-16

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

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

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

Схема работы свёрточной нейросети

По такому принципу работают современные свёрточные нейросети.

Подводя итоги

Итак, посмотрим на полный набор функций свёрточного слоя:

  1. Принимает исходное изображение определённой размерности W1 x H1 x D1.
  2. Использует четыре гиперпараметра для фильтров:

— число фильтров K;

— их размер F;

— шаг S;

— число дополнительных нулей P (используются для заполнения «потерянных» участков изображения после применения свёртки).

  1. Выводит карту активации размером W2 x H2 x D2, где:

W2 = (W1 F + 2P) / S + 1

H2 = (H1 F + 2P) / S + 1

D2 = K

  1. Использует F * F * D1 весов на каждый фильтр, в общей сложности (F * F * D1) * K весов и K смещений.

Если мы посмотрим на код фреймворка Caffe, который мы упоминали на прошлой лекции, то увидим примерно те же параметры:

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

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

Для выполнения задания вам понадобится Python > 3.6 и среда Jupyter Notebook или Jupyter Lab. 

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

Следующие лекции (список будет дополняться по мере появления материалов):

Лекция 6. Обучение нейросетей, часть 1
Лекция 7. Обучение нейросетей, часть 2
Лекция 8. ПО для глубокого обучения
Лекция 9. Архитектуры CNN
Лекция 10. Рекуррентные нейронные сети

С оригинальной лекцией можно ознакомиться на YouTube.

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

Рассказываем путь развития стоматологической клиники к повышению выручки на 40% с сохранением рентабельности.
Read More

Руководство по CI/CD в GitLab для новичка

В статье разбираем, как устроена практика CI/CD, какие у нее нюансы и преимущества использования. А также расписываем пошаговый процесс использования...
Read More

Что такое GitLab, кому нужен, как пользоваться

GitLab — платформа для совместной разработки. Она позволяет командам организовывать свои процессы от планирования до мониторинга и может работать в...
Read More

Как продавать представителям разных поколений

Рассказываем, как работает теория поколений и чем она оказывается полезной для маркетинга в малом и среднем бизнесе.
Read More

Как привлечь новую аудиторию и победить конкурентов. 3 кейса-стратегии

На примере трёх кейсов разбираем трансформацию продуктов на основе методологии jobs-to-be-done.
Read More

Что стоит автоматизировать в бизнесе с самого начала

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

Как составить бизнес-план: пошаговая инструкция

Бизнес-план — стратегия развития проекта, без которой не стоит начинать ни один бизнес. Рассказываем, как правильно его составить.
Read More

Сильная презентация для инвесторов: от содержания до выступления

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

Дёшево и эффективно: как малому бизнесу продвигать свой сайт

Как выделиться среди конкурентов и получить внимание потенциальных клиентов. Бюджетные методы продвижения сайта – в этом обзоре.  
Read More

Как перевести бизнес в онлайн: 7 шагов

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