Чему уже научились сверточные искусственные нейронные сети (ИНС) и как они устроены?
1. Предисловие.
Такие статьи принято начинать с экскурса в историю, дабы описать кто придумал первые ИНС, как они устроены и налить прочую, бесполезную, по большей части, воду. Скучно. Опустим это. Скорее всего вы представляете, хотя бы образно, как устроены простейшие ИНС. Давайте договоримся рассматривать классические нейронные сети (типа перцептрона), в которых есть только нейроны и связи, как черный ящик, у которого есть вход и выход, и который можно натренировать воспроизводить результат некой функции. Нам не важна архитектура этого ящика, она может быть очень разной для разных случаев. Задачи, которые они решают — это регрессия и классификация.
2. Прорыв.
Что же такого произошло в последние годы, что вызвало бурное развитие ИНС?
Ответ очевиден — это технический прогресс и доступность вычислительных мощностей.
Приведу простой и очень наглядный пример:
2002:
Earth Simulator – один из самых быстрых в мире вычислительных комплексов. Он был построен в 2002 году. До 2004 года эта машина оставалась самым мощным вычислительным устройством в мире.
Стоимость: $350.000.000.
Площадь: четыре теннисных корта,
Производительность: 35600 гигафлопс.
2015:
NVIDIA Tesla M40/M4: GPU для нейронных сетей
Стоимость: $5000
Площадь: помещается в карман,
Производительность: До 2,2 Терафлопс производительности в операциях с одинарной точностью с NVIDIA GPU Boost
Итогом такого бурного роста производительности стала общедоступность ресурсоемких математических операций, что позволило испытать давно зародившиеся теории на практике.
3. Операция свертки.
Одной из ресурсоемких в реализации теорий, а точнее методом, который требует очень больших мощностей, является операция свертки.
Что же это такое?
Попробуем разложить всё по полочкам:
Котики
Экспериментируя на животных, David Hubel и Torsten Wiesel выяснили, что одинаковые фрагменты изображения, простейшие формы, активируют одинаковые участки
Вывод был примерно такой:
В
Математика
Графические редакторы давно используют математику для изменения стиля изображения, но как оказалось, те же самые принципы можно применить и в области распознавания образов.
Если мы рассмотрим картинку как двумерный массив точек, каждую точку — как набор значений RGB, а каждое значение — это просто 8-ми битовое число, то получим вполне себе классическую матрицу. Теперь возьмем и придумаем свою, назовем её Kernel, матрицу, и будет она такой:
Попробуем пройтись по всем позициям, от начала и до конца матрицы изображения и перемножить наш Kernel на участок с таким же размером, а результаты сформируют выходную матрицу.
Вот что мы получим:
Взглянув на секцию Edge Detection мы увидим, что результатом являются грани, т.е. мы легко можем подобрать такие Kernel, которые на выходе будут определять линии и дуги разной направленности. И это именно то что нам нужно — фичи изображения первого уровня. Соответственно, можно предположить, что применив те же действия еще раз, мы получим комбинации фич первого уровня — фичи второго уровня (кривые, окружности и т.п.) и это можно было бы повторять очень много раз, если бы мы не были ограничены в ресурсах.
Вот пример наборов Kernel матриц:
А вот так выглядит фича-экстрактор от слоя к слою. На пятом слое уже формируются очень сложные фичи, например глаза, образы животных и прочего вида объекты, на которые и натренирован экстрактор.
Сначала разработчики пытались сами подобрать Kernel, но вскоре выяснилось, что его можно получить обучением, и это намного эффективнее.
Подводные камни
Поняв, как работают
На помощь вновь пришли математики и придумали операцию объединения (pooling).
Суть ее проста — если в определенной области присутствует фича высокого уровня, то можно откинуть другие.
Такая операция не только помогает экономить память, но и избавляет от мусора и шумов на изображении.
На практике чередуют слои свертки и объединения несколько раз.
Финальная архитектура.
Применив всё, что описано выше, можно получить вполне рабочую архитектуру фиче-экстрактора, не хуже, чем у кошки в голове, более того, в настоящее время точность распознавания компьютерного зрения достигает в отдельных случаях >98%, а, как подсчитали ученые, точность распознавания образа человеком составляет в среднем 97%. Будущее пришло, Скайнет наступает!
Вот примеры нескольких схем реальных фича-экстракторов:
Как вы видите, на каждой схеме в конце присутствуют еще 2-3 слоя нейронов. Они не являются частью экстрактора, они — наш черный ящик из предисловия. Только вот на вход ящика при распознавании, подаются не просто цвета пикселей, как в простейших сетях, а факт наличия сложной фичи, на которую тренировали экстрактор. Ну вам же тоже проще определить что перед вами, например, лицо человека, если вы видите нос, глаза, уши, волосы, чем если бы вам назвали по отдельности цвет каждого пикселя?
Это видео просто шикарно демонстрирует как работают фича-экстракторы:
4. Кто всем заправляет?
1. Tensorflow
Свободная программная библиотека для машинного обучения.
Практически всё, что делает сервисы Google такими умными использует эту библиотеку.
Пример того, что дает Inception-v3 (классификатор изображений от Google, построенный на Tensorflow) и натренированный на ImageNet наборе изображений:
2. MS Cognitive Services (The Microsoft Cognitive Toolkit)
Компания Microsoft пошла другой дорогой, она предоставляет готовые API, как за деньги, так и бесплатно, с целью ознакомления, но лимитируя количество запросов. API — очень обширные, решают десятки задач. Это всё можно попробовать прямо на их сайте.
Можно, конечно, использовать MSCT так же как и TF, там даже синтаксис и идея очень похожи, оба описывают графы с заглушками, но ведь зачем тратить время, когда можно использовать уже обученные модели?
3. Caffe (Caffe2)
Открытая библиотека, фрэймворк на котором можно построить любые архитектуры. До недавнего времени был самым популярным. Существует множество готовых (натренированных) бесплатных моделей сетей на этом фрэймворке.
Яркий пример применения Caffe:
Rober Bond, используя натренированную на распознавание котов сеть, соорудил автоматизированную прогонялку котов с его газона, которая при обнаружении кота на видео, поливает его водой.
Существует еще много разных, популярных в свое время библиотек, оберток, надстроек: BidMach, Brainstorm, Kaldi, MatConvNet, MaxDNN, Deeplearning4j, Keras, Lasagne(Theano), Leaf, но лидером считается Tensorflow, в силу своего бурного роста за последние два года.
5. Области применения (вместо заключения)
В конце статьи хочу поделиться некоторыми яркими примерами использования сверточных сетей:
Область применения | Коментарии | Ссылки |
---|---|---|
Распознавание рукописного текста | Точность человека — 97.5% CNN — 99.8% | Визуализация образов натренированной сети в TF, JS интерактивная визуализация работы свертки, MNIST |
Компьютерное зрение | CNN распознает не только простые объекты на фото, но и эмоции, действия, а еще анализирует видео для автопилотов (семантическая сегментация). | Эмоции, Семантическая сегментация, Skype Caption бот, Google Image поиск |
3D реконструкция | Создание 3D моделей по видео | Deep stereo |
Развлечение | Стилизация и генерация картинок | Deep dream, Deep style, Перенос стиля на видео, Генерация лиц, Генерация различных объектов |
Фото | Улучшение качества, оцветнение | Face Hallucination, Colorizing |
Медицина | Создание лекарств | |
Безопасность | Обнаружение аномального поведения (Свертка + Реккурентрость) | Пример 1, 2, 3 |
Игры | В итоге сеть играет круче профессионала, выбивая дырку и специально загоняя туда шар. | Atari Breakout |
Автор: verych