Капсульные сети встряхивают AI: вот как их использовать
Если вы изучаете ИИ, возможно, вы также слышали о появлении такого революционного явления, как капсульные сети. Начните их использовать уже сегодня!
Джеффри Хинтон известен как отец «глубокого обучения». Еще в 50-х годах появилась идея о глубоких нейронных сетях, которые в теории могли решить множество проблем. Однако никто не понимал, как реализовать машинное обучение, и люди начали сдаваться. Хинтон не останавливался, и в 1986 году показал, что идея обратного распространения может обучать глубокие сети. Однако лишь 5 лет тому назад, в 2012 году, Хинтон смог продемонстрировать свой прорыв, поскольку в то время отсутствовали нужные вычислительные мощности. Этот шаг заложил основу для прогресса в области ИИ.
И теперь, в октябре 2017 года, он выпустил документ о новой новаторской концепции Capsule Networks. Документы с подробной информацией могут быть найдены здесь и здесь.
Традиционные нейронные сети и проблемы с ними
До сих пор сверточные нейронные сети (convolutional neural network, CNN) были самым современным подходом к классификации изображений.
CNN работают, накапливая множество функций на каждом уровне. Начинается с поиска краев, затем фигур, а затем фактических объектов. Однако информация о пространственных отношениях всех функций теряется.
Это грубое упрощение, но вы можете понять принцип CNN следующим образом:
if (2 eyes && 1 nose && 1 mouth) { It's a face! }
Наверное, вы думаете, что все нормально и логично. Хотя мы можем столкнуться с несколькими проблемами. Например, возьмем эту фотографию Ким Кардашян, для которой соблюдены условия кода:
Ой! Определенно два глаза, нос и рот, но что-то пошло не так, правда? Ее глаз и рот расположены неправильно, и это очень странное строение лица: так видим и понимаем мы. Но даже хорошо обученный CNN испытывает трудности с этой концепцией:
В дополнение к обманутому элементами не в тех местах CNN упомянем и путаницу с другим расположением картинки. Один из способов борьбы с такой проблемой – подготовка всевозможных ракурсов, но это занимает много времени и кажется противоречивым. Мы видим существенное падение производительности, просто перевернув фото Ким вверх ногами:
Наконец, сверточные нейронные сети могут быть восприимчивы к атакам белых ящиков. Это, по сути, вложение секретного шаблона в объект.
https://www.youtube.com/watch?v=qPxlhGSG0tc
«Сверточные нейронные сети обречены» – Джеффри Хинтон
Капсульные сети как спасение!
Внедрение Capsule Networks позволяет в полной мере использовать пространственные отношения, поэтому мы наблюдаем нечто более правильное:
if (2 adjacent eyes && nose under eyes && mouth under nose) { It's a face! }
Заметьте, что с такой постановкой условия наша нейронная сеть не должна быть так же легко обманута деформированным лицом Кардашян.
Новая архитектура также обеспечит улучшенную точность в следующем наборе данных. Этот набор был тщательно разработан, чтобы стать полноценной задачей распознавания формы. Речь идет о способности распознавать объекты, даже если они перевернуты или показаны под другим углом. Данный способ уложил на лопатки сверточные нейронные сети, уменьшив количество ошибок на 45%.
Тренировка CapsNet
Здесь собран репозиторий, который отлично отражает результат работы Хинтона. Чтобы использовать капсульную сеть, вам нужно ее обучить. Начните с клонирования репозитория:
git clone https://github.com/bourdakos1/capsule-networks.git
И установите требования:
pip install -r requirements.txt
Начинайте тренировку!
python main.py
Набор данных MNIST содержит в себе около 60 000 изображений. По умолчанию модель будет тренироваться в течение 50 эпох. Эпоха – один полный прогон (итерация) через набор тренировок. Так как batch size равен 128, будет производиться около 468 партий в эпоху.
Обучение может занять много времени, если у вас нет GPU. Прочтите эту статью, которая позволит ускорить процесс.
Делаем выводы
Когда наша модель будет полностью подготовлена, мы сможем проверить ее, выполнив следующую команду:
python main.py --is_training False
Подведем итоги
Капсульные сети кажутся удивительными, но мы еще ничего особенного с ними не сделали. Да, при использовании огромных наборов данных возникают проблемы, но все впереди.
А еще есть отличное видео, которое стоит того, чтобы потратить на него свое время:
https://www.youtube.com/watch?time_continue=3&v=TFIMqt0yT2I
Также рекомендуем Вам посмотреть:
Лучший видеокурс по нейронным сетям на русском
Пишем свою нейросеть: пошаговое руководство
ИИ шахматы на JavaScript в 5 этапов
27 шпаргалок по машинному обучению и Python в 2017