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

Стэнфордский курс: лекция 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.

Космический домен .SPACE: для тех, кто смотрит в будущее

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

Коммерческое предложение: как правильно подготовить документ, чтобы точно заинтересовать клиента

Коммерческое предложение — это важный инструмент маркетинга, который позволяет убедительно и емко рассказать о пользе продукта или услуги. Давайте вместе...
Read More

Знание — сила. Что такое веб-аналитика и где ее отслеживать

Сделать сайт — отличная идея, если вы хотите раскрутить бизнес или построить личный бренд. Но как понять, что созданный проект...
Read More

Окупаемость инвестиций, или ROI

Если вас когда-нибудь интересовало, как рассчитать доход от рекламы, то вы наверняка сталкивались с таким термином, как ROI. В этой...
Read More

̶Д̶ж̶а̶н̶г̶о̶ домен освобожденный: что такое и как его найти

Процесс запуска и раскрутки сайта требует больших затрат. Чтобы добиться хороших результатов в сжатые сроки, можно использовать дроп-домен. Рассказываем, как...
Read More

ОГРНИП — что такое, как расшифровывается и зачем нужен

ОГРНИП — это номер, который получает каждый предприниматель при регистрации своего бизнеса. Давайте разберемся, для чего он нужен, чем отличается...
Read More

BILLmanager: возможности биллинг-панели для хостинга

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

Как создать сайт для фотографа

Многим фотографам в какой-то момент становится тесно в соцсетях, сильно ухудшающих качество фото. Хороший выход из ситуации — самостоятельно сделать...
Read More

Что такое код ОКВЭД и как его выбрать

Чтобы получить официальный статус бизнесмена, предпринимателю нужно зарегистрировать ИП или ООО и сообщить государству, чем он будет заниматься. Все эти...
Read More

Что такое SWOT-анализ

Как вы уже знаете, для успешного ведения бизнеса важно не только разработать брендинг, создать сайт и запустить рекламу. Один из...
Read More